From 0f0ab90cf60a7169c365c8c9f46b7ccd379a10d1 Mon Sep 17 00:00:00 2001 From: Bartlomiej Moskal Date: Tue, 1 Aug 2023 13:06:16 +0200 Subject: [PATCH] Android: Handle ImhNoTextHandles flag from InputMethodHints [0]Qt::InputMethodHints has a flag ImhNoTextHandles that was not handled. This flag should be considered when QAndroidInputContext is updating Text handles position. What is more, this flag can be used to fix the problem with visible text cursor out of the text object. [0]https://doc.qt.io/qt-6/qt.html#InputMethodHint-enum Task-number: QTBUG-115005 Pick-to: 6.6 6.5 Change-Id: Ie50b77d7afbadfebe73f10137f09da9560aea1ba Reviewed-by: Assam Boudjelthia Reviewed-by: Rami Potinkara --- .../platforms/android/qandroidinputcontext.cpp | 13 +++++++++++++ .../platforms/android/qandroidinputcontext.h | 1 + 2 files changed, 14 insertions(+) diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp index 5d539d7da4..d2eb05c24d 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.cpp +++ b/src/plugins/platforms/android/qandroidinputcontext.cpp @@ -531,12 +531,25 @@ void QAndroidInputContext::updateCursorPosition() } } +bool QAndroidInputContext::isImhNoTextHandlesSet() +{ + QSharedPointer query = focusObjectInputMethodQuery(); + if (query.isNull()) + return false; + return query->value(Qt::ImHints).toUInt() & Qt::ImhNoTextHandles; +} + void QAndroidInputContext::updateSelectionHandles() { static bool noHandles = qEnvironmentVariableIntValue("QT_QPA_NO_TEXT_HANDLES"); if (noHandles || !m_focusObject) return; + if (isImhNoTextHandlesSet()) { + QtAndroidInput::updateHandles(Hidden); + return; + } + auto im = qGuiApp->inputMethod(); QInputMethodQueryEvent query(Qt::ImCursorPosition | Qt::ImAnchorPosition | Qt::ImEnabled diff --git a/src/plugins/platforms/android/qandroidinputcontext.h b/src/plugins/platforms/android/qandroidinputcontext.h index c93aae142a..3fa07589f0 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.h +++ b/src/plugins/platforms/android/qandroidinputcontext.h @@ -113,6 +113,7 @@ private slots: void showInputPanelLater(Qt::ApplicationState); private: + bool isImhNoTextHandlesSet(); void sendInputMethodEvent(QInputMethodEvent *event); QSharedPointer focusObjectInputMethodQuery(Qt::InputMethodQueries queries = Qt::ImQueryAll); bool focusObjectIsComposing() const;