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:
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -384,6 +384,7 @@ public class ClientUI
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sidebarListener.setEnabledOnLogin(true);
|
||||||
keyManager.registerKeyListener(sidebarListener);
|
keyManager.registerKeyListener(sidebarListener);
|
||||||
|
|
||||||
// Add mouse listener
|
// Add mouse listener
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user