diff --git a/Modules/devinfo/devicelisting.cpp b/Modules/devinfo/devicelisting.cpp --- a/Modules/devinfo/devicelisting.cpp +++ b/Modules/devinfo/devicelisting.cpp @@ -44,7 +44,9 @@ createMenuActions(); setHeaderLabels(QStringList(i18n("Devices"))); + setSortingEnabled(false); populateListing(); + setSortingEnabled(true); } DeviceListing::~DeviceListing() diff --git a/Modules/devinfo/soldevice.h b/Modules/devinfo/soldevice.h --- a/Modules/devinfo/soldevice.h +++ b/Modules/devinfo/soldevice.h @@ -105,6 +105,7 @@ QString udi() const; bool isDeviceSet(); + virtual bool operator< (const QTreeWidgetItem & other) const; protected: void setDeviceText(const QString &); diff --git a/Modules/devinfo/soldevice.cpp b/Modules/devinfo/soldevice.cpp --- a/Modules/devinfo/soldevice.cpp +++ b/Modules/devinfo/soldevice.cpp @@ -146,3 +146,31 @@ { return deviceSet; } + +bool SolDevice::operator< ( const QTreeWidgetItem & other ) const +{ + const SolDevice * otherDevice = dynamic_cast(&other); + if (otherDevice != nullptr) + { + if (deviceType() != otherDevice->deviceType()) + { + return deviceType() < otherDevice->deviceType(); + } + switch (deviceType()) + { + case Solid::DeviceInterface::Processor: + { + const Solid::Processor *left = tiedDevice.as(); + const Solid::Processor *right = otherDevice->tiedDevice.as(); + return left->number() > right->number(); + } + case Solid::DeviceInterface::StorageVolume: + { + return other.text(0) < text(0); + } + default: + break; + } + } + return text(0) < other.text(0); +} \ No newline at end of file