]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Avoid calling KFileItemModel::index() in KFileItemModelRolesUpdater
authorFrank Reininghaus <frank78ac@googlemail.com>
Mon, 6 Jan 2014 19:10:08 +0000 (20:10 +0100)
committerFrank Reininghaus <frank78ac@googlemail.com>
Mon, 6 Jan 2014 19:10:08 +0000 (20:10 +0100)
KFileItemModel allows to find out the index of a KFileItem with its
index(const KFileItem&) method. Calling this method is not extremely
expensive, but it's also not free (it looks up the URL of the KFileItem
in a QHash, i.e., it has to call qHash(QString) for the full URL).

In KFileItemModelRolesUpdater, we sometimes converted the known index to
a KFileItem and then back to an index in applyResolvedRoles(KFileItem).
This patch fixes this by modifying applyResolvedRoles such that it takes
the index directly as its argument.

REVIEW: 114847

src/kitemviews/kfileitemmodelrolesupdater.cpp
src/kitemviews/kfileitemmodelrolesupdater.h

index d6445c981f72dcf5a0aa45851d169b056feff14b..f11d5a5d30b6ca0c3a8093ca9365008fafcc5f64 100644 (file)
@@ -587,7 +587,7 @@ void KFileItemModelRolesUpdater::slotPreviewFailed(const KFileItem& item)
         connect(m_model, SIGNAL(itemsChanged(KItemRangeList,QSet<QByteArray>)),
                 this,    SLOT(slotItemsChanged(KItemRangeList,QSet<QByteArray>)));
 
-        applyResolvedRoles(item, ResolveAll);
+        applyResolvedRoles(index, ResolveAll);
         m_finishedItems.insert(item);
     }
 }
@@ -664,7 +664,7 @@ void KFileItemModelRolesUpdater::resolveNextPendingRoles()
             continue;
         }
 
-        applyResolvedRoles(item, ResolveAll);
+        applyResolvedRoles(index, ResolveAll);
         m_finishedItems.insert(item);
         m_changedItems.remove(item);
         break;
@@ -850,8 +850,7 @@ void KFileItemModelRolesUpdater::updateVisibleIcons()
     // Try to determine the final icons for all visible items.
     int index;
     for (index = m_firstVisibleIndex; index <= lastVisibleIndex && timer.elapsed() < MaxBlockTimeout; ++index) {
-        const KFileItem item = m_model->fileItem(index);
-        applyResolvedRoles(item, ResolveFast);
+        applyResolvedRoles(index, ResolveFast);
     }
 
     // KFileItemListView::initializeItemListWidget(KItemListWidget*) will load
@@ -1024,27 +1023,20 @@ void KFileItemModelRolesUpdater::applySortProgressToModel()
     m_model->emitSortProgress(resolvedCount);
 }
 
-bool KFileItemModelRolesUpdater::applyResolvedRoles(const KFileItem& item, ResolveHint hint)
+bool KFileItemModelRolesUpdater::applyResolvedRoles(int index, ResolveHint hint)
 {
-    if (item.isNull()) {
-        return false;
-    }
-
+    const KFileItem item = m_model->fileItem(index);
     const bool resolveAll = (hint == ResolveAll);
 
     bool iconChanged = false;
     if (!item.isMimeTypeKnown() || !item.isFinalIconKnown()) {
         item.determineMimeType();
         iconChanged = true;
-    } else {
-        const int index = m_model->index(item);
-        if (!m_model->data(index).contains("iconName")) {
-            iconChanged = true;
-        }
+    } else if (!m_model->data(index).contains("iconName")) {
+        iconChanged = true;
     }
 
     if (iconChanged || resolveAll || m_clearPreviews) {
-        const int index = m_model->index(item);
         if (index < 0) {
             return false;
         }
index fced44a85da6be095899c01c7db50253a5b0e082..19207575ed265d05ba5c628b4698f13ac5ba4012 100644 (file)
@@ -261,7 +261,7 @@ private:
         ResolveFast,
         ResolveAll
     };
-    bool applyResolvedRoles(const KFileItem& item, ResolveHint hint);
+    bool applyResolvedRoles(int index, ResolveHint hint);
     QHash<QByteArray, QVariant> rolesData(const KFileItem& item);
 
     /**