On Thu, 15 Mar 2012 11:26:58 +0200, Andriy Gapon wrote: > on 15/03/2012 09:31 Andriy Gapon said the following: > > I'd rather fix the Device Notifier behavior. > > The following patch seems to work. > The idea is to correctly go from a filesystem Solid device to its StorageDrive > device ancestor while ignoring intermediate volume/partition devices. > A direct parent of a filesystem device could be a partition which does not > support StorageDrive interface and thus nothing intelligent could be deduced > about its hot plug properties.
I've never experience this problem, but I see the point. Can you please submit it directly upstream? Cheers, Max > --- plasma/generic/applets/devicenotifier/devicenotifier.cpp.orig > 2012-03-15 > 10:19:48.791075156 +0200 > +++ plasma/generic/applets/devicenotifier/devicenotifier.cpp 2012-03-15 > 11:14:46.896071677 +0200 > @@ -241,6 +241,20 @@ QGraphicsWidget *DeviceNotifier::graphic > return m_dialog->dialog(); > } > > +namespace { > + Solid::StorageDrive * getStorageDriveParent(const Solid::Device &device) > + { > + Solid::Device parentDevice = device; > + > + while ((parentDevice = parentDevice.parent()).isValid()) { > + if (parentDevice.is<Solid::StorageDrive>()) { > + return parentDevice.as<Solid::StorageDrive>(); > + } > + } > + return NULL; > + } > +} > + > void DeviceNotifier::fillPreviousDevices() > { > m_fillingPreviousDevices = true; > @@ -249,8 +263,7 @@ void DeviceNotifier::fillPreviousDevices > foreach (const Solid::Device &device, list) { > // We manually add non-removable devices that are a priori ignored > // discard swap and partition tables > - Solid::Device parentDevice = device.parent(); > - Solid::StorageDrive *drive = parentDevice.as<Solid::StorageDrive>(); > + Solid::StorageDrive *drive = getStorageDriveParent(device); > const Solid::StorageVolume *volume = > device.as<Solid::StorageVolume>(); > if (drive && (!drive->isHotpluggable() && !drive->isRemovable()) && > (volume->usage() == Solid::StorageVolume::FileSystem)) { > @@ -364,15 +377,12 @@ void DeviceNotifier::deviceAdded(const S > { > const QString udi = device.udi(); > if (m_showDevices == NonRemovableOnly) { > - Solid::Device parentDevice = device.parent(); > - Solid::StorageDrive *drive = parentDevice.as<Solid::StorageDrive>(); > + Solid::StorageDrive *drive = getStorageDriveParent(device); > if (drive && (drive->isHotpluggable() || drive->isRemovable())) { > return; > } > } else if (m_showDevices == RemovableOnly) { > - Solid::Device device = Solid::Device(udi); > - Solid::Device parentDevice = device.parent(); > - Solid::StorageDrive *drive = parentDevice.as<Solid::StorageDrive>(); > + Solid::StorageDrive *drive = getStorageDriveParent(device); > if (drive && (!drive->isHotpluggable() && !drive->isRemovable())) { > return; > } > > > _______________________________________________ kde-freebsd mailing list kde-freebsd@kde.org https://mail.kde.org/mailman/listinfo/kde-freebsd See also http://freebsd.kde.org/ for latest information