From 8d30497f716d17e1062f0dea28d759e458b8397e Mon Sep 17 00:00:00 2001 From: Zakhar Afonin Date: Mon, 17 Jun 2024 12:09:21 +0300 Subject: [PATCH] Fix for necessary roles not being fetched before grouping. Visual polish --- src/kitemviews/kfileitemmodel.cpp | 31 +++++++++++++++++++++++++- src/views/dolphinviewactionhandler.cpp | 9 ++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index afe8f71c4e..10d9e50e34 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -1690,7 +1690,7 @@ void KFileItemModel::removeItems(const KItemRangeList &itemRanges, RemoveItemsBe QList 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 &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) diff --git a/src/views/dolphinviewactionhandler.cpp b/src/views/dolphinviewactionhandler.cpp index c215f1bf75..ccf4ca1194 100644 --- a/src/views/dolphinviewactionhandler.cpp +++ b/src/views/dolphinviewactionhandler.cpp @@ -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()); }