From 15fc9396b5065fd8146f7c3415bbd2ccb9d70091 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Wed, 8 Sep 2010 09:54:40 +0200
Subject: [PATCH] debugger: allow breakpoint removal also at the original
 position, not the "acknolegdged" one

Task-number: QTCREATORBUG-2264
---
 src/plugins/debugger/breakhandler.cpp |  9 ++++++---
 src/plugins/debugger/breakhandler.h   |  3 ++-
 src/plugins/debugger/breakpoint.cpp   | 16 ++++------------
 src/plugins/debugger/breakpoint.h     |  3 ++-
 4 files changed, 14 insertions(+), 17 deletions(-)

diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp
index f3302d3d791..5fb48023d71 100644
--- a/src/plugins/debugger/breakhandler.cpp
+++ b/src/plugins/debugger/breakhandler.cpp
@@ -571,17 +571,20 @@ void BreakHandler::removeAllBreakpoints()
     updateMarkers();
 }
 
-BreakpointData *BreakHandler::findBreakpoint(const QString &fileName, int lineNumber)
+BreakpointData *BreakHandler::findBreakpoint(const QString &fileName,
+    int lineNumber, bool useMarkerPosition)
 {
     foreach (BreakpointData *data, m_bp)
-        if (data->isLocatedAt(fileName, lineNumber))
+        if (data->isLocatedAt(fileName, lineNumber, useMarkerPosition))
             return data;
     return 0;
 }
 
 void BreakHandler::toggleBreakpoint(const QString &fileName, int lineNumber)
 {
-    BreakpointData *data = findBreakpoint(fileName, lineNumber);
+    BreakpointData *data = findBreakpoint(fileName, lineNumber, true);
+    if (!data)
+        data = findBreakpoint(fileName, lineNumber, false);
     if (data) {
         removeBreakpoint(data);
     } else {
diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h
index 270310e60f3..f5624d698c4 100644
--- a/src/plugins/debugger/breakhandler.h
+++ b/src/plugins/debugger/breakhandler.h
@@ -93,7 +93,8 @@ public:
     void storeToTemplate(BreakHandler *other);
     void toggleBreakpoint(const QString &fileName, int lineNumber);
     void toggleBreakpointEnabled(const QString &fileName, int lineNumber);
-    BreakpointData *findBreakpoint(const QString &fileName, int lineNumber);
+    BreakpointData *findBreakpoint(const QString &fileName, int lineNumber,
+        bool useMarkerPosition = true);
 
 public slots:
     void appendBreakpoint(BreakpointData *data);
diff --git a/src/plugins/debugger/breakpoint.cpp b/src/plugins/debugger/breakpoint.cpp
index 981aed0ba43..314ca87681b 100644
--- a/src/plugins/debugger/breakpoint.cpp
+++ b/src/plugins/debugger/breakpoint.cpp
@@ -304,19 +304,11 @@ QString BreakpointData::toString() const
     return rc;
 }
 
-bool BreakpointData::isLocatedAt(const QString &fileName_, int lineNumber_) const
+bool BreakpointData::isLocatedAt(const QString &fileName_, int lineNumber_, 
+    bool useMarkerPosition) const
 {
-    /*
-    if (lineNumber != QString::number(lineNumber_))
-        return false;
-    if (fileName == fileName_)
-        return true;
-    if (fileName_.endsWith(fileName))
-        return true;
-    return false;
-    */
-    return lineNumber_ == m_markerLineNumber
-        && fileNameMatch(fileName_, m_markerFileName);
+    int line = useMarkerPosition ? m_markerLineNumber : lineNumber.toInt();
+    return lineNumber_ == line && fileNameMatch(fileName_, m_markerFileName);
 }
 
 bool BreakpointData::isSimilarTo(const BreakpointData *needle) const
diff --git a/src/plugins/debugger/breakpoint.h b/src/plugins/debugger/breakpoint.h
index 7177c17142f..0ff1f4b8ef0 100644
--- a/src/plugins/debugger/breakpoint.h
+++ b/src/plugins/debugger/breakpoint.h
@@ -58,7 +58,8 @@ public:
     QString toString() const;
     BreakHandler *handler() { return m_handler; }
 
-    bool isLocatedAt(const QString &fileName, int lineNumber) const;
+    bool isLocatedAt(const QString &fileName, int lineNumber,
+        bool useMarkerPosition) const;
     bool isSimilarTo(const BreakpointData *needle) const;
     bool conditionsMatch() const;
 
-- 
GitLab