diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index 2c1327d02fd056096ca4c1b9ec2a9716667d1180..f66e8031f183aca6b7186141ec08ad72a64a8e4e 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -37,6 +37,7 @@ #include "debuggerstringutils.h" #include "stackframe.h" +#include <extensionsystem/invoker.h> #include <utils/hostosinfo.h> #include <utils/qtcassert.h> @@ -1258,6 +1259,25 @@ void BreakHandler::updateLineNumberFromMarker(BreakpointModelId id, int lineNumb emit layoutChanged(); } +void BreakHandler::changeLineNumberFromMarker(BreakpointModelId id, int lineNumber) +{ + // We need to delay this as it is called from a marker which will be destroyed. + ExtensionSystem::InvokerBase invoker; + invoker.addArgument(id); + invoker.addArgument(lineNumber); + invoker.setConnectionType(Qt::QueuedConnection); + invoker.invoke(this, "changeLineNumberFromMarkerHelper"); + QTC_CHECK(invoker.wasSuccessful()); +} + +void BreakHandler::changeLineNumberFromMarkerHelper(BreakpointModelId id, int lineNumber) +{ + BreakpointParameters data = breakpointData(id); + data.lineNumber = lineNumber; + removeBreakpoint(id); + appendBreakpoint(data); +} + BreakpointModelIds BreakHandler::allBreakpointIds() const { BreakpointModelIds ids; diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h index 750d2faff3c36e1b3b668989e69c9caa15b2ca35..7e6eb46a9bd4bb9f8f968bf4864471821b43ae5d 100644 --- a/src/plugins/debugger/breakhandler.h +++ b/src/plugins/debugger/breakhandler.h @@ -133,6 +133,7 @@ public: void setEnabled(BreakpointModelId id, bool on); void updateFileNameFromMarker(BreakpointModelId id, const QString &fileName); void updateLineNumberFromMarker(BreakpointModelId id, int lineNumber); + void changeLineNumberFromMarker(BreakpointModelId id, int lineNumber); void setMarkerFileAndLine(BreakpointModelId id, const QString &fileName, int lineNumber); bool isOneShot(BreakpointModelId id) const; @@ -189,6 +190,7 @@ private: void loadBreakpoints(); void saveBreakpoints(); void cleanupBreakpoint(BreakpointModelId id); + Q_SLOT void changeLineNumberFromMarkerHelper(Debugger::Internal::BreakpointModelId id, int lineNumber); struct BreakpointItem { diff --git a/src/plugins/debugger/breakpointmarker.cpp b/src/plugins/debugger/breakpointmarker.cpp index 412bc5ade1f1461d11a97728e3ecd2b1a295723d..0821ec1063fdfabbd07dfc6eec89b45eec2ce69c 100644 --- a/src/plugins/debugger/breakpointmarker.cpp +++ b/src/plugins/debugger/breakpointmarker.cpp @@ -68,6 +68,11 @@ void BreakpointMarker::updateLineNumber(int lineNumber) breakHandler()->updateLineNumberFromMarker(m_id, lineNumber); } +void BreakpointMarker::dragToLine(int lineNumber) +{ + breakHandler()->changeLineNumberFromMarker(m_id, lineNumber); +} + void BreakpointMarker::updateFileName(const QString &fileName) { BaseTextMark::updateFileName(fileName); diff --git a/src/plugins/debugger/breakpointmarker.h b/src/plugins/debugger/breakpointmarker.h index 9f6f083828c6d8726deaeaf9df4f2a87ddb72261..0a972d43756f2d4ac9356653b325a74312029226 100644 --- a/src/plugins/debugger/breakpointmarker.h +++ b/src/plugins/debugger/breakpointmarker.h @@ -46,6 +46,8 @@ public: void removedFromEditor(); void updateLineNumber(int lineNumber); void updateFileName(const QString &fileName); + bool isDraggable() const { return true; } + void dragToLine(int lineNumber); private: BreakpointModelId m_id;