From b684ed6bd7ae459fe9df24c4da23b25bb199bed6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Tue, 23 May 2017 16:41:42 +0200 Subject: Android: Properly update geometry once the platform plugin is ready This is amends commit 9091a058bc61e29 to make sure we don't drop geometry updates that are set before the platform plugins is ready. Task-number: QTBUG-60963 Change-Id: I4489eb9329bb8983458ad328a43b85382bba3cf6 Reviewed-by: BogDan Vatra --- src/plugins/platforms/android/androidjnimain.cpp | 2 ++ src/plugins/platforms/android/qandroidplatformintegration.cpp | 8 ++++++++ src/plugins/platforms/android/qandroidplatformintegration.h | 2 ++ 3 files changed, 12 insertions(+) (limited to 'src/plugins/platforms/android') diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index e47dd91a3e..6a0d03d473 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -142,6 +142,7 @@ namespace QtAndroid // flush the pending state if necessary. if (m_androidPlatformIntegration) { flushPendingApplicationState(); + m_androidPlatformIntegration->flushPendingUpdates(); } else { QMutexLocker locker(&m_pendingAppStateMtx); m_pendingApplicationState = -1; @@ -627,6 +628,7 @@ static void setDisplayMetrics(JNIEnv */*env*/, jclass /*clazz*/, m_scaledDensity = scaledDensity; m_density = density; + QMutexLocker lock(&m_surfacesMutex); if (!m_androidPlatformIntegration) { QAndroidPlatformIntegration::setDefaultDisplayMetrics(desktopWidthPixels, desktopHeightPixels, diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp index d8bba4f8e9..403badb2e1 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.cpp +++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp @@ -405,6 +405,14 @@ void QAndroidPlatformIntegration::setScreenOrientation(Qt::ScreenOrientation cur m_nativeOrientation = nativeOrientation; } +void QAndroidPlatformIntegration::flushPendingUpdates() +{ + m_primaryScreen->setPhysicalSize(QSize(m_defaultPhysicalSizeWidth, + m_defaultPhysicalSizeHeight)); + m_primaryScreen->setSize(QSize(m_defaultScreenWidth, m_defaultScreenHeight)); + m_primaryScreen->setAvailableGeometry(QRect(0, 0, m_defaultGeometryWidth, m_defaultGeometryHeight)); +} + #ifndef QT_NO_ACCESSIBILITY QPlatformAccessibility *QAndroidPlatformIntegration::accessibility() const { diff --git a/src/plugins/platforms/android/qandroidplatformintegration.h b/src/plugins/platforms/android/qandroidplatformintegration.h index 923670b9e6..337f4a9279 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.h +++ b/src/plugins/platforms/android/qandroidplatformintegration.h @@ -126,6 +126,8 @@ public: QTouchDevice *touchDevice() const { return m_touchDevice; } void setTouchDevice(QTouchDevice *touchDevice) { m_touchDevice = touchDevice; } + void flushPendingUpdates(); + private: EGLDisplay m_eglDisplay; QTouchDevice *m_touchDevice; -- cgit v1.2.3 From 235b4cac1da881f55c0bf958965d4812ea49c335 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Tue, 23 May 2017 17:09:32 +0200 Subject: Android: Remove unused struct Change-Id: Iddb4fec951c4dfa8c1052fb18ed62504d28a4792 Reviewed-by: BogDan Vatra --- src/plugins/platforms/android/androidjnimain.cpp | 7 ------- 1 file changed, 7 deletions(-) (limited to 'src/plugins/platforms/android') diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index 6a0d03d473..32155c6339 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -102,13 +102,6 @@ static QList m_applicationParams; pthread_t m_qtAppThread = 0; static sem_t m_exitSemaphore, m_terminateSemaphore; -struct SurfaceData -{ - ~SurfaceData() { delete surface; } - QJNIObjectPrivate *surface = nullptr; - AndroidSurfaceClient *client = nullptr; -}; - QHash m_surfaces; static QMutex m_surfacesMutex; -- cgit v1.2.3 From da104aa308c7807e62c137a7972e70e9bf2dbfb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Fri, 26 May 2017 11:21:42 +0200 Subject: Android: Remove no-op call to processEvents() The call does nothing as it's always called from the Android thread, meaning there are no events, or even eventloop. Change-Id: I6c03b6ebe74bc52af45bc295b42aa01ad6d51157 Reviewed-by: BogDan Vatra --- src/plugins/platforms/android/androidjnimain.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/plugins/platforms/android') diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index 32155c6339..06bca0354d 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -686,7 +686,6 @@ static void updateApplicationState(JNIEnv */*env*/, jobject /*thiz*/, jint state // Don't send timers and sockets events anymore if we are going to hide all windows QAndroidEventDispatcherStopper::instance()->goingToStop(true); - QCoreApplication::processEvents(); QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationState(state)); if (state == Qt::ApplicationSuspended) QAndroidEventDispatcherStopper::instance()->stopAll(); -- cgit v1.2.3 From ea568c310d75fa921eba2c6ce2852f4617a176ea Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Tue, 6 Jun 2017 16:45:27 +0300 Subject: Android: Fix RTL selection handles directions Invert the selection handles icons when the selected text is rtl. Task-number: QTBUG-61073 Change-Id: I8339a14d1e4d9e79d218516daf3ac783911f6026 Reviewed-by: Olivier Goffart (Woboq GmbH) --- src/plugins/platforms/android/androidjniinput.cpp | 6 +++--- src/plugins/platforms/android/androidjniinput.h | 2 +- src/plugins/platforms/android/qandroidinputcontext.cpp | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) (limited to 'src/plugins/platforms/android') diff --git a/src/plugins/platforms/android/androidjniinput.cpp b/src/plugins/platforms/android/androidjniinput.cpp index 8372bf6484..048be662be 100644 --- a/src/plugins/platforms/android/androidjniinput.cpp +++ b/src/plugins/platforms/android/androidjniinput.cpp @@ -121,11 +121,11 @@ namespace QtAndroidInput return m_softwareKeyboardRect; } - void updateHandles(int mode, QPoint cursor, QPoint anchor) + void updateHandles(int mode, QPoint cursor, QPoint anchor, bool rtl) { - QJNIObjectPrivate::callStaticMethod(applicationClass(), "updateHandles", "(IIIII)V", + QJNIObjectPrivate::callStaticMethod(applicationClass(), "updateHandles", "(IIIIIZ)V", mode, cursor.x(), cursor.y(), anchor.x(), - anchor.y()); + anchor.y(), rtl); } static void mouseDown(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y) diff --git a/src/plugins/platforms/android/androidjniinput.h b/src/plugins/platforms/android/androidjniinput.h index af18a96dc1..c09b426f49 100644 --- a/src/plugins/platforms/android/androidjniinput.h +++ b/src/plugins/platforms/android/androidjniinput.h @@ -58,7 +58,7 @@ namespace QtAndroidInput // Software keyboard support // cursor/selection handles - void updateHandles(int handleCount, QPoint cursor = QPoint(), QPoint anchor = QPoint()); + void updateHandles(int handleCount, QPoint cursor = QPoint(), QPoint anchor = QPoint(), bool rtl = false); bool registerNatives(JNIEnv *env); } diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp index 4ab8a9d060..279cb338f4 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.cpp +++ b/src/plugins/platforms/android/qandroidinputcontext.cpp @@ -537,7 +537,7 @@ void QAndroidInputContext::updateSelectionHandles() ? QHighDpiScaling::factor(window) : QHighDpiScaling::factor(QtAndroid::androidPlatformIntegration()->screen()); - QInputMethodQueryEvent query(Qt::ImCursorPosition | Qt::ImAnchorPosition | Qt::ImEnabled); + QInputMethodQueryEvent query(Qt::ImCursorPosition | Qt::ImAnchorPosition | Qt::ImEnabled | Qt::ImCurrentSelection); QCoreApplication::sendEvent(m_focusObject, &query); int cpos = query.value(Qt::ImCursorPosition).toInt(); int anchor = query.value(Qt::ImAnchorPosition).toInt(); @@ -563,7 +563,8 @@ void QAndroidInputContext::updateSelectionHandles() QPoint leftPoint(leftRect.bottomLeft().toPoint() * pixelDensity); QPoint righPoint(rightRect.bottomRight().toPoint() * pixelDensity); - QtAndroidInput::updateHandles(CursorHandleShowSelection, leftPoint, righPoint); + QtAndroidInput::updateHandles(CursorHandleShowSelection, leftPoint, righPoint, + query.value(Qt::ImCurrentSelection).toString().isRightToLeft()); if (m_cursorHandleShown == CursorHandleShowPopup) { // make sure the popup does not reappear when the selection menu closes -- cgit v1.2.3 From 97eec16e4ff6367c233f8ea6c4a343c286c3a514 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Fri, 9 Jun 2017 14:46:29 +0200 Subject: Android: fix missing wheel events Change-Id: I65b4f6a8fcbdad537a984064e332a4a1f34a265a Task-number: QTBUG-43669 Reviewed-by: BogDan Vatra --- src/plugins/platforms/android/androidjniinput.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/plugins/platforms/android') diff --git a/src/plugins/platforms/android/androidjniinput.cpp b/src/plugins/platforms/android/androidjniinput.cpp index 048be662be..32630003d1 100644 --- a/src/plugins/platforms/android/androidjniinput.cpp +++ b/src/plugins/platforms/android/androidjniinput.cpp @@ -173,6 +173,25 @@ namespace QtAndroidInput Qt::MouseButtons(Qt::LeftButton)); } + static void mouseWheel(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y, jfloat hdelta, jfloat vdelta) + { + if (m_ignoreMouseEvents) + return; + + QPoint globalPos(x,y); + QWindow *tlw = m_mouseGrabber.data(); + if (!tlw) + tlw = topLevelWindowAt(globalPos); + QPoint localPos = tlw ? (globalPos-tlw->position()) : globalPos; + QPoint angleDelta(hdelta * 120, vdelta * 120); + + QWindowSystemInterface::handleWheelEvent(tlw, + localPos, + globalPos, + QPoint(), + angleDelta); + } + static void longPress(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y) { QAndroidInputContext *inputContext = QAndroidInputContext::androidInputContext(); @@ -824,6 +843,7 @@ namespace QtAndroidInput {"mouseDown", "(III)V", (void *)mouseDown}, {"mouseUp", "(III)V", (void *)mouseUp}, {"mouseMove", "(III)V", (void *)mouseMove}, + {"mouseWheel", "(IIIFF)V", (void *)mouseWheel}, {"longPress", "(III)V", (void *)longPress}, {"isTabletEventSupported", "()Z", (void *)isTabletEventSupported}, {"tabletEvent", "(IIJIIIFFF)V", (void *)tabletEvent}, -- cgit v1.2.3