From 2ba459c2adcaa4d0f865956048ac2e24f3fe6924 Mon Sep 17 00:00:00 2001
From: mae <qt-info@nokia.com>
Date: Mon, 14 Dec 2009 17:13:23 +0100
Subject: QPlainTextEdit scrolling issue with folded paragraphs

With Qt Creator, we could reproduce scrolling problems when paragraphs
were folded away. Effectively the first "visible" block could be an
invisible one, resulting in firstVisibleBlock() returning something bogus.
The result were drawing errors.

Reviewed-by: con
---
 src/gui/widgets/qplaintextedit.cpp | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/gui/widgets/qplaintextedit.cpp b/src/gui/widgets/qplaintextedit.cpp
index 89fe7b8..028ffe8 100644
--- a/src/gui/widgets/qplaintextedit.cpp
+++ b/src/gui/widgets/qplaintextedit.cpp
@@ -684,8 +684,12 @@ void QPlainTextEditPrivate::ensureVisible(int position, bool center, bool forceC
 
         qreal h = center ? line.naturalTextRect().center().y() : line.naturalTextRect().bottom();
 
+        QTextBlock previousVisibleBlock = block;
         while (h < height && block.previous().isValid()) {
-            block = block.previous();
+            previousVisibleBlock = block;
+            do {
+                block = block.previous();
+            } while (!block.isVisible() && block.previous().isValid());
             h += q->blockBoundingRect(block).height();
         }
 
@@ -699,8 +703,8 @@ void QPlainTextEditPrivate::ensureVisible(int position, bool center, bool forceC
             ++l;
         }
 
-        if (block.next().isValid() && l >= lineCount) {
-            block = block.next();
+        if (l >= lineCount) {
+            block = previousVisibleBlock;
             l = 0;
         }
         setTopBlock(block.blockNumber(), l);
-- 
cgit v0.12