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 25c0da9576..181c4abf8c 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 @@ -155,7 +155,9 @@ class KeyRemappingListener implements KeyListener } } - if (plugin.isDialogOpen() && config.space().matches(e)) + // Do not remap to space key when the options dialog is open, since the options dialog never + // listens for space, and the remapped key may be one of keys it listens for. + if (plugin.isDialogOpen() && !plugin.isOptionsDialogOpen() && config.space().matches(e)) { mappedKeyCode = KeyEvent.VK_SPACE; } 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 d0bcbf6d4f..a1b1034b26 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 @@ -144,6 +144,11 @@ public class KeyRemappingPlugin extends Plugin || !isHidden(WidgetInfo.BANK_PIN_CONTAINER); } + boolean isOptionsDialogOpen() + { + return client.getWidget(WidgetInfo.DIALOG_OPTION) != null; + } + private boolean isHidden(WidgetInfo widgetInfo) { Widget w = client.getWidget(widgetInfo); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/keyremapping/KeyRemappingListenerTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/keyremapping/KeyRemappingListenerTest.java index 4d3b3b3005..d7da96133d 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/keyremapping/KeyRemappingListenerTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/keyremapping/KeyRemappingListenerTest.java @@ -105,4 +105,22 @@ public class KeyRemappingListenerTest verify(event).setKeyCode(KeyEvent.VK_RIGHT); verify(event).setKeyChar(KeyEvent.CHAR_UNDEFINED); } + + @Test + public void testSpaceRemap() + { + when(keyRemappingConfig.space()).thenReturn(new ModifierlessKeybind(KeyEvent.VK_NUMPAD1, 0)); + + when(keyRemappingPlugin.chatboxFocused()).thenReturn(true); + when(keyRemappingPlugin.isDialogOpen()).thenReturn(true); + + KeyEvent event = mock(KeyEvent.class); + when(event.getKeyChar()).thenReturn('1'); + when(event.getKeyCode()).thenReturn(KeyEvent.VK_NUMPAD1); + when(event.getExtendedKeyCode()).thenReturn(KeyEvent.VK_NUMPAD1); // for keybind matches() + + keyRemappingListener.keyPressed(event); + + verify(event).setKeyCode(KeyEvent.VK_SPACE); + } }