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 label() 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::label() 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 label() 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_label; 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,21 +54,19 @@ foreach (const QString& option, gvfsOptions) { if (option.startsWith(QLatin1String("x-gvfs-name="))) { QStringRef encoded = option.midRef(12); - m_description = QUrl::fromPercentEncoding(encoded.toLatin1()); + m_label = 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); - } else { - m_description = QCoreApplication::translate("", "%1 (%2)", - "%1 is mountpoint, %2 is fs type").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_iconName.isEmpty()) { @@ -135,6 +133,22 @@ return res; } +QString FstabDevice::label() const +{ + if (!m_label.isEmpty()) { + return m_label; + } + if (!m_storageAccess) { + FstabDevice *d = const_cast(this); + d->m_storageAccess = new FstabStorageAccess(d); + } + if (m_storageAccess->isAccessible()) { + return m_storageAccess->filePath(); + } else { + return description(); + } +} + 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 @@ -80,6 +80,7 @@ RootDevice *root = new RootDevice(FSTAB_UDI_PREFIX); root->setProduct(tr("Filesystem Volumes")); + root->setLabel(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 label() const override; + void setLabel(const QString &label); + QString description() const override; void setDescription(const QString &description); @@ -55,6 +58,7 @@ QString m_product; QString m_icon; QStringList m_emblems; + QString m_label; 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::label() const +{ + return m_label; +} + +void RootDevice::setLabel(const QString &label) +{ + m_label = label; +} + 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 label() 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::label() 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->setLabel(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 label() 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::label() 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->selLabel(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 label() 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::label() 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->setLabel(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,14 @@ */ QStringList emblems() const; + /** + * Retrieves the label to use for this device. + * + * @return the label + * @since 5.70 + */ + QString label() 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::label() const +{ + return_SOLID_CALL(Ifaces::Device *, d->backendObject(), QString(), label()); +} + 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 label to use for this device. + * Same as description when not defined. + * + * @return the label + * @since 5.70 + */ + virtual QString label() const = 0; + /** * Retrieves the description of device. *