From 212f18bebfbd8c1da3f33b8c253342cd395a2a5a Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Wed, 14 Apr 2010 12:58:39 +0200
Subject: [PATCH] Avoid messing up navigation history from the vcs editors.

Reviewed-by: Friedemann Kleint
---
 src/plugins/vcsbase/vcsbaseeditor.cpp | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp
index af1af499241..67b3e80901b 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.cpp
+++ b/src/plugins/vcsbase/vcsbaseeditor.cpp
@@ -293,7 +293,7 @@ TextEditor::BaseTextEditorEditable *VCSBaseEditor::createEditableInterface()
         // Diff: set up diff file browsing
         VCSBaseDiffEditorEditable *de = new VCSBaseDiffEditorEditable(this, d->m_parameters);
         QComboBox *diffBrowseComboBox = de->diffFileBrowseComboBox();
-        connect(diffBrowseComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotDiffBrowse(int)));
+        connect(diffBrowseComboBox, SIGNAL(activated(int)), this, SLOT(slotDiffBrowse(int)));
         editable = de;
     } else {
         editable = new VCSBaseEditorEditable(this, d->m_parameters);
@@ -337,10 +337,15 @@ void VCSBaseEditor::slotDiffBrowse(int index)
     // goto diffed file as indicated by index/line number
     if (index < 0 || index >= d->m_diffSections.size())
         return;
-    const int lineNumber = d->m_diffSections.at(index);
-    Core::EditorManager *editorManager = Core::EditorManager::instance();
-    editorManager->addCurrentPositionToNavigationHistory();
-    gotoLine(lineNumber + 1, 0); // TextEdit uses 1..n convention
+    const int lineNumber = d->m_diffSections.at(index) + 1; // TextEdit uses 1..n convention
+    // check if we need to do something, especially to avoid messing up navigation history
+    int currentLine, currentColumn;
+    convertPosition(position(), &currentLine, &currentColumn);
+    if (lineNumber != currentLine) {
+        Core::EditorManager *editorManager = Core::EditorManager::instance();
+        editorManager->addCurrentPositionToNavigationHistory();
+        gotoLine(lineNumber, 0);
+    }
 }
 
 // Locate a line number in the list of diff sections.
-- 
GitLab