From c5483043139506eb8e6d79d06634dd970debc006 Mon Sep 17 00:00:00 2001 From: Kai Uwe Broulik Date: Fri, 28 Nov 2025 22:12:08 +0100 Subject: 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. --- src/kitemviews/kfileitemmodelrolesupdater.cpp | 33 ++++----------------------- 1 file changed, 5 insertions(+), 28 deletions(-) (limited to 'src/kitemviews') 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); - - 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(); + const KFileItemList items = m_pendingPreviewItems; + m_pendingPreviewItems.clear(); - 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()); } -- cgit v1.3