From 1741f6df29c40ae9c5c64b75ee8570380742bf0f Mon Sep 17 00:00:00 2001 From: reuk Date: Thu, 22 May 2025 21:02:18 +0100 Subject: [PATCH] Android: Update handling of ACTION_CANCEL to terminate all ongoing pointer events, instead of just the primary pointer --- .../app/com/rmsl/juce/ComponentPeerView.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/modules/juce_gui_basics/native/java/app/com/rmsl/juce/ComponentPeerView.java b/modules/juce_gui_basics/native/java/app/com/rmsl/juce/ComponentPeerView.java index 2bf4490ca3..8cb8de958d 100644 --- a/modules/juce_gui_basics/native/java/app/com/rmsl/juce/ComponentPeerView.java +++ b/modules/juce_gui_basics/native/java/app/com/rmsl/juce/ComponentPeerView.java @@ -209,11 +209,28 @@ public final class ComponentPeerView extends ViewGroup handleMouseDown (host, event.getPointerId (0), event.getRawX(), event.getRawY(), time); return true; - case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: handleMouseUp (host, event.getPointerId (0), event.getRawX(), event.getRawY(), time); return true; + case MotionEvent.ACTION_CANCEL: + { + handleMouseUp (host, event.getPointerId (0), event.getRawX(), event.getRawY(), time); + + int n = event.getPointerCount(); + + if (n > 1) + { + int point[] = new int[2]; + getLocationOnScreen (point); + + for (int i = 1; i < n; ++i) + handleMouseUp (host, event.getPointerId (i), event.getX (i) + point[0], event.getY (i) + point[1], time); + } + + return true; + } + case MotionEvent.ACTION_MOVE: { handleMouseDrag (host, event.getPointerId (0), event.getRawX(), event.getRawY(), time);