From 5eafa19e2eca2ea6f6498011b263ca38f9f91e91 Mon Sep 17 00:00:00 2001 From: Kai Uwe Broulik Date: Sat, 31 Jan 2026 16:01:25 +0100 Subject: KFileItemModelRolesUpdater: Use mime type from preview job, if any The preview job does an async stat on the file, so we might as well use its information to determine the icon. Also only determine mime type in the final "ResolveAll" step since it will initially resolve roles but mime type isn't necessarily fast. --- src/kitemviews/kfileitemmodelrolesupdater.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/kitemviews/kfileitemmodelrolesupdater.cpp') diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp index 679370455..5e68b29e3 100644 --- a/src/kitemviews/kfileitemmodelrolesupdater.cpp +++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp @@ -577,6 +577,7 @@ void KFileItemModelRolesUpdater::slotGotPreview(const KFileItem &item, const QPi connect(m_model, &KFileItemModel::itemsChanged, this, &KFileItemModelRolesUpdater::slotItemsChanged); Q_EMIT previewJobFinished(); // For unit testing + applyResolvedRoles(index, ResolveAll, item); m_finishedItems.insert(item); } @@ -597,7 +598,7 @@ void KFileItemModelRolesUpdater::slotPreviewFailed(const KFileItem &item) m_model->setData(index, data); connect(m_model, &KFileItemModel::itemsChanged, this, &KFileItemModelRolesUpdater::slotItemsChanged); - applyResolvedRoles(index, ResolveAll); + applyResolvedRoles(index, ResolveAll, item); m_finishedItems.insert(item); } } @@ -1222,13 +1223,13 @@ void KFileItemModelRolesUpdater::applySortProgressToModel() m_model->emitSortProgress(resolvedCount); } -bool KFileItemModelRolesUpdater::applyResolvedRoles(int index, ResolveHint hint) +bool KFileItemModelRolesUpdater::applyResolvedRoles(int index, ResolveHint hint, const KFileItem &referenceItem) { - const KFileItem item = m_model->fileItem(index); + const KFileItem item = !referenceItem.isNull() && referenceItem.isMimeTypeKnown() ? referenceItem : m_model->fileItem(index); const bool resolveAll = (hint == ResolveAll); bool iconChanged = false; - if (!item.isMimeTypeKnown() || !item.isFinalIconKnown()) { + if (resolveAll && (!item.isMimeTypeKnown() || !item.isFinalIconKnown())) { item.determineMimeType(); iconChanged = true; } else if (!m_model->data(index).contains("iconName")) { -- cgit v1.3