diff options
Diffstat (limited to 'src/quicktemplates2/qquickpopup.cpp')
-rw-r--r-- | src/quicktemplates2/qquickpopup.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index 8d533888..33b2ac1a 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -470,7 +470,13 @@ void QQuickPopupPrivate::finalizeExitTransition() popupItem->setVisible(false); if (hadActiveFocusBeforeExitTransition && window) { - if (!qobject_cast<QQuickPopupItem *>(window->activeFocusItem())) { + // restore focus to the next popup in chain, or to the window content if there are no other popups open + QQuickPopup *popup = nullptr; + if (QQuickOverlay *overlay = QQuickOverlay::overlay(window)) + popup = QQuickOverlayPrivate::get(overlay)->stackingOrderPopups().value(0); + if (popup && popup->hasFocus()) { + popup->forceActiveFocus(); + } else { QQuickApplicationWindow *applicationWindow = qobject_cast<QQuickApplicationWindow*>(window); if (applicationWindow) applicationWindow->contentItem()->setFocus(true); |