From 7fa8574d98bec3f0e9250bc9487f9b8f9ef1f792 Mon Sep 17 00:00:00 2001
From: mae <qt-info@nokia.com>
Date: Tue, 1 Dec 2009 15:55:55 +0100
Subject: [PATCH] fix extra area drawing with multi-line blocks when line wrap
 is enabled

The extra area only updated the current *line* when the cursor moved, not
the entire paragraph. This left bold line numbers behind. The fix adds
the required update region when the cursor position changes blocks.
---
 src/plugins/texteditor/basetexteditor.cpp | 19 ++++++++++++++++++-
 src/plugins/texteditor/basetexteditor_p.h |  1 +
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 8471ec947b9..db0fb807351 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -1479,7 +1479,8 @@ BaseTextEditorPrivate::BaseTextEditorPrivate()
     m_inBlockSelectionMode(false),
     m_lastEventWasBlockSelectionEvent(false),
     m_blockSelectionExtraX(0),
-    m_moveLineUndoHack(false)
+    m_moveLineUndoHack(false),
+    m_cursorBlockNumber(-1)
 {
 }
 
@@ -2781,6 +2782,22 @@ void BaseTextEditor::updateCurrentLineHighlight()
     }
 
     setExtraSelections(CurrentLineSelection, extraSelections);
+
+
+    // the extra area shows information for the entire current block, not just the currentline.
+    // This is why we must force a bigger update region.
+    int cursorBlockNumber = textCursor().blockNumber();
+    if (cursorBlockNumber != d->m_cursorBlockNumber) {
+        QPointF offset = contentOffset();
+        QTextBlock block = document()->findBlockByNumber(d->m_cursorBlockNumber);
+        if (block.isValid())
+            d->m_extraArea->update(blockBoundingGeometry(block).translated(offset).toAlignedRect());
+        block = document()->findBlockByNumber(cursorBlockNumber);
+        if (block.isValid())
+            d->m_extraArea->update(blockBoundingGeometry(block).translated(offset).toAlignedRect());
+        d->m_cursorBlockNumber = cursorBlockNumber;
+    }
+
 }
 
 void BaseTextEditor::slotCursorPositionChanged()
diff --git a/src/plugins/texteditor/basetexteditor_p.h b/src/plugins/texteditor/basetexteditor_p.h
index a1829e70f81..70fa38c759f 100644
--- a/src/plugins/texteditor/basetexteditor_p.h
+++ b/src/plugins/texteditor/basetexteditor_p.h
@@ -243,6 +243,7 @@ public:
     QTimer *m_highlightBlocksTimer;
 
     QPointer<BaseTextEditorAnimator> m_animator;
+    int m_cursorBlockNumber;
 
 };
 
-- 
GitLab