Fix[input]: ignore the right click gesture for non-fresh inputs

This commit is contained in:
artdeell 2024-04-08 11:57:45 -04:00 committed by Maksim Belov
parent 7add2f85dd
commit 13cad686ec

View File

@ -11,6 +11,7 @@ import org.lwjgl.glfw.CallbackBridge;
public class InGameEventProcessor implements TouchEventProcessor { public class InGameEventProcessor implements TouchEventProcessor {
private final Handler mGestureHandler = new Handler(Looper.getMainLooper()); private final Handler mGestureHandler = new Handler(Looper.getMainLooper());
private final double mSensitivity; private final double mSensitivity;
private boolean mEventTransitioned = true;
private final PointerTracker mTracker = new PointerTracker(); private final PointerTracker mTracker = new PointerTracker();
private final LeftClickGesture mLeftClickGesture = new LeftClickGesture(mGestureHandler); private final LeftClickGesture mLeftClickGesture = new LeftClickGesture(mGestureHandler);
private final RightClickGesture mRightClickGesture = new RightClickGesture(mGestureHandler); private final RightClickGesture mRightClickGesture = new RightClickGesture(mGestureHandler);
@ -25,6 +26,7 @@ public class InGameEventProcessor implements TouchEventProcessor {
case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_DOWN:
mTracker.startTracking(motionEvent); mTracker.startTracking(motionEvent);
if(LauncherPreferences.PREF_DISABLE_GESTURES) break; if(LauncherPreferences.PREF_DISABLE_GESTURES) break;
mEventTransitioned = false;
checkGestures(); checkGestures();
break; break;
case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_MOVE:
@ -51,10 +53,14 @@ public class InGameEventProcessor implements TouchEventProcessor {
private void checkGestures() { private void checkGestures() {
mLeftClickGesture.inputEvent(); mLeftClickGesture.inputEvent();
mRightClickGesture.inputEvent(); // Only register right click events if it's a fresh event stream, not one after a transition.
// This is done to avoid problems when people hold the button for just a bit too long after
// exiting a menu for example.
if(!mEventTransitioned) mRightClickGesture.inputEvent();
} }
private void cancelGestures(boolean isSwitching) { private void cancelGestures(boolean isSwitching) {
mEventTransitioned = true;
mLeftClickGesture.cancel(isSwitching); mLeftClickGesture.cancel(isSwitching);
mRightClickGesture.cancel(isSwitching); mRightClickGesture.cancel(isSwitching);
} }