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 <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2020-04-20 01:26:36 +02:00
parent a888519e1c
commit 01bdbe5aab
3 changed files with 57 additions and 0 deletions

View File

@@ -27,11 +27,24 @@ package net.runelite.client.input;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.util.List; import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import net.runelite.api.Client;
import net.runelite.api.GameState;
import net.runelite.client.util.HotkeyListener;
@Singleton @Singleton
public class KeyManager public class KeyManager
{ {
private final Client client;
@Inject
private KeyManager(@Nullable final Client client)
{
this.client = client;
}
private final List<KeyListener> keyListeners = new CopyOnWriteArrayList<>(); private final List<KeyListener> keyListeners = new CopyOnWriteArrayList<>();
public void registerKeyListener(KeyListener keyListener) public void registerKeyListener(KeyListener keyListener)
@@ -56,6 +69,11 @@ public class KeyManager
for (KeyListener keyListener : keyListeners) for (KeyListener keyListener : keyListeners)
{ {
if (!shouldProcess(keyListener))
{
continue;
}
keyListener.keyPressed(keyEvent); keyListener.keyPressed(keyEvent);
if (keyEvent.isConsumed()) if (keyEvent.isConsumed())
{ {
@@ -73,6 +91,11 @@ public class KeyManager
for (KeyListener keyListener : keyListeners) for (KeyListener keyListener : keyListeners)
{ {
if (!shouldProcess(keyListener))
{
continue;
}
keyListener.keyReleased(keyEvent); keyListener.keyReleased(keyEvent);
if (keyEvent.isConsumed()) if (keyEvent.isConsumed())
{ {
@@ -90,6 +113,11 @@ public class KeyManager
for (KeyListener keyListener : keyListeners) for (KeyListener keyListener : keyListeners)
{ {
if (!shouldProcess(keyListener))
{
continue;
}
keyListener.keyTyped(keyEvent); keyListener.keyTyped(keyEvent);
if (keyEvent.isConsumed()) 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;
}
} }

View File

@@ -384,6 +384,7 @@ public class ClientUI
} }
}; };
sidebarListener.setEnabledOnLogin(true);
keyManager.registerKeyListener(sidebarListener); keyManager.registerKeyListener(sidebarListener);
// Add mouse listener // Add mouse listener

View File

@@ -26,7 +26,9 @@ package net.runelite.client.util;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.util.function.Supplier; import java.util.function.Supplier;
import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.Setter;
import net.runelite.client.config.Keybind; import net.runelite.client.config.Keybind;
import net.runelite.client.input.KeyListener; import net.runelite.client.input.KeyListener;
@@ -39,6 +41,10 @@ public abstract class HotkeyListener implements KeyListener
private boolean isConsumingTyped = false; private boolean isConsumingTyped = false;
@Setter
@Getter
private boolean isEnabledOnLogin = false;
@Override @Override
public void keyTyped(KeyEvent e) public void keyTyped(KeyEvent e)
{ {