summaryrefslogtreecommitdiffstats
path: root/kcontrol
diff options
context:
space:
mode:
Diffstat (limited to 'kcontrol')
-rw-r--r--kcontrol/hwmanager/hwdevicetray.cpp109
-rw-r--r--kcontrol/hwmanager/hwdevicetray.h8
2 files changed, 80 insertions, 37 deletions
diff --git a/kcontrol/hwmanager/hwdevicetray.cpp b/kcontrol/hwmanager/hwdevicetray.cpp
index eb4fe3270..c4089874a 100644
--- a/kcontrol/hwmanager/hwdevicetray.cpp
+++ b/kcontrol/hwmanager/hwdevicetray.cpp
@@ -640,10 +640,14 @@ void HwDeviceSystemTray::slotEditShortcutKeys() {
void HwDeviceSystemTray::doDiskNotifications(bool scanOnly)
{
- TQMap<TQString, TDEStorageDevice*> deletedDevices = m_knownDiskDevices;
- TQMap<TQString, TDEStorageDevice*> addedDevices;
+ TDEConfig config("mediamanagerrc");
+ config.setGroup("Global");
+ bool popupEnable = config.readBoolEntry("DeviceMonitorPopupsEnabled", true);
- // Rescan known devices
+ // Scan devices for changes and notify new devices if needed.
+ // This is necessary because the device information may not be available
+ // at the time the hardwareAdded signal is emitted
+ TQMap<TQString, KnownDiskDeviceInfo> oldKnownDevices = m_knownDiskDevices;
m_knownDiskDevices.clear();
TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices();
TDEGenericHardwareList diskDeviceList = hwdevices->listByDeviceClass(TDEGenericDeviceType::Disk);
@@ -652,60 +656,93 @@ void HwDeviceSystemTray::doDiskNotifications(bool scanOnly)
TDEStorageDevice *sdevice = static_cast<TDEStorageDevice*>(hwdevice);
if (isMonitoredDevice(sdevice))
{
- TQString uuid = sdevice->diskUUID();
- if (uuid == "")
+ TQString sysPath = sdevice->systemPath();
+ if (oldKnownDevices.contains(sysPath))
{
- uuid = sdevice->systemPath();
- }
- if (deletedDevices.contains(uuid))
- {
- deletedDevices.remove(uuid);
+ m_knownDiskDevices[sysPath] = oldKnownDevices[sysPath];
+ oldKnownDevices.remove(sysPath);
}
else
{
- addedDevices[uuid] = sdevice;
+ TQString friendlyName = sdevice->diskLabel();
+ if (friendlyName.isEmpty())
+ {
+ friendlyName = sdevice->friendlyName();
+ }
+ m_knownDiskDevices[sysPath] = { friendlyName, sdevice->deviceNode() };
+ if (!scanOnly && popupEnable)
+ {
+ m_hardwareNotifierContainer->displayMessage(
+ i18n("A disk device has been added!"),
+ i18n("%1 (%2)").arg(friendlyName, sdevice->deviceNode()),
+ SmallIcon("drive-harddisk-unmounted"), 0, 0, "ADD: " + sysPath);
+ }
}
- m_knownDiskDevices[uuid] = sdevice;
}
}
- if (scanOnly)
+ // Notify devices which have been removed, if necessary
+ if (!scanOnly && popupEnable)
{
- return;
- }
-
- // Notify added/removed devices to the user if necessary
- TDEConfig config("mediamanagerrc");
- config.setGroup("Global");
- if (config.readBoolEntry("DeviceMonitorPopupsEnabled", true))
- {
- TQMap<TQString, TDEStorageDevice*>::Iterator it;
- // Added devices
- for (it = addedDevices.begin(); it != addedDevices.end(); ++it)
- {
- m_hardwareNotifierContainer->displayMessage(
- i18n("A disk device has been added!"),
- i18n("%1 (%2)").arg(it.data()->friendlyName(), it.data()->deviceNode()), SmallIcon("drive-harddisk-unmounted"),
- 0, 0, "ADD: " + it.key());
- }
- // Deleted devices
- for (it = deletedDevices.begin(); it != deletedDevices.end(); ++it)
+ TQMap<TQString, KnownDiskDeviceInfo>::ConstIterator delIt;
+ for (delIt = oldKnownDevices.begin(); delIt != oldKnownDevices.end(); delIt++)
{
m_hardwareNotifierContainer->displayMessage(
i18n("A disk device has been removed!"),
- i18n("%1 (%2)").arg(it.data()->friendlyName(), it.data()->deviceNode()), SmallIcon("drive-harddisk-unmounted"),
- 0, 0, "REMOVE: " + it.key());
+ i18n("%1 (%2)").arg(delIt.data().friendlyName, delIt.data().node),
+ SmallIcon("drive-harddisk-unmounted"), 0, 0, "REMOVE: " + delIt.key());
}
}
}
void HwDeviceSystemTray::deviceAdded(TDEGenericDevice* device)
{
- doDiskNotifications(false);
+ if (device->type() == TDEGenericDeviceType::Disk)
+ {
+ TDEStorageDevice *sdevice = static_cast<TDEStorageDevice*>(device);
+ // The device information may not be available at the time the hardwareAdded signal is emitted.
+ // In such case ignore the event and handle that at the subsequent hardwareUpdate signal emission.
+ TQString sysPath = sdevice->systemPath();
+ if (isMonitoredDevice(sdevice) && !m_knownDiskDevices.contains(sysPath))
+ {
+ TQString friendlyName = sdevice->diskLabel();
+ if (friendlyName.isEmpty())
+ {
+ friendlyName = sdevice->friendlyName();
+ }
+ m_knownDiskDevices[sysPath] = { friendlyName, sdevice->deviceNode() };
+ TDEConfig config("mediamanagerrc");
+ config.setGroup("Global");
+ if (config.readBoolEntry("DeviceMonitorPopupsEnabled", true))
+ {
+ m_hardwareNotifierContainer->displayMessage(
+ i18n("A disk device has been added!"),
+ i18n("%1 (%2)").arg(friendlyName, sdevice->deviceNode()),
+ SmallIcon("drive-harddisk-unmounted"), 0, 0, "ADD: " + sysPath);
+ }
+ }
+ }
}
void HwDeviceSystemTray::deviceRemoved(TDEGenericDevice* device)
{
- doDiskNotifications(false);
+ if (device->type() == TDEGenericDeviceType::Disk)
+ {
+ TDEStorageDevice *sdevice = static_cast<TDEStorageDevice*>(device);
+ TQString sysPath = sdevice->systemPath();
+ if (isMonitoredDevice(sdevice) && m_knownDiskDevices.contains(sysPath))
+ {
+ TDEConfig config("mediamanagerrc");
+ config.setGroup("Global");
+ if (config.readBoolEntry("DeviceMonitorPopupsEnabled", true))
+ {
+ m_hardwareNotifierContainer->displayMessage(
+ i18n("A disk device has been removed!"),
+ i18n("%1 (%2)").arg(m_knownDiskDevices[sysPath].friendlyName, m_knownDiskDevices[sysPath].node),
+ SmallIcon("drive-harddisk-unmounted"), 0, 0, "REMOVE: " + sysPath);
+ }
+ m_knownDiskDevices.remove(sysPath);
+ }
+ }
}
void HwDeviceSystemTray::deviceChanged(TDEGenericDevice* device)
diff --git a/kcontrol/hwmanager/hwdevicetray.h b/kcontrol/hwmanager/hwdevicetray.h
index 57389c1de..1300ac6ec 100644
--- a/kcontrol/hwmanager/hwdevicetray.h
+++ b/kcontrol/hwmanager/hwdevicetray.h
@@ -100,7 +100,13 @@ private:
TDEPopupMenu* m_menu;
KSimpleConfig *r_config;
PasswordDlg *m_passDlg;
- TQMap<TQString, TDEStorageDevice*> m_knownDiskDevices;
+
+ struct KnownDiskDeviceInfo
+ {
+ TQString friendlyName;
+ TQString node;
+ };
+ TQMap<TQString, KnownDiskDeviceInfo> m_knownDiskDevices;
};
#endif