diff --git a/Modules/devinfo/devicelisting.cpp b/Modules/devinfo/devicelisting.cpp --- a/Modules/devinfo/devicelisting.cpp +++ b/Modules/devinfo/devicelisting.cpp @@ -146,49 +146,50 @@ void DeviceListing::deviceAddedSlot(const QString &udi) { SolidHelper *solhelp = new SolidHelper(); - const QList list = Solid::Device::allDevices(); - - foreach (const Solid::Device &dev, list) { - if (dev.udi() == udi) { - Solid::DeviceInterface::Type deviceType = solhelp->deviceType(&dev); - QTreeWidgetItem *parent = getTreeWidgetItemFromUdi(this, dev.parentUdi()); - - // Incase of bad index - if (deviceMap[deviceType] == nullptr) { - QTreeWidgetItem *topItem = topLevelItem(0); - if (!topItem) { - delete solhelp; - return; - } - deviceMap[deviceType] = static_cast(topItem); - } - - switch (deviceType) { - case Solid::DeviceInterface::Processor: - new SolProcessorDevice(deviceMap[deviceType], dev); - break; - case Solid::DeviceInterface::Camera: - new SolCameraDevice(deviceMap[deviceType], dev); - break; - case Solid::DeviceInterface::PortableMediaPlayer: - new SolMediaPlayerDevice(deviceMap[deviceType], dev); - break; - case Solid::DeviceInterface::Battery: - new SolBatteryDevice(deviceMap[deviceType], dev); - break; - case Solid::DeviceInterface::StorageDrive: - new SolStorageDevice(deviceMap[deviceType], dev, SolStorageDevice::NOCHILDREN); - break; - case Solid::DeviceInterface::StorageVolume: - if (parent == nullptr) { - break; - } - new SolVolumeDevice(parent, dev); - break; - default: - break; - } + + Solid::Device dev(udi); + if (!dev.isValid()) { + // Probably the device already disappeared again. + return; + } + + Solid::DeviceInterface::Type deviceType = solhelp->deviceType(&dev); + QTreeWidgetItem *parent = getTreeWidgetItemFromUdi(this, dev.parentUdi()); + + // Incase of bad index + if (deviceMap[deviceType] == nullptr) { + QTreeWidgetItem *topItem = topLevelItem(0); + if (!topItem) { + delete solhelp; + return; } + deviceMap[deviceType] = static_cast(topItem); + } + + switch (deviceType) { + case Solid::DeviceInterface::Processor: + new SolProcessorDevice(deviceMap[deviceType], dev); + break; + case Solid::DeviceInterface::Camera: + new SolCameraDevice(deviceMap[deviceType], dev); + break; + case Solid::DeviceInterface::PortableMediaPlayer: + new SolMediaPlayerDevice(deviceMap[deviceType], dev); + break; + case Solid::DeviceInterface::Battery: + new SolBatteryDevice(deviceMap[deviceType], dev); + break; + case Solid::DeviceInterface::StorageDrive: + new SolStorageDevice(deviceMap[deviceType], dev, SolStorageDevice::NOCHILDREN); + break; + case Solid::DeviceInterface::StorageVolume: + if (parent == nullptr) { + break; + } + new SolVolumeDevice(parent, dev); + break; + default: + break; } delete solhelp; }