aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickwindowmodule.cpp
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2020-04-22 14:35:57 +0200
committerMichal Klocek <michal.klocek@qt.io>2020-04-24 11:00:06 +0200
commit1dcd4ff086f55392f7d194e2e4a9e4cff599d0f6 (patch)
treec7e2eb85a9f4c4063049da5d816518d36aad70fc /src/quick/items/qquickwindowmodule.cpp
parent7c9a54907f44b7e30ceac1975edcfa7920ffafd8 (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.cpp16
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"