diff --git a/kcontrol/hwmanager/hwdevicetray.cpp b/kcontrol/hwmanager/hwdevicetray.cpp index 188231786..405b562b6 100644 --- a/kcontrol/hwmanager/hwdevicetray.cpp +++ b/kcontrol/hwmanager/hwdevicetray.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -54,19 +55,16 @@ #include "hwdevicetray_configdialog.h" -#include -using namespace std; - -map m = {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}}; - // Storage Device Action namespace SDActions { // use 'int' as underlying type to avoid exposing a bunch of unnecessary // enums/structs in the class header file private methods' signature + // Note: must start from 0 because the Type value is also used as index + // of a TQValueVector enum Type : int { - Open = 1, + Open = 0, Mount, Unmount, Unlock, @@ -340,7 +338,7 @@ TQString HwDeviceSystemTray::getDeviceLabel(TDEStorageDevice *sdevice) if (deviceLabel.isEmpty()) { deviceLabel = !sdevice->diskLabel().isEmpty() ? sdevice->diskLabel() : sdevice->friendlyName(); - deviceLabel += sdevice->deviceNode(); + deviceLabel += " (" + sdevice->deviceNode() + ")"; } return deviceLabel; @@ -385,9 +383,13 @@ void HwDeviceSystemTray::contextMenuAboutToShow(TDEPopupMenu *menu) } d->m_actionMenuEntryMap.clear(); - int actionMenuIdx = 0; - // Find all storage devices and add them to the popup menus + // Find all storage devices, sort them by label and add them to the popup menus + TQValueVector*> rmbMenuEntries(sizeof(SDActions::All) / sizeof(SDActions::Type), nullptr); + for (size_t idx = 0; idx < rmbMenuEntries.size(); ++idx) + { + rmbMenuEntries[idx] = new TQMap(); + } TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); TDEGenericHardwareList diskDeviceList = hwdevices->listByDeviceClass(TDEGenericDeviceType::Disk); for (TDEGenericDevice *hwdevice = diskDeviceList.first(); hwdevice; hwdevice = diskDeviceList.next()) @@ -395,16 +397,17 @@ void HwDeviceSystemTray::contextMenuAboutToShow(TDEPopupMenu *menu) TDEStorageDevice *sdevice = static_cast(hwdevice); if (isMonitoredDevice(sdevice)) { + TQString deviceLabel = getDeviceLabel(sdevice); if (sdevice->isDiskOfType(TDEDiskDeviceType::LUKS) || sdevice->isDiskOfType(TDEDiskDeviceType::OtherCrypted)) { if (sdevice->isDiskOfType(TDEDiskDeviceType::UnlockedCrypt)) { - addDeviceToRMBMenu(sdevice, SDActions::Lock, actionMenuIdx); + (*rmbMenuEntries[SDActions::Lock])[deviceLabel] = sdevice; } else { - addDeviceToRMBMenu(sdevice, SDActions::Unlock, actionMenuIdx); + (*rmbMenuEntries[SDActions::Unlock])[deviceLabel] = sdevice; } } @@ -412,39 +415,45 @@ void HwDeviceSystemTray::contextMenuAboutToShow(TDEPopupMenu *menu) { if (sdevice->mountPath().isEmpty()) { - addDeviceToRMBMenu(sdevice, SDActions::Mount, actionMenuIdx); + (*rmbMenuEntries[SDActions::Mount])[deviceLabel] = sdevice; } else { - addDeviceToRMBMenu(sdevice, SDActions::Unmount, actionMenuIdx); + (*rmbMenuEntries[SDActions::Unmount])[deviceLabel] = sdevice; } // Mounted and unmounted disks can also be opened - addDeviceToRMBMenu(sdevice, SDActions::Open, actionMenuIdx); + (*rmbMenuEntries[SDActions::Open])[deviceLabel] = sdevice; } - if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::Removable) || sdevice->checkDiskStatus(TDEDiskDeviceStatus::Hotpluggable)) { - addDeviceToRMBMenu(sdevice, SDActions::Eject, actionMenuIdx); + (*rmbMenuEntries[SDActions::Eject])[deviceLabel] = sdevice; - addDeviceToRMBMenu(sdevice, SDActions::SafeRemove, actionMenuIdx); + (*rmbMenuEntries[SDActions::SafeRemove])[deviceLabel] = sdevice; } - addDeviceToRMBMenu(sdevice, SDActions::Properties, actionMenuIdx); + (*rmbMenuEntries[SDActions::Properties])[deviceLabel] = sdevice; } } // Plug in meaningful action menus d->m_RMBMenu->insertTitle(SmallIcon("drive-harddisk-unmounted"), i18n("Storage Device Actions"), 0); + int actionMenuIdx = 0; for (const SDActions::Type &actionType : SDActions::All) { TDEActionMenu *actionMenu = d->m_RMBActionMenuMap[actionType]; + for (TDEStorageDevice *sdevice : *rmbMenuEntries[actionType]) + { + addDeviceToRMBMenu(sdevice, actionType, actionMenuIdx); + } if (actionMenu->isEnabled()) { actionMenu->plug(d->m_RMBMenu); } + delete rmbMenuEntries[actionType]; + rmbMenuEntries[actionType] = nullptr; } // Global Configuration @@ -470,6 +479,7 @@ void HwDeviceSystemTray::populateLMBMenu() // Find all storage devices and add them to the popup menus TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); TDEGenericHardwareList diskDeviceList = hwdevices->listByDeviceClass(TDEGenericDeviceType::Disk); + TQMap lmbMenuEntries; for (TDEGenericDevice *hwdevice = diskDeviceList.first(); hwdevice; hwdevice = diskDeviceList.next()) { TDEStorageDevice *sdevice = static_cast(hwdevice); @@ -480,8 +490,9 @@ void HwDeviceSystemTray::populateLMBMenu() sdevice->checkDiskStatus(TDEDiskDeviceStatus::Removable) || sdevice->checkDiskStatus(TDEDiskDeviceStatus::Hotpluggable))) { - TDEActionMenu *actionMenu = new TDEActionMenu(getDeviceLabel(sdevice), - sdevice->icon(TDEIcon::SizeSmall)); + TQString deviceLabel = getDeviceLabel(sdevice); + TDEActionMenu *actionMenu = new TDEActionMenu(deviceLabel, + sdevice->icon(TDEIcon::SizeSmall)); if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::Mountable)) { @@ -522,9 +533,14 @@ void HwDeviceSystemTray::populateLMBMenu() addDeviceToLMBMenu(sdevice, SDActions::Properties, actionMenu, actionMenuIdx); - actionMenu->plug(d->m_LMBMenu); + lmbMenuEntries[deviceLabel] = actionMenu; } } + // Insert menu entries in sorted order + for (TDEActionMenu *am : lmbMenuEntries) + { + am->plug(d->m_LMBMenu); + } } void HwDeviceSystemTray::slotExecuteDeviceAction(int parameter) diff --git a/tdeioslave/media/mediamanager/tdehardwarebackend.cpp b/tdeioslave/media/mediamanager/tdehardwarebackend.cpp index d99105464..b12aa6ea9 100644 --- a/tdeioslave/media/mediamanager/tdehardwarebackend.cpp +++ b/tdeioslave/media/mediamanager/tdehardwarebackend.cpp @@ -484,6 +484,7 @@ void TDEBackend::setVolumeProperties(Medium* medium) if (useDefaultLabel) { diskLabel = i18n("%1 Removable Device").arg(sdevice->deviceFriendlySize()); } + diskLabel += " (" + sdevice->deviceNode() + ")"; TQString mimeType;