diff options
author | Mitch Curtis <mitch.curtis@qt.io> | 2016-05-18 11:06:37 +0200 |
---|---|---|
committer | Mitch Curtis <mitch.curtis@qt.io> | 2016-05-19 07:07:47 +0000 |
commit | 9a1c9459a61cdd3ddb1bd0608a2caa9bae632e58 (patch) | |
tree | f9e30294481cf2d60fe42a42d4016be9becf3774 /src/quicktemplates2/qquickpopup.cpp | |
parent | 82c422b5b1c81f0572fdb2be1efba900200680d8 (diff) |
Don't restore focus to contentItem when a focusless popup was closed
For example, a ToolTip shouldn't affect focus when it closes.
Task-number: QTBUG-53420
Task-number: QTBUG-53451
Change-Id: Ic945e98a2ffd86e9f9f06724b16e5f240c3f94de
Reviewed-by: Liang Qi <liang.qi@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickpopup.cpp')
-rw-r--r-- | src/quicktemplates2/qquickpopup.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index 9279b261..cb13d7b6 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -131,6 +131,7 @@ QQuickPopupPrivate::QQuickPopupPrivate() , hasBottomMargin(false) , allowVerticalFlip(false) , allowHorizontalFlip(false) + , hadActiveFocusBeforeExitTransition(false) , x(0) , y(0) , effectiveX(0) @@ -208,8 +209,12 @@ void QQuickPopupPrivate::prepareExitTransition() Q_Q(QQuickPopup); if (window && !qobject_cast<QQuickApplicationWindow *>(window)) window->removeEventFilter(q); - if (focus) + if (focus) { + // The setFocus(false) call below removes any active focus before we're + // able to check it in finalizeExitTransition. + hadActiveFocusBeforeExitTransition = popupItem->hasActiveFocus(); popupItem->setFocus(false); + } emit q->aboutToHide(); } @@ -230,13 +235,16 @@ void QQuickPopupPrivate::finalizeExitTransition(bool hide) popupItem->setVisible(false); } - QQuickApplicationWindow *applicationWindow = qobject_cast<QQuickApplicationWindow*>(window); - if (applicationWindow) - applicationWindow->contentItem()->setFocus(true); - else if (window) - window->contentItem()->setFocus(true); + if (hadActiveFocusBeforeExitTransition) { + QQuickApplicationWindow *applicationWindow = qobject_cast<QQuickApplicationWindow*>(window); + if (applicationWindow) + applicationWindow->contentItem()->setFocus(true); + else if (window) + window->contentItem()->setFocus(true); + } visible = false; + hadActiveFocusBeforeExitTransition = false; emit q->visibleChanged(); emit q->closed(); } |