From f1de90c872f12876cd07b97ea5aa74fa83b8cd6e Mon Sep 17 00:00:00 2001
From: Erik Verbruggen <erik.verbruggen@nokia.com>
Date: Thu, 23 Sep 2010 18:22:07 +0200
Subject: [PATCH] C++ Editor: fixed cursor positioning after quickfix action.

---
 src/plugins/cppeditor/cppinsertdecldef.cpp    |  4 +++-
 src/plugins/texteditor/refactoringchanges.cpp | 22 ++++++++++++-------
 src/plugins/texteditor/refactoringchanges.h   | 14 ++++++++----
 3 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/src/plugins/cppeditor/cppinsertdecldef.cpp b/src/plugins/cppeditor/cppinsertdecldef.cpp
index c6aad18336b..9158c2b481c 100644
--- a/src/plugins/cppeditor/cppinsertdecldef.cpp
+++ b/src/plugins/cppeditor/cppinsertdecldef.cpp
@@ -95,7 +95,9 @@ public:
         targetFile.change(target);
         targetFile.indent(Utils::ChangeSet::Range(targetPosition2, targetPosition1));
 
-        refactoring->activateEditor(m_targetFileName, targetPosition1);
+        const int prefixLineCount = loc.prefix().count(QLatin1Char('\n'));
+        refactoring->activateEditor(m_targetFileName, loc.line() + prefixLineCount,
+                                    qMax(((int) loc.column()) - 1, 0));
     }
 
 private:
diff --git a/src/plugins/texteditor/refactoringchanges.cpp b/src/plugins/texteditor/refactoringchanges.cpp
index 4bf0be8bed8..3cc51184413 100644
--- a/src/plugins/texteditor/refactoringchanges.cpp
+++ b/src/plugins/texteditor/refactoringchanges.cpp
@@ -43,7 +43,16 @@ RefactoringChanges::RefactoringChanges()
 {}
 
 RefactoringChanges::~RefactoringChanges()
-{}
+{
+    if (!m_fileToOpen.isEmpty()) {
+        BaseTextEditor *editor = editorForFile(m_fileToOpen, true);
+        editor->gotoLine(m_lineToOpen, m_columnToOpen);
+
+        Core::EditorManager *editorManager = Core::EditorManager::instance();
+        editorManager->activateEditor(editor->editableInterface(),
+                                      Core::EditorManager::ModeSwitch);
+    }
+}
 
 BaseTextEditor *RefactoringChanges::editorForFile(const QString &fileName,
                                                   bool openIfClosed)
@@ -156,14 +165,11 @@ BaseTextEditor *RefactoringChanges::openEditor(const QString &fileName, int pos)
     return editor;
 }
 
-BaseTextEditor *RefactoringChanges::activateEditor(const QString &fileName, int pos)
+void RefactoringChanges::activateEditor(const QString &fileName, int line, int column)
 {
-    BaseTextEditor *editor = openEditor(fileName, pos);
-
-    Core::EditorManager *editorManager = Core::EditorManager::instance();
-    editorManager->activateEditor(editor->editableInterface(), Core::EditorManager::ModeSwitch);
-
-    return editor;
+    m_fileToOpen = fileName;
+    m_lineToOpen = line;
+    m_columnToOpen = column;
 }
 
 
diff --git a/src/plugins/texteditor/refactoringchanges.h b/src/plugins/texteditor/refactoringchanges.h
index 257c7163d14..09c6dc7dd14 100644
--- a/src/plugins/texteditor/refactoringchanges.h
+++ b/src/plugins/texteditor/refactoringchanges.h
@@ -105,11 +105,12 @@ public:
 
     BaseTextEditor *openEditor(const QString &fileName, int pos = -1);
 
-    /**
-     * \param fileName the file to activate the editor for
-     * \param pos, 0-based offset to put the cursor on, -1 means don't move
+    /*!
+       \param fileName the file to activate the editor for
+       \param line the line to put the cursor on (1-based)
+       \param column the column to put the cursor on (1-based)
      */
-    BaseTextEditor *activateEditor(const QString &fileName, int pos = -1);
+    void activateEditor(const QString &fileName, int line, int column);
 
 
 private:
@@ -121,6 +122,11 @@ private:
     virtual void fileChanged(const QString &fileName) = 0;
 
     friend class RefactoringFile;
+
+private:
+    QString m_fileToOpen;
+    int m_lineToOpen;
+    int m_columnToOpen;
 };
 
 } // namespace TextEditor
-- 
GitLab