]> cloud.milkyroute.net Git - dolphin.git/commitdiff
KFileItemModel: DetailsModeSettings::directorySizeCount forces m_sortDirsFirst
authorMéven Car <meven29@gmail.com>
Thu, 11 Mar 2021 07:09:18 +0000 (08:09 +0100)
committerMéven Car <meven29@gmail.com>
Mon, 5 Apr 2021 12:27:47 +0000 (14:27 +0200)
Before this patch when !m_sortDirsFirst and DetailsModeSettings::directorySizeCount() == true, the ordering of folders before files would be affected by the sortOrder. I.e descending order would put the folders after the files.

src/kitemviews/kfileitemmodel.cpp

index b000d649c13cd675bd3bb2e3a6f8293d4ab2a5cc..da15ccbddffc338ab6239001f3f7833583f5c4cf 100644 (file)
@@ -1719,7 +1719,7 @@ bool KFileItemModel::lessThan(const ItemData* a, const ItemData* b, const QColla
         }
     }
 
-    if (m_sortDirsFirst) {
+    if (m_sortDirsFirst || (DetailsModeSettings::directorySizeCount() && m_sortRole == SizeRole)) {
         const bool isDirA = a->item.isDir();
         const bool isDirB = b->item.isDir();
         if (isDirA && !isDirB) {
@@ -1768,30 +1768,25 @@ int KFileItemModel::sortRoleCompare(const ItemData* a, const ItemData* b, const
         break;
 
     case SizeRole: {
-        if (DetailsModeSettings::directorySizeCount() && (itemA.isDir() || itemB.isDir())) {
+        if (DetailsModeSettings::directorySizeCount() && itemA.isDir()) {
             // folders first then
-            if (itemA.isDir() && itemB.isDir()) {
-                auto valueA = a->values.value("count");
-                auto valueB = b->values.value("count");
-                if (valueA.isNull()) {
-                    if (valueB.isNull()) {
-                        return 0;
-                    } else {
-                        return -1;
-                    }
-                } else if (valueB.isNull()) {
-                    return +1;
+            // items A and B are folders thanks to lessThan checks
+            auto valueA = a->values.value("count");
+            auto valueB = b->values.value("count");
+            if (valueA.isNull()) {
+                if (valueB.isNull()) {
+                    return 0;
                 } else {
-                    if (valueA.toLongLong() < valueB.toLongLong()) {
-                        return -1;
-                    } else {
-                        return +1;
-                    }
+                    return -1;
                 }
-            } else if (itemA.isDir()) {
-                return 1;
+            } else if (valueB.isNull()) {
+                return +1;
             } else {
-                return -1;
+                if (valueA.toLongLong() < valueB.toLongLong()) {
+                    return -1;
+                } else {
+                    return +1;
+                }
             }
         }
         KIO::filesize_t sizeA = 0;