From f1907fc7b16db992065b2930050609fc9a229087 Mon Sep 17 00:00:00 2001 From: Max Weber Date: Thu, 19 Jul 2018 06:32:02 -0600 Subject: [PATCH] mixins: Don't post mouse events that have already been posted --- .../runelite/mixins/RSMouseInputMixin.java | 94 ++++++++++++++++--- 1 file changed, 82 insertions(+), 12 deletions(-) diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSMouseInputMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSMouseInputMixin.java index 65cb96b8af..dcaa7261b1 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSMouseInputMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSMouseInputMixin.java @@ -26,6 +26,7 @@ package net.runelite.mixins; import java.awt.event.MouseEvent; import net.runelite.api.mixins.Copy; +import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; import net.runelite.api.mixins.Shadow; @@ -38,6 +39,9 @@ public abstract class RSMouseInputMixin implements RSMouseInput @Shadow("clientInstance") private static RSClient client; + @Inject + private int isInEvent; + @Copy("mousePressed") abstract void rs$mousePressed(MouseEvent mouseEvent); @@ -63,10 +67,21 @@ public abstract class RSMouseInputMixin implements RSMouseInput @Replace("mousePressed") public synchronized void mousePressed(MouseEvent mouseEvent) { - mouseEvent = client.getCallbacks().mousePressed(mouseEvent); + if (isInEvent == 0) + { + mouseEvent = client.getCallbacks().mousePressed(mouseEvent); + } if (!mouseEvent.isConsumed()) { - rs$mousePressed(mouseEvent); + isInEvent++; + try + { + rs$mousePressed(mouseEvent); + } + finally + { + isInEvent--; + } } } @@ -74,10 +89,21 @@ public abstract class RSMouseInputMixin implements RSMouseInput @Replace("mouseReleased") public synchronized void mouseReleased(MouseEvent mouseEvent) { - mouseEvent = client.getCallbacks().mouseReleased(mouseEvent); + if (isInEvent == 0) + { + mouseEvent = client.getCallbacks().mouseReleased(mouseEvent); + } if (!mouseEvent.isConsumed()) { - rs$mouseReleased(mouseEvent); + isInEvent++; + try + { + rs$mouseReleased(mouseEvent); + } + finally + { + isInEvent--; + } } } @@ -96,10 +122,21 @@ public abstract class RSMouseInputMixin implements RSMouseInput @Replace("mouseEntered") public synchronized void mouseEntered(MouseEvent mouseEvent) { - mouseEvent = client.getCallbacks().mouseEntered(mouseEvent); + if (isInEvent == 0) + { + mouseEvent = client.getCallbacks().mouseEntered(mouseEvent); + } if (!mouseEvent.isConsumed()) { - rs$mouseEntered(mouseEvent); + isInEvent++; + try + { + rs$mouseEntered(mouseEvent); + } + finally + { + isInEvent--; + } } } @@ -108,10 +145,21 @@ public abstract class RSMouseInputMixin implements RSMouseInput @Replace("mouseExited") public synchronized void mouseExited(MouseEvent mouseEvent) { - mouseEvent = client.getCallbacks().mouseExited(mouseEvent); + if (isInEvent == 0) + { + mouseEvent = client.getCallbacks().mouseExited(mouseEvent); + } if (!mouseEvent.isConsumed()) { - rs$mouseExited(mouseEvent); + isInEvent++; + try + { + rs$mouseExited(mouseEvent); + } + finally + { + isInEvent--; + } } } @@ -119,10 +167,21 @@ public abstract class RSMouseInputMixin implements RSMouseInput @Replace("mouseDragged") public synchronized void mouseDragged(MouseEvent mouseEvent) { - mouseEvent = client.getCallbacks().mouseDragged(mouseEvent); + if (isInEvent == 0) + { + mouseEvent = client.getCallbacks().mouseDragged(mouseEvent); + } if (!mouseEvent.isConsumed()) { - rs$mouseDragged(mouseEvent); + isInEvent++; + try + { + rs$mouseDragged(mouseEvent); + } + finally + { + isInEvent--; + } } } @@ -130,10 +189,21 @@ public abstract class RSMouseInputMixin implements RSMouseInput @Replace("mouseMoved") public synchronized void mouseMoved(MouseEvent mouseEvent) { - mouseEvent = client.getCallbacks().mouseMoved(mouseEvent); + if (isInEvent == 0) + { + mouseEvent = client.getCallbacks().mouseMoved(mouseEvent); + } if (!mouseEvent.isConsumed()) { - rs$mouseMoved(mouseEvent); + isInEvent++; + try + { + rs$mouseMoved(mouseEvent); + } + finally + { + isInEvent--; + } } } }