mixins: Don't post mouse events that have already been posted

This commit is contained in:
Max Weber
2018-07-19 06:32:02 -06:00
parent 4ec592b1cd
commit f1907fc7b1

View File

@@ -26,6 +26,7 @@ package net.runelite.mixins;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Copy;
import net.runelite.api.mixins.Inject;
import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Mixin;
import net.runelite.api.mixins.Replace; import net.runelite.api.mixins.Replace;
import net.runelite.api.mixins.Shadow; import net.runelite.api.mixins.Shadow;
@@ -38,6 +39,9 @@ public abstract class RSMouseInputMixin implements RSMouseInput
@Shadow("clientInstance") @Shadow("clientInstance")
private static RSClient client; private static RSClient client;
@Inject
private int isInEvent;
@Copy("mousePressed") @Copy("mousePressed")
abstract void rs$mousePressed(MouseEvent mouseEvent); abstract void rs$mousePressed(MouseEvent mouseEvent);
@@ -63,10 +67,21 @@ public abstract class RSMouseInputMixin implements RSMouseInput
@Replace("mousePressed") @Replace("mousePressed")
public synchronized void mousePressed(MouseEvent mouseEvent) public synchronized void mousePressed(MouseEvent mouseEvent)
{ {
mouseEvent = client.getCallbacks().mousePressed(mouseEvent); if (isInEvent == 0)
{
mouseEvent = client.getCallbacks().mousePressed(mouseEvent);
}
if (!mouseEvent.isConsumed()) 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") @Replace("mouseReleased")
public synchronized void mouseReleased(MouseEvent mouseEvent) public synchronized void mouseReleased(MouseEvent mouseEvent)
{ {
mouseEvent = client.getCallbacks().mouseReleased(mouseEvent); if (isInEvent == 0)
{
mouseEvent = client.getCallbacks().mouseReleased(mouseEvent);
}
if (!mouseEvent.isConsumed()) 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") @Replace("mouseEntered")
public synchronized void mouseEntered(MouseEvent mouseEvent) public synchronized void mouseEntered(MouseEvent mouseEvent)
{ {
mouseEvent = client.getCallbacks().mouseEntered(mouseEvent); if (isInEvent == 0)
{
mouseEvent = client.getCallbacks().mouseEntered(mouseEvent);
}
if (!mouseEvent.isConsumed()) 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") @Replace("mouseExited")
public synchronized void mouseExited(MouseEvent mouseEvent) public synchronized void mouseExited(MouseEvent mouseEvent)
{ {
mouseEvent = client.getCallbacks().mouseExited(mouseEvent); if (isInEvent == 0)
{
mouseEvent = client.getCallbacks().mouseExited(mouseEvent);
}
if (!mouseEvent.isConsumed()) 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") @Replace("mouseDragged")
public synchronized void mouseDragged(MouseEvent mouseEvent) public synchronized void mouseDragged(MouseEvent mouseEvent)
{ {
mouseEvent = client.getCallbacks().mouseDragged(mouseEvent); if (isInEvent == 0)
{
mouseEvent = client.getCallbacks().mouseDragged(mouseEvent);
}
if (!mouseEvent.isConsumed()) 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") @Replace("mouseMoved")
public synchronized void mouseMoved(MouseEvent mouseEvent) public synchronized void mouseMoved(MouseEvent mouseEvent)
{ {
mouseEvent = client.getCallbacks().mouseMoved(mouseEvent); if (isInEvent == 0)
{
mouseEvent = client.getCallbacks().mouseMoved(mouseEvent);
}
if (!mouseEvent.isConsumed()) if (!mouseEvent.isConsumed())
{ {
rs$mouseMoved(mouseEvent); isInEvent++;
try
{
rs$mouseMoved(mouseEvent);
}
finally
{
isInEvent--;
}
} }
} }
} }