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