1From ada45cc4f5e2ac61992fe10f4d22899971c07793 Mon Sep 17 00:00:00 2001 2From: Sharaf Zaman <sharafzaz121@gmail.com> 3Date: Thu, 10 Sep 2020 10:42:31 +0000 4Subject: [PATCH 4/5] Pass keyboard modifiers for mouse and tablet events 5 6[Android] Pass keyboard modifiers for tablet and mouse events 7 8Change-Id: I79238d8454d8e10303af794625dcc704642f99e5 9--- 10 .../org/qtproject/qt5/android/QtNative.java | 18 ++++++------ 11 .../platforms/android/androidjniinput.cpp | 28 +++++++++++-------- 12 2 files changed, 25 insertions(+), 21 deletions(-) 13 14diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java 15index ed599a4369..81bdb83a65 100644 16--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java 17+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java 18@@ -495,7 +495,7 @@ public class QtNative 19 float tiltY = (float) Math.toDegrees(Math.cos(orientation) * tiltRot); 20 tabletEvent(id, event.getDeviceId(), event.getEventTime(), event.getAction(), pointerType, 21 event.getButtonState(), event.getX(), event.getY(), event.getPressure(), tiltX, tiltY, 22- (float) Math.toDegrees(orientation)); 23+ (float) Math.toDegrees(orientation), event.getMetaState()); 24 } else { 25 touchBegin(id); 26 for (int i = 0; i < event.getPointerCount(); ++i) { 27@@ -545,23 +545,23 @@ public class QtNative 28 { 29 switch (event.getActionMasked()) { 30 case MotionEvent.ACTION_UP: 31- mouseUp(id, (int) event.getX(), (int) event.getY()); 32+ mouseUp(id, (int) event.getX(), (int) event.getY(), event.getMetaState()); 33 break; 34 35 case MotionEvent.ACTION_DOWN: 36- mouseDown(id, (int) event.getX(), (int) event.getY()); 37+ mouseDown(id, (int) event.getX(), (int) event.getY(), event.getMetaState()); 38 m_oldx = (int) event.getX(); 39 m_oldy = (int) event.getY(); 40 break; 41 case MotionEvent.ACTION_HOVER_MOVE: 42 case MotionEvent.ACTION_MOVE: 43 if (event.getToolType(0) == MotionEvent.TOOL_TYPE_MOUSE) { 44- mouseMove(id, (int) event.getX(), (int) event.getY()); 45+ mouseMove(id, (int) event.getX(), (int) event.getY(), event.getMetaState()); 46 } else { 47 int dx = (int) (event.getX() - m_oldx); 48 int dy = (int) (event.getY() - m_oldy); 49 if (Math.abs(dx) > 5 || Math.abs(dy) > 5) { 50- mouseMove(id, (int) event.getX(), (int) event.getY()); 51+ mouseMove(id, (int) event.getX(), (int) event.getY(), event.getMetaState()); 52 m_oldx = (int) event.getX(); 53 m_oldy = (int) event.getY(); 54 } 55@@ -1043,9 +1043,9 @@ public class QtNative 56 // screen methods 57 58 // pointer methods 59- public static native void mouseDown(int winId, int x, int y); 60- public static native void mouseUp(int winId, int x, int y); 61- public static native void mouseMove(int winId, int x, int y); 62+ public static native void mouseDown(int winId, int x, int y, int modifier); 63+ public static native void mouseUp(int winId, int x, int y, int modifiers); 64+ public static native void mouseMove(int winId, int x, int y, int modifier); 65 public static native void mouseWheel(int winId, int x, int y, float hdelta, float vdelta); 66 public static native void touchBegin(int winId); 67 public static native void touchAdd(int winId, int pointerId, int action, boolean primary, int x, int y, float major, float minor, float rotation, float pressure); 68@@ -1055,7 +1055,7 @@ public class QtNative 69 70 // tablet methods 71 public static native boolean isTabletEventSupported(); 72- public static native void tabletEvent(int winId, int deviceId, long time, int action, int pointerType, int buttonState, float x, float y, float pressure, float tiltX, float tiltY, float rotation); 73+ public static native void tabletEvent(int winId, int deviceId, long time, int action, int pointerType, int buttonState, float x, float y, float pressure, float tiltX, float tiltY, float rotation, int modifiers); 74 // tablet methods 75 76 // keyboard methods 77diff --git a/src/plugins/platforms/android/androidjniinput.cpp b/src/plugins/platforms/android/androidjniinput.cpp 78index 864744bf49..deb30e404a 100644 79--- a/src/plugins/platforms/android/androidjniinput.cpp 80+++ b/src/plugins/platforms/android/androidjniinput.cpp 81@@ -59,6 +59,7 @@ using namespace QtAndroid; 82 83 namespace QtAndroidInput 84 { 85+ static Qt::KeyboardModifiers mapAndroidModifiers(jint modifiers); 86 static bool m_ignoreMouseEvents = false; 87 static bool m_softwareKeyboardVisible = false; 88 static QRect m_softwareKeyboardRect; 89@@ -132,7 +133,7 @@ namespace QtAndroidInput 90 anchor.x(), anchor.y(), rtl); 91 } 92 93- static void mouseDown(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y) 94+ static void mouseDown(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y, jint modifier) 95 { 96 if (m_ignoreMouseEvents) 97 return; 98@@ -148,10 +149,11 @@ namespace QtAndroidInput 99 QWindowSystemInterface::handleMouseEvent(tlw, 100 localPos, 101 globalPos, 102- Qt::MouseButtons(Qt::LeftButton)); 103+ Qt::MouseButtons(Qt::LeftButton), 104+ mapAndroidModifiers(modifier)); 105 } 106 107- static void mouseUp(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y) 108+ static void mouseUp(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y, jint modifiers) 109 { 110 QPoint globalPos(x,y); 111 QWindow *tlw = m_mouseGrabber.data(); 112@@ -164,12 +166,12 @@ namespace QtAndroidInput 113 localPos = platformWindow ? platformWindow->mapFromGlobal(globalPos) : globalPos; 114 } 115 QWindowSystemInterface::handleMouseEvent(tlw, localPos, globalPos 116- , Qt::MouseButtons(Qt::NoButton)); 117+ , Qt::MouseButtons(Qt::NoButton), mapAndroidModifiers(modifiers)); 118 m_ignoreMouseEvents = false; 119 m_mouseGrabber = 0; 120 } 121 122- static void mouseMove(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y) 123+ static void mouseMove(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y, jint modifier) 124 { 125 if (m_ignoreMouseEvents) 126 return; 127@@ -187,7 +189,8 @@ namespace QtAndroidInput 128 QWindowSystemInterface::handleMouseEvent(tlw, 129 localPos, 130 globalPos, 131- Qt::MouseButtons(m_mouseGrabber ? Qt::LeftButton : Qt::NoButton)); 132+ Qt::MouseButtons(m_mouseGrabber ? Qt::LeftButton : Qt::NoButton), 133+ mapAndroidModifiers(modifier)); 134 } 135 136 static void mouseWheel(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y, jfloat hdelta, jfloat vdelta) 137@@ -323,7 +326,8 @@ namespace QtAndroidInput 138 } 139 140 static void tabletEvent(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint deviceId, jlong time, jint action, 141- jint pointerType, jint buttonState, jfloat x, jfloat y, jfloat pressure, jfloat tiltX, jfloat tiltY, jfloat rotation) 142+ jint pointerType, jint buttonState, jfloat x, jfloat y, jfloat pressure, jfloat tiltX, jfloat tiltY, jfloat rotation, 143+ jint modifiers) 144 { 145 #if QT_CONFIG(tabletevent) 146 QPointF globalPosF(x, y); 147@@ -371,7 +375,7 @@ namespace QtAndroidInput 148 149 QWindowSystemInterface::handleTabletEvent(tlw, ulong(time), 150 localPos, globalPosF, QTabletEvent::Stylus, pointerType, 151- buttons, pressure, tiltX, tiltY, 0., rotation, 0, deviceId, Qt::NoModifier); 152+ buttons, pressure, tiltX, tiltY, 0., rotation, 0, deviceId, mapAndroidModifiers(modifiers)); 153 #endif // QT_CONFIG(tabletevent) 154 } 155 156@@ -870,13 +874,13 @@ namespace QtAndroidInput 157 {"touchBegin","(I)V",(void*)touchBegin}, 158 {"touchAdd","(IIIZIIFFFF)V",(void*)touchAdd}, 159 {"touchEnd","(II)V",(void*)touchEnd}, 160- {"mouseDown", "(III)V", (void *)mouseDown}, 161- {"mouseUp", "(III)V", (void *)mouseUp}, 162- {"mouseMove", "(III)V", (void *)mouseMove}, 163+ {"mouseDown", "(IIII)V", (void *)mouseDown}, 164+ {"mouseUp", "(IIII)V", (void *)mouseUp}, 165+ {"mouseMove", "(IIII)V", (void *)mouseMove}, 166 {"mouseWheel", "(IIIFF)V", (void *)mouseWheel}, 167 {"longPress", "(III)V", (void *)longPress}, 168 {"isTabletEventSupported", "()Z", (void *)isTabletEventSupported}, 169- {"tabletEvent", "(IIJIIIFFFFFF)V", (void *)tabletEvent}, 170+ {"tabletEvent", "(IIJIIIFFFFFFI)V", (void *)tabletEvent}, 171 {"keyDown", "(IIIZ)V", (void *)keyDown}, 172 {"keyUp", "(IIIZ)V", (void *)keyUp}, 173 {"keyboardVisibilityChanged", "(Z)V", (void *)keyboardVisibilityChanged}, 174-- 1752.28.0 176 177