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') 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