diff options
-rw-r--r-- | src/quick/items/qquickwindowattached.cpp | 16 | ||||
-rw-r--r-- | tests/auto/quick/qquickwindow/tst_qquickwindow.cpp | 5 |
2 files changed, 13 insertions, 8 deletions
diff --git a/src/quick/items/qquickwindowattached.cpp b/src/quick/items/qquickwindowattached.cpp index e33e32631c..b1961386bb 100644 --- a/src/quick/items/qquickwindowattached.cpp +++ b/src/quick/items/qquickwindowattached.cpp @@ -89,21 +89,21 @@ void QQuickWindowAttached::windowChanged(QQuickWindow *window) if (oldWindow) oldWindow->disconnect(this); - if (!window) - return; // No values to get, therefore nothing to emit - - if (!oldWindow || window->visibility() != oldWindow->visibility()) + if (!oldWindow || !window || window->visibility() != oldWindow->visibility()) emit visibilityChanged(); - if (!oldWindow || window->isActive() != oldWindow->isActive()) + if (!oldWindow || !window || window->isActive() != oldWindow->isActive()) emit activeChanged(); - if (!oldWindow || window->activeFocusItem() != oldWindow->activeFocusItem()) + if (!oldWindow || !window || window->activeFocusItem() != oldWindow->activeFocusItem()) emit activeFocusItemChanged(); emit contentItemChanged(); - if (!oldWindow || window->width() != oldWindow->width()) + if (!oldWindow || !window || window->width() != oldWindow->width()) emit widthChanged(); - if (!oldWindow || window->height() != oldWindow->height()) + if (!oldWindow || !window || window->height() != oldWindow->height()) emit heightChanged(); + if (!window) + return; + // QQuickWindowQmlImpl::visibilityChanged also exists, and window might even // be QQuickWindowQmlImpl, but that's not what we are connecting to. // So this is actual window state rather than a buffered or as-requested one. diff --git a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp index f53ade9541..c597cf03dd 100644 --- a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp +++ b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp @@ -2050,6 +2050,11 @@ void tst_qquickwindow::attachedProperty() QCOMPARE(text->property("contentItem").value<QQuickItem*>(), innerWindow->contentItem()); QCOMPARE(text->property("windowWidth").toInt(), innerWindow->width()); QCOMPARE(text->property("windowHeight").toInt(), innerWindow->height()); + + text->setParentItem(0); + QVERIFY(!text->property("contentItem").value<QQuickItem*>()); + QCOMPARE(text->property("windowWidth").toInt(), 0); + QCOMPARE(text->property("windowHeight").toInt(), 0); } class RenderJob : public QRunnable |