summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/kernel/qwidget.cpp16
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp24
2 files changed, 39 insertions, 1 deletions
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index 66511b8d5b..423bb33cc2 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -8893,7 +8893,6 @@ bool QWidget::event(QEvent *event)
case QEvent::ModifiedChange:
case QEvent::MouseTrackingChange:
case QEvent::ParentChange:
- case QEvent::WindowStateChange:
case QEvent::LocaleChange:
case QEvent::MacSizeChange:
case QEvent::ContentsRectChange:
@@ -8902,6 +8901,21 @@ bool QWidget::event(QEvent *event)
changeEvent(event);
break;
+ case QEvent::WindowStateChange: {
+ const bool wasMinimized = static_cast<const QWindowStateChangeEvent *>(event)->oldState() & Qt::WindowMinimized;
+ if (wasMinimized != isMinimized()) {
+ if (wasMinimized) {
+ QShowEvent showEvent;
+ QCoreApplication::sendEvent(const_cast<QWidget *>(this), &showEvent);
+ } else {
+ QHideEvent hideEvent;
+ QCoreApplication::sendEvent(const_cast<QWidget *>(this), &hideEvent);
+ }
+ }
+ changeEvent(event);
+ }
+ break;
+
case QEvent::WindowActivate:
case QEvent::WindowDeactivate: {
if (isVisible() && !palette().isEqual(QPalette::Active, QPalette::Inactive))
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 0de006a041..34bb4cfdf6 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -272,6 +272,7 @@ private slots:
void showHideEvent_data();
void showHideEvent();
+ void showHideEventWhileMinimize();
void lostUpdatesOnHide();
@@ -4087,6 +4088,29 @@ void tst_QWidget::showHideEvent()
QCOMPARE(widget.numberOfHideEvents, expectedHideEvents);
}
+void tst_QWidget::showHideEventWhileMinimize()
+{
+ const QPlatformIntegration *pi = QGuiApplicationPrivate::platformIntegration();
+ if (!pi->hasCapability(QPlatformIntegration::MultipleWindows)
+ || !pi->hasCapability(QPlatformIntegration::NonFullScreenWindows)
+ || !pi->hasCapability(QPlatformIntegration::WindowManagement)) {
+ QSKIP("This test requires window management capabilities");
+ }
+ // QTBUG-41312, hide, show events should be received during minimized.
+ ShowHideEventWidget widget;
+ widget.setWindowTitle(__FUNCTION__);
+ widget.resize(m_testWidgetSize);
+ centerOnScreen(&widget);
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+ const int showEventsBeforeMinimize = widget.numberOfShowEvents;
+ const int hideEventsBeforeMinimize = widget.numberOfHideEvents;
+ widget.showMinimized();
+ QTRY_COMPARE(widget.numberOfHideEvents, hideEventsBeforeMinimize + 1);
+ widget.showNormal();
+ QTRY_COMPARE(widget.numberOfShowEvents, showEventsBeforeMinimize + 1);
+}
+
void tst_QWidget::update()
{
QTest::qWait(10); // Wait for the initStuff to do it's stuff.