diff --git a/src/plugins/debugger/debuggeritem.cpp b/src/plugins/debugger/debuggeritem.cpp index 9ac30bbb7d4a060e4de5ba3c5fa10651ebf6d7c0..33396b84bef7c6c087c9e6f1e17ed8a38d7e0046 100644 --- a/src/plugins/debugger/debuggeritem.cpp +++ b/src/plugins/debugger/debuggeritem.cpp @@ -140,6 +140,14 @@ QStringList DebuggerItem::abiNames() const return list; } +bool DebuggerItem::operator==(const DebuggerItem &other) const +{ + return m_id == other.m_id + && m_isAutoDetected == other.m_isAutoDetected + && m_command == other.m_command + && m_abis == other.m_abis; +} + QVariantMap DebuggerItem::toMap() const { QVariantMap data; diff --git a/src/plugins/debugger/debuggeritem.h b/src/plugins/debugger/debuggeritem.h index 9809da22c7b01214f3e795dafda545c92d89e8fc..c2ef2a6fec70df1dc0e651fd2ebf5153d343c22b 100644 --- a/src/plugins/debugger/debuggeritem.h +++ b/src/plugins/debugger/debuggeritem.h @@ -82,6 +82,8 @@ public: QStringList abiNames() const; + bool operator==(const DebuggerItem &other) const; + private: QVariant m_id; QString m_displayName; diff --git a/src/plugins/debugger/debuggeritemmanager.cpp b/src/plugins/debugger/debuggeritemmanager.cpp index e9df26be1ef11be23af4de0ae35df0508565294a..55ea0762447cfd04b8057b1ea174316bcfb2b6e9 100644 --- a/src/plugins/debugger/debuggeritemmanager.cpp +++ b/src/plugins/debugger/debuggeritemmanager.cpp @@ -344,16 +344,28 @@ void DebuggerItemManager::saveDebuggers() QVariant DebuggerItemManager::registerDebugger(const DebuggerItem &item) { - if (findByCommand(item.command())) - return item.id(); + if (const DebuggerItem *orig = findById(item.id())) { + QVariant id = orig->id(); + if (*orig == item) + return id; + removeDebugger(id); + addDebugger(item); + emit m_instance->debuggerUpdated(id); + return id; + } - return addDebugger(item); + QVariant id = addDebugger(item); + emit m_instance->debuggerAdded(id); + return id; } void DebuggerItemManager::deregisterDebugger(const DebuggerItem &item) { - if (findByCommand(item.command())) + if (findById(item.id())) { + emit m_instance->aboutToRemoveDebugger(item.id()); removeDebugger(item.id()); + emit m_instance->removeDebugger(item.id()); + } } QVariant DebuggerItemManager::addDebugger(const DebuggerItem &item) diff --git a/src/plugins/debugger/debuggeritemmanager.h b/src/plugins/debugger/debuggeritemmanager.h index 057cfd58b12d05938a825d01dd8be48e54470679..63936354d86981745995c3d7160cf9edc026004b 100644 --- a/src/plugins/debugger/debuggeritemmanager.h +++ b/src/plugins/debugger/debuggeritemmanager.h @@ -70,6 +70,12 @@ public: static void removeDebugger(const QVariant &id); static QVariant addDebugger(const DebuggerItem &item); +signals: + void debuggerAdded(const QVariant &id); + void aboutToRemoveDebugger(const QVariant &id); + void debuggerRemoved(const QVariant &id); + void debuggerUpdated(const QVariant &id); + public slots: void saveDebuggers();