From 99435d5f0e2f6993df22965b38564cd73e3409f1 Mon Sep 17 00:00:00 2001
From: mae <qt-info@nokia.com>
Date: Wed, 9 Sep 2009 16:37:09 +0200
Subject: [PATCH] Make "Edit/Advanced/Clean_Whitespace work on the current
 selection (if there is one)

---
 src/plugins/texteditor/basetextdocument.cpp | 22 +++++++++++++--------
 src/plugins/texteditor/basetextdocument.h   |  2 +-
 src/plugins/texteditor/basetexteditor.cpp   |  2 +-
 3 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp
index b2b0e75eeea..6da82ccdf59 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 24dabd7a0aa..eaf37c91caf 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 a675ea4e8bc..cce27c4c21b 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)
-- 
GitLab