diff options
author | Kari Oikarinen <kari.oikarinen@qt.io> | 2019-11-26 14:49:20 +0200 |
---|---|---|
committer | Kari Oikarinen <kari.oikarinen@qt.io> | 2019-11-26 14:49:20 +0200 |
commit | 0d2fc12b65028b4f04bdace3991448813130ab48 (patch) | |
tree | 3666621eced42e3a2f663085a6fd969585edada9 /src/quicktemplates2/qquickpopup.cpp | |
parent | 546539562f2aff985e78f3c2426cb711a865ad65 (diff) | |
parent | f9877da406ad96d82becb15b6eef9b723b8807e3 (diff) |
Merge 5.14 into 5.14.0v5.14.0-rc2v5.14.0-rc1v5.14.0
Change-Id: Ieaab5ab5723972fe3cdcb2245f53caad1ee63a5e
Diffstat (limited to 'src/quicktemplates2/qquickpopup.cpp')
-rw-r--r-- | src/quicktemplates2/qquickpopup.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index f272c5cf..45cbecf4 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -485,11 +485,18 @@ void QQuickPopupPrivate::finalizeExitTransition() if (hadActiveFocusBeforeExitTransition && window) { // 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(); + QQuickPopup *nextFocusPopup = nullptr; + if (QQuickOverlay *overlay = QQuickOverlay::overlay(window)) { + const auto stackingOrderPopups = QQuickOverlayPrivate::get(overlay)->stackingOrderPopups(); + for (auto popup : stackingOrderPopups) { + if (QQuickPopupPrivate::get(popup)->transitionState != ExitTransition) { + nextFocusPopup = popup; + break; + } + } + } + if (nextFocusPopup && nextFocusPopup->hasFocus()) { + nextFocusPopup->forceActiveFocus(); } else { QQuickApplicationWindow *applicationWindow = qobject_cast<QQuickApplicationWindow*>(window); if (applicationWindow) |