aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quickwidgets/qquickwidget.cpp30
-rw-r--r--tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp6
2 files changed, 35 insertions, 1 deletions
diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp
index edaa1352ae..7a4c18b579 100644
--- a/src/quickwidgets/qquickwidget.cpp
+++ b/src/quickwidgets/qquickwidget.cpp
@@ -1095,6 +1095,12 @@ void QQuickWidget::showEvent(QShowEvent *)
d->render(true);
else
triggerUpdate();
+ QWindowPrivate *offscreenPrivate = QWindowPrivate::get(d->offscreenWindow);
+ if (!offscreenPrivate->visible) {
+ offscreenPrivate->visible = true;
+ emit d->offscreenWindow->visibleChanged(true);
+ offscreenPrivate->updateVisibility();
+ }
}
/*! \reimp */
@@ -1102,6 +1108,12 @@ void QQuickWidget::hideEvent(QHideEvent *)
{
Q_D(QQuickWidget);
d->invalidateRenderControl();
+ QWindowPrivate *offscreenPrivate = QWindowPrivate::get(d->offscreenWindow);
+ if (offscreenPrivate->visible) {
+ offscreenPrivate->visible = false;
+ emit d->offscreenWindow->visibleChanged(false);
+ offscreenPrivate->updateVisibility();
+ }
}
/*! \reimp */
@@ -1151,6 +1163,20 @@ void QQuickWidget::focusOutEvent(QFocusEvent * event)
d->offscreenWindow->focusOutEvent(event);
}
+static Qt::WindowState resolveWindowState(Qt::WindowStates states)
+{
+ // No more than one of these 3 can be set
+ if (states & Qt::WindowMinimized)
+ return Qt::WindowMinimized;
+ if (states & Qt::WindowMaximized)
+ return Qt::WindowMaximized;
+ if (states & Qt::WindowFullScreen)
+ return Qt::WindowFullScreen;
+
+ // No state means "windowed" - we ignore Qt::WindowActive
+ return Qt::WindowNoState;
+}
+
/*! \reimp */
bool QQuickWidget::event(QEvent *e)
{
@@ -1184,6 +1210,10 @@ bool QQuickWidget::event(QEvent *e)
d->updatePosition();
break;
+ case QEvent::WindowStateChange:
+ d->offscreenWindow->setWindowState(resolveWindowState(windowState()));
+ break;
+
default:
break;
}
diff --git a/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp b/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp
index 7cc5dfa7c6..79ff18011d 100644
--- a/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp
+++ b/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp
@@ -75,8 +75,12 @@ void tst_qquickwidget::showHide()
window.show();
QVERIFY(QTest::qWaitForWindowExposed(&window, 5000));
+ QVERIFY(childView->quickWindow()->isVisible());
+ QVERIFY(childView->quickWindow()->visibility() != QWindow::Hidden);
- childView->hide();
+ window.hide();
+ QVERIFY(!childView->quickWindow()->isVisible());
+ QCOMPARE(childView->quickWindow()->visibility(), QWindow::Hidden);
}
void tst_qquickwidget::reparentAfterShow()