diff --git a/src/kitemviews/kfileitemlistview.cpp b/src/kitemviews/kfileitemlistview.cpp index 75eb1559e3..6086eb8a27 100644 --- a/src/kitemviews/kfileitemlistview.cpp +++ b/src/kitemviews/kfileitemlistview.cpp @@ -17,6 +17,8 @@ #include #include #include +#include +#include // #define KFILEITEMLISTVIEW_DEBUG @@ -168,6 +170,9 @@ QPixmap KFileItemListView::createDragPixmap(const KItemSet& indexes) const QPixmap pixmap = model()->data(index).value("iconPixmap").value(); 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(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"}); } } diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 08407d1efb..c06202fd82 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -19,9 +19,11 @@ #include #include +#include #include #include #include +#include Q_GLOBAL_STATIC_WITH_ARGS(QMutex, s_collatorMutex, (QMutex::Recursive)) @@ -1657,7 +1659,13 @@ QHash 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()); diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp index 18de05f010..05eabbe5e2 100644 --- a/src/kitemviews/kfileitemmodelrolesupdater.cpp +++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp @@ -27,6 +27,7 @@ #endif #include +#include #include #include #include @@ -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());