diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2018-02-05 16:17:31 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2018-02-06 09:06:01 +0000 |
commit | f301decbe39d253cc979774e2f32cde9c1212e4c (patch) | |
tree | fa542a3a4878b5d367aacccc8ebf8887c647b9e6 | |
parent | 7eb5f8a54bdcf0520a7aa0a2874a059060866097 (diff) |
Popup: fix restoring focus for popups that did not request focus
When a popup closes, if it has active focus, it should restore focus
back to where it was regardless of whether the popup originally
requested focus. Even if a popup does not request focus on open, it
may gain focus programmatically or when a control with click-focus is
clicked, for example.
Task-number: QTBUG-66113
Change-Id: I9a7c467abe781bbef390d74898d13b9a30b2695b
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r-- | src/quicktemplates2/qquickpopup.cpp | 9 | ||||
-rw-r--r-- | tests/auto/qquickpopup/tst_qquickpopup.cpp | 10 |
2 files changed, 14 insertions, 5 deletions
diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index bb5ce660..0ef4bd64 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -443,12 +443,11 @@ bool QQuickPopupPrivate::prepareExitTransition() return false; if (transitionState != ExitTransition) { - if (focus) { - // The setFocus(false) call below removes any active focus before we're - // able to check it in finalizeExitTransition. - hadActiveFocusBeforeExitTransition = popupItem->hasActiveFocus(); + // The setFocus(false) call below removes any active focus before we're + // able to check it in finalizeExitTransition. + hadActiveFocusBeforeExitTransition = popupItem->hasActiveFocus(); + if (focus) popupItem->setFocus(false); - } transitionState = ExitTransition; emit q->aboutToHide(); } diff --git a/tests/auto/qquickpopup/tst_qquickpopup.cpp b/tests/auto/qquickpopup/tst_qquickpopup.cpp index 3f4b2d13..b113e5ec 100644 --- a/tests/auto/qquickpopup/tst_qquickpopup.cpp +++ b/tests/auto/qquickpopup/tst_qquickpopup.cpp @@ -521,6 +521,16 @@ void tst_QQuickPopup::activeFocusOnClose1() nonFocusedPopup->close(); QVERIFY(!nonFocusedPopup->isVisible()); QVERIFY(focusedPopup->hasActiveFocus()); + + // QTBUG-66113: force active focus on a popup that did not request focus + nonFocusedPopup->open(); + nonFocusedPopup->forceActiveFocus(); + QVERIFY(nonFocusedPopup->isVisible()); + QVERIFY(nonFocusedPopup->hasActiveFocus()); + + nonFocusedPopup->close(); + QVERIFY(!nonFocusedPopup->isVisible()); + QVERIFY(focusedPopup->hasActiveFocus()); } void tst_QQuickPopup::activeFocusOnClose2() |