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..932284983b 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) @@ -143,4 +160,4 @@ public class MouseManager } return mouseWheelEvent; } -} +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java index f49f938485..18d995beb0 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java @@ -69,4 +69,8 @@ public abstract class Overlay implements LayoutableRenderableEntity { return this.getClass().getSimpleName(); } + + public void onMouseOver() + { + } } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index 10870f73b1..010a703331 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -235,7 +235,7 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener if (!isResizeable) { // On fixed mode, ABOVE_CHATBOX_RIGHT is in the same location as - // BOTTOM_RIGHT and CANVAST_TOP_RIGHT is same as TOP_RIGHT. + // BOTTOM_RIGHT and CANVAS_TOP_RIGHT is same as TOP_RIGHT. // Just use BOTTOM_RIGHT and TOP_RIGHT to prevent overlays from // drawing over each other. switch (overlayPosition) @@ -316,9 +316,14 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener graphics.setColor(previous); } - if (menuEntries == null && !client.isMenuOpen() && !client.isSpellSelected() && bounds.contains(mouse)) + if (!client.isMenuOpen() && !client.isSpellSelected() && bounds.contains(mouse)) { - menuEntries = createRightClickMenuEntries(overlay); + if (menuEntries == null) + { + menuEntries = createRightClickMenuEntries(overlay); + } + + overlay.onMouseOver(); } } }