diff options
| author | Kai Uwe Broulik <[email protected]> | 2026-01-31 16:01:25 +0100 |
|---|---|---|
| committer | Méven Car <[email protected]> | 2026-02-04 09:33:26 +0000 |
| commit | 5eafa19e2eca2ea6f6498011b263ca38f9f91e91 (patch) | |
| tree | e43a6e2bfdfccf7407d197b546cb3e684d78b8f4 /src/kitemviews | |
| parent | 18cd144613ce5055c12a4b0ebbb5f81997d18dd5 (diff) | |
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.
Diffstat (limited to 'src/kitemviews')
| -rw-r--r-- | src/kitemviews/kfileitemmodelrolesupdater.cpp | 9 | ||||
| -rw-r--r-- | src/kitemviews/kfileitemmodelrolesupdater.h | 2 |
2 files changed, 6 insertions, 5 deletions
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<QByteArray, QVariant> rolesData(const KFileItem &item, int index); /** |
