From 0eff6dfe9c95514207d8af1ae0fbda5f5b13337a Mon Sep 17 00:00:00 2001 From: Bartlomiej Moskal Date: Wed, 18 Oct 2023 10:59:51 +0200 Subject: [PATCH] Android: Fix for hiding cursor handles After c80f262258b7846bf199887bcfdbb6dcfda6ad6f commit (which fixed selection for read-only texts), checking if m_handleMode is Hidden was removed. Because of that hidding cursor handle stopped work correctly. This commit brings back check if m_handleMode is Hidden. Also when only one handle is visible, it should be hidden within the next 5 seconds regardless for keyboard visibility. That is how it is handled in pure Android apps. Pick-to: 6.5 Fixes: QTBUG-117367 Change-Id: I0400f9604234bfad7fe17d74673ae9a93088bab4 Reviewed-by: Assam Boudjelthia Reviewed-by: Rami Potinkara (cherry picked from commit 9c8651478b482cb162a6fd92bb79f0d7f6a2573c) Reviewed-by: Qt Cherry-pick Bot --- src/plugins/platforms/android/qandroidinputcontext.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp index d2eb05c24d5..5b94e553ddf 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.cpp +++ b/src/plugins/platforms/android/qandroidinputcontext.cpp @@ -563,6 +563,11 @@ void QAndroidInputContext::updateSelectionHandles() bool readOnly = readOnlyVariant.toBool(); QPlatformWindow *qPlatformWindow = qGuiApp->focusWindow()->handle(); + if (!readOnly && ((m_handleMode & 0xff) == Hidden)) { + QtAndroidInput::updateHandles(Hidden); + return; + } + if ( cpos == anchor && (!readOnlyVariant.isValid() || readOnly)) { QtAndroidInput::updateHandles(Hidden); return; @@ -589,9 +594,8 @@ void QAndroidInputContext::updateSelectionHandles() if (!query.value(Qt::ImSurroundingText).toString().isEmpty()) buttons |= EditContext::SelectAllButton; QtAndroidInput::updateHandles(m_handleMode, editMenuPoint, buttons, cursorPointGlobal); - // The VK is hidden, reset the timer - if (m_hideCursorHandleTimer.isActive()) - m_hideCursorHandleTimer.start(); + m_hideCursorHandleTimer.start(); + return; }