]> cloud.milkyroute.net Git - dolphin.git/commitdiff
make sure we use valid icons
authorMartin T. H. Sandsmark <martin.sandsmark@kde.org>
Fri, 25 Sep 2020 16:40:20 +0000 (18:40 +0200)
committerElvis Angelaccio <elvis.angelaccio@kde.org>
Sun, 1 Nov 2020 22:17:17 +0000 (22:17 +0000)
src/kitemviews/kfileitemlistview.cpp
src/kitemviews/kfileitemmodel.cpp
src/kitemviews/kfileitemmodelrolesupdater.cpp

index 75eb1559e39abeaf3b8f093305a3a0cd519a3270..6086eb8a270e283682166e2594870faabf08db8f 100644 (file)
@@ -17,6 +17,8 @@
 #include <QGraphicsView>
 #include <QPainter>
 #include <QTimer>
+#include <QIcon>
+#include <QMimeDatabase>
 
 // #define KFILEITEMLISTVIEW_DEBUG
 
@@ -168,6 +170,9 @@ QPixmap KFileItemListView::createDragPixmap(const KItemSet& indexes) const
         QPixmap pixmap = model()->data(index).value("iconPixmap").value<QPixmap>();
         if (pixmap.isNull()) {
             QIcon icon = QIcon::fromTheme(model()->data(index).value("iconName").toString());
+            if (icon.isNull()) {
+                icon = QIcon::fromTheme("unknown");
+            }
             if (!icon.isNull()) {
                 pixmap = icon.pixmap(size, size);
             } else {
@@ -210,7 +215,12 @@ void KFileItemListView::initializeItemListWidget(KItemListWidget* item)
         KFileItemModel* fileItemModel = static_cast<KFileItemModel*>(model());
 
         const KFileItem fileItem = fileItemModel->fileItem(item->index());
-        data.insert("iconName", fileItem.iconName());
+        QString iconName = fileItem.iconName();
+        if (!QIcon::hasThemeIcon(iconName)) {
+            QMimeDatabase mimeDb;
+            iconName = mimeDb.mimeTypeForName(fileItem.mimetype()).genericIconName();
+        }
+        data.insert("iconName", iconName);
         item->setData(data, {"iconName"});
     }
 }
index 08407d1efb047cd1c9a1cbc66b2c8023afb2c5d6..c06202fd82fb84cc8aa2ca2d568901ca2d63972e 100644 (file)
 
 #include <QElapsedTimer>
 #include <QMimeData>
+#include <QMimeDatabase>
 #include <QTimer>
 #include <QWidget>
 #include <QMutex>
+#include <QIcon>
 
 Q_GLOBAL_STATIC_WITH_ARGS(QMutex, s_collatorMutex, (QMutex::Recursive))
 
@@ -1657,7 +1659,13 @@ QHash<QByteArray, QVariant> KFileItemModel::retrieveData(const KFileItem& item,
     }
 
     if (item.isMimeTypeKnown()) {
-        data.insert(sharedValue("iconName"), item.iconName());
+        QString iconName = item.iconName();
+        if (!QIcon::hasThemeIcon(iconName)) {
+            QMimeType mimeType = QMimeDatabase().mimeTypeForName(item.mimetype());
+            iconName = mimeType.genericIconName();
+        }
+
+        data.insert(sharedValue("iconName"), iconName);
 
         if (m_requestRole[TypeRole]) {
             data.insert(sharedValue("type"), item.mimeComment());
index 18de05f010fab25545696aa4fc1224915c71848f..05eabbe5e2c8da1a711de22b3058300e55d91d70 100644 (file)
@@ -27,6 +27,7 @@
 #endif
 
 #include <QApplication>
+#include <QIcon>
 #include <QPainter>
 #include <QElapsedTimer>
 #include <QTimer>
@@ -1044,7 +1045,9 @@ bool KFileItemModelRolesUpdater::applyResolvedRoles(int index, ResolveHint hint)
             data = rolesData(item);
         }
 
-        data.insert("iconName", item.iconName());
+        if (QIcon::hasThemeIcon(item.iconName())) {
+            data.insert("iconName", item.iconName());
+        }
 
         if (m_clearPreviews) {
             data.insert("iconPixmap", QPixmap());