diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp index 667ae31e9d8..6291a697cca 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp @@ -226,8 +226,10 @@ QString DeviceManager::settingsFilePath() void DeviceManager::addDevice(const IDevice::Ptr &device) { QTC_ASSERT(this != instance() || (device->isAutoDetected()), return); - QTC_ASSERT(!device->isAutoDetected() || !findAutoDetectedDevice(d->devices, device->type(), - device->fingerprint()), return); + + const int pos = indexForInternalId(device->internalId()); + if (pos >= 0) + removeDevice(pos); // Ensure uniqueness of name. QString name = device->displayName(); @@ -239,7 +241,8 @@ void DeviceManager::addDevice(const IDevice::Ptr &device) while (hasDevice(name)); } device->setDisplayName(name); - device->setInternalId(unusedId()); + if (pos < 0) + device->setInternalId(unusedId()); if (!defaultDevice(device->type())) d->defaultDevices.insert(device->type(), device->internalId()); d->devices << device; @@ -258,6 +261,9 @@ void DeviceManager::addDevice(const IDevice::Ptr &device) } emit deviceAdded(device); + if (pos >= 0) + emit deviceUpdated(device->internalId()); + emit updated(); } diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.h b/src/plugins/projectexplorer/devicesupport/devicemanager.h index c48b346ffcb..accd04b5202 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanager.h +++ b/src/plugins/projectexplorer/devicesupport/devicemanager.h @@ -73,6 +73,8 @@ public: static const IDeviceFactory *factoryForDeviceType(const QString &type); signals: + void deviceUpdated(ProjectExplorer::IDevice::Id id); + void deviceAdded(const QSharedPointer &device); void deviceRemoved(int index); void displayNameChanged(int index); diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp index 0b934501880..9c44012d6b6 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp @@ -153,6 +153,8 @@ namespace Internal { class IDevicePrivate { public: + IDevicePrivate() : internalId(IDevice::invalidId()) { } + QString displayName; QString type; IDevice::Origin origin;