From 078e4ef6c72bdc759b83b5f430390cdcdf7f4e9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Mon, 6 Jun 2011 15:54:11 +0200 Subject: Made tst_QWidget::updateWhileMinimized() pass. This requires adding a couple of window system interface events, namely Map, Unmap, and Expose. When a widget is minimized on X11 it is unmapped, and thus update requests should not be delivered. Instead the event will delivered when the widget is mapped, which causes an Expose event to be sent. The Unmap and Expose event thus need to be handled in QWidgetWindow, and Map is also added for the purpose of API symmetry (and for future needs). --- src/widgets/kernel/qwidgetwindow_qpa.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/widgets/kernel/qwidgetwindow_qpa.cpp') diff --git a/src/widgets/kernel/qwidgetwindow_qpa.cpp b/src/widgets/kernel/qwidgetwindow_qpa.cpp index dbb8112e43..786293a716 100644 --- a/src/widgets/kernel/qwidgetwindow_qpa.cpp +++ b/src/widgets/kernel/qwidgetwindow_qpa.cpp @@ -100,6 +100,19 @@ bool QWidgetWindow::event(QEvent *event) case QEvent::DragMove: case QEvent::Drop: handleDragEvent(event); + break; + + case QEvent::Map: + m_widget->setAttribute(Qt::WA_Mapped); + return true; + + case QEvent::Unmap: + m_widget->setAttribute(Qt::WA_Mapped, false); + return true; + + case QEvent::Expose: + handleExposeEvent(static_cast(event)); + return true; default: break; @@ -261,8 +274,19 @@ void QWidgetWindow::handleMoveEvent(QMoveEvent *event) void QWidgetWindow::handleResizeEvent(QResizeEvent *event) { + QSize oldSize = m_widget->data->crect.size(); + m_widget->data->crect = geometry(); QGuiApplication::sendSpontaneousEvent(m_widget, event); + + if (m_widget->d_func()->paintOnScreen()) { + QRegion updateRegion(geometry()); + if (m_widget->testAttribute(Qt::WA_StaticContents)) + updateRegion -= QRect(0, 0, oldSize.width(), oldSize.height()); + m_widget->d_func()->syncBackingStore(updateRegion); + } else { + m_widget->d_func()->syncBackingStore(); + } } void QWidgetWindow::handleCloseEvent(QCloseEvent *) @@ -345,5 +369,9 @@ void QWidgetWindow::handleDragEvent(QEvent *event) } } +void QWidgetWindow::handleExposeEvent(QExposeEvent *event) +{ + m_widget->d_func()->syncBackingStore(event->region); +} QT_END_NAMESPACE -- cgit v1.2.3