From af801145f3d44b33c8d5644e4c624bc39b4cf7ce Mon Sep 17 00:00:00 2001 From: isXander Date: Tue, 4 Apr 2023 11:20:49 +0100 Subject: 🐛 Fix string controllers not focusing upon click properly (see MC-261578) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../isxander/yacl/gui/ElementListWidgetExt.java | 35 +++++++++++++++++++--- .../dev/isxander/yacl/gui/OptionListWidget.java | 12 ++++---- 2 files changed, 36 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/client/java/dev/isxander/yacl/gui/ElementListWidgetExt.java b/src/client/java/dev/isxander/yacl/gui/ElementListWidgetExt.java index 07f5635..ec8e304 100644 --- a/src/client/java/dev/isxander/yacl/gui/ElementListWidgetExt.java +++ b/src/client/java/dev/isxander/yacl/gui/ElementListWidgetExt.java @@ -1,5 +1,6 @@ package dev.isxander.yacl.gui; +import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.ContainerObjectSelectionList; @@ -7,6 +8,8 @@ import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.util.Mth; import org.jetbrains.annotations.Nullable; +import java.util.Iterator; + public class ElementListWidgetExt> extends ContainerObjectSelectionList { protected final int x, y; @@ -97,10 +100,10 @@ public class ElementListWidgetExt> exten public boolean mouseReleased(double mouseX, double mouseY, int button) { // on mouseClicked, the clicked element becomes focused so you can drag. on release, we should clear the focus boolean clicked = super.mouseReleased(mouseX, mouseY, button); - if (getFocused() != null) { - this.getFocused().setFocused(null); - this.setFocused(null); - } +// if (getFocused() != null) { +// this.getFocused().setFocused(null); +//// this.setFocused(null); +// } return clicked; } @@ -152,6 +155,30 @@ public class ElementListWidgetExt> exten /* END cloth config code */ public abstract static class Entry> extends ContainerObjectSelectionList.Entry { + @Override + public boolean mouseClicked(double mouseX, double mouseY, int button) { + for (GuiEventListener child : this.children()) { + if (child.mouseClicked(mouseX, mouseY, button)) { + if (button == InputConstants.MOUSE_BUTTON_LEFT) + this.setDragging(true); + return true; + } + } + + return false; + } + + @Override + public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { + if (isDragging() && button == InputConstants.MOUSE_BUTTON_LEFT) { + for (GuiEventListener child : this.children()) { + if (child.mouseDragged(mouseX, mouseY, button, deltaX, deltaY)) + return true; + } + } + return false; + } + public void postRender(PoseStack matrices, int mouseX, int mouseY, float delta) { } diff --git a/src/client/java/dev/isxander/yacl/gui/OptionListWidget.java b/src/client/java/dev/isxander/yacl/gui/OptionListWidget.java index 333d67c..8f96ddf 100644 --- a/src/client/java/dev/isxander/yacl/gui/OptionListWidget.java +++ b/src/client/java/dev/isxander/yacl/gui/OptionListWidget.java @@ -149,13 +149,6 @@ public class OptionListWidget extends ElementListWidgetExt narratables() { if (resetButton == null) -- cgit