diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index ea6f27e3529..ef90a78b582 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -139,10 +139,21 @@ public: DockerDevicePrivate *m_dev = nullptr; }; +void DockerDeviceSettings::fromMap(const Store &map) +{ + DeviceSettings::fromMap(map); + + // This is the only place where we can correctly set the default name. + // Only here do we know the image id and the repo reliably, no matter + // where or how we were created. + if (displayName.value() == displayName.defaultValue()) { + displayName.setDefaultValue( + Tr::tr("Docker Image \"%1\" (%2)").arg(repoAndTag()).arg(imageId.value())); + } +} + DockerDeviceSettings::DockerDeviceSettings() { - displayName.setDefaultValue(Tr::tr("Docker Image")); - imageId.setSettingsKey(DockerDeviceDataImageIdKey); imageId.setLabelText(Tr::tr("Image ID:")); imageId.setReadOnly(true); @@ -505,9 +516,6 @@ DockerDevice::DockerDevice(std::unique_ptr deviceSettings) setupId(IDevice::ManuallyAdded); setType(Constants::DOCKER_DEVICE_TYPE); setMachineType(IDevice::Hardware); - d->deviceSettings->displayName.setDefaultValue(Tr::tr("Docker Image \"%1\" (%2)") - .arg(d->deviceSettings->repoAndTag()) - .arg(d->deviceSettings->imageId())); setAllowEmptyCommand(true); setOpenTerminal([this](const Environment &env, const FilePath &workingDir) { diff --git a/src/plugins/docker/dockerdevice.h b/src/plugins/docker/dockerdevice.h index e910031c619..c38a7746dbd 100644 --- a/src/plugins/docker/dockerdevice.h +++ b/src/plugins/docker/dockerdevice.h @@ -19,6 +19,8 @@ class DockerDeviceSettings : public ProjectExplorer::DeviceSettings public: DockerDeviceSettings(); + void fromMap(const Utils::Store &map) override; + QString repoAndTag() const; QString repoAndTagEncoded() const;