aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quicktemplates2/qquickpopup.cpp5
-rw-r--r--tests/auto/controls/data/tst_dialog.qml18
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)
}
}