From cbc328e2d7a2378bed9fbf6be30e03295fe8944b Mon Sep 17 00:00:00 2001
From: Francois Ferrand <thetypz@gmail.com>
Date: Tue, 13 Mar 2012 15:13:05 +0100
Subject: [PATCH] CppEditor: fix indentation of auto-completed comments.

Fix indentation of auto-completed Doxygen comments, as well as auto-
leading characters from the block, to make it work with both spaces and
tabs.

Change-Id: I6c1c1665675cc25e01983e6d39b472f1b1c9683e
Reviewed-by: Leandro Melo <leandro.melo@nokia.com>
---
 src/plugins/cppeditor/cppeditor.cpp       |  5 ++++-
 src/plugins/cpptools/doxygengenerator.cpp | 12 +++---------
 src/plugins/cpptools/doxygengenerator.h   |  2 +-
 3 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index e6149b9bacd..1e7a3b891a7 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -2381,7 +2381,10 @@ bool CPPEditorWidget::handleDocumentationComment(QKeyEvent *e)
             if (followinPos == text.length()
                     || text.at(followinPos) != QLatin1Char('*')) {
                 QString newLine(QLatin1Char('\n'));
-                newLine.append(QString(offset, QLatin1Char(' ')));
+                QTextCursor c(cursor);
+                c.movePosition(QTextCursor::StartOfBlock);
+                c.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, offset);
+                newLine.append(c.selectedText());
                 if (text.at(offset) == QLatin1Char('/')) {
                     newLine.append(QLatin1String(" *"));
                 } else {
diff --git a/src/plugins/cpptools/doxygengenerator.cpp b/src/plugins/cpptools/doxygengenerator.cpp
index fe48422344e..5737192bf10 100644
--- a/src/plugins/cpptools/doxygengenerator.cpp
+++ b/src/plugins/cpptools/doxygengenerator.cpp
@@ -56,7 +56,6 @@ DoxygenGenerator::DoxygenGenerator()
     , m_generateBrief(true)
     , m_startComment(true)
     , m_style(QtStyle)
-    , m_commentOffset(0)
 {}
 
 void DoxygenGenerator::setStyle(DocumentationStyle style)
@@ -308,16 +307,11 @@ void DoxygenGenerator::assignCommentOffset(QTextCursor cursor)
             cursor.setPosition(cursor.anchor());
     }
 
-    m_commentOffset = cursor.positionInBlock();
+    cursor.movePosition(QTextCursor::StartOfBlock, QTextCursor::KeepAnchor);
+    m_commentOffset = cursor.selectedText();
 }
 
 QString DoxygenGenerator::offsetString() const
 {
-    // Note: Currently we don't indent comments, but simply preserve them in the original
-    // relative positions. What we do here is just to make sure that such positions are correct,
-    // although they might still be wrong from an indentation point of view (for instance,
-    // using spaces instead of tabs). Therefore, the content generated should still have
-    // the indentation strings fixed.
-
-    return QString(m_commentOffset, QLatin1Char(' '));
+    return m_commentOffset;
 }
diff --git a/src/plugins/cpptools/doxygengenerator.h b/src/plugins/cpptools/doxygengenerator.h
index a9d1cfbfa4d..77b6db8504e 100644
--- a/src/plugins/cpptools/doxygengenerator.h
+++ b/src/plugins/cpptools/doxygengenerator.h
@@ -95,7 +95,7 @@ private:
     bool m_startComment;
     DocumentationStyle m_style;
     CPlusPlus::Overview m_printer;
-    int m_commentOffset;
+    QString m_commentOffset;
 };
 
 } // CppTools
-- 
GitLab