diff options
-rw-r--r-- | src/quicktemplates2/qquickpopup.cpp | 5 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_dialog.qml | 18 |
2 files changed, 21 insertions, 2 deletions
diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index 6eb993fa..d28fc811 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -451,10 +451,11 @@ bool QQuickPopupPrivate::prepareExitTransition() if (transitionState == ExitTransition && transitionManager.isRunning()) return false; - if (transitionState != ExitTransition && !hadActiveFocusBeforeExitTransition) { + if (transitionState != ExitTransition) { // The setFocus(false) call below removes any active focus before we're // able to check it in finalizeExitTransition. - hadActiveFocusBeforeExitTransition = popupItem->hasActiveFocus(); + if (!hadActiveFocusBeforeExitTransition) + hadActiveFocusBeforeExitTransition = popupItem->hasActiveFocus(); if (focus) popupItem->setFocus(false); transitionState = ExitTransition; diff --git a/tests/auto/controls/data/tst_dialog.qml b/tests/auto/controls/data/tst_dialog.qml index f8bf5bb5..90f36659 100644 --- a/tests/auto/controls/data/tst_dialog.qml +++ b/tests/auto/controls/data/tst_dialog.qml @@ -440,6 +440,11 @@ TestCase { ApplicationWindow { property alias focusItemActiveFocus: item.activeFocus property alias focusDialogVisible: dialog.visible + function closeAndOpen() { + dialog.close() + dialog.open() + dialog.close() + } visible: true Item { id: item @@ -453,6 +458,12 @@ TestCase { if (!activeFocus) visible = false } + enter: Transition { + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 10 } + } + exit: Transition { + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 10 } + } } } } @@ -469,5 +480,12 @@ TestCase { window.focusDialogVisible = false tryCompare(window, "focusDialogVisible", false) tryCompare(window, "focusItemActiveFocus", true) + + window.focusDialogVisible = true + tryCompare(window, "focusDialogVisible", true) + tryCompare(window, "focusItemActiveFocus", false) + window.closeAndOpen() + tryCompare(window, "focusDialogVisible", false) + tryCompare(window, "focusItemActiveFocus", true) } } |