diff options
| author | Kai Uwe Broulik <[email protected]> | 2025-11-28 22:12:08 +0100 |
|---|---|---|
| committer | Kai Uwe Broulik <[email protected]> | 2026-01-07 15:57:43 +0000 |
| commit | c5483043139506eb8e6d79d06634dd970debc006 (patch) | |
| tree | 7d0cf976294bfe523e5e9d9a618faefc6d9631f6 /src/kitemviews/kfileitemmodelrolesupdater.cpp | |
| parent | 3752ab41ba32ab4cc8afb7defb2014ab98178da2 (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.cpp | 33 |
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()); } |
