diff options
Diffstat (limited to 'kcontrol/hwmanager')
-rw-r--r-- | kcontrol/hwmanager/hwdevicetray.cpp | 43 | ||||
-rw-r--r-- | kcontrol/hwmanager/hwdevicetray.h | 2 |
2 files changed, 45 insertions, 0 deletions
diff --git a/kcontrol/hwmanager/hwdevicetray.cpp b/kcontrol/hwmanager/hwdevicetray.cpp index 350433b71..5bc77c306 100644 --- a/kcontrol/hwmanager/hwdevicetray.cpp +++ b/kcontrol/hwmanager/hwdevicetray.cpp @@ -88,6 +88,7 @@ HwDeviceSystemTray::HwDeviceSystemTray(TQWidget* parent, const char *name) new TDEActionMenu(i18n("Unlock"), SmallIcon("decrypted", TQIconSet::Automatic), actionCollection(), "unlock_menu"); new TDEActionMenu(i18n("Lock"), SmallIcon("encrypted", TQIconSet::Automatic), actionCollection(), "lock_menu"); new TDEActionMenu(i18n("Eject"), SmallIcon("player_eject", TQIconSet::Automatic), actionCollection(), "eject_menu"); + new TDEActionMenu(i18n("Safe remove"), SmallIcon("player_safe_removal", TQIconSet::Automatic), actionCollection(), "safe_remove_menu"); new TDEActionMenu(i18n("Properties"), SmallIcon("edit", TQIconSet::Automatic), actionCollection(), "properties_menu"); TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); @@ -233,6 +234,7 @@ void HwDeviceSystemTray::populateMenu(TDEPopupMenu* menu) { TDEActionMenu *unlockDeviceActionMenu = static_cast<TDEActionMenu*>(actionCollection()->action("unlock_menu")); TDEActionMenu *lockDeviceActionMenu = static_cast<TDEActionMenu*>(actionCollection()->action("lock_menu")); TDEActionMenu *ejectDeviceActionMenu = static_cast<TDEActionMenu*>(actionCollection()->action("eject_menu")); + TDEActionMenu *safeRemoveDeviceActionMenu = static_cast<TDEActionMenu*>(actionCollection()->action("safe_remove_menu")); TDEActionMenu *propertiesDeviceActionMenu = static_cast<TDEActionMenu*>(actionCollection()->action("properties_menu")); openDeviceActionMenu->popupMenu()->clear(); @@ -241,6 +243,7 @@ void HwDeviceSystemTray::populateMenu(TDEPopupMenu* menu) { unlockDeviceActionMenu->popupMenu()->clear(); lockDeviceActionMenu->popupMenu()->clear(); ejectDeviceActionMenu->popupMenu()->clear(); + safeRemoveDeviceActionMenu->popupMenu()->clear(); propertiesDeviceActionMenu->popupMenu()->clear(); m_openMenuIndexMap.clear(); @@ -249,6 +252,7 @@ void HwDeviceSystemTray::populateMenu(TDEPopupMenu* menu) { m_unlockMenuIndexMap.clear(); m_lockMenuIndexMap.clear(); m_ejectMenuIndexMap.clear(); + m_safeRemoveMenuIndexMap.clear(); m_propertiesMenuIndexMap.clear(); // Find all storage devices and add them to the popup menus @@ -258,6 +262,7 @@ void HwDeviceSystemTray::populateMenu(TDEPopupMenu* menu) { int lastUnlockIndex = -1; int lastLockIndex = -1; int lastEjectIndex = -1; + int lastSafeRemoveIndex = -1; int lastPropertiesIndex = -1; TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); @@ -346,6 +351,15 @@ void HwDeviceSystemTray::populateMenu(TDEPopupMenu* menu) { { m_ejectMenuIndexMap[lastEjectIndex] = sdevice->systemPath(); } + + lastSafeRemoveIndex = safeRemoveDeviceActionMenu->popupMenu()->insertItem(hwdevice->icon(TDEIcon::SizeSmall), + i18n("%1 (%2)").arg(friendlyName, sdevice->deviceNode())); + safeRemoveDeviceActionMenu->popupMenu()->connectItem(lastSafeRemoveIndex, this, TQT_SLOT(slotSafeRemoveDevice(int))); + m_safeRemoveMenuIndexMap[lastSafeRemoveIndex] = sdevice->diskUUID(); + if (m_safeRemoveMenuIndexMap[lastSafeRemoveIndex] == "") + { + m_safeRemoveMenuIndexMap[lastSafeRemoveIndex] = sdevice->systemPath(); + } } lastPropertiesIndex = propertiesDeviceActionMenu->popupMenu()->insertItem(hwdevice->icon(TDEIcon::SizeSmall), @@ -365,6 +379,7 @@ void HwDeviceSystemTray::populateMenu(TDEPopupMenu* menu) { unlockDeviceActionMenu->setEnabled(lastUnlockIndex != -1); lockDeviceActionMenu->setEnabled(lastLockIndex != -1); ejectDeviceActionMenu->setEnabled(lastEjectIndex != -1); + safeRemoveDeviceActionMenu->setEnabled(lastSafeRemoveIndex != -1); propertiesDeviceActionMenu->setEnabled(lastPropertiesIndex != -1); if (lastOpenIndex != -1) @@ -391,6 +406,10 @@ void HwDeviceSystemTray::populateMenu(TDEPopupMenu* menu) { { ejectDeviceActionMenu->plug(menu); } + if (lastSafeRemoveIndex != -1) + { + safeRemoveDeviceActionMenu->plug(menu); + } if (lastPropertiesIndex != -1) { propertiesDeviceActionMenu->plug(menu); @@ -549,6 +568,30 @@ void HwDeviceSystemTray::slotEjectDevice(int parameter) } } +void HwDeviceSystemTray::slotSafeRemoveDevice(int parameter) +{ + TQString uuid = m_safeRemoveMenuIndexMap[parameter]; + if (!uuid.isEmpty()) + { + TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); + TDEGenericHardwareList diskDeviceList = hwdevices->listByDeviceClass(TDEGenericDeviceType::Disk); + for (TDEGenericDevice *hwdevice = diskDeviceList.first(); hwdevice; hwdevice = diskDeviceList.next()) + { + TDEStorageDevice *sdevice = static_cast<TDEStorageDevice*>(hwdevice); + if ((sdevice->diskUUID() == uuid) || (sdevice->systemPath() == uuid)) + { + TDEProcess proc; + proc << "tdeio_media_mounthelper" << "-s" << sdevice->deviceNode(); + if (!proc.start(TDEProcess::DontCare)) + { + KMessageBox::error(this, i18n("Could not start tdeio_media_mounthelper process."), + i18n("Device monitor")); + } + } + } + } +} + void HwDeviceSystemTray::slotPropertiesDevice(int parameter) { TQString uuid = m_propertiesMenuIndexMap[parameter]; diff --git a/kcontrol/hwmanager/hwdevicetray.h b/kcontrol/hwmanager/hwdevicetray.h index ad7f46ca5..19dca21ef 100644 --- a/kcontrol/hwmanager/hwdevicetray.h +++ b/kcontrol/hwmanager/hwdevicetray.h @@ -61,6 +61,7 @@ protected slots: void slotUnlockDevice(int parameter); void slotLockDevice(int parameter); void slotEjectDevice(int parameter); + void slotSafeRemoveDevice(int parameter); void slotPropertiesDevice(int parameter); protected: @@ -95,6 +96,7 @@ private: TQStringMap m_unlockMenuIndexMap; TQStringMap m_lockMenuIndexMap; TQStringMap m_ejectMenuIndexMap; + TQStringMap m_safeRemoveMenuIndexMap; TQStringMap m_propertiesMenuIndexMap; TDEPopupMenu* m_menu; KSimpleConfig *r_config; |