aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/items/qquickwindowmodule.cpp10
-rw-r--r--tests/auto/quick/qquickwindow/data/changeVisibilityInCompleted.qml47
-rw-r--r--tests/auto/quick/qquickwindow/tst_qquickwindow.cpp23
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()
{