aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickpopup.cpp
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@qt.io>2016-05-18 11:06:37 +0200
committerMitch Curtis <mitch.curtis@qt.io>2016-05-19 07:07:47 +0000
commit9a1c9459a61cdd3ddb1bd0608a2caa9bae632e58 (patch)
treef9e30294481cf2d60fe42a42d4016be9becf3774 /src/quicktemplates2/qquickpopup.cpp
parent82c422b5b1c81f0572fdb2be1efba900200680d8 (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.cpp20
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();
}