┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKai Uwe Broulik <[email protected]>2026-01-31 16:01:25 +0100
committerMéven Car <[email protected]>2026-02-04 09:33:26 +0000
commit5eafa19e2eca2ea6f6498011b263ca38f9f91e91 (patch)
treee43a6e2bfdfccf7407d197b546cb3e684d78b8f4 /src
parent18cd144613ce5055c12a4b0ebbb5f81997d18dd5 (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')
-rw-r--r--src/kitemviews/kfileitemmodelrolesupdater.cpp9
-rw-r--r--src/kitemviews/kfileitemmodelrolesupdater.h2
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);
/**