From bb25aee4cc190463c694498039a311b4dcbb147a Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 7 Jun 2019 17:34:32 -0400 Subject: [PATCH] key remapping: don't remap fkeys when options dialog is open --- .../keyremapping/KeyRemappingListener.java | 5 ++++- .../keyremapping/KeyRemappingPlugin.java | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingListener.java b/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingListener.java index 89c88345fa..ba1b3cfa29 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingListener.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingListener.java @@ -107,7 +107,10 @@ class KeyRemappingListener extends MouseAdapter implements KeyListener } } - if (config.fkeyRemap()) + // In addition to the above checks, the F-key remapping shouldn't + // activate when dialogs are open which listen for number keys + // to select options + if (config.fkeyRemap() && !plugin.isDialogOpen()) { if (ONE.matches(e)) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java index eb9e7ebc1a..24a48224b0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java @@ -131,6 +131,26 @@ public class KeyRemappingPlugin extends Plugin return true; } + /** + * Check if a dialog is open that will grab numerical input, to prevent F-key remapping + * from triggering. + * + * @return + */ + boolean isDialogOpen() + { + // Most chat dialogs with numerical input are added without the chatbox or its key listener being removed, + // so chatboxFocused() is true. The chatbox onkey script uses the following logic to ignore key presses, + // so we will use it too to not remap F-keys. + return isHidden(WidgetInfo.CHATBOX_MESSAGES) || isHidden(WidgetInfo.CHATBOX_TRANSPARENT_LINES); + } + + private boolean isHidden(WidgetInfo widgetInfo) + { + Widget w = client.getWidget(widgetInfo); + return w == null || w.isSelfHidden(); + } + @Subscribe public void onScriptCallbackEvent(ScriptCallbackEvent scriptCallbackEvent) {