summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/kernel/qwidget
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2020-02-13 09:14:09 +0100
committerAlexandru Croitor <alexandru.croitor@qt.io>2020-02-13 18:31:40 +0100
commit6b2535ea15cdbdb2355416b604f072fc13ff36b2 (patch)
tree4bf1560bab77c8b315850c5337ba31a0ea87b5f0 /tests/auto/widgets/kernel/qwidget
parent54c2cebabdda0280b8443c6947b6fee02445e138 (diff)
parent67491e2df5357706dbf88ddaf1f030ff095b4528 (diff)
Merge remote-tracking branch 'origin/5.15' into dev
Conflicts: examples/widgets/graphicsview/boxes/scene.h src/corelib/Qt5CoreMacros.cmake src/corelib/Qt6CoreMacros.cmake src/network/ssl/qsslsocket.cpp src/network/ssl/qsslsocket.h src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp src/testlib/CMakeLists.txt src/testlib/.prev_CMakeLists.txt tests/auto/corelib/tools/qscopeguard/tst_qscopeguard.cpp Disabled building manual tests with CMake for now, because qmake doesn't do it, and it confuses people. Done-With: Alexandru Croitor <alexandru.croitor@qt.io> Done-With: Volker Hilsheimer <volker.hilsheimer@qt.io> Change-Id: I865ae347bd01f4e59f16d007b66d175a52f1f152
Diffstat (limited to 'tests/auto/widgets/kernel/qwidget')
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index c015bf85d0..9c16b1a00a 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -409,6 +409,8 @@ private slots:
void closeEvent();
void closeWithChildWindow();
+ void winIdAfterClose();
+
private:
bool ensureScreenSize(int width, int height);
@@ -11309,5 +11311,54 @@ void tst_QWidget::closeWithChildWindow()
QVERIFY(!childWidget->isVisible());
}
+class WinIdChangeSpy : public QObject
+{
+ Q_OBJECT
+public:
+ QWidget *widget = nullptr;
+ WId winId = 0;
+ explicit WinIdChangeSpy(QWidget *w, QObject *parent = nullptr)
+ : QObject(parent)
+ , widget(w)
+ , winId(widget->winId())
+ {
+ }
+
+public slots:
+ bool eventFilter(QObject *obj, QEvent *event) override
+ {
+ if (obj == widget) {
+ if (event->type() == QEvent::WinIdChange) {
+ winId = widget->winId();
+ return true;
+ }
+ }
+ return false;
+ }
+};
+
+void tst_QWidget::winIdAfterClose()
+{
+ auto widget = new QWidget;
+ auto notifier = new QObject(widget);
+ auto deleteWidget = new QWidget(new QWidget(widget));
+ auto spy = new WinIdChangeSpy(deleteWidget);
+ deleteWidget->installEventFilter(spy);
+ connect(notifier, &QObject::destroyed, [&] { delete deleteWidget; });
+
+ widget->setAttribute(Qt::WA_NativeWindow);
+ widget->windowHandle()->create();
+ widget->show();
+
+ QVERIFY(QTest::qWaitForWindowExposed(widget));
+ QVERIFY(spy->winId);
+
+ widget->windowHandle()->close();
+ delete widget;
+
+ QCOMPARE(spy->winId, WId(0));
+ delete spy;
+}
+
QTEST_MAIN(tst_QWidget)
#include "tst_qwidget.moc"