]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Fix recent regressions when "Sort by Type" is used
authorFrank Reininghaus <frank78ac@googlemail.com>
Tue, 12 Mar 2013 18:26:36 +0000 (19:26 +0100)
committerFrank Reininghaus <frank78ac@googlemail.com>
Tue, 12 Mar 2013 18:26:36 +0000 (19:26 +0100)
This commit ensures that the mime types and icons are determined
synchronously for 200 ms when "Sort by Type" is enabled.

REVIEW: 109344

src/kitemviews/kfileitemmodel.cpp
src/kitemviews/kfileitemmodel.h

index 61703e760f5f1f01618ceb27a1023b5fb1d1125c..40cd75094b006041771d0dd2a1701ae8019b4c2d 100644 (file)
@@ -984,13 +984,6 @@ void KFileItemModel::insertItems(QList<ItemData*>& 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::ItemData*> 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<ItemData*>& 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.
index 1939671a5f50ba6fe5b5328512a7271ef9a28cb0..85a8d0c0d35506afe8991b45f0934a30742d2171 100644 (file)
@@ -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<ItemData*>& items, int timeout);
+    static void determineMimeTypes(const KFileItemList& items, int timeout);
 
     /**
      * Checks if the model's internal data structures are consistent.