From 8f8ee59d2c95f123aa54914ccae9570f9fb52210 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= <thorbjorn.lindeijer@nokia.com>
Date: Thu, 21 Jan 2010 15:14:35 +0100
Subject: [PATCH] Made Join Lines work with a multi-line selection

---
 src/plugins/texteditor/basetexteditor.cpp | 41 ++++++++++++++---------
 1 file changed, 26 insertions(+), 15 deletions(-)

diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 6a7b725e592..a74e40cbe85 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -879,25 +879,36 @@ void BaseTextEditor::copyLineUpDown(bool up)
 
 void BaseTextEditor::joinLines()
 {
-    QTextCursor move = textCursor();
-    move.beginEditBlock();
+    QTextCursor cursor = textCursor();
+    QTextCursor start = cursor;
+    QTextCursor end = cursor;
 
-    move.movePosition(QTextCursor::NextBlock);
-    move.movePosition(QTextCursor::StartOfBlock);
-    move.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
-    QString cutLine = move.selectedText();
+    start.setPosition(cursor.selectionStart());
+    end.setPosition(cursor.selectionEnd() - 1);
 
-    // Collapse leading whitespaces to one or insert whitespace
-    cutLine.replace(QRegExp("^\\s*"), " ");
-    move.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor);
-    move.removeSelectedText();
+    int lineCount = qMax(1, end.blockNumber() - start.blockNumber());
+
+    cursor.beginEditBlock();
+    cursor.setPosition(cursor.selectionStart());
+    while (lineCount--) {
+        cursor.movePosition(QTextCursor::NextBlock);
+        cursor.movePosition(QTextCursor::StartOfBlock);
+        cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
+        QString cutLine = cursor.selectedText();
+
+        // Collapse leading whitespaces to one or insert whitespace
+        cutLine.replace(QRegExp("^\\s*"), " ");
+        cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor);
+        cursor.removeSelectedText();
 
-    move.movePosition(QTextCursor::PreviousBlock);
-    move.movePosition(QTextCursor::EndOfBlock);
+        cursor.movePosition(QTextCursor::PreviousBlock);
+        cursor.movePosition(QTextCursor::EndOfBlock);
 
-    move.insertText(cutLine);
-    move.endEditBlock();
-    setTextCursor(move);
+        cursor.insertText(cutLine);
+    }
+    cursor.endEditBlock();
+
+    setTextCursor(cursor);
 }
 
 void BaseTextEditor::moveLineUp()
-- 
GitLab