]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemmodel.cpp
Merge branch 'release/21.08'
[dolphin.git] / src / kitemviews / kfileitemmodel.cpp
index b3080d93387c33c246cef02a5e3539f494fc2ea8..9a2d159f9171310b0864f33349b96d54d07ec082 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(),
@@ -207,6 +208,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);
@@ -1729,12 +1743,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)) {