diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp index b2b0e75eeea1e06f87fdc20fcd9e70a53f1f7fa0..6da82ccdf594ca4b9ddd8aebf9778c419a3c653e 100644 --- a/src/plugins/texteditor/basetextdocument.cpp +++ b/src/plugins/texteditor/basetextdocument.cpp @@ -301,13 +301,15 @@ void BaseTextDocument::setSyntaxHighlighter(QSyntaxHighlighter *highlighter) -void BaseTextDocument::cleanWhitespace() +void BaseTextDocument::cleanWhitespace(const QTextCursor &cursor) { - QTextCursor cursor(m_document); - cursor.beginEditBlock(); - cleanWhitespace(cursor, true, true); - ensureFinalNewLine(cursor); - cursor.endEditBlock(); + bool hasSelection = cursor.hasSelection(); + QTextCursor copyCursor = cursor; + copyCursor.beginEditBlock(); + cleanWhitespace(copyCursor, true, true); + if (!hasSelection) + ensureFinalNewLine(copyCursor); + copyCursor.endEditBlock(); } void BaseTextDocument::cleanWhitespace(QTextCursor& cursor, bool cleanIndentation, bool inEntireDocument) @@ -315,8 +317,12 @@ void BaseTextDocument::cleanWhitespace(QTextCursor& cursor, bool cleanIndentatio TextEditDocumentLayout *documentLayout = qobject_cast<TextEditDocumentLayout*>(m_document->documentLayout()); - QTextBlock block = m_document->firstBlock(); - while (block.isValid()) { + QTextBlock block = m_document->findBlock(cursor.selectionStart()); + QTextBlock end; + if (cursor.hasSelection()) + end = m_document->findBlock(cursor.selectionEnd()-1).next(); + + while (block.isValid() && block != end) { if (inEntireDocument || block.revision() > documentLayout->lastSaveRevision) { diff --git a/src/plugins/texteditor/basetextdocument.h b/src/plugins/texteditor/basetextdocument.h index 24dabd7a0aae064a070af48a60d637f6f9b672fa..eaf37c91caf2ae40acca18e649522dcdd07ff264 100644 --- a/src/plugins/texteditor/basetextdocument.h +++ b/src/plugins/texteditor/basetextdocument.h @@ -110,7 +110,7 @@ public: void reload(QTextCodec *codec); - void cleanWhitespace(); + void cleanWhitespace(const QTextCursor &cursor); signals: void titleChanged(QString title); diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index a675ea4e8bc5a58aa4ef528125846219a769448b..cce27c4c21b3a2ebf59a8e560abafe027f5dde51 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -833,7 +833,7 @@ void BaseTextEditor::moveLineUpDown(bool up) void BaseTextEditor::cleanWhitespace() { - d->m_document->cleanWhitespace(); + d->m_document->cleanWhitespace(textCursor()); } void BaseTextEditor::keyPressEvent(QKeyEvent *e)