diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 88e145a0e58c1b34271a1ea68d714b11794a3b71..d5b088396a53293f6ea855b07e58f6ea4be4f5e4 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 270b7444f42953a712557d52e9081d131b84fbb8..9da5b27248c56983873c3f7d88d1766740870319 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