From cbcc2e518d7365f18211a6baecbaafb0b9bcce27 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= <thorbjorn.lindeijer@nokia.com>
Date: Fri, 13 Feb 2009 16:29:30 +0100
Subject: [PATCH] Don't move cursor on collapse/uncollapse

When the cursor isn't within the block that's being collapsed, it
shouldn't be moved. When it is, it will now move upwards instead of to
the start of the line.

Reviewed-by: mae
---
 src/plugins/texteditor/basetexteditor.cpp | 10 +++++-----
 src/plugins/texteditor/basetexteditor_p.h |  2 +-
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 88e145a0e58..d5b088396a5 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -2504,14 +2504,13 @@ void BaseTextEditor::extraAreaMouseEvent(QMouseEvent *e)
         }
     }
 
-
     if (e->type() == QEvent::MouseButtonPress || e->type() == QEvent::MouseButtonDblClick) {
         if (e->button() == Qt::LeftButton) {
             if (d->m_codeFoldingVisible && TextBlockUserData::canCollapse(cursor.block())
                 && !TextBlockUserData::hasClosingCollapseInside(cursor.block().next())
                 && collapseBox(cursor.block()).contains(e->pos())) {
-                setTextCursor(cursor);
                 toggleBlockVisible(cursor.block());
+                d->moveCursorVisible(false);
             } else if (d->m_marksVisible && e->pos().x() > markWidth) {
                 QTextCursor selection = cursor;
                 selection.setVisualNavigation(true);
@@ -3392,15 +3391,16 @@ void BaseTextEditor::setIfdefedOutBlocks(const QList<BaseTextEditor::BlockRange>
 }
 
 
-void BaseTextEditorPrivate::moveCursorVisible()
+void BaseTextEditorPrivate::moveCursorVisible(bool ensureVisible)
 {
     QTextCursor cursor = q->textCursor();
     if (!cursor.block().isVisible()) {
         cursor.setVisualNavigation(true);
-        cursor.movePosition(QTextCursor::PreviousBlock);
+        cursor.movePosition(QTextCursor::Up);
         q->setTextCursor(cursor);
     }
-    q->ensureCursorVisible();
+    if (ensureVisible)
+        q->ensureCursorVisible();
 }
 
 void BaseTextEditor::collapse()
diff --git a/src/plugins/texteditor/basetexteditor_p.h b/src/plugins/texteditor/basetexteditor_p.h
index 270b7444f42..9da5b27248c 100644
--- a/src/plugins/texteditor/basetexteditor_p.h
+++ b/src/plugins/texteditor/basetexteditor_p.h
@@ -218,7 +218,7 @@ public:
     QTextCursor m_findScope;
     QTextCursor m_selectBlockAnchor;
 
-    void moveCursorVisible();
+    void moveCursorVisible(bool ensureVisible = true);
 };
 
 } // namespace Internal
-- 
GitLab