diff --git a/src/solid/devices/backends/fakehw/fakedevice.h b/src/solid/devices/backends/fakehw/fakedevice.h --- a/src/solid/devices/backends/fakehw/fakedevice.h +++ b/src/solid/devices/backends/fakehw/fakedevice.h @@ -32,6 +32,7 @@ QString product() const override; QString icon() const override; QStringList emblems() const override; + QString displayName() const override; QString description() const override; virtual QVariant property(const QString &key) const; diff --git a/src/solid/devices/backends/fakehw/fakedevice.cpp b/src/solid/devices/backends/fakehw/fakedevice.cpp --- a/src/solid/devices/backends/fakehw/fakedevice.cpp +++ b/src/solid/devices/backends/fakehw/fakedevice.cpp @@ -130,6 +130,11 @@ return res; } +QString FakeDevice::displayName() const +{ + return description(); +} + QString FakeDevice::description() const { return product(); diff --git a/src/solid/devices/backends/fstab/fstabdevice.h b/src/solid/devices/backends/fstab/fstabdevice.h --- a/src/solid/devices/backends/fstab/fstabdevice.h +++ b/src/solid/devices/backends/fstab/fstabdevice.h @@ -40,6 +40,8 @@ QStringList emblems() const override; + QString displayName() const override; + QString description() const override; bool queryDeviceInterface(const Solid::DeviceInterface::Type &type) const override; @@ -59,6 +61,7 @@ QString m_device; QString m_product; QString m_vendor; + QString m_displayName; QString m_description; QString m_iconName; QPointer m_storageAccess; diff --git a/src/solid/devices/backends/fstab/fstabdevice.cpp b/src/solid/devices/backends/fstab/fstabdevice.cpp --- a/src/solid/devices/backends/fstab/fstabdevice.cpp +++ b/src/solid/devices/backends/fstab/fstabdevice.cpp @@ -54,20 +54,28 @@ foreach (const QString& option, gvfsOptions) { if (option.startsWith(QLatin1String("x-gvfs-name="))) { QStringRef encoded = option.midRef(12); - m_description = QUrl::fromPercentEncoding(encoded.toLatin1()); + m_displayName = QUrl::fromPercentEncoding(encoded.toLatin1()); } else if (option.startsWith(QLatin1String("x-gvfs-icon="))) { QStringRef encoded = option.midRef(12); m_iconName = QUrl::fromPercentEncoding(encoded.toLatin1()); } } - if (m_description.isEmpty()) { - if (m_storageType == StorageType::NetworkShare) { - m_description = QCoreApplication::translate("", "%1 on %2", - "%1 is sharename, %2 is servername").arg(m_product, m_vendor); + if (m_storageType == StorageType::NetworkShare) { + m_description = QCoreApplication::translate("", "%1 on %2", + "%1 is sharename, %2 is servername").arg(m_product, m_vendor); + } else { + m_description = QCoreApplication::translate("", "%1 (%2)", + "%1 is mountpoint, %2 is fs type").arg(m_product, m_vendor); + } + + if (m_displayName.isEmpty()) { + QStringList currentMountPoints = FstabHandling::currentMountPoints(m_device); + if (currentMountPoints.isEmpty()) { + QStringList mountPoints = FstabHandling::mountPoints(m_device); + m_displayName = mountPoints.isEmpty() ? m_description : mountPoints.first(); } else { - m_description = QCoreApplication::translate("", "%1 (%2)", - "%1 is mountpoint, %2 is fs type").arg(m_product, m_vendor); + m_displayName = currentMountPoints.first(); } } @@ -135,6 +143,11 @@ return res; } +QString FstabDevice::displayName() const +{ + return m_displayName; +} + QString FstabDevice::description() const { return m_description; diff --git a/src/solid/devices/backends/fstab/fstabmanager.cpp b/src/solid/devices/backends/fstab/fstabmanager.cpp --- a/src/solid/devices/backends/fstab/fstabmanager.cpp +++ b/src/solid/devices/backends/fstab/fstabmanager.cpp @@ -81,6 +81,7 @@ RootDevice *root = new RootDevice(FSTAB_UDI_PREFIX); root->setProduct(tr("Filesystem Volumes")); + root->setDisplayName(tr("Filesystem Volumes")); root->setDescription(tr("Mountable filesystems declared in your system")); root->setIcon("folder"); diff --git a/src/solid/devices/backends/shared/rootdevice.h b/src/solid/devices/backends/shared/rootdevice.h --- a/src/solid/devices/backends/shared/rootdevice.h +++ b/src/solid/devices/backends/shared/rootdevice.h @@ -42,6 +42,9 @@ QStringList emblems() const override; void setEmblems(const QStringList &emblems); + QString displayName() const override; + void setDisplayName(const QString &displayName); + QString description() const override; void setDescription(const QString &description); @@ -55,6 +58,7 @@ QString m_product; QString m_icon; QStringList m_emblems; + QString m_displayName; QString m_description; }; diff --git a/src/solid/devices/backends/shared/rootdevice.cpp b/src/solid/devices/backends/shared/rootdevice.cpp --- a/src/solid/devices/backends/shared/rootdevice.cpp +++ b/src/solid/devices/backends/shared/rootdevice.cpp @@ -71,6 +71,16 @@ m_emblems = emblems; } +QString RootDevice::displayName() const +{ + return m_displayName; +} + +void RootDevice::setDisplayName(const QString &displayName) +{ + m_displayName = displayName; +} + QString RootDevice::description() const { return m_description; diff --git a/src/solid/devices/backends/udev/udevdevice.h b/src/solid/devices/backends/udev/udevdevice.h --- a/src/solid/devices/backends/udev/udevdevice.h +++ b/src/solid/devices/backends/udev/udevdevice.h @@ -39,6 +39,8 @@ QStringList emblems() const override; + QString displayName() const override; + QString description() const override; bool queryDeviceInterface(const Solid::DeviceInterface::Type &type) const override; diff --git a/src/solid/devices/backends/udev/udevdevice.cpp b/src/solid/devices/backends/udev/udevdevice.cpp --- a/src/solid/devices/backends/udev/udevdevice.cpp +++ b/src/solid/devices/backends/udev/udevdevice.cpp @@ -94,6 +94,11 @@ return QStringList(); } +QString UDevDevice::displayName() const +{ + return description(); +} + QString UDevDevice::description() const { if (parentUdi().isEmpty()) { diff --git a/src/solid/devices/backends/udev/udevmanager.cpp b/src/solid/devices/backends/udev/udevmanager.cpp --- a/src/solid/devices/backends/udev/udevmanager.cpp +++ b/src/solid/devices/backends/udev/udevmanager.cpp @@ -215,6 +215,7 @@ if (udi_ == udiPrefix()) { RootDevice *const device = new RootDevice(UDEV_UDI_PREFIX); device->setProduct(tr("Devices")); + device->setDisplayName(tr("Devices")); device->setDescription(tr("Devices declared in your system")); device->setIcon("computer"); diff --git a/src/solid/devices/backends/udisks2/udisksdevice.h b/src/solid/devices/backends/udisks2/udisksdevice.h --- a/src/solid/devices/backends/udisks2/udisksdevice.h +++ b/src/solid/devices/backends/udisks2/udisksdevice.h @@ -35,6 +35,7 @@ QObject *createDeviceInterface(const Solid::DeviceInterface::Type &type) override; bool queryDeviceInterface(const Solid::DeviceInterface::Type &type) const override; + QString displayName() const override; QString description() const override; QStringList emblems() const override; QString icon() const override; diff --git a/src/solid/devices/backends/udisks2/udisksdevice.cpp b/src/solid/devices/backends/udisks2/udisksdevice.cpp --- a/src/solid/devices/backends/udisks2/udisksdevice.cpp +++ b/src/solid/devices/backends/udisks2/udisksdevice.cpp @@ -224,6 +224,11 @@ return res; } +QString Device::displayName() const +{ + return description(); +} + QString Device::description() const { const QString hintName = property("HintName").toString(); // non-cached diff --git a/src/solid/devices/backends/udisks2/udisksmanager.cpp b/src/solid/devices/backends/udisks2/udisksmanager.cpp --- a/src/solid/devices/backends/udisks2/udisksmanager.cpp +++ b/src/solid/devices/backends/udisks2/udisksmanager.cpp @@ -76,6 +76,7 @@ RootDevice *root = new RootDevice(udi); root->setProduct(tr("Storage")); + root->setDisplayName(tr("Storage")); root->setDescription(tr("Storage devices")); root->setIcon("server-database"); // Obviously wasn't meant for that, but maps nicely in oxygen icon set :-p diff --git a/src/solid/devices/backends/upower/upowerdevice.h b/src/solid/devices/backends/upower/upowerdevice.h --- a/src/solid/devices/backends/upower/upowerdevice.h +++ b/src/solid/devices/backends/upower/upowerdevice.h @@ -30,6 +30,7 @@ QObject *createDeviceInterface(const Solid::DeviceInterface::Type &type) override; bool queryDeviceInterface(const Solid::DeviceInterface::Type &type) const override; + QString displayName() const override; QString description() const override; QStringList emblems() const override; QString icon() const override; diff --git a/src/solid/devices/backends/upower/upowerdevice.cpp b/src/solid/devices/backends/upower/upowerdevice.cpp --- a/src/solid/devices/backends/upower/upowerdevice.cpp +++ b/src/solid/devices/backends/upower/upowerdevice.cpp @@ -107,6 +107,11 @@ return QStringList(); } +QString UPowerDevice::displayName() const +{ + return description(); +} + QString UPowerDevice::description() const { if (queryDeviceInterface(Solid::DeviceInterface::Battery)) { diff --git a/src/solid/devices/backends/upower/upowermanager.cpp b/src/solid/devices/backends/upower/upowermanager.cpp --- a/src/solid/devices/backends/upower/upowermanager.cpp +++ b/src/solid/devices/backends/upower/upowermanager.cpp @@ -74,6 +74,7 @@ RootDevice *root = new RootDevice(udiPrefix()); root->setProduct(tr("Power Management")); + root->setDisplayName(tr("Power Management")); root->setDescription(tr("Batteries and other sources of power")); root->setIcon("preferences-system-power-management"); diff --git a/src/solid/devices/frontend/device.h b/src/solid/devices/frontend/device.h --- a/src/solid/devices/frontend/device.h +++ b/src/solid/devices/frontend/device.h @@ -172,6 +172,15 @@ */ QStringList emblems() const; + /** + * Retrieves the display Name to use for this device. + * Same as description when not defined. + * + * @return the display Name + * @since 5.71 + */ + QString displayName() const; + /** * Retrieves the description of device. * diff --git a/src/solid/devices/frontend/device.cpp b/src/solid/devices/frontend/device.cpp --- a/src/solid/devices/frontend/device.cpp +++ b/src/solid/devices/frontend/device.cpp @@ -107,6 +107,11 @@ return_SOLID_CALL(Ifaces::Device *, d->backendObject(), QStringList(), emblems()); } +QString Solid::Device::displayName() const +{ + return_SOLID_CALL(Ifaces::Device *, d->backendObject(), QString(), displayName()); +} + QString Solid::Device::description() const { return_SOLID_CALL(Ifaces::Device *, d->backendObject(), QString(), description()); diff --git a/src/solid/devices/ifaces/device.h b/src/solid/devices/ifaces/device.h --- a/src/solid/devices/ifaces/device.h +++ b/src/solid/devices/ifaces/device.h @@ -89,6 +89,15 @@ */ virtual QStringList emblems() const = 0; + /** + * Retrieves the display Name to use for this device. + * Same as description when not defined. + * + * @return the display Name + * @since 5.71 + */ + virtual QString displayName() const = 0; + /** * Retrieves the description of device. *