diff options
author | Liang Qi <liang.qi@qt.io> | 2018-02-02 09:50:10 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2018-02-02 09:50:10 +0100 |
commit | 2e65f6c2a5d84f4369245cabdc03eca4c19851f0 (patch) | |
tree | ae662f1aca8dc42d4fbb309681c3051d6201ceb6 /src/quick/items/qquickwindowmodule.cpp | |
parent | a8cff469b6f9055f084c31514481d08c11b5303b (diff) | |
parent | 6958308c09ceda855a30c5a2d491f078c5104071 (diff) |
Merge remote-tracking branch 'origin/5.9' into 5.10
Change-Id: I41ca9120a470a905c2f5c168c1de4cf970fa0fff
Diffstat (limited to 'src/quick/items/qquickwindowmodule.cpp')
-rw-r--r-- | src/quick/items/qquickwindowmodule.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/quick/items/qquickwindowmodule.cpp b/src/quick/items/qquickwindowmodule.cpp index 6165ce1ba1..c1e4bce12f 100644 --- a/src/quick/items/qquickwindowmodule.cpp +++ b/src/quick/items/qquickwindowmodule.cpp @@ -123,7 +123,13 @@ void QQuickWindowQmlImpl::componentComplete() { Q_D(QQuickWindowQmlImpl); d->complete = true; - if (transientParent() && !transientParent()->isVisible()) { + QQuickItem *itemParent = qmlobject_cast<QQuickItem *>(QObject::parent()); + if (itemParent && !itemParent->window()) { + qCDebug(lcTransient) << "window" << title() << "has invisible Item parent" << itemParent << "transientParent" + << transientParent() << "declared visibility" << d->visibility << "; delaying show"; + connect(itemParent, &QQuickItem::windowChanged, this, + &QQuickWindowQmlImpl::setWindowVisibility, Qt::QueuedConnection); + } else if (transientParent() && !transientParent()->isVisible()) { connect(transientParent(), &QQuickWindow::visibleChanged, this, &QQuickWindowQmlImpl::setWindowVisibility, Qt::QueuedConnection); } else { @@ -137,9 +143,10 @@ void QQuickWindowQmlImpl::setWindowVisibility() if (transientParent() && !transientParent()->isVisible()) return; - if (sender()) { - disconnect(transientParent(), &QWindow::visibleChanged, this, - &QQuickWindowQmlImpl::setWindowVisibility); + if (QQuickItem *senderItem = qmlobject_cast<QQuickItem *>(sender())) { + disconnect(senderItem, &QQuickItem::windowChanged, this, &QQuickWindowQmlImpl::setWindowVisibility); + } else if (sender()) { + disconnect(transientParent(), &QWindow::visibleChanged, this, &QQuickWindowQmlImpl::setWindowVisibility); } // We have deferred window creation until we have the full picture of what |