From 046c20fb5bd5b3f7c89d635b7a7a83ddaf0d8450 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 22 Mar 2020 17:59:41 -0400 Subject: [PATCH] client: block extra mouse keys The key remapping plugin has no way to operate being on and also not blocking chat input, due to the other features of the plugin all doing key remaps and thus are required to know whether or not you are trying to type, or using a remapped key. This moves the blocking to the core, which we think won't affect many users anyway, and those that it does can just remap their mouse keys. --- .../runelite/client/input/MouseManager.java | 17 +++++++++ .../keyremapping/KeyRemappingConfig.java | 11 ------ .../keyremapping/KeyRemappingListener.java | 35 +------------------ .../keyremapping/KeyRemappingPlugin.java | 6 ---- .../KeyRemappingListenerTest.java | 17 --------- 5 files changed, 18 insertions(+), 68 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/input/MouseManager.java b/runelite-client/src/main/java/net/runelite/client/input/MouseManager.java index ba1e3b80e8..d444f93fe6 100644 --- a/runelite-client/src/main/java/net/runelite/client/input/MouseManager.java +++ b/runelite-client/src/main/java/net/runelite/client/input/MouseManager.java @@ -33,6 +33,9 @@ import javax.inject.Singleton; @Singleton public class MouseManager { + // Button numbers greater than BUTTON3 have no constant identifier + private static final int MOUSE_BUTTON_4 = 4; + private final List mouseListeners = new CopyOnWriteArrayList<>(); private final List mouseWheelListeners = new CopyOnWriteArrayList<>(); @@ -74,6 +77,7 @@ public class MouseManager public MouseEvent processMousePressed(MouseEvent mouseEvent) { + checkExtraMouseButtons(mouseEvent); for (MouseListener mouseListener : mouseListeners) { mouseEvent = mouseListener.mousePressed(mouseEvent); @@ -83,6 +87,7 @@ public class MouseManager public MouseEvent processMouseReleased(MouseEvent mouseEvent) { + checkExtraMouseButtons(mouseEvent); for (MouseListener mouseListener : mouseListeners) { mouseEvent = mouseListener.mouseReleased(mouseEvent); @@ -92,6 +97,7 @@ public class MouseManager public MouseEvent processMouseClicked(MouseEvent mouseEvent) { + checkExtraMouseButtons(mouseEvent); for (MouseListener mouseListener : mouseListeners) { mouseEvent = mouseListener.mouseClicked(mouseEvent); @@ -99,6 +105,17 @@ public class MouseManager return mouseEvent; } + private void checkExtraMouseButtons(MouseEvent mouseEvent) + { + // Prevent extra mouse buttins from being passed into the client, + // as it treats them all as left click + int button = mouseEvent.getButton(); + if (button >= MOUSE_BUTTON_4) + { + mouseEvent.consume(); + } + } + public MouseEvent processMouseEntered(MouseEvent mouseEvent) { for (MouseListener mouseListener : mouseListeners) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingConfig.java index 6b108a011e..0ee4c58e22 100755 --- a/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingConfig.java @@ -241,15 +241,4 @@ public interface KeyRemappingConfig extends Config { return new ModifierlessKeybind(KeyEvent.VK_ESCAPE, 0); } - - @ConfigItem( - position = 20, - keyName = "consumeExtraMouseButtons", - name = "Block extra mouse buttons", - description = "Blocks mouse buttons 4 and 5" - ) - default boolean consumeExtraMouseButtons() - { - return false; - } } 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 b40fecef4c..6ca245af1a 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 @@ -27,7 +27,6 @@ package net.runelite.client.plugins.keyremapping; import com.google.common.base.Strings; import java.awt.event.KeyEvent; -import java.awt.event.MouseEvent; import java.util.HashMap; import java.util.Map; import javax.inject.Inject; @@ -36,13 +35,9 @@ import net.runelite.api.GameState; import net.runelite.api.VarClientStr; import net.runelite.client.callback.ClientThread; import net.runelite.client.input.KeyListener; -import net.runelite.client.input.MouseAdapter; -class KeyRemappingListener extends MouseAdapter implements KeyListener +class KeyRemappingListener implements KeyListener { - // Button numbers greater than BUTTON3 have no constant identifier - private static final int MOUSE_BUTTON_4 = 4; - @Inject private KeyRemappingPlugin plugin; @@ -310,32 +305,4 @@ class KeyRemappingListener extends MouseAdapter implements KeyListener } } } - - @Override - public MouseEvent mouseClicked(MouseEvent mouseEvent) - { - return consumeMouseEvent(mouseEvent); - } - - @Override - public MouseEvent mousePressed(MouseEvent mouseEvent) - { - return consumeMouseEvent(mouseEvent); - } - - @Override - public MouseEvent mouseReleased(MouseEvent mouseEvent) - { - return consumeMouseEvent(mouseEvent); - } - - private MouseEvent consumeMouseEvent(MouseEvent mouseEvent) - { - int button = mouseEvent.getButton(); - if (button >= MOUSE_BUTTON_4 && config.consumeExtraMouseButtons()) - { - mouseEvent.consume(); - } - return mouseEvent; - } } 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 dbf60a38c9..c2b2ee146f 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 @@ -43,7 +43,6 @@ import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.input.KeyManager; -import net.runelite.client.input.MouseManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.JagexColors; @@ -70,9 +69,6 @@ public class KeyRemappingPlugin extends Plugin @Inject private KeyManager keyManager; - @Inject - private MouseManager mouseManager; - @Inject private KeyRemappingListener inputListener; @@ -85,7 +81,6 @@ public class KeyRemappingPlugin extends Plugin { typing = false; keyManager.registerKeyListener(inputListener); - mouseManager.registerMouseListener(inputListener); clientThread.invoke(() -> { @@ -109,7 +104,6 @@ public class KeyRemappingPlugin extends Plugin } }); - mouseManager.unregisterMouseListener(inputListener); keyManager.unregisterKeyListener(inputListener); } 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 96b131aacc..867413420e 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 @@ -28,7 +28,6 @@ import com.google.inject.Guice; import com.google.inject.testing.fieldbinder.Bind; import com.google.inject.testing.fieldbinder.BoundFieldModule; import java.awt.event.KeyEvent; -import java.awt.event.MouseEvent; import javax.inject.Inject; import net.runelite.api.Client; import net.runelite.api.GameState; @@ -38,7 +37,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.mockito.junit.MockitoJUnitRunner; @@ -93,19 +91,4 @@ public class KeyRemappingListenerTest keyRemappingListener.keyReleased(event); verify(event).setKeyCode(KeyEvent.VK_RIGHT); } - - @Test - public void testMouseClicked() - { - when(keyRemappingConfig.consumeExtraMouseButtons()).thenReturn(true); - MouseEvent mouseEvent = mock(MouseEvent.class); - when(mouseEvent.getButton()).thenReturn(4); - keyRemappingListener.mousePressed(mouseEvent); - verify(mouseEvent).consume(); - - mouseEvent = mock(MouseEvent.class); - when(mouseEvent.getButton()).thenReturn(1); - keyRemappingListener.mousePressed(mouseEvent); - verify(mouseEvent, never()).consume(); - } }