┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
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
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.
-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());
}