diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 081d343764ad98e709f05a7ffe81851dde15bbf1..7dcfcf5679cc37bb194032e825add4ed8e5a25d1 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -714,7 +714,10 @@ void BaseTextEditor::moveLineUpDown(bool up) { QTextCursor cursor = textCursor(); QTextCursor move = cursor; - move.beginEditBlock(); + if (d->m_moveLineUndoHack) + move.joinPreviousEditBlock(); + else + move.beginEditBlock(); bool hasSelection = cursor.hasSelection(); @@ -722,7 +725,7 @@ void BaseTextEditor::moveLineUpDown(bool up) move.setPosition(cursor.selectionStart()); move.movePosition(QTextCursor::StartOfBlock); move.setPosition(cursor.selectionEnd(), QTextCursor::KeepAnchor); - move.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); + move.movePosition(move.atBlockStart() ? QTextCursor::Left: QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); } else { move.movePosition(QTextCursor::StartOfBlock); move.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); @@ -760,6 +763,7 @@ void BaseTextEditor::moveLineUpDown(bool up) move.endEditBlock(); setTextCursor(move); + d->m_moveLineUndoHack = true; } void BaseTextEditor::cleanWhitespace() @@ -769,6 +773,7 @@ void BaseTextEditor::cleanWhitespace() void BaseTextEditor::keyPressEvent(QKeyEvent *e) { + d->m_moveLineUndoHack = false; d->clearVisibleCollapsedBlock(); QKeyEvent *original_e = e; @@ -1305,7 +1310,8 @@ BaseTextEditorPrivate::BaseTextEditorPrivate() m_actionHack(0), m_inBlockSelectionMode(false), m_lastEventWasBlockSelectionEvent(false), - m_blockSelectionExtraX(0) + m_blockSelectionExtraX(0), + m_moveLineUndoHack(false) { } diff --git a/src/plugins/texteditor/basetexteditor_p.h b/src/plugins/texteditor/basetexteditor_p.h index 9bff3da0f4147cf393db61ce0dae7c2099f197cd..844d377768953377d12bb0d5955578fedc127ffb 100644 --- a/src/plugins/texteditor/basetexteditor_p.h +++ b/src/plugins/texteditor/basetexteditor_p.h @@ -225,6 +225,7 @@ public: void clearBlockSelection(); QString copyBlockSelection(); void removeBlockSelection(const QString &text = QString()); + bool m_moveLineUndoHack; QTextCursor m_findScope; QTextCursor m_selectBlockAnchor;