From: Samuel Rødal Date: Mon, 19 Sep 2011 11:42:20 +0000 (+0200) Subject: Make sure to clip in QXcbBackingStore::flush() X-Git-Tag: qt-v5.0.0-alpha1~3544 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=003060e2928209b8028fa176b6c8b19777f1617b;p=profile%2Fivi%2Fqtbase.git Make sure to clip in QXcbBackingStore::flush() Clip to image and window dimensions to prevent X errors. Change-Id: I7fa581217444e00d6eb83ac356c600f86ae03636 Reviewed-on: http://codereview.qt-project.org/5140 Reviewed-by: Qt Sanity Bot Reviewed-by: Holger Ihrig --- diff --git a/src/plugins/platforms/xcb/qxcbbackingstore.cpp b/src/plugins/platforms/xcb/qxcbbackingstore.cpp index fadcb4d..df6cf31 100644 --- a/src/plugins/platforms/xcb/qxcbbackingstore.cpp +++ b/src/plugins/platforms/xcb/qxcbbackingstore.cpp @@ -251,16 +251,25 @@ void QXcbBackingStore::endPaint(const QRegion &) void QXcbBackingStore::flush(QWindow *window, const QRegion ®ion, const QPoint &offset) { - QRect bounds = region.boundingRect(); - if (!m_image || m_image->size().isEmpty()) return; + QSize imageSize = m_image->size(); + + QRegion clipped = region; + clipped &= QRect(0, 0, window->width(), window->height()); + clipped &= QRect(0, 0, imageSize.width(), imageSize.height()).translated(-offset); + + QRect bounds = clipped.boundingRect(); + + if (bounds.isNull()) + return; + Q_XCB_NOOP(connection()); QXcbWindow *platformWindow = static_cast(window->handle()); - QVector rects = region.rects(); + QVector rects = clipped.rects(); for (int i = 0; i < rects.size(); ++i) m_image->put(platformWindow->xcb_window(), rects.at(i).topLeft(), rects.at(i).translated(offset));