]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemmodel.cpp
Do not rely on KIO source-code compat code
[dolphin.git] / src / kitemviews / kfileitemmodel.cpp
index a175e0bfe0e65076c3711f263708157da079c87d..4463b37ae3f747fc54673c6c6ae9608a6b7e38fc 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <KDirLister>
 #include <KIO/Job>
+#include <KIO/ListJob>
 #include <KLocalizedString>
 #include <KUrlMimeData>
 
@@ -25,7 +26,6 @@
 #include <QRecursiveMutex>
 #include <QTimer>
 #include <QWidget>
-#include <algorithm>
 #include <klazylocalizedstring.h>
 
 Q_GLOBAL_STATIC(QRecursiveMutex, s_collatorMutex)
@@ -99,7 +99,7 @@ KFileItemModel::KFileItemModel(QObject *parent)
     // for a lot of items within a quite small timeslot. To prevent expensive resortings the
     // resorting is postponed until the timer has been exceeded.
     m_resortAllItemsTimer = new QTimer(this);
-    m_resortAllItemsTimer->setInterval(500);
+    m_resortAllItemsTimer->setInterval(50);
     m_resortAllItemsTimer->setSingleShot(true);
     connect(m_resortAllItemsTimer, &QTimer::timeout, this, &KFileItemModel::resortAllItems);
 
@@ -260,6 +260,13 @@ void KFileItemModel::setShowTrashMime(bool show)
     }
 }
 
+void KFileItemModel::scheduleResortAllItems()
+{
+    if (!m_resortAllItemsTimer->isActive()) {
+        m_resortAllItemsTimer->start();
+    }
+}
+
 void KFileItemModel::setShowHiddenFiles(bool show)
 {
     m_dirLister->setShowHiddenFiles(show);
@@ -1196,7 +1203,12 @@ void KFileItemModel::slotItemsDeleted(const KFileItemList &items)
 
     for (const KFileItem &item : items) {
         if (item.url() == currentDir) {
-            Q_EMIT currentDirectoryRemoved();
+            // #473377: Delay emitting currentDirectoryRemoved() to avoid modifying KCoreDirLister
+            // before KCoreDirListerCache::deleteDir() returns.
+            QTimer::singleShot(0, this, [this] {
+                Q_EMIT currentDirectoryRemoved();
+            });
+
             return;
         }