diff options
Diffstat (limited to 'src/widgets/kernel')
-rw-r--r-- | src/widgets/kernel/qwidget.cpp | 19 | ||||
-rw-r--r-- | src/widgets/kernel/qwidgetwindow.cpp | 28 |
2 files changed, 10 insertions, 37 deletions
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 8d5c3e415a..62d723bea5 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -3037,17 +3037,6 @@ void QWidget::overrideWindowState(Qt::WindowStates newstate) QApplication::sendEvent(this, &e); } -Qt::WindowState effectiveState(Qt::WindowStates state) -{ - if (state & Qt::WindowMinimized) - return Qt::WindowMinimized; - else if (state & Qt::WindowFullScreen) - return Qt::WindowFullScreen; - else if (state & Qt::WindowMaximized) - return Qt::WindowMaximized; - return Qt::WindowNoState; -} - /*! \fn void QWidget::setWindowState(Qt::WindowStates windowState) @@ -3089,19 +3078,17 @@ void QWidget::setWindowState(Qt::WindowStates newstate) data->window_state = newstate; data->in_set_window_state = 1; - Qt::WindowState newEffectiveState = effectiveState(newstate); - Qt::WindowState oldEffectiveState = effectiveState(oldstate); - if (isWindow() && newEffectiveState != oldEffectiveState) { + if (isWindow()) { // Ensure the initial size is valid, since we store it as normalGeometry below. if (!testAttribute(Qt::WA_Resized) && !isVisible()) adjustSize(); d->createTLExtra(); - if (oldEffectiveState == Qt::WindowNoState) + if (!(oldstate & (Qt::WindowMinimized | Qt::WindowMaximized | Qt::WindowFullScreen))) d->topData()->normalGeometry = geometry(); Q_ASSERT(windowHandle()); - windowHandle()->setWindowState(newEffectiveState); + windowHandle()->setWindowStates(newstate & ~Qt::WindowActive); } data->in_set_window_state = 0; diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp index 31f2d672bb..44fd4b6a80 100644 --- a/src/widgets/kernel/qwidgetwindow.cpp +++ b/src/widgets/kernel/qwidgetwindow.cpp @@ -726,8 +726,6 @@ void QWidgetWindow::repaintWindow() QWidgetBackingStore::UpdateNow, QWidgetBackingStore::BufferInvalid); } -Qt::WindowState effectiveState(Qt::WindowStates state); - // Store normal geometry used for saving application settings. void QWidgetWindow::updateNormalGeometry() { @@ -738,7 +736,7 @@ void QWidgetWindow::updateNormalGeometry() QRect normalGeometry; if (const QPlatformWindow *pw = handle()) normalGeometry = QHighDpi::fromNativePixels(pw->normalGeometry(), this); - if (!normalGeometry.isValid() && effectiveState(m_widget->windowState()) == Qt::WindowNoState) + if (!normalGeometry.isValid() && !(m_widget->windowState() & ~Qt::WindowActive)) normalGeometry = m_widget->geometry(); if (normalGeometry.isValid()) tle->normalGeometry = normalGeometry; @@ -930,30 +928,18 @@ void QWidgetWindow::handleWindowStateChangedEvent(QWindowStateChangeEvent *event // QWindow does currently not know 'active'. Qt::WindowStates eventState = event->oldState(); Qt::WindowStates widgetState = m_widget->windowState(); + Qt::WindowStates windowState = windowStates(); if (widgetState & Qt::WindowActive) eventState |= Qt::WindowActive; // 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: + if (windowState & Qt::WindowMinimized) { widgetState |= Qt::WindowMinimized; - break; - case Qt::WindowMaximized: - updateNormalGeometry(); - widgetState |= Qt::WindowMaximized; - widgetState &= ~(Qt::WindowMinimized | Qt::WindowFullScreen); - break; - case Qt::WindowFullScreen: - updateNormalGeometry(); - widgetState |= Qt::WindowFullScreen; - widgetState &= ~(Qt::WindowMinimized); - break; - case Qt::WindowActive: // Not handled by QWindow - break; + } else { + widgetState = windowState | (widgetState & Qt::WindowActive); + if (windowState) // Maximized or FullScreen + updateNormalGeometry(); } // Sent event if the state changed (that is, it is not triggered by |