diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 6a7b725e59267559f82baa4772a154f77bb5e40d..a74e40cbe851622a37beaada1bb28171ddad3bf8 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()