diff --git a/autotests/kfileplacesmodeltest.cpp b/autotests/kfileplacesmodeltest.cpp --- a/autotests/kfileplacesmodeltest.cpp +++ b/autotests/kfileplacesmodeltest.cpp @@ -76,6 +76,8 @@ void testConvertedUrl(); void testBookmarkObject(); void testDataChangedSignal(); + void testIconRole_data(); + void testIconRole(); private: QStringList placesUrls() const; @@ -929,6 +931,38 @@ QCOMPARE(dataChangedSpy.count(), 1); } +void KFilePlacesModelTest::testIconRole_data() +{ + QTest::addColumn("index"); + QTest::addColumn("expectedIconName"); + + // places + QTest::newRow("Places - Home") << m_places->index(0, 0) + << QStringLiteral("user-home"); + QTest::newRow("Places - Root") << m_places->index(1, 0) + << QStringLiteral("folder-red"); + QTest::newRow("Places - Trash") << m_places->index(2, 0) + << QStringLiteral("user-trash-full"); + QTest::newRow("Remote - Network") << m_places->index(3, 0) + << QStringLiteral("network-workgroup"); + QTest::newRow("Devices - Nfs") << m_places->index(4, 0) + << QStringLiteral("hwinfo"); + QTest::newRow("Devices - foreign") << m_places->index(5, 0) + << QStringLiteral("blockdevice"); + QTest::newRow("Devices - Floppy") << m_places->index(6, 0) + << QStringLiteral("blockdevice"); + QTest::newRow("Devices - cdrom") << m_places->index(7, 0) + << QStringLiteral("blockdevice"); +} + +void KFilePlacesModelTest::testIconRole() +{ + QFETCH(QModelIndex, index); + QFETCH(QString, expectedIconName); + + QCOMPARE(index.data(KFilePlacesModel::IconNameRole).toString(), expectedIconName); +} + QTEST_MAIN(KFilePlacesModelTest) #include "kfileplacesmodeltest.moc" diff --git a/src/filewidgets/kfileplacesitem.cpp b/src/filewidgets/kfileplacesitem.cpp --- a/src/filewidgets/kfileplacesitem.cpp +++ b/src/filewidgets/kfileplacesitem.cpp @@ -202,6 +202,8 @@ return false; case KFilePlacesModel::HiddenRole: return b.metaDataItem(QStringLiteral("IsHidden")) == QLatin1String("true"); + case KFilePlacesModel::IconNameRole: + return iconNameForBookmark(b); default: return QVariant(); } @@ -253,6 +255,9 @@ case KFilePlacesModel::CapacityBarRecommendedRole: return m_isAccessible && !m_isCdrom; + case KFilePlacesModel::IconNameRole: + return m_iconPath; + default: return QVariant(); } diff --git a/src/filewidgets/kfileplacesmodel.h b/src/filewidgets/kfileplacesmodel.h --- a/src/filewidgets/kfileplacesmodel.h +++ b/src/filewidgets/kfileplacesmodel.h @@ -48,7 +48,9 @@ SetupNeededRole = 0x059A935D, FixedDeviceRole = 0x332896C1, CapacityBarRecommendedRole = 0x1548C5C4, - GroupRole = 0x0a5b64ee + GroupRole = 0x0a5b64ee, + /// @since 5.41 + IconNameRole = 0x00a45c00 }; KFilePlacesModel(QObject *parent = nullptr);