]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Fix for necessary roles not being fetched before grouping. Visual polish
authorZakhar Afonin <aza22u419@student.bmstu.ru>
Mon, 17 Jun 2024 09:09:21 +0000 (12:09 +0300)
committerZakhar Afonin <aza22u419@student.bmstu.ru>
Mon, 17 Jun 2024 09:09:21 +0000 (12:09 +0300)
src/kitemviews/kfileitemmodel.cpp
src/views/dolphinviewactionhandler.cpp

index afe8f71c4e47f00d44e5172ca769adc115bb8042..10d9e50e34ec040153cf580826ce3482c77e753a 100644 (file)
@@ -1690,7 +1690,7 @@ void KFileItemModel::removeItems(const KItemRangeList &itemRanges, RemoveItemsBe
 
 QList<KFileItemModel::ItemData *> KFileItemModel::createItemDataList(const QUrl &parentUrl, const KFileItemList &items) const
 {
-    if (m_sortRole == TypeRole) {
+    if (m_sortRole == TypeRole || m_groupRole == TypeRole) {
         // Try to resolve the MIME-types synchronously to prevent a reordering of
         // the items when sorting by type (per default MIME-types are resolved
         // asynchronously by KFileItemModelRolesUpdater).
@@ -1753,6 +1753,35 @@ void KFileItemModel::prepareItemsForSorting(QList<ItemData *> &itemDataList)
         // DateRole).
         break;
     }
+    switch (m_groupRole) {
+    case ExtensionRole:
+    case PermissionsRole:
+    case OwnerRole:
+    case GroupRole:
+    case DestinationRole:
+    case PathRole:
+    case DeletionTimeRole:
+        for (ItemData *itemData : std::as_const(itemDataList)) {
+            if (itemData->values.isEmpty()) {
+                itemData->values = retrieveData(itemData->item, itemData->parent);
+            }
+        }
+        break;
+
+    case TypeRole:
+        for (ItemData *itemData : std::as_const(itemDataList)) {
+            if (itemData->values.isEmpty()) {
+                const KFileItem item = itemData->item;
+                if (item.isDir() || item.isMimeTypeKnown()) {
+                    itemData->values = retrieveData(itemData->item, itemData->parent);
+                }
+            }
+        }
+        break;
+
+    default:
+        break;
+    }
 }
 
 int KFileItemModel::expandedParentsCount(const ItemData *data)
index c215f1bf7547429551e196d15a46baa8f6c7eda0..ccf4ca11942506df1fcf17d20f956a3a64c3b7d3 100644 (file)
@@ -796,6 +796,15 @@ void DolphinViewActionHandler::slotGroupRoleChanged(const QByteArray &role)
         ascending->setText(i18nc("Group ascending", "Ascending"));
     }
 
+    // Disable group order selector if grouping behavior does not support it
+    if (role == "none" || role == "followSort") {
+        descending->setEnabled(false);
+        ascending->setEnabled(false);
+    } else {
+        descending->setEnabled(true);
+        ascending->setEnabled(true);
+    }
+
     slotGroupOrderChanged(m_currentView->groupOrder());
 }