From 49b4433adf254b81f8b7727fbcf88ce2a48100ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Thu, 22 Mar 2018 15:08:10 +0100 Subject: [PATCH] Provide QPlatformWindow::hasPendingUpdateRequest() helper function So that platform plugins don't need to dive into QWindowPrivate. Change-Id: Ia2d94b3e9236e4a68857e6afe7af063f1b0d0aeb Reviewed-by: Simon Hausmann --- src/gui/kernel/qplatformwindow.cpp | 12 ++++++++++++ src/gui/kernel/qplatformwindow.h | 1 + src/plugins/platforms/cocoa/qnsview_drawing.mm | 6 ++---- src/plugins/platforms/ios/qiosscreen.mm | 9 ++++----- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/gui/kernel/qplatformwindow.cpp b/src/gui/kernel/qplatformwindow.cpp index bc1aeb8217..9fe68bd564 100644 --- a/src/gui/kernel/qplatformwindow.cpp +++ b/src/gui/kernel/qplatformwindow.cpp @@ -748,6 +748,16 @@ void QPlatformWindow::requestUpdate() wp->updateTimer = w->startTimer(timeout, Qt::PreciseTimer); } +/*! + Returns true if the window has a pending update request. + + \sa requestUpdate(), deliverUpdateRequest() +*/ +bool QPlatformWindow::hasPendingUpdateRequest() const +{ + return qt_window_private(window())->updateRequestPending; +} + /*! Delivers an QEvent::UpdateRequest event to the window. @@ -757,6 +767,8 @@ void QPlatformWindow::requestUpdate() */ void QPlatformWindow::deliverUpdateRequest() { + Q_ASSERT(hasPendingUpdateRequest()); + QWindow *w = window(); QWindowPrivate *wp = qt_window_private(w); wp->updateRequestPending = false; diff --git a/src/gui/kernel/qplatformwindow.h b/src/gui/kernel/qplatformwindow.h index 2fe8ad94e6..2b353959c7 100644 --- a/src/gui/kernel/qplatformwindow.h +++ b/src/gui/kernel/qplatformwindow.h @@ -144,6 +144,7 @@ public: const QRect &initialGeometry, int defaultWidth, int defaultHeight); virtual void requestUpdate(); + bool hasPendingUpdateRequest() const; virtual void deliverUpdateRequest(); // Window property accessors. Platform plugins should use these diff --git a/src/plugins/platforms/cocoa/qnsview_drawing.mm b/src/plugins/platforms/cocoa/qnsview_drawing.mm index 3b72715616..fc5f806cb6 100644 --- a/src/plugins/platforms/cocoa/qnsview_drawing.mm +++ b/src/plugins/platforms/cocoa/qnsview_drawing.mm @@ -115,17 +115,15 @@ } #endif - QWindowPrivate *windowPrivate = qt_window_private(m_platformWindow->window()); - if (m_updateRequested) { - Q_ASSERT(windowPrivate->updateRequestPending); + Q_ASSERT(m_platformWindow->hasPendingUpdateRequest()); m_platformWindow->deliverUpdateRequest(); m_updateRequested = false; } else { m_platformWindow->handleExposeEvent(dirtyRegion); } - if (windowPrivate->updateRequestPending) { + if (m_platformWindow->hasPendingUpdateRequest()) { // A call to QWindow::requestUpdate was issued during event delivery above, // but AppKit will reset the needsDisplay state of the view after completing // the current display cycle, so we need to defer the request to redisplay. diff --git a/src/plugins/platforms/ios/qiosscreen.mm b/src/plugins/platforms/ios/qiosscreen.mm index 8a9a974825..96679eaccd 100644 --- a/src/plugins/platforms/ios/qiosscreen.mm +++ b/src/plugins/platforms/ios/qiosscreen.mm @@ -394,18 +394,17 @@ void QIOSScreen::deliverUpdateRequests() const if (platformScreenForWindow(window) != this) continue; - QWindowPrivate *wp = qt_window_private(window); - if (!wp->updateRequestPending) - continue; - QPlatformWindow *platformWindow = window->handle(); if (!platformWindow) continue; + if (!platformWindow->hasPendingUpdateRequest()) + continue; + platformWindow->deliverUpdateRequest(); // Another update request was triggered, keep the display link running - if (wp->updateRequestPending) + if (platformWindow->hasPendingUpdateRequest()) pauseUpdates = false; }