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