diff options
-rw-r--r-- | src/gui/kernel/qwindowsysteminterface.cpp | 27 | ||||
-rw-r--r-- | src/gui/kernel/qwindowsysteminterface.h | 4 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowswindow.cpp | 6 | ||||
-rw-r--r-- | tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 6 |
4 files changed, 26 insertions, 17 deletions
diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index a18f6d8f17..87aa0c60b9 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -110,8 +110,8 @@ void QWindowSystemInterface::handleGeometryChange(QWindow *tlw, const QRect &new void QWindowSystemInterface::handleSynchronousGeometryChange(QWindow *tlw, const QRect &newRect) { - QWindowSystemInterfacePrivate::GeometryChangeEvent e(tlw,newRect); - QGuiApplicationPrivate::processWindowSystemEvent(&e); // send event immediately. + handleGeometryChange(tlw, newRect); + QWindowSystemInterface::flushWindowSystemEvents(); } void QWindowSystemInterface::handleCloseEvent(QWindow *tlw) @@ -126,8 +126,8 @@ void QWindowSystemInterface::handleCloseEvent(QWindow *tlw) void QWindowSystemInterface::handleSynchronousCloseEvent(QWindow *tlw) { if (tlw) { - QWindowSystemInterfacePrivate::CloseEvent e(tlw); - QGuiApplicationPrivate::processWindowSystemEvent(&e); + handleCloseEvent(tlw); + QWindowSystemInterface::flushWindowSystemEvents(); } } @@ -495,16 +495,24 @@ void QWindowSystemInterface::handleExposeEvent(QWindow *tlw, const QRegion ®i void QWindowSystemInterface::handleSynchronousExposeEvent(QWindow *tlw, const QRegion ®ion) { - QWindowSystemInterfacePrivate::ExposeEvent e(tlw, region); - QGuiApplicationPrivate::processWindowSystemEvent(&e); // send event immediately. + QWindowSystemInterface::handleExposeEvent(tlw, region); + QWindowSystemInterface::flushWindowSystemEvents(); +} + +void QWindowSystemInterface::flushWindowSystemEvents() +{ + sendWindowSystemEventsImplementation(QEventLoop::AllEvents); } bool QWindowSystemInterface::sendWindowSystemEvents(QEventLoop::ProcessEventsFlags flags) { - int nevents = 0; + QCoreApplication::sendPostedEvents(); // handle gui and posted events + return sendWindowSystemEventsImplementation(flags); +} - // handle gui and posted events - QCoreApplication::sendPostedEvents(); +bool QWindowSystemInterface::sendWindowSystemEventsImplementation(QEventLoop::ProcessEventsFlags flags) +{ + int nevents = 0; while (true) { QWindowSystemInterfacePrivate::WindowSystemEvent *event; @@ -609,5 +617,4 @@ void QWindowSystemInterface::handleTabletLeaveProximityEvent(int device, int poi handleTabletLeaveProximityEvent(time, device, pointerType, uid); } - QT_END_NAMESPACE diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h index fb1717b628..3be863bf78 100644 --- a/src/gui/kernel/qwindowsysteminterface.h +++ b/src/gui/kernel/qwindowsysteminterface.h @@ -179,7 +179,11 @@ public: // For event dispatcher implementations static bool sendWindowSystemEvents(QEventLoop::ProcessEventsFlags flags); + static void flushWindowSystemEvents(); static int windowSystemEventsQueued(); + +private: + static bool sendWindowSystemEventsImplementation(QEventLoop::ProcessEventsFlags flags); }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index 9d15240350..cdf1c2bf0f 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -795,11 +795,11 @@ void QWindowsWindow::setVisible(bool visible) if (m_data.hwnd) { if (visible) { show_sys(); - QWindowSystemInterface::handleSynchronousExposeEvent(window(), - QRect(QPoint(), geometry().size())); + QWindowSystemInterface::handleExposeEvent(window(), + QRect(QPoint(), geometry().size())); } else { hide_sys(); - QWindowSystemInterface::handleSynchronousExposeEvent(window(), QRegion()); + QWindowSystemInterface::handleExposeEvent(window(), QRegion()); } } } diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index a62f792b86..f5e5102844 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -1984,6 +1984,8 @@ void tst_QWidget::showFullScreen() QVERIFY(layouted.isFullScreen()); layouted.showFullScreen(); + if (m_platform == QStringLiteral("windows")) + QEXPECT_FAIL("", "QTBUG-26424", Continue); QVERIFY(!layouted.isMinimized()); QVERIFY(layouted.isFullScreen()); QVERIFY(layouted.isVisible()); @@ -3987,8 +3989,6 @@ void tst_QWidget::update() #ifdef Q_OS_MAC QEXPECT_FAIL(0, "Cocoa compositor says to paint this twice.", Continue); #endif - if (m_platform == QStringLiteral("windows")) - QEXPECT_FAIL("", "QTBUG-26424", Continue); QTRY_COMPARE(w.numPaintEvents, 1); QCOMPARE(w.visibleRegion(), QRegion(w.rect())); @@ -7594,8 +7594,6 @@ void tst_QWidget::doubleRepaint() widget.show(); QVERIFY(QTest::qWaitForWindowExposed(&widget)); QTest::qWait(10); - if (m_platform == QStringLiteral("windows")) - QEXPECT_FAIL("", "QTBUG-26424", Continue); QTRY_COMPARE(widget.numPaintEvents, expectedRepaints); widget.numPaintEvents = 0; |