From d4db897a70a684a7790fd07ade01355f923e4f43 Mon Sep 17 00:00:00 2001 From: Frko5000 Date: Sat, 6 Jun 2026 07:23:08 +0300 Subject: [PATCH 1/3] Fix multiple carets blinking in text boxes --- .../meteorclient/gui/WidgetScreen.java | 10 +++++++--- .../themes/meteor/widgets/input/WMeteorTextBox.java | 3 ++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java index 3dd5b09357..8581bc2e58 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java @@ -129,6 +129,12 @@ public boolean mouseClicked(MouseButtonEvent click, boolean doubled) { mouseX *= s; mouseY *= s; + loopWidgets(root, widget -> { + if (widget instanceof WTextBox textBox && textBox.isFocused() && !textBox.mouseOver) { + textBox.setFocused(false); + } + }); + return root.mouseClicked(new MouseButtonEvent(mouseX, mouseY, click.buttonInfo()), doubled); } @@ -196,7 +202,6 @@ public boolean keyPressed(KeyEvent input) { boolean shouldReturn = root.keyPressed(input) || super.keyPressed(input); if (shouldReturn) return true; - // Select next text box if TAB was pressed if (input.key() == GLFW_KEY_TAB) { AtomicReference firstTextBox = new AtomicReference<>(null); AtomicBoolean done = new AtomicBoolean(false); @@ -268,7 +273,6 @@ public void renderCustom(GuiGraphicsExtractor graphics, int mouseX, int mouseY, GuiKeyEvents.canUseKeys = true; - // Apply projection without scaling Utils.unscaledProjection(); onRenderBefore(graphics, mouseX, mouseY, delta); @@ -424,4 +428,4 @@ public boolean render(GuiRenderer renderer, double mouseX, double mouseY, double return super.render(renderer, mouseX, mouseY, delta); } } -} +} \ No newline at end of file diff --git a/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/widgets/input/WMeteorTextBox.java b/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/widgets/input/WMeteorTextBox.java index f2b740bb24..b844b6aaec 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/widgets/input/WMeteorTextBox.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/widgets/input/WMeteorTextBox.java @@ -93,6 +93,7 @@ public String getCompletion() { protected void onCursorChanged() { cursorVisible = true; cursorTimer = 0; + animProgress = focused ? 1.0 : 0.0; } @Override @@ -139,4 +140,4 @@ protected void onRender(GuiRenderer renderer, double mouseX, double mouseY, doub renderer.scissorEnd(); } -} +} \ No newline at end of file From ba450eb0e193d9f016c0c38c8528a2bddb0e08df Mon Sep 17 00:00:00 2001 From: Frko5000 Date: Sat, 6 Jun 2026 07:30:50 +0300 Subject: [PATCH 2/3] added comment lines back --- .../java/meteordevelopment/meteorclient/gui/WidgetScreen.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java index 8581bc2e58..aa0b704119 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java @@ -202,6 +202,7 @@ public boolean keyPressed(KeyEvent input) { boolean shouldReturn = root.keyPressed(input) || super.keyPressed(input); if (shouldReturn) return true; + // Select next text box if TAB was pressed if (input.key() == GLFW_KEY_TAB) { AtomicReference firstTextBox = new AtomicReference<>(null); AtomicBoolean done = new AtomicBoolean(false); @@ -273,6 +274,7 @@ public void renderCustom(GuiGraphicsExtractor graphics, int mouseX, int mouseY, GuiKeyEvents.canUseKeys = true; + // Apply projection without scaling Utils.unscaledProjection(); onRenderBefore(graphics, mouseX, mouseY, delta); From 895575ba5cf6f58f8e3b7be8f08c49444e064041 Mon Sep 17 00:00:00 2001 From: Frko5000 Date: Fri, 12 Jun 2026 15:15:06 +0300 Subject: [PATCH 3/3] Restore mouse position when closing WidgetScreen --- .../meteordevelopment/meteorclient/gui/WidgetScreen.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java index aa0b704119..ba76acb49a 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java @@ -129,6 +129,7 @@ public boolean mouseClicked(MouseButtonEvent click, boolean doubled) { mouseX *= s; mouseY *= s; + // Unfocus all text boxes that are not under the mouse cursor loopWidgets(root, widget -> { if (widget instanceof WTextBox textBox && textBox.isFocused() && !textBox.mouseOver) { textBox.setFocused(false); @@ -343,9 +344,17 @@ public void removed() { } if (onClose) { + double restoreX = lastMouseX / mc.getWindow().getGuiScale(); + double restoreY = lastMouseY / mc.getWindow().getGuiScale(); + taskAfterRender = () -> { locked = true; mc.setScreen(parent); + + // Restore mouse position to where it was when the screen was closed + if (parent == null) { + glfwSetCursorPos(mc.getWindow().getWindow(), restoreX, restoreY); + } }; } }