diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/quicktemplates2/qquickpopup.cpp | 20 | ||||
-rw-r--r-- | src/quicktemplates2/qquickpopup_p_p.h | 1 |
2 files changed, 15 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(); } diff --git a/src/quicktemplates2/qquickpopup_p_p.h b/src/quicktemplates2/qquickpopup_p_p.h index 5e4e6c51..9ea5a7f0 100644 --- a/src/quicktemplates2/qquickpopup_p_p.h +++ b/src/quicktemplates2/qquickpopup_p_p.h @@ -190,6 +190,7 @@ public: bool hasBottomMargin; bool allowVerticalFlip; bool allowHorizontalFlip; + bool hadActiveFocusBeforeExitTransition; qreal x; qreal y; qreal effectiveX; |