1
0
mirror of https://invent.kde.org/system/dolphin synced 2024-06-30 15:36:30 +00:00

Fix for necessary roles not being fetched before grouping. Visual polish

This commit is contained in:
Zakhar Afonin 2024-06-17 12:09:21 +03:00
parent 187933a7a6
commit 8d30497f71
2 changed files with 39 additions and 1 deletions

View 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)

View 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());
}