summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/kernel
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2021-09-15 13:19:00 +0200
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2021-09-15 18:53:57 +0200
commitbedc58869844cf3199f95d7960d7d74f99095a19 (patch)
tree9a4c4ee402cad289d761da497dd769339d35dae7 /tests/auto/widgets/kernel
parent83419fb8a3bae3e05000d2a97560c51c66d8256b (diff)
Always reset close-status of QWidget when trying to close
Move the status setting and resetting back into handleClose so that we don't end up with it being set if handleClose is never called in response to a close attempt. This can happen when QWindow's platform window has already been destroyed. Since QWindow::close handles that case gracefully and returns true, we can safely call it multiple times. Add test coverage to verify that we get exactly those close event calls that we want. Change-Id: Ica77bf17c26d923c3b79b1e5a688addbc88a6277 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'tests/auto/widgets/kernel')
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 0da8d2971b..0fd91ebcfa 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -11808,6 +11808,36 @@ void tst_QWidget::closeEvent()
widget.windowHandle()->close();
widget.windowHandle()->close();
QCOMPARE(widget.closeCount, 1);
+
+ CloseCountingWidget widget2;
+ widget2.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget2));
+ widget2.close();
+ widget2.close();
+ QCOMPARE(widget2.closeCount, 1);
+ widget2.closeCount = 0;
+
+ widget2.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget2));
+ widget2.close();
+ QCOMPARE(widget2.closeCount, 1);
+
+ CloseCountingWidget widget3;
+ widget3.close();
+ widget3.close();
+ QEXPECT_FAIL("", "Closing a widget without a window will unconditionally send close events", Continue);
+ QCOMPARE(widget3.closeCount, 0);
+
+ QWidget parent;
+ CloseCountingWidget child;
+ child.setParent(&parent);
+ parent.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&parent));
+ child.close();
+ QCOMPARE(child.closeCount, 1);
+ child.close();
+ QEXPECT_FAIL("", "Closing a widget without a window will unconditionally send close events", Continue);
+ QCOMPARE(child.closeCount, 1);
}
void tst_QWidget::closeWithChildWindow()