diff options
| author | Frank Reininghaus <[email protected]> | 2013-01-11 17:24:05 +0100 |
|---|---|---|
| committer | Frank Reininghaus <[email protected]> | 2013-01-11 17:24:05 +0100 |
| commit | 1e2481c9748252e8e323cbee959aec036d582bd7 (patch) | |
| tree | d81b283f66609d4ce6360772d06292a0aa6811d8 /src/kitemviews/private/kfileitemmodelsortalgorithm.cpp | |
| parent | 1877eb74e8eaf93cc9a3771d4643ce0d34d7d8d7 (diff) | |
| parent | d3b92d2d670f39aee1b48e676cdfa4067211f515 (diff) | |
Merge remote-tracking branch 'origin/KDE/4.10'
Diffstat (limited to 'src/kitemviews/private/kfileitemmodelsortalgorithm.cpp')
| -rw-r--r-- | src/kitemviews/private/kfileitemmodelsortalgorithm.cpp | 13 |
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, |
