┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/private/kfileitemmodelsortalgorithm.cpp
diff options
context:
space:
mode:
authorFrank Reininghaus <[email protected]>2013-01-11 17:24:05 +0100
committerFrank Reininghaus <[email protected]>2013-01-11 17:24:05 +0100
commit1e2481c9748252e8e323cbee959aec036d582bd7 (patch)
treed81b283f66609d4ce6360772d06292a0aa6811d8 /src/kitemviews/private/kfileitemmodelsortalgorithm.cpp
parent1877eb74e8eaf93cc9a3771d4643ce0d34d7d8d7 (diff)
parentd3b92d2d670f39aee1b48e676cdfa4067211f515 (diff)
Merge remote-tracking branch 'origin/KDE/4.10'
Diffstat (limited to 'src/kitemviews/private/kfileitemmodelsortalgorithm.cpp')
-rw-r--r--src/kitemviews/private/kfileitemmodelsortalgorithm.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/kitemviews/private/kfileitemmodelsortalgorithm.cpp b/src/kitemviews/private/kfileitemmodelsortalgorithm.cpp
index 9588d19bf..ab650efea 100644
--- a/src/kitemviews/private/kfileitemmodelsortalgorithm.cpp
+++ b/src/kitemviews/private/kfileitemmodelsortalgorithm.cpp
@@ -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,