From 01bdbe5aabf4a14aa52b32acd2abc3f1270a2d34 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Mon, 20 Apr 2020 01:26:36 +0200 Subject: [PATCH] Prevent HotkeyListener from consuming input on login screen This prvent HotkeyListener from running on login screen without being explicitely enabled to do so. Signed-off-by: Tomas Slusny --- .../net/runelite/client/input/KeyManager.java | 50 +++++++++++++++++++ .../java/net/runelite/client/ui/ClientUI.java | 1 + .../runelite/client/util/HotkeyListener.java | 6 +++ 3 files changed, 57 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/input/KeyManager.java b/runelite-client/src/main/java/net/runelite/client/input/KeyManager.java index f9e2c4f07d..066f8089c8 100644 --- a/runelite-client/src/main/java/net/runelite/client/input/KeyManager.java +++ b/runelite-client/src/main/java/net/runelite/client/input/KeyManager.java @@ -27,11 +27,24 @@ package net.runelite.client.input; import java.awt.event.KeyEvent; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import javax.annotation.Nullable; +import javax.inject.Inject; import javax.inject.Singleton; +import net.runelite.api.Client; +import net.runelite.api.GameState; +import net.runelite.client.util.HotkeyListener; @Singleton public class KeyManager { + private final Client client; + + @Inject + private KeyManager(@Nullable final Client client) + { + this.client = client; + } + private final List keyListeners = new CopyOnWriteArrayList<>(); public void registerKeyListener(KeyListener keyListener) @@ -56,6 +69,11 @@ public class KeyManager for (KeyListener keyListener : keyListeners) { + if (!shouldProcess(keyListener)) + { + continue; + } + keyListener.keyPressed(keyEvent); if (keyEvent.isConsumed()) { @@ -73,6 +91,11 @@ public class KeyManager for (KeyListener keyListener : keyListeners) { + if (!shouldProcess(keyListener)) + { + continue; + } + keyListener.keyReleased(keyEvent); if (keyEvent.isConsumed()) { @@ -90,6 +113,11 @@ public class KeyManager for (KeyListener keyListener : keyListeners) { + if (!shouldProcess(keyListener)) + { + continue; + } + keyListener.keyTyped(keyEvent); if (keyEvent.isConsumed()) { @@ -97,4 +125,26 @@ public class KeyManager } } } + + private boolean shouldProcess(final KeyListener keyListener) + { + if (client == null) + { + return true; + } + + if (!(keyListener instanceof HotkeyListener)) + { + return true; + } + + final HotkeyListener hotkeyListener = (HotkeyListener) keyListener; + + if (hotkeyListener.isEnabledOnLogin()) + { + return true; + } + + return client.getGameState() != GameState.LOGIN_SCREEN; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index 9820dc645e..2dd8b030a5 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -384,6 +384,7 @@ public class ClientUI } }; + sidebarListener.setEnabledOnLogin(true); keyManager.registerKeyListener(sidebarListener); // Add mouse listener diff --git a/runelite-client/src/main/java/net/runelite/client/util/HotkeyListener.java b/runelite-client/src/main/java/net/runelite/client/util/HotkeyListener.java index 810f8dc386..6dd2d88aba 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/HotkeyListener.java +++ b/runelite-client/src/main/java/net/runelite/client/util/HotkeyListener.java @@ -26,7 +26,9 @@ package net.runelite.client.util; import java.awt.event.KeyEvent; import java.util.function.Supplier; +import lombok.Getter; import lombok.RequiredArgsConstructor; +import lombok.Setter; import net.runelite.client.config.Keybind; import net.runelite.client.input.KeyListener; @@ -39,6 +41,10 @@ public abstract class HotkeyListener implements KeyListener private boolean isConsumingTyped = false; + @Setter + @Getter + private boolean isEnabledOnLogin = false; + @Override public void keyTyped(KeyEvent e) {