#include <QGraphicsView>
#include <QPainter>
#include <QTimer>
+#include <QIcon>
+#include <QMimeDatabase>
// #define KFILEITEMLISTVIEW_DEBUG
QPixmap pixmap = model()->data(index).value("iconPixmap").value<QPixmap>();
if (pixmap.isNull()) {
QIcon icon = QIcon::fromTheme(model()->data(index).value("iconName").toString());
- pixmap = icon.pixmap(size, size);
+ if (icon.isNull()) {
+ icon = QIcon::fromTheme("unknown");
+ }
+ if (!icon.isNull()) {
+ pixmap = icon.pixmap(size, size);
+ } else {
+ pixmap = QPixmap(size, size);
+ pixmap.fill(Qt::transparent);
+ }
} else {
KPixmapModifier::scale(pixmap, QSize(size, size) * dpr);
}
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"});
}
}
// KFileItemModel does not distinct between "visible" and "invisible" roles.
// Add all roles that are mandatory for having a working KFileItemListView:
- QSet<QByteArray> roles = visibleRoles().toSet();
+ const auto visibleRoles = this->visibleRoles();
+ auto roles = QSet<QByteArray>(visibleRoles.constBegin(), visibleRoles.constEnd());
roles.insert("iconPixmap");
roles.insert("iconName");
roles.insert("text");