summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/kernel/qwidgetwindow_qpa.cpp34
1 files changed, 31 insertions, 3 deletions
diff --git a/src/widgets/kernel/qwidgetwindow_qpa.cpp b/src/widgets/kernel/qwidgetwindow_qpa.cpp
index 6dbd3c1f77..3cccc52311 100644
--- a/src/widgets/kernel/qwidgetwindow_qpa.cpp
+++ b/src/widgets/kernel/qwidgetwindow_qpa.cpp
@@ -454,10 +454,38 @@ void QWidgetWindow::handleWindowStateChangedEvent(QWindowStateChangeEvent *event
{
// QWindow does currently not know 'active'.
Qt::WindowStates eventState = event->oldState();
- if (m_widget->windowState() & Qt::WindowActive)
+ Qt::WindowStates widgetState = m_widget->windowState();
+ if (widgetState & Qt::WindowActive)
eventState |= Qt::WindowActive;
- QWindowStateChangeEvent widgetEvent(eventState);
- QGuiApplication::sendSpontaneousEvent(m_widget, &widgetEvent);
+
+ // Determine the new widget state, remember maximized/full screen
+ // during minimized.
+ switch (windowState()) {
+ case Qt::WindowNoState:
+ widgetState &= ~(Qt::WindowMinimized | Qt::WindowMaximized | Qt::WindowFullScreen);
+ break;
+ case Qt::WindowMinimized:
+ widgetState |= Qt::WindowMinimized;
+ break;
+ case Qt::WindowMaximized:
+ widgetState &= ~Qt::WindowFullScreen;
+ widgetState |= Qt::WindowMaximized;
+ break;
+ case Qt::WindowFullScreen:
+ widgetState &= ~Qt::WindowMaximized;
+ widgetState |= Qt::WindowFullScreen;
+ break;
+ case Qt::WindowActive: // Not handled by QWindow
+ break;
+ }
+
+ // Sent event if the state changed (that is, it is not triggered by
+ // QWidget::setWindowState(), which also sends an event to the widget).
+ if (widgetState != m_widget->data->window_state) {
+ m_widget->data->window_state = widgetState;
+ QWindowStateChangeEvent widgetEvent(eventState);
+ QGuiApplication::sendSpontaneousEvent(m_widget, &widgetEvent);
+ }
}
bool QWidgetWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)