From cc04261e78b366b4d134adfda96388b6289d6939 Mon Sep 17 00:00:00 2001
From: Daniel Teske <daniel.teske@nokia.com>
Date: Tue, 14 Feb 2012 15:08:32 +0100
Subject: [PATCH] Fix BaseTextmark lineNumber tracking

The following sequence would add the BaseTextmark to the wrong line:
1) Add a mark on line x
2) Move line x down by addign newlines above
3) Close and reopen the file
=> Mark would be readded to line x

Change-Id: Ia5d580b5893331974fb908e367b74df69fbb6572
Reviewed-by: Eike Ziller <eike.ziller@nokia.com>
---
 src/plugins/bookmarks/bookmark.cpp        | 1 +
 src/plugins/debugger/breakpointmarker.cpp | 1 +
 src/plugins/projectexplorer/taskhub.cpp   | 1 +
 src/plugins/texteditor/basetextmark.cpp   | 5 +++++
 src/plugins/texteditor/basetextmark.h     | 2 ++
 5 files changed, 10 insertions(+)

diff --git a/src/plugins/bookmarks/bookmark.cpp b/src/plugins/bookmarks/bookmark.cpp
index 71e27772021..4f2d7cf144e 100644
--- a/src/plugins/bookmarks/bookmark.cpp
+++ b/src/plugins/bookmarks/bookmark.cpp
@@ -62,6 +62,7 @@ void Bookmark::updateLineNumber(int lineNumber)
         m_lineNumber = lineNumber;
         m_manager->updateBookmark(this);
     }
+    BaseTextMark::updateLineNumber(lineNumber);
 }
 
 void Bookmark::updateBlock(const QTextBlock &block)
diff --git a/src/plugins/debugger/breakpointmarker.cpp b/src/plugins/debugger/breakpointmarker.cpp
index 962c613889e..fb1799cd124 100644
--- a/src/plugins/debugger/breakpointmarker.cpp
+++ b/src/plugins/debugger/breakpointmarker.cpp
@@ -68,6 +68,7 @@ void BreakpointMarker::removedFromEditor()
 void BreakpointMarker::updateLineNumber(int lineNumber)
 {
     breakHandler()->updateLineNumberFromMarker(m_id, lineNumber);
+    BaseTextMark::updateLineNumber(lineNumber);
 }
 
 } // namespace Internal
diff --git a/src/plugins/projectexplorer/taskhub.cpp b/src/plugins/projectexplorer/taskhub.cpp
index 6d1d73edfb7..6f223945235 100644
--- a/src/plugins/projectexplorer/taskhub.cpp
+++ b/src/plugins/projectexplorer/taskhub.cpp
@@ -56,6 +56,7 @@ private:
 void TaskMark::updateLineNumber(int lineNumber)
 {
     ProjectExplorerPlugin::instance()->taskHub()->updateTaskLineNumber(m_id, lineNumber);
+    BaseTextMark::updateLineNumber(lineNumber);
 }
 
 void TaskMark::removedFromEditor()
diff --git a/src/plugins/texteditor/basetextmark.cpp b/src/plugins/texteditor/basetextmark.cpp
index 04dabf8c790..422649c0490 100644
--- a/src/plugins/texteditor/basetextmark.cpp
+++ b/src/plugins/texteditor/basetextmark.cpp
@@ -128,6 +128,11 @@ BaseTextMark::~BaseTextMark()
     Internal::TextEditorPlugin::instance()->baseTextMarkRegistry()->remove(this);
 }
 
+void BaseTextMark::updateLineNumber(int lineNumber)
+{
+    m_line = lineNumber;
+}
+
 void BaseTextMark::updateMarker()
 {
     if (m_markableInterface)
diff --git a/src/plugins/texteditor/basetextmark.h b/src/plugins/texteditor/basetextmark.h
index 28f600a8e5f..69e031bbae4 100644
--- a/src/plugins/texteditor/basetextmark.h
+++ b/src/plugins/texteditor/basetextmark.h
@@ -61,6 +61,8 @@ public:
     BaseTextMark(const QString &fileName, int lineNumber);
     virtual ~BaseTextMark();
 
+    void updateLineNumber(int lineNumber);
+
     // call this if the icon has changed.
     void updateMarker();
 
-- 
GitLab