summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2018-03-22 15:08:10 +0100
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2018-04-17 12:55:06 +0000
commit49b4433adf254b81f8b7727fbcf88ce2a48100ba (patch)
treeb7981f3364ee345f9d46131ce50c0bd5d6a6ea8d /src
parent8e2a9705669e11a1510bca37121fc27cddd13007 (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.cpp12
-rw-r--r--src/gui/kernel/qplatformwindow.h1
-rw-r--r--src/plugins/platforms/cocoa/qnsview_drawing.mm6
-rw-r--r--src/plugins/platforms/ios/qiosscreen.mm9
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;
}