From cebfd69ade5bf6f401d3d7b256e2073b0ac18183 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Tue, 8 May 2012 07:37:04 +0200 Subject: Don't handle window events after Qt::WA_DontShowOnScreen is set MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QWidget can set WA_DontShowOnScreen while visible, which generates events when the QWidgetWindow is hidden. This causes QWidgetWindow::handleExposeEvent() to clear the WA_Mapped flag which was set by QWidgetPrivate::show_sys(). Once WA_Mapped is cleared, the QWidget becomes non-functional, causing failures in at least tst_QGraphicsProxyWidget::paintEvent(), since paint events are not sent to widgets that don't have WA_Mapped set. Change-Id: I2d3e5b3baffb07ab73f41520771866f181260bd2 Reviewed-by: Friedemann Kleint Reviewed-by: Sean Harmer Reviewed-by: Samuel Rødal --- src/widgets/kernel/qwidgetwindow_qpa.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qwidgetwindow_qpa.cpp b/src/widgets/kernel/qwidgetwindow_qpa.cpp index 34b56b7954..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(event)); -- cgit v1.2.3