diff options
-rw-r--r-- | src/quick/items/qquickwindowmodule.cpp | 10 | ||||
-rw-r--r-- | tests/auto/quick/qquickwindow/data/changeVisibilityInCompleted.qml | 47 | ||||
-rw-r--r-- | tests/auto/quick/qquickwindow/tst_qquickwindow.cpp | 23 |
3 files changed, 74 insertions, 6 deletions
diff --git a/src/quick/items/qquickwindowmodule.cpp b/src/quick/items/qquickwindowmodule.cpp index 124df8f676..c624d162a9 100644 --- a/src/quick/items/qquickwindowmodule.cpp +++ b/src/quick/items/qquickwindowmodule.cpp @@ -77,18 +77,16 @@ QQuickWindowQmlImpl::QQuickWindowQmlImpl(QWindow *parent) void QQuickWindowQmlImpl::setVisible(bool visible) { Q_D(QQuickWindowQmlImpl); - if (!d->complete) - d->visible = visible; - else if (!transientParent() || transientParent()->isVisible()) + d->visible = visible; + if (d->complete && (!transientParent() || transientParent()->isVisible())) QQuickWindow::setVisible(visible); } void QQuickWindowQmlImpl::setVisibility(Visibility visibility) { Q_D(QQuickWindowQmlImpl); - if (!d->complete) - d->visibility = visibility; - else + d->visibility = visibility; + if (d->complete) QQuickWindow::setVisibility(visibility); } diff --git a/tests/auto/quick/qquickwindow/data/changeVisibilityInCompleted.qml b/tests/auto/quick/qquickwindow/data/changeVisibilityInCompleted.qml new file mode 100644 index 0000000000..48c4d1d69f --- /dev/null +++ b/tests/auto/quick/qquickwindow/data/changeVisibilityInCompleted.qml @@ -0,0 +1,47 @@ +import QtQuick 2.0 +import QtQuick.Window 2.1 + +Window { + width: 200 + height: 200 + + property var winVisible: subwin1 + property var winVisibility: subwin2 + + Rectangle { + anchors.fill: parent + color:"green" + } + + Window { + id: subwin1 + width: 200 + height: 200 + + visible: false + + Rectangle { + anchors.fill: parent + color:"red" + } + Component.onCompleted: { + subwin1.visible = true + } + } + Window { + id: subwin2 + width: 200 + height: 200 + + visible: true + visibility: Window.Maximized + + Rectangle { + anchors.fill: parent + color:"blue" + } + Component.onCompleted: { + subwin2.visibility = Window.Windowed + } + } +} diff --git a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp index ff8c80e3ae..526f61ceb5 100644 --- a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp +++ b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp @@ -346,6 +346,7 @@ private slots: void crashWhenHoverItemDeleted(); void unloadSubWindow(); + void changeVisibilityInCompleted(); void qobjectEventFilter_touch(); void qobjectEventFilter_key(); @@ -1847,6 +1848,28 @@ void tst_qquickwindow::unloadSubWindow() QTRY_VERIFY(transient.isNull() || !transient->isVisible()); } +// QTBUG-52573 +void tst_qquickwindow::changeVisibilityInCompleted() +{ + QQmlEngine engine; + QQmlComponent component(&engine); + component.loadUrl(testFileUrl("changeVisibilityInCompleted.qml")); + QScopedPointer<QQuickWindow> window(qobject_cast<QQuickWindow *>(component.create())); + QVERIFY(!window.isNull()); + window->setTitle(QTest::currentTestFunction()); + window->show(); + QTest::qWaitForWindowExposed(window.data()); + QPointer<QQuickWindow> winVisible; + QTRY_VERIFY(winVisible = window->property("winVisible").value<QQuickWindow*>()); + QPointer<QQuickWindow> winVisibility; + QTRY_VERIFY(winVisibility = window->property("winVisibility").value<QQuickWindow*>()); + QTest::qWaitForWindowExposed(winVisible); + QTest::qWaitForWindowExposed(winVisibility); + + QVERIFY(winVisible->isVisible()); + QCOMPARE(winVisibility->visibility(), QWindow::Windowed); +} + // QTBUG-32004 void tst_qquickwindow::qobjectEventFilter_touch() { |