diff options
Diffstat (limited to 'src/plugins/platforms/xcb/qxcbwindow.cpp')
-rw-r--r-- | src/plugins/platforms/xcb/qxcbwindow.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 56c5c4836f..bf882bdf84 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -1122,7 +1122,17 @@ QXcbEGLSurface *QXcbWindow::eglSurface() const void QXcbWindow::handleExposeEvent(const xcb_expose_event_t *event) { QRect rect(event->x, event->y, event->width, event->height); - QWindowSystemInterface::handleSynchronousExposeEvent(window(), rect); + + if (m_exposeRegion.isEmpty()) + m_exposeRegion = rect; + else + m_exposeRegion |= rect; + + // if count is non-zero there are more expose events pending + if (event->count == 0) { + QWindowSystemInterface::handleSynchronousExposeEvent(window(), m_exposeRegion); + m_exposeRegion = QRegion(); + } } void QXcbWindow::handleClientMessageEvent(const xcb_client_message_event_t *event) |