┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kfileitemmodelrolesupdater.cpp
diff options
context:
space:
mode:
authorKai Uwe Broulik <[email protected]>2025-11-28 22:12:08 +0100
committerKai Uwe Broulik <[email protected]>2026-01-07 15:57:43 +0000
commitc5483043139506eb8e6d79d06634dd970debc006 (patch)
tree7d0cf976294bfe523e5e9d9a618faefc6d9631f6 /src/kitemviews/kfileitemmodelrolesupdater.cpp
parent3752ab41ba32ab4cc8afb7defb2014ab98178da2 (diff)
KFileItemModelRolesUpdater: Don't resolve mime type manually
It's no longer true that KIO preview would block. It spawns an asynchronous stat job if it needs to determine the mime type.
Diffstat (limited to 'src/kitemviews/kfileitemmodelrolesupdater.cpp')
-rw-r--r--src/kitemviews/kfileitemmodelrolesupdater.cpp33
1 files changed, 5 insertions, 28 deletions
diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp
index 497c13b52..b2c4646a1 100644
--- a/src/kitemviews/kfileitemmodelrolesupdater.cpp
+++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp
@@ -977,37 +977,14 @@ void KFileItemModelRolesUpdater::startPreviewJob()
return;
}
- // KIO::filePreview() will request the MIME-type of all passed items, which (in the
- // worst case) might block the application for several seconds. To prevent such
- // a blocking, we only pass items with known mime type to the preview job.
- const int count = m_pendingPreviewItems.count();
- KFileItemList itemSubSet;
- itemSubSet.reserve(count);
+ const KFileItemList items = m_pendingPreviewItems;
+ m_pendingPreviewItems.clear();
- if (m_pendingPreviewItems.first().isMimeTypeKnown()) {
- // Some mime types are known already, probably because they were
- // determined when loading the icons for the visible items. Start
- // a preview job for all items at the beginning of the list which
- // have a known mime type.
- do {
- itemSubSet.append(m_pendingPreviewItems.takeFirst());
- } while (!m_pendingPreviewItems.isEmpty() && m_pendingPreviewItems.first().isMimeTypeKnown());
- } else {
- // Determine mime types for MaxBlockTimeout ms, and start a preview
- // job for the corresponding items.
- QElapsedTimer timer;
- timer.start();
-
- do {
- const KFileItem item = m_pendingPreviewItems.takeFirst();
- item.determineMimeType();
- itemSubSet.append(item);
- } while (!m_pendingPreviewItems.isEmpty() && timer.elapsed() < MaxBlockTimeout);
- }
+ const KFileItem &referenceItem = items.first();
- KIO::PreviewJob *job = new KIO::PreviewJob(itemSubSet, cacheSize(), &m_enabledPlugins);
+ KIO::PreviewJob *job = new KIO::PreviewJob(items, cacheSize(), &m_enabledPlugins);
job->setDevicePixelRatio(m_devicePixelRatio);
- job->setIgnoreMaximumSize(itemSubSet.first().isLocalFile() && !itemSubSet.first().isSlow() && m_localFileSizePreviewLimit <= 0);
+ job->setIgnoreMaximumSize(referenceItem.isLocalFile() && !referenceItem.isSlow() && m_localFileSizePreviewLimit <= 0);
if (job->uiDelegate()) {
KJobWidgets::setWindow(job, qApp->activeWindow());
}