diff options
author | Michal Klocek <michal.klocek@qt.io> | 2020-04-22 14:35:57 +0200 |
---|---|---|
committer | Michal Klocek <michal.klocek@qt.io> | 2020-04-24 11:00:06 +0200 |
commit | 1dcd4ff086f55392f7d194e2e4a9e4cff599d0f6 (patch) | |
tree | c7e2eb85a9f4c4063049da5d816518d36aad70fc /src/quick/items/qquickwindowmodule.cpp | |
parent | 7c9a54907f44b7e30ceac1975edcfa7920ffafd8 (diff) |
Fix visibility of qml window in qquickwidget
Add handling for the case where transient window
is a offscreen window from qquickwidget.
Fixes: QTBUG-82815
Change-Id: Ia121c8477afab8f69e28da4dbdd836f9c7243b2b
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/quick/items/qquickwindowmodule.cpp')
-rw-r--r-- | src/quick/items/qquickwindowmodule.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/quick/items/qquickwindowmodule.cpp b/src/quick/items/qquickwindowmodule.cpp index ee90af4341..ad0aa53f72 100644 --- a/src/quick/items/qquickwindowmodule.cpp +++ b/src/quick/items/qquickwindowmodule.cpp @@ -39,6 +39,7 @@ #include "qquickwindowmodule_p.h" #include "qquickwindowattached_p.h" +#include "qquickrendercontrol.h" #include "qquickscreen_p.h" #include "qquickview_p.h" #include <QtQuick/QQuickWindow> @@ -83,7 +84,7 @@ void QQuickWindowQmlImpl::setVisible(bool visible) { Q_D(QQuickWindowQmlImpl); d->visible = visible; - if (d->complete && (!transientParent() || transientParent()->isVisible())) + if (d->complete && (!transientParent() || transientParentVisible())) QQuickWindow::setVisible(visible); } @@ -142,7 +143,7 @@ void QQuickWindowQmlImpl::componentComplete() void QQuickWindowQmlImpl::setWindowVisibility() { Q_D(QQuickWindowQmlImpl); - if (transientParent() && !transientParent()->isVisible()) + if (transientParent() && !transientParentVisible()) return; if (QQuickItem *senderItem = qmlobject_cast<QQuickItem *>(sender())) { @@ -196,6 +197,17 @@ void QQuickWindowQmlImpl::setScreen(QObject *screen) QWindow::setScreen(screenWrapper ? screenWrapper->wrappedScreen() : nullptr); } +bool QQuickWindowQmlImpl::transientParentVisible() +{ + Q_ASSERT(transientParent()); + if (!transientParent()->isVisible()) { + // handle case where transient parent is offscreen window + QWindow *rw = QQuickRenderControl::renderWindowFor(qobject_cast<QQuickWindow*>(transientParent())); + return rw && rw->isVisible(); + } + return true; +} + QT_END_NAMESPACE #include "moc_qquickwindowmodule_p.cpp" |