]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemlistview.cpp
Merge branch 'release/22.04'
[dolphin.git] / src / kitemviews / kfileitemlistview.cpp
index 75eb1559e39abeaf3b8f093305a3a0cd519a3270..adcc2d79375a74e73cd8d3e5f7b894963cd060d6 100644 (file)
@@ -17,6 +17,8 @@
 #include <QGraphicsView>
 #include <QPainter>
 #include <QTimer>
+#include <QIcon>
+#include <QMimeDatabase>
 
 // #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<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 {
@@ -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<KFileItemListWidget>();
@@ -210,7 +236,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"});
     }
 }
@@ -237,6 +268,7 @@ void KFileItemListView::onModelChanged(KItemModelBase* current, KItemModelBase*
     if (current) {
         m_modelRolesUpdater = new KFileItemModelRolesUpdater(static_cast<KFileItemModel*>(current), this);
         m_modelRolesUpdater->setIconSize(availableIconSize());
+        m_modelRolesUpdater->setScanDirectories(scanDirectories());
 
         applyRolesToModel();
     }