From c17a1432cf63b225c05ce2779fbecb83111870bc Mon Sep 17 00:00:00 2001 From: Juha Vuolle Date: Mon, 18 Sep 2023 15:11:25 +0300 Subject: [PATCH] Handle ACTION_POINTER_UP with tablet events The ACTION_POINTER_UP is used when a non-primary pointer (touch, mouse stylus, eraser) goes up. Without handling this action in these cases, the table event remains in 'down' state (misses the QEvent::TabletRelease) and as a consequence when it is next put on the screen, eg. a line will be drawn to the new position (in case of a drawing application). In addition use getActionMasked() to get the action; non-masked events would contain the index of the pointer too, and wouldn't match with ACTION_POINTER_UP whose numeric value is 6. Rather the actions would be in the lines of: 261, // ACTION_POINTER_DOWN(1), 6 with getActionMasked() 517, // ACTION_POINTER_DOWN(2), 6 with getActionMasked() And so on. Pick-to: 6.5 Fixes: QTBUG-86297 Change-Id: I1b50ca4d19b611aec8a5c280ed0521e2f11797b0 Reviewed-by: Shawn Rutledge Reviewed-by: Assam Boudjelthia (cherry picked from commit 3ee57b83870567d52acc00e534ef022a6d3b150e) Reviewed-by: Qt Cherry-pick Bot --- src/android/jar/src/org/qtproject/qt/android/QtNative.java | 2 +- src/plugins/platforms/android/androidjniinput.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/android/jar/src/org/qtproject/qt/android/QtNative.java b/src/android/jar/src/org/qtproject/qt/android/QtNative.java index 161a489a566..260e6d414e5 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtNative.java @@ -581,7 +581,7 @@ public class QtNative if (event.getToolType(0) == MotionEvent.TOOL_TYPE_MOUSE) { sendMouseEvent(event, id); } else if (m_tabletEventSupported && pointerType != 0) { - tabletEvent(id, event.getDeviceId(), event.getEventTime(), event.getAction(), pointerType, + tabletEvent(id, event.getDeviceId(), event.getEventTime(), event.getActionMasked(), pointerType, event.getButtonState(), event.getX(), event.getY(), event.getPressure()); } else { touchBegin(id); diff --git a/src/plugins/platforms/android/androidjniinput.cpp b/src/plugins/platforms/android/androidjniinput.cpp index dbe59050b14..89ecddeeb97 100644 --- a/src/plugins/platforms/android/androidjniinput.cpp +++ b/src/plugins/platforms/android/androidjniinput.cpp @@ -314,6 +314,7 @@ namespace QtAndroidInput Qt::MouseButtons buttons = Qt::NoButton; switch (action) { case 1: // ACTION_UP + case 6: // ACTION_POINTER_UP, happens if stylus is not the primary pointer case 212: // stylus release while side-button held on Galaxy Note 4 buttons = Qt::NoButton; break;