From 7198b1ea8b754e99b5dd53fee6505039510f5e7c Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Fri, 18 Mar 2011 18:33:20 +0100
Subject: [PATCH] debugger: fix vanishing location mark in disassembler mode

Task-number: QTCREATORBUG-4157
---
 src/plugins/debugger/debuggerengine.cpp    |  1 +
 src/plugins/debugger/disassembleragent.cpp | 14 ++++++++++++--
 src/plugins/debugger/disassembleragent.h   |  1 +
 3 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 3c6e210ce13..e355de2de0d 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -246,6 +246,7 @@ public slots:
     void scheduleResetLocation()
     {
         m_stackHandler.scheduleResetLocation();
+        m_disassemblerAgent.scheduleResetLocation();
         m_locationTimer.setSingleShot(true);
         m_locationTimer.start(80);
     }
diff --git a/src/plugins/debugger/disassembleragent.cpp b/src/plugins/debugger/disassembleragent.cpp
index fa8f91d2e03..5b354aa1eaf 100644
--- a/src/plugins/debugger/disassembleragent.cpp
+++ b/src/plugins/debugger/disassembleragent.cpp
@@ -117,13 +117,15 @@ public:
     
     QHash<QString, DisassemblerLines> cache;
     QString mimeType;
+    bool m_resetLocationScheduled;
 };
 
 DisassemblerAgentPrivate::DisassemblerAgentPrivate()
   : editor(0),
     tryMixed(true),
     locationMark(new LocationMark2),
-    mimeType(_("text/x-qtcreator-generic-asm"))
+    mimeType(_("text/x-qtcreator-generic-asm")),
+    m_resetLocationScheduled(false)
 {
 }
 
@@ -162,11 +164,19 @@ void DisassemblerAgent::cleanup()
     d->cache.clear();
 }
 
+void DisassemblerAgent::scheduleResetLocation()
+{
+    d->m_resetLocationScheduled = true;
+}
+
 void DisassemblerAgent::resetLocation()
 {
     if (!d->editor)
         return;
-    d->editor->markableInterface()->removeMark(d->locationMark);
+    if (d->m_resetLocationScheduled) {
+        d->m_resetLocationScheduled = false;
+        d->editor->markableInterface()->removeMark(d->locationMark);
+    }
 }
 
 static QString frameKey(const Location &loc)
diff --git a/src/plugins/debugger/disassembleragent.h b/src/plugins/debugger/disassembleragent.h
index f2b69f8b05f..7c779315b3a 100644
--- a/src/plugins/debugger/disassembleragent.h
+++ b/src/plugins/debugger/disassembleragent.h
@@ -57,6 +57,7 @@ public:
     void setTryMixed(bool on);
     void setLocation(const Location &location);
     const Location &location() const;
+    void scheduleResetLocation();
     void resetLocation();
     void setContents(const DisassemblerLines &contents);
     void updateLocationMarker();
-- 
GitLab