aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Shaw <andy.shaw@qt.io>2020-09-15 08:49:29 +0200
committerAndy Shaw <andy.shaw@qt.io>2020-09-15 13:45:22 +0200
commitb0b11a6d4ae8a03998a5c84b91d9cb0b75387059 (patch)
tree67ac44bb160657e61cc131681297568e4a41f170
parent60d798f2a445552165fae3e622129f5356f61a0b (diff)
Allow the preparation of the exit transition even if it did have focus
This amends 1a5a0a591c35dcf498a232a802087683f2244ecb so that it only sets the hadActiveFocusBeforeExitTransition variable if it is false, ensuring that it is correctly handled later on if it is true from before. This handles a case of closing, opening and then closing again in one function call. Pick-to: 5.15 Task-number: QTBUG-85884 Change-Id: Ied4ca33045b005f5f666e63d85fb603e9350d982 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-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)
}
}