summaryrefslogtreecommitdiff
path: root/debian/patches/0248-fix-qwidget-scroll-slowness.diff
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/0248-fix-qwidget-scroll-slowness.diff')
-rw-r--r--debian/patches/0248-fix-qwidget-scroll-slowness.diff39
1 files changed, 39 insertions, 0 deletions
diff --git a/debian/patches/0248-fix-qwidget-scroll-slowness.diff b/debian/patches/0248-fix-qwidget-scroll-slowness.diff
new file mode 100644
index 0000000..8e0353b
--- /dev/null
+++ b/debian/patches/0248-fix-qwidget-scroll-slowness.diff
@@ -0,0 +1,39 @@
+qt-bugs@ issue : N227210
+Trolltech task ID : 228764
+bugs.kde.org number : 167739
+applied: no
+author: Germain Garand <germain@ebooksfrance.org>
+
+QWidgetPrivate::scrollRect doesn't account for it's rect argument
+but rather examine the whole widget surface when pondering if
+it can apply accelerated blitting, resulting in unnecessarily slow
+and non-blitting QWidget::scroll calls.
+
+--- a/src/gui/painting/qbackingstore.cpp
++++ b/src/gui/painting/qbackingstore.cpp
+@@ -517,7 +517,8 @@ void QWidgetPrivate::scrollRect(const QR
+ }
+
+ bool overlapped = false;
+- bool accelerateScroll = accelEnv && isOpaque() && !(overlapped = isOverlapped(data.crect));
++ QRect cRect = clipRect();
++ bool accelerateScroll = accelEnv && isOpaque() && !(overlapped = isOverlapped(rect & cRect));
+
+ #if defined(Q_WS_QWS)
+ QWSWindowSurface *surface;
+@@ -552,13 +553,13 @@ void QWidgetPrivate::scrollRect(const QR
+ #ifdef Q_WS_QWS
+ QWSWindowSurface *surface = static_cast<QWSWindowSurface*>(wbs->windowSurface);
+ const QRegion clip = surface->clipRegion().translated(-toplevelOffset)
+- & clipRect();
++ & cRect;
+ const QRect scrollRect = rect & clip.boundingRect();
+ const QRect destRect = scrollRect.translated(dx, dy)
+ & scrollRect
+ & clip.boundingRect();
+ #else
+- QRect scrollRect = rect & clipRect();
++ QRect scrollRect = rect & cRect;
+
+ QRect destRect = scrollRect.isValid() ? scrollRect.translated(dx,dy).intersected(scrollRect) : QRect();
+