]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemmodel.cpp
Avoid sorting too frequently
[dolphin.git] / src / kitemviews / kfileitemmodel.cpp
index b71a4325b86bf951331bf449df5fb34604931cf1..81c3be64050a7f89d402a7e8f1b0102990de04e6 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,13 +99,14 @@ 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(100); // 100 is a middle ground between sorting too frequently which makes the view unreadable
+                                             // and sorting too infrequently which leads to users seeing an outdated sort order.
     m_resortAllItemsTimer->setSingleShot(true);
     connect(m_resortAllItemsTimer, &QTimer::timeout, this, &KFileItemModel::resortAllItems);
 
     connect(GeneralSettings::self(), &GeneralSettings::sortingChoiceChanged, this, &KFileItemModel::slotSortingChoiceChanged);
 
-    setShowTrashMime(m_dirLister->showHiddenFiles());
+    setShowTrashMime(m_dirLister->showHiddenFiles() || !GeneralSettings::hideXTrashFile());
 }
 
 KFileItemModel::~KFileItemModel()
@@ -239,31 +240,31 @@ bool KFileItemModel::sortHiddenLast() const
     return m_sortHiddenLast;
 }
 
-void KFileItemModel::setShowTrashMime(bool show)
+void KFileItemModel::setShowTrashMime(bool showTrashMime)
 {
     const auto trashMime = QStringLiteral("application/x-trash");
     QStringList excludeFilter = m_filter.excludeMimeTypes();
-    bool wasShown = !excludeFilter.contains(trashMime);
 
-    if (show) {
-        if (!wasShown) {
-            excludeFilter.removeAll(trashMime);
-        }
-    } else {
-        if (wasShown) {
-            excludeFilter.append(trashMime);
-        }
+    if (showTrashMime) {
+        excludeFilter.removeAll(trashMime);
+    } else if (!excludeFilter.contains(trashMime)) {
+        excludeFilter.append(trashMime);
     }
 
-    if (wasShown != show) {
-        setExcludeMimeTypeFilter(excludeFilter);
+    setExcludeMimeTypeFilter(excludeFilter);
+}
+
+void KFileItemModel::scheduleResortAllItems()
+{
+    if (!m_resortAllItemsTimer->isActive()) {
+        m_resortAllItemsTimer->start();
     }
 }
 
 void KFileItemModel::setShowHiddenFiles(bool show)
 {
     m_dirLister->setShowHiddenFiles(show);
-    setShowTrashMime(show);
+    setShowTrashMime(show || !GeneralSettings::hideXTrashFile());
     m_dirLister->emitChanges();
     if (show) {
         dispatchPendingItemsToInsert();
@@ -981,7 +982,7 @@ void KFileItemModel::resortAllItems()
     // been moved because of the resorting.
     QList<QUrl> oldUrls;
     oldUrls.reserve(itemCount);
-    for (const ItemData *itemData : qAsConst(m_itemData)) {
+    for (const ItemData *itemData : std::as_const(m_itemData)) {
         oldUrls.append(itemData->item.url());
     }
 
@@ -1226,7 +1227,7 @@ void KFileItemModel::slotItemsDeleted(const KFileItemList &items)
         indexesToRemoveWithChildren.reserve(m_itemData.count());
 
         const int itemCount = m_itemData.count();
-        for (int index : qAsConst(indexesToRemove)) {
+        for (int index : std::as_const(indexesToRemove)) {
             indexesToRemoveWithChildren.append(index);
 
             const int parentLevel = expandedParentsCount(index);
@@ -1644,7 +1645,7 @@ void KFileItemModel::prepareItemsForSorting(QList<ItemData *> &itemDataList)
     case DeletionTimeRole:
         // These roles can be determined with retrieveData, and they have to be stored
         // in the QHash "values" for the sorting.
-        for (ItemData *itemData : qAsConst(itemDataList)) {
+        for (ItemData *itemData : std::as_const(itemDataList)) {
             if (itemData->values.isEmpty()) {
                 itemData->values = retrieveData(itemData->item, itemData->parent);
             }
@@ -1653,7 +1654,7 @@ void KFileItemModel::prepareItemsForSorting(QList<ItemData *> &itemDataList)
 
     case TypeRole:
         // At least store the data including the file type for items with known MIME type.
-        for (ItemData *itemData : qAsConst(itemDataList)) {
+        for (ItemData *itemData : std::as_const(itemDataList)) {
             if (itemData->values.isEmpty()) {
                 const KFileItem item = itemData->item;
                 if (item.isDir() || item.isMimeTypeKnown()) {