diff options
Diffstat (limited to 'src/widgets/kernel/qwidgetwindow_qpa.cpp')
-rw-r--r-- | src/widgets/kernel/qwidgetwindow_qpa.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/widgets/kernel/qwidgetwindow_qpa.cpp b/src/widgets/kernel/qwidgetwindow_qpa.cpp index 0a45cce62e..5639bac3ff 100644 --- a/src/widgets/kernel/qwidgetwindow_qpa.cpp +++ b/src/widgets/kernel/qwidgetwindow_qpa.cpp @@ -83,6 +83,12 @@ QObject *QWidgetWindow::focusObject() const bool QWidgetWindow::event(QEvent *event) { + if (m_widget->testAttribute(Qt::WA_DontShowOnScreen)) { + // \a event is uninteresting for QWidgetWindow, the event was probably + // generated before WA_DontShowOnScreen was set + return m_widget->event(event); + } + switch (event->type()) { case QEvent::Close: handleCloseEvent(static_cast<QCloseEvent *>(event)); @@ -327,10 +333,13 @@ void QWidgetWindow::updateGeometry() if (m_widget->testAttribute(Qt::WA_OutsideWSRange)) return; - QMargins margins = frameMargins(); + const QMargins margins = frameMargins(); m_widget->data->crect = geometry(); - m_widget->d_func()->topData()->frameStrut.setCoords(margins.left(), margins.top(), margins.right(), margins.bottom()); + QTLWExtra *te = m_widget->d_func()->topData(); + te->posIncludesFrame= false; + te->frameStrut.setCoords(margins.left(), margins.top(), margins.right(), margins.bottom()); + m_widget->data->fstrut_dirty = false; } void QWidgetWindow::handleMoveEvent(QMoveEvent *event) @@ -447,6 +456,8 @@ void QWidgetWindow::handleExposeEvent(QExposeEvent *event) } } +Qt::WindowState effectiveState(Qt::WindowStates state); + void QWidgetWindow::handleWindowStateChangedEvent(QWindowStateChangeEvent *event) { // QWindow does currently not know 'active'. @@ -465,10 +476,16 @@ void QWidgetWindow::handleWindowStateChangedEvent(QWindowStateChangeEvent *event widgetState |= Qt::WindowMinimized; break; case Qt::WindowMaximized: + if (effectiveState(widgetState) == Qt::WindowNoState) + if (QTLWExtra *tle = m_widget->d_func()->maybeTopData()) + tle->normalGeometry = m_widget->geometry(); widgetState &= ~Qt::WindowFullScreen; widgetState |= Qt::WindowMaximized; break; case Qt::WindowFullScreen: + if (effectiveState(widgetState) == Qt::WindowNoState) + if (QTLWExtra *tle = m_widget->d_func()->maybeTopData()) + tle->normalGeometry = m_widget->geometry(); widgetState &= ~Qt::WindowMaximized; widgetState |= Qt::WindowFullScreen; break; |