From 076c03498f3615e68a0c056f2005165799160c49 Mon Sep 17 00:00:00 2001
From: mae <qt-info@nokia.com>
Date: Fri, 21 May 2010 16:06:31 +0200
Subject: [PATCH] Fix critical vertical block selection issue

Vertical block selections could be painted where there was no
selection, or they could jump randomly to columns futher right.

Reviewed-by: dt
---
 src/plugins/find/basetextfind.cpp         | 5 +++--
 src/plugins/texteditor/basetexteditor.cpp | 2 +-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/plugins/find/basetextfind.cpp b/src/plugins/find/basetextfind.cpp
index 1a9cbe3f5c4..d2ddfc04418 100644
--- a/src/plugins/find/basetextfind.cpp
+++ b/src/plugins/find/basetextfind.cpp
@@ -325,10 +325,11 @@ void BaseTextFind::defineFindScope()
             verticalBlockSelection = m_plaineditor->property("verticalBlockSelection").toInt();
 
         if (verticalBlockSelection) {
-            int findScopeFromColumn = qMin(m_findScopeStart.positionInBlock()+1,
+            QTextCursor findScopeVisualStart(document()->docHandle(), cursor.selectionStart());
+            int findScopeFromColumn = qMin(findScopeVisualStart.positionInBlock(),
                                          m_findScopeEnd.positionInBlock());
             int findScopeToColumn = findScopeFromColumn + verticalBlockSelection;
-            m_findScopeStart.setPosition(m_findScopeStart.block().position() + findScopeFromColumn - 1);
+            m_findScopeStart.setPosition(findScopeVisualStart.block().position() + findScopeFromColumn - 1);
             m_findScopeEnd.setPosition(m_findScopeEnd.block().position()
                                        + qMin(m_findScopeEnd.block().length()-1, findScopeToColumn));
             m_findScopeVerticalBlockSelection = verticalBlockSelection;
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index fca4b85065e..2f7b32c9183 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -2466,7 +2466,7 @@ void BaseTextEditor::paintEvent(QPaintEvent *e)
                 const QAbstractTextDocumentLayout::Selection &range = context.selections.at(i);
                 const int selStart = range.cursor.selectionStart() - blpos;
                 const int selEnd = range.cursor.selectionEnd() - blpos;
-                if (selStart <= bllen && selEnd >= 0
+                if (selStart < bllen && selEnd >= 0
                     && selEnd >= selStart) {
                     QTextLayout::FormatRange o;
                     o.start = selStart;
-- 
GitLab