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 +++++---- src/kitemviews/kfileitemmodelrolesupdater.h | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) (limited to 'src/kitemviews') 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")) { diff --git a/src/kitemviews/kfileitemmodelrolesupdater.h b/src/kitemviews/kfileitemmodelrolesupdater.h index aadcb66f8..ec56d9801 100644 --- a/src/kitemviews/kfileitemmodelrolesupdater.h +++ b/src/kitemviews/kfileitemmodelrolesupdater.h @@ -325,7 +325,7 @@ private: void applySortProgressToModel(); enum ResolveHint { ResolveFast, ResolveAll }; - bool applyResolvedRoles(int index, ResolveHint hint); + bool applyResolvedRoles(int index, ResolveHint hint, const KFileItem &referenceItem = KFileItem()); QHash rolesData(const KFileItem &item, int index); /** -- cgit v1.3