diff --git a/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java b/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java index c0ca0bf929..fd88f334b5 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java @@ -430,4 +430,16 @@ public interface RuneLiteConfig extends Config { return new Keybind(KeyEvent.VK_F12, InputEvent.CTRL_DOWN_MASK); } + + @ConfigItem( + keyName = "blockExtraMouseButtons", + name = "Block Extra Mouse Buttons", + description = "Blocks extra mouse buttons (4 and above)", + position = 34, + titleSection = "keybindsTitle" + ) + default boolean blockExtraMouseButtons() + { + return false; + } } 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 30f0d34c03..0357f4195d 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 @@ -28,14 +28,21 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import javax.inject.Inject; import javax.inject.Singleton; +import net.runelite.client.config.RuneLiteConfig; @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<>(); + + @Inject + private RuneLiteConfig runeLiteConfig; public void registerMouseListener(MouseListener mouseListener) { @@ -75,6 +82,7 @@ public class MouseManager public MouseEvent processMousePressed(MouseEvent mouseEvent) { + checkExtraMouseButtons(mouseEvent); for (MouseListener mouseListener : mouseListeners) { mouseEvent = mouseListener.mousePressed(mouseEvent); @@ -84,6 +92,7 @@ public class MouseManager public MouseEvent processMouseReleased(MouseEvent mouseEvent) { + checkExtraMouseButtons(mouseEvent); for (MouseListener mouseListener : mouseListeners) { mouseEvent = mouseListener.mouseReleased(mouseEvent); @@ -93,12 +102,24 @@ public class MouseManager public MouseEvent processMouseClicked(MouseEvent mouseEvent) { + checkExtraMouseButtons(mouseEvent); for (MouseListener mouseListener : mouseListeners) { mouseEvent = mouseListener.mouseClicked(mouseEvent); } return mouseEvent; } + + private void checkExtraMouseButtons(MouseEvent mouseEvent) + { + // Prevent extra mouse buttons from being passed into the client, + // as it treats them all as left click + int button = mouseEvent.getButton(); + if (button >= MOUSE_BUTTON_4 && runeLiteConfig.blockExtraMouseButtons()) + { + mouseEvent.consume(); + } + } public MouseEvent processMouseEntered(MouseEvent mouseEvent) {