From 4d6352dffb7ca130fae3066e0d648f570bfda8d4 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 16 Aug 2018 18:05:24 -0400 Subject: [PATCH] wasd plugin: check chatbox input widget visibility to determine if a dialog is open Fix using numbers to navigate dialog, and fix using wasd with dialog open --- .../wasdcamera/WASDCameraListener.java | 77 +++++++++++++++++-- .../plugins/wasdcamera/WASDCameraPlugin.java | 20 ++--- 2 files changed, 77 insertions(+), 20 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wasdcamera/WASDCameraListener.java b/runelite-client/src/main/java/net/runelite/client/plugins/wasdcamera/WASDCameraListener.java index 9282f9347b..9250e7cf0a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wasdcamera/WASDCameraListener.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wasdcamera/WASDCameraListener.java @@ -51,7 +51,22 @@ class WASDCameraListener extends MouseListener implements KeyListener @Override public void keyTyped(KeyEvent e) { - handleKey(e); + // allow if not typing in chatbox, or typing mode is enabled + if (client.getGameState() != GameState.LOGGED_IN + || !plugin.chatboxFocused() + || plugin.isTyping()) + { + return; + } + + // otherwise allow typing if a digit and this is a dialog + if (Character.isDigit(e.getKeyChar()) && plugin.chatboxDialog()) + { + return; + } + + // otherwise consume + e.consume(); } @Override @@ -84,6 +99,35 @@ class WASDCameraListener extends MouseListener implements KeyListener { switch (e.getKeyCode()) { + case KeyEvent.VK_0: + case KeyEvent.VK_1: + case KeyEvent.VK_2: + case KeyEvent.VK_3: + case KeyEvent.VK_4: + case KeyEvent.VK_5: + case KeyEvent.VK_6: + case KeyEvent.VK_7: + case KeyEvent.VK_8: + case KeyEvent.VK_9: + case KeyEvent.VK_NUMPAD0: + case KeyEvent.VK_NUMPAD1: + case KeyEvent.VK_NUMPAD2: + case KeyEvent.VK_NUMPAD3: + case KeyEvent.VK_NUMPAD4: + case KeyEvent.VK_NUMPAD5: + case KeyEvent.VK_NUMPAD6: + case KeyEvent.VK_NUMPAD7: + case KeyEvent.VK_NUMPAD8: + case KeyEvent.VK_NUMPAD9: + case KeyEvent.VK_SPACE: + // numbers normally are consumed, unless a dialog box is open. + // most dialogs in the chatbox use the same chatbox input handler + // as normal chat + if (!plugin.chatboxDialog()) + { + e.consume(); + } + break; case KeyEvent.VK_ENTER: case KeyEvent.VK_SLASH: // refocus chatbox @@ -147,11 +191,6 @@ class WASDCameraListener extends MouseListener implements KeyListener @Override public void keyReleased(KeyEvent e) - { - handleKey(e); - } - - private void handleKey(KeyEvent e) { if (client.getGameState() != GameState.LOGGED_IN || !plugin.chatboxFocused()) { @@ -180,6 +219,32 @@ class WASDCameraListener extends MouseListener implements KeyListener { switch (e.getKeyCode()) { + case KeyEvent.VK_0: + case KeyEvent.VK_1: + case KeyEvent.VK_2: + case KeyEvent.VK_3: + case KeyEvent.VK_4: + case KeyEvent.VK_5: + case KeyEvent.VK_6: + case KeyEvent.VK_7: + case KeyEvent.VK_8: + case KeyEvent.VK_9: + case KeyEvent.VK_NUMPAD0: + case KeyEvent.VK_NUMPAD1: + case KeyEvent.VK_NUMPAD2: + case KeyEvent.VK_NUMPAD3: + case KeyEvent.VK_NUMPAD4: + case KeyEvent.VK_NUMPAD5: + case KeyEvent.VK_NUMPAD6: + case KeyEvent.VK_NUMPAD7: + case KeyEvent.VK_NUMPAD8: + case KeyEvent.VK_NUMPAD9: + case KeyEvent.VK_SPACE: + if (!plugin.chatboxDialog()) + { + e.consume(); + } + break; case KeyEvent.VK_SLASH: case KeyEvent.VK_F1: case KeyEvent.VK_F2: diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wasdcamera/WASDCameraPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/wasdcamera/WASDCameraPlugin.java index 96bc77c305..4ec6e00103 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wasdcamera/WASDCameraPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wasdcamera/WASDCameraPlugin.java @@ -108,21 +108,13 @@ public class WASDCameraPlugin extends Plugin boolean chatboxFocused() { Widget chatboxParent = client.getWidget(WidgetInfo.CHATBOX_PARENT); - if (chatboxParent == null || chatboxParent.getOnKeyListener() == null) - { - return false; - } + return chatboxParent != null && chatboxParent.getOnKeyListener() != null; + } - // chat dialogs use the same key listener as chat - if (client.getWidget(WidgetInfo.DIALOG_NPC) != null - || client.getWidget(WidgetInfo.DIALOG_SPRITE) != null - || client.getWidget(WidgetInfo.DIALOG_OPTION) != null - || client.getWidget(WidgetInfo.DIALOG_PLAYER) != null) - { - return false; - } - - return true; + boolean chatboxDialog() + { + Widget chatboxInput = client.getWidget(WidgetInfo.CHATBOX_INPUT); + return chatboxInput == null || chatboxInput.isHidden(); } @Subscribe