]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemmodel.cpp
Disable Hidden Files Last sort by default
[dolphin.git] / src / kitemviews / kfileitemmodel.cpp
index 9441bc8714c4ad6cd020b90b782dec060c2a9f41..af8cfc13126e5c935d8039a8ae4f90e4577060ad 100644 (file)
@@ -34,6 +34,7 @@ KFileItemModel::KFileItemModel(QObject* parent) :
     KItemModelBase("text", parent),
     m_dirLister(nullptr),
     m_sortDirsFirst(true),
+    m_sortHiddenLast(false),
     m_sortRole(NameRole),
     m_sortingProgressPercent(-1),
     m_roles(),
@@ -212,6 +213,19 @@ bool KFileItemModel::sortDirectoriesFirst() const
     return m_sortDirsFirst;
 }
 
+void KFileItemModel::setSortHiddenLast(bool hiddenLast)
+{
+    if (hiddenLast != m_sortHiddenLast) {
+        m_sortHiddenLast = hiddenLast;
+        resortAllItems();
+    }
+}
+
+bool KFileItemModel::sortHiddenLast() const
+{
+    return m_sortHiddenLast;
+}
+
 void KFileItemModel::setShowHiddenFiles(bool show)
 {
     m_dirLister->setShowingDotFiles(show);
@@ -1734,12 +1748,14 @@ bool KFileItemModel::lessThan(const ItemData* a, const ItemData* b, const QColla
     }
 
     // Show hidden files and folders last
-    const bool isHiddenA = a->item.isHidden();
-    const bool isHiddenB = b->item.isHidden();
-    if (isHiddenA && !isHiddenB) {
-        return false;
-    } else if (!isHiddenA && isHiddenB) {
-        return true;
+    if (m_sortHiddenLast) {
+        const bool isHiddenA = a->item.isHidden();
+        const bool isHiddenB = b->item.isHidden();
+        if (isHiddenA && !isHiddenB) {
+            return false;
+        } else if (!isHiddenA && isHiddenB) {
+            return true;
+        }
     }
 
     if (m_sortDirsFirst || (DetailsModeSettings::directorySizeCount() && m_sortRole == SizeRole)) {
@@ -1798,17 +1814,25 @@ int KFileItemModel::sortRoleCompare(const ItemData* a, const ItemData* b, const
             auto valueB = b->values.value("count");
             if (valueA.isNull()) {
                 if (valueB.isNull()) {
-                    return 0;
+                    result = 0;
+                    break;
                 } else {
-                    return -1;
+                    result = -1;
+                    break;
                 }
             } else if (valueB.isNull()) {
-                return +1;
+                result = +1;
+                break;
             } else {
                 if (valueA.toLongLong() < valueB.toLongLong()) {
-                    return -1;
+                    result = -1;
+                    break;
+                } else if (valueA.toLongLong() > valueB.toLongLong()) {
+                    result = +1;
+                    break;
                 } else {
-                    return +1;
+                    result = 0;
+                    break;
                 }
             }
         }