diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2018-03-22 15:08:10 +0100 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2018-04-17 12:55:06 +0000 |
commit | 49b4433adf254b81f8b7727fbcf88ce2a48100ba (patch) | |
tree | b7981f3364ee345f9d46131ce50c0bd5d6a6ea8d /src | |
parent | 8e2a9705669e11a1510bca37121fc27cddd13007 (diff) |
Provide QPlatformWindow::hasPendingUpdateRequest() helper function
So that platform plugins don't need to dive into QWindowPrivate.
Change-Id: Ia2d94b3e9236e4a68857e6afe7af063f1b0d0aeb
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/kernel/qplatformwindow.cpp | 12 | ||||
-rw-r--r-- | src/gui/kernel/qplatformwindow.h | 1 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qnsview_drawing.mm | 6 | ||||
-rw-r--r-- | 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 @@ -749,6 +749,16 @@ void QPlatformWindow::requestUpdate() } /*! + 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. QPlatformWindow subclasses can re-implement this function to @@ -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; } |