]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/private/kfileitemmodelsortalgorithm.cpp
Allow renaming multiple files without number if extensions are different
[dolphin.git] / src / kitemviews / private / kfileitemmodelsortalgorithm.cpp
index 63eaea55784a3b45e91106245f5bdd636e2bfadd..ab650efea1e66451309f542081ede7c83b31ae36 100644 (file)
@@ -26,8 +26,17 @@ void KFileItemModelSortAlgorithm::sort(KFileItemModel* model,
                                        QList<KFileItemModel::ItemData*>::iterator begin,
                                        QList<KFileItemModel::ItemData*>::iterator end)
 {
-    static const int numberOfThreads = QThread::idealThreadCount();
-    parallelSort(model, begin, end, numberOfThreads);
+    if (model->sortRole() == model->roleForType(KFileItemModel::NameRole)) {
+        // Sorting by name can be expensive, in particular if natural sorting is
+        // enabled. Use all CPU cores to speed up the sorting process.
+        static const int numberOfThreads = QThread::idealThreadCount();
+        parallelSort(model, begin, end, numberOfThreads);
+    } else {
+        // Sorting by other roles is quite fast. Use only one thread to prevent
+        // problems caused by non-reentrant comparison functions, see
+        // https://bugs.kde.org/show_bug.cgi?id=312679
+        sequentialSort(model, begin, end);
+    }
 }
 
 void KFileItemModelSortAlgorithm::sequentialSort(KFileItemModel* model,
@@ -43,8 +52,8 @@ void KFileItemModelSortAlgorithm::sequentialSort(KFileItemModel* model,
     }
 
     const QList<KFileItemModel::ItemData*>::iterator middle = begin + span / 2;
-    sort(model, begin, middle);
-    sort(model, middle, end);
+    sequentialSort(model, begin, middle);
+    sequentialSort(model, middle, end);
     merge(model, begin, middle, end);
 }