diff options
Diffstat (limited to 'src/plugins/platforms/xcb/qxcbbackingstore.cpp')
-rw-r--r-- | src/plugins/platforms/xcb/qxcbbackingstore.cpp | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/plugins/platforms/xcb/qxcbbackingstore.cpp b/src/plugins/platforms/xcb/qxcbbackingstore.cpp index e93b36cb99..1579797f85 100644 --- a/src/plugins/platforms/xcb/qxcbbackingstore.cpp +++ b/src/plugins/platforms/xcb/qxcbbackingstore.cpp @@ -232,9 +232,6 @@ void QXcbShmImage::put(xcb_window_t window, const QPoint &target, const QRect &s Q_XCB_NOOP(connection()); m_dirty = m_dirty | source; - - xcb_flush(xcb_connection()); - Q_XCB_NOOP(connection()); } void QXcbShmImage::preparePaint(const QRegion ®ion) @@ -283,6 +280,11 @@ void QXcbBackingStore::beginPaint(const QRegion ®ion) } } +QImage QXcbBackingStore::toImage() const +{ + return m_image && m_image->image() ? *m_image->image() : QImage(); +} + void QXcbBackingStore::flush(QWindow *window, const QRegion ®ion, const QPoint &offset) { if (!m_image || m_image->size().isEmpty()) @@ -314,12 +316,32 @@ void QXcbBackingStore::flush(QWindow *window, const QRegion ®ion, const QPoin Q_XCB_NOOP(connection()); if (m_syncingResize) { + connection()->sync(); + m_syncingResize = false; + platformWindow->updateSyncRequestCounter(); + } else { xcb_flush(xcb_connection()); + } +} + +#ifndef QT_NO_OPENGL +void QXcbBackingStore::composeAndFlush(QWindow *window, const QRegion ®ion, const QPoint &offset, + QPlatformTextureList *textures, QOpenGLContext *context) +{ + QPlatformBackingStore::composeAndFlush(window, region, offset, textures, context); + + Q_XCB_NOOP(connection()); + + if (m_syncingResize) { + QXcbWindow *platformWindow = static_cast<QXcbWindow *>(window->handle()); connection()->sync(); m_syncingResize = false; platformWindow->updateSyncRequestCounter(); + } else { + xcb_flush(xcb_connection()); } } +#endif // QT_NO_OPENGL void QXcbBackingStore::resize(const QSize &size, const QRegion &) { |