diff --git a/qrenderdoc/Code/Interface/PersistantConfig.cpp b/qrenderdoc/Code/Interface/PersistantConfig.cpp index 0d76687e8..7ded03c40 100644 --- a/qrenderdoc/Code/Interface/PersistantConfig.cpp +++ b/qrenderdoc/Code/Interface/PersistantConfig.cpp @@ -170,10 +170,14 @@ void PersistantConfig::applyValues(const QVariantMap &values) void PersistantConfig::AddAndroidHosts() { + QMap oldHosts; for(int i = RemoteHosts.count() - 1; i >= 0; i--) { if(RemoteHosts[i]->IsHostADB()) - delete RemoteHosts.takeAt(i); + { + RemoteHost *host = RemoteHosts.takeAt(i); + oldHosts[host->Hostname] = host; + } } QString adbExePath = @@ -191,8 +195,16 @@ void PersistantConfig::AddAndroidHosts() RENDERDOC_EnumerateAndroidDevices(&androidHosts); for(const QString &hostName : ToQStr(androidHosts).split(QLatin1Char(','), QString::SkipEmptyParts)) { - RemoteHost *host = new RemoteHost(); - host->Hostname = lit("adb:") + hostName; + RemoteHost *host = NULL; + + QString fullHostname = lit("adb:") + hostName; + + if(oldHosts.contains(fullHostname)) + host = oldHosts.take(fullHostname); + else + host = new RemoteHost(); + + host->Hostname = fullHostname; rdctype::str friendly; RENDERDOC_GetAndroidFriendlyName(hostName.toUtf8().data(), friendly); host->FriendlyName = ToQStr(friendly); @@ -200,6 +212,14 @@ void PersistantConfig::AddAndroidHosts() host->RunCommand = lit("org.renderdoc.renderdoccmd"); RemoteHosts.push_back(host); } + + // delete any leftovers + QMapIterator i(oldHosts); + while(i.hasNext()) + { + i.next(); + delete i.value(); + } } PersistantConfig::~PersistantConfig()