From: Frank Reininghaus Date: Tue, 12 Mar 2013 18:26:36 +0000 (+0100) Subject: Fix recent regressions when "Sort by Type" is used X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/a97fe0c7ffa56ccba8899b773e9e67d94799f9ae Fix recent regressions when "Sort by Type" is used This commit ensures that the mime types and icons are determined synchronously for 200 ms when "Sort by Type" is enabled. REVIEW: 109344 --- diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 61703e760..40cd75094 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -984,13 +984,6 @@ void KFileItemModel::insertItems(QList& items) return; } - if (m_sortRole == TypeRole) { - // Try to resolve the MIME-types synchronously to prevent a reordering of - // the items when sorting by type (per default MIME-types are resolved - // asynchronously by KFileItemModelRolesUpdater). - determineMimeTypes(items, 200); - } - #ifdef KFILEITEMMODEL_DEBUG QElapsedTimer timer; timer.start(); @@ -1160,6 +1153,13 @@ void KFileItemModel::removeItems(const KFileItemList& items, RemoveItemsBehavior QList KFileItemModel::createItemDataList(const KUrl& parentUrl, const KFileItemList& items) const { + if (m_sortRole == TypeRole) { + // Try to resolve the MIME-types synchronously to prevent a reordering of + // the items when sorting by type (per default MIME-types are resolved + // asynchronously by KFileItemModelRolesUpdater). + determineMimeTypes(items, 200); + } + const int parentIndex = m_items.value(parentUrl, -1); ItemData* parentItem = parentIndex < 0 ? 0 : m_itemData.at(parentIndex); @@ -1956,12 +1956,12 @@ const KFileItemModel::RoleInfoMap* KFileItemModel::rolesInfoMap(int& count) return rolesInfoMap; } -void KFileItemModel::determineMimeTypes(const QList& items, int timeout) +void KFileItemModel::determineMimeTypes(const KFileItemList& items, int timeout) { QElapsedTimer timer; timer.start(); - foreach (const ItemData* itemData, items) { // krazy:exclude=foreach - itemData->item.determineMimeType(); + foreach (const KFileItem& item, items) { // krazy:exclude=foreach + item.determineMimeType(); if (timer.elapsed() > timeout) { // Don't block the user interface, let the remaining items // be resolved asynchronously. diff --git a/src/kitemviews/kfileitemmodel.h b/src/kitemviews/kfileitemmodel.h index 1939671a5..85a8d0c0d 100644 --- a/src/kitemviews/kfileitemmodel.h +++ b/src/kitemviews/kfileitemmodel.h @@ -421,7 +421,7 @@ private: * Determines the MIME-types of all items that can be done within * the given timeout. */ - static void determineMimeTypes(const QList& items, int timeout); + static void determineMimeTypes(const KFileItemList& items, int timeout); /** * Checks if the model's internal data structures are consistent.