From 612a5f3fb534528619c4910e7d06c814c3712af6 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Sun, 5 Apr 2020 06:57:09 +0200 Subject: [PATCH] Skip processing of input listeners with consumed events This prevents from consumed input events to propage to rest of the plugins. For example when overlay is being moved, this prevents ground items from registering the click (what would otherwise cause for ground item to be highlighted). Signed-off-by: Tomas Slusny --- .../net/runelite/client/input/KeyManager.java | 27 +++++++ .../runelite/client/input/MouseManager.java | 72 +++++++++++++++++++ 2 files changed, 99 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/input/KeyManager.java b/runelite-client/src/main/java/net/runelite/client/input/KeyManager.java index d8e5c81a11..f9e2c4f07d 100644 --- a/runelite-client/src/main/java/net/runelite/client/input/KeyManager.java +++ b/runelite-client/src/main/java/net/runelite/client/input/KeyManager.java @@ -49,25 +49,52 @@ public class KeyManager public void processKeyPressed(KeyEvent keyEvent) { + if (keyEvent.isConsumed()) + { + return; + } + for (KeyListener keyListener : keyListeners) { keyListener.keyPressed(keyEvent); + if (keyEvent.isConsumed()) + { + break; + } } } public void processKeyReleased(KeyEvent keyEvent) { + if (keyEvent.isConsumed()) + { + return; + } + for (KeyListener keyListener : keyListeners) { keyListener.keyReleased(keyEvent); + if (keyEvent.isConsumed()) + { + break; + } } } public void processKeyTyped(KeyEvent keyEvent) { + if (keyEvent.isConsumed()) + { + return; + } + for (KeyListener keyListener : keyListeners) { keyListener.keyTyped(keyEvent); + if (keyEvent.isConsumed()) + { + break; + } } } } 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 b88d43d3d6..d5b876c7d7 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 @@ -82,30 +82,57 @@ public class MouseManager public MouseEvent processMousePressed(MouseEvent mouseEvent) { + if (mouseEvent.isConsumed()) + { + return mouseEvent; + } + checkExtraMouseButtons(mouseEvent); for (MouseListener mouseListener : mouseListeners) { mouseEvent = mouseListener.mousePressed(mouseEvent); + if (mouseEvent.isConsumed()) + { + break; + } } return mouseEvent; } public MouseEvent processMouseReleased(MouseEvent mouseEvent) { + if (mouseEvent.isConsumed()) + { + return mouseEvent; + } + checkExtraMouseButtons(mouseEvent); for (MouseListener mouseListener : mouseListeners) { mouseEvent = mouseListener.mouseReleased(mouseEvent); + if (mouseEvent.isConsumed()) + { + break; + } } return mouseEvent; } public MouseEvent processMouseClicked(MouseEvent mouseEvent) { + if (mouseEvent.isConsumed()) + { + return mouseEvent; + } + checkExtraMouseButtons(mouseEvent); for (MouseListener mouseListener : mouseListeners) { mouseEvent = mouseListener.mouseClicked(mouseEvent); + if (mouseEvent.isConsumed()) + { + break; + } } return mouseEvent; } @@ -123,45 +150,90 @@ public class MouseManager public MouseEvent processMouseEntered(MouseEvent mouseEvent) { + if (mouseEvent.isConsumed()) + { + return mouseEvent; + } + for (MouseListener mouseListener : mouseListeners) { mouseEvent = mouseListener.mouseEntered(mouseEvent); + if (mouseEvent.isConsumed()) + { + break; + } } return mouseEvent; } public MouseEvent processMouseExited(MouseEvent mouseEvent) { + if (mouseEvent.isConsumed()) + { + return mouseEvent; + } + for (MouseListener mouseListener : mouseListeners) { mouseEvent = mouseListener.mouseExited(mouseEvent); + if (mouseEvent.isConsumed()) + { + break; + } } return mouseEvent; } public MouseEvent processMouseDragged(MouseEvent mouseEvent) { + if (mouseEvent.isConsumed()) + { + return mouseEvent; + } + for (MouseListener mouseListener : mouseListeners) { mouseEvent = mouseListener.mouseDragged(mouseEvent); + if (mouseEvent.isConsumed()) + { + break; + } } return mouseEvent; } public MouseEvent processMouseMoved(MouseEvent mouseEvent) { + if (mouseEvent.isConsumed()) + { + return mouseEvent; + } + for (MouseListener mouseListener : mouseListeners) { mouseEvent = mouseListener.mouseMoved(mouseEvent); + if (mouseEvent.isConsumed()) + { + break; + } } return mouseEvent; } public MouseWheelEvent processMouseWheelMoved(MouseWheelEvent mouseWheelEvent) { + if (mouseWheelEvent.isConsumed()) + { + return mouseWheelEvent; + } + for (MouseWheelListener mouseWheelListener : mouseWheelListeners) { mouseWheelEvent = mouseWheelListener.mouseWheelMoved(mouseWheelEvent); + if (mouseWheelEvent.isConsumed()) + { + break; + } } return mouseWheelEvent; }