diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2021-07-22 09:56:04 +0200 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2021-07-23 21:02:45 +0200 |
commit | bbcbb7c78f2f07e6c5e380ec5c018ac2a7abf292 (patch) | |
tree | d09275a89f3924935b2acdf640209af17cf8cb3a /src/quick/items/qquicktextinput.cpp | |
parent | 66a5167dab35aedf1c7bef3e0f8deea903c12a5e (diff) |
Pass the focus reason through to the control on mouse press
Otherwise, a TextInput item will always receive OtherFocusReason when
clicking into it.
Add a test that simulates focus changes with mouse and keys, records
the incoming focus events and verifies the correct focus reason is set
in the event. Qt Quick provides no mechanism to access the focus reason
from within QML (onActiveFocusChange only has a bool parameter, the
focusReason property exists only in QtQuickControl).
Task-number: QTBUG-75862
Pick-to: 6.2 6.1 5.15
Change-Id: Ifea95c7ef2ac88c6c8e8bbdc8d2dbe5205ff922e
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/quick/items/qquicktextinput.cpp')
-rw-r--r-- | src/quick/items/qquicktextinput.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp index f0cb66fa40..e5922df623 100644 --- a/src/quick/items/qquicktextinput.cpp +++ b/src/quick/items/qquicktextinput.cpp @@ -1584,7 +1584,7 @@ void QQuickTextInput::mousePressEvent(QMouseEvent *event) d->moveCursor(cursor, mark); if (d->focusOnPress && !qGuiApp->styleHints()->setFocusOnTouchRelease()) - ensureActiveFocus(); + ensureActiveFocus(Qt::MouseFocusReason); event->setAccepted(true); } @@ -1636,7 +1636,7 @@ void QQuickTextInput::mouseReleaseEvent(QMouseEvent *event) #endif if (d->focusOnPress && qGuiApp->styleHints()->setFocusOnTouchRelease()) - ensureActiveFocus(); + ensureActiveFocus(Qt::MouseFocusReason); if (!event->isAccepted()) QQuickImplicitSizeItem::mouseReleaseEvent(event); @@ -1871,10 +1871,10 @@ void QQuickTextInput::invalidateFontCaches() d->m_textLayout.engine()->resetFontEngineCache(); } -void QQuickTextInput::ensureActiveFocus() +void QQuickTextInput::ensureActiveFocus(Qt::FocusReason reason) { bool hadActiveFocus = hasActiveFocus(); - forceActiveFocus(); + forceActiveFocus(reason); #if QT_CONFIG(im) Q_D(QQuickTextInput); // re-open input panel on press if already focused |