X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/891ebf5758cd3569974c87f3c25f0546fe2613be..63124f569ca8f6dec6431c667f02d2f985db2979:/src/kitemviews/kfileitemlistview.cpp diff --git a/src/kitemviews/kfileitemlistview.cpp b/src/kitemviews/kfileitemlistview.cpp index 75eb1559e..adcc2d793 100644 --- a/src/kitemviews/kfileitemlistview.cpp +++ b/src/kitemviews/kfileitemlistview.cpp @@ -17,6 +17,8 @@ #include #include #include +#include +#include // #define KFILEITEMLISTVIEW_DEBUG @@ -37,7 +39,8 @@ KFileItemListView::KFileItemListView(QGraphicsWidget* parent) : KStandardItemListView(parent), m_modelRolesUpdater(nullptr), m_updateVisibleIndexRangeTimer(nullptr), - m_updateIconSizeTimer(nullptr) + m_updateIconSizeTimer(nullptr), + m_scanDirectories(true) { setAcceptDrops(true); @@ -115,6 +118,19 @@ qlonglong KFileItemListView::localFileSizePreviewLimit() const return m_modelRolesUpdater ? m_modelRolesUpdater->localFileSizePreviewLimit() : 0; } +void KFileItemListView::setScanDirectories(bool enabled) +{ + m_scanDirectories = enabled; + if (m_modelRolesUpdater) { + m_modelRolesUpdater->setScanDirectories(m_scanDirectories); + } +} + +bool KFileItemListView::scanDirectories() +{ + return m_scanDirectories; +} + QPixmap KFileItemListView::createDragPixmap(const KItemSet& indexes) const { if (!model()) { @@ -168,6 +184,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 { @@ -194,6 +213,13 @@ QPixmap KFileItemListView::createDragPixmap(const KItemSet& indexes) const return dragPixmap; } +void KFileItemListView::setHoverSequenceState(const QUrl& itemUrl, int seqIdx) +{ + if (m_modelRolesUpdater) { + m_modelRolesUpdater->setHoverSequenceState(itemUrl, seqIdx); + } +} + KItemListWidgetCreatorBase* KFileItemListView::defaultWidgetCreator() const { return new KItemListWidgetCreator(); @@ -210,7 +236,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"}); } } @@ -237,6 +268,7 @@ void KFileItemListView::onModelChanged(KItemModelBase* current, KItemModelBase* if (current) { m_modelRolesUpdater = new KFileItemModelRolesUpdater(static_cast(current), this); m_modelRolesUpdater->setIconSize(availableIconSize()); + m_modelRolesUpdater->setScanDirectories(scanDirectories()); applyRolesToModel(); }