From 63b26cbf2c849f724b7e2f5c8f40f6883d6278e5 Mon Sep 17 00:00:00 2001 From: Frank Reininghaus Date: Fri, 12 Jul 2013 08:27:04 +0200 Subject: Load unknown icons for items just before showing items in the view Rather than loading many icons (without full mime type determination) in advance, we make sure that an item has an icon just before it is shown in the view. This makes sure that no "unknown" icons are shown unnecessarily, and saves some resources. REVIEW: 111396 --- src/kitemviews/kfileitemmodelrolesupdater.cpp | 78 ++------------------------- 1 file changed, 3 insertions(+), 75 deletions(-) (limited to 'src/kitemviews/kfileitemmodelrolesupdater.cpp') diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp index eaaab6bc0..317a7a352 100644 --- a/src/kitemviews/kfileitemmodelrolesupdater.cpp +++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp @@ -89,8 +89,6 @@ KFileItemModelRolesUpdater::KFileItemModelRolesUpdater(KFileItemModel* model, QO m_resolvableRoles(), m_enabledPlugins(), m_pendingSortRoleItems(), - m_hasUnknownIcons(false), - m_firstIndexWithoutIcon(0), m_pendingIndexes(), m_pendingPreviewItems(), m_previewJob(), @@ -333,10 +331,6 @@ void KFileItemModelRolesUpdater::slotItemsInserted(const KItemRangeList& itemRan QElapsedTimer timer; timer.start(); - const int firstInsertedIndex = itemRanges.first().index; - m_firstIndexWithoutIcon = qMin(m_firstIndexWithoutIcon, firstInsertedIndex); - m_hasUnknownIcons = true; - // Determine the sort role synchronously for as many items as possible. if (m_resolvableRoles.contains(m_model->sortRole())) { int insertedCount = 0; @@ -373,11 +367,6 @@ void KFileItemModelRolesUpdater::slotItemsRemoved(const KItemRangeList& itemRang const bool allItemsRemoved = (m_model->count() == 0); - if (m_hasUnknownIcons) { - const int firstRemovedIndex = itemRanges.first().index; - m_firstIndexWithoutIcon = qMin(m_firstIndexWithoutIcon, firstRemovedIndex); - } - if (!m_watchedDirs.isEmpty()) { // Don't let KDirWatch watch for removed items if (allItemsRemoved) { @@ -459,11 +448,6 @@ void KFileItemModelRolesUpdater::slotItemsMoved(const KItemRange& itemRange, QLi Q_UNUSED(itemRange); Q_UNUSED(movedToIndexes); - if (m_hasUnknownIcons) { - const int firstMovedIndex = itemRange.index; - m_firstIndexWithoutIcon = qMin(m_firstIndexWithoutIcon, firstMovedIndex); - } - // The visible items might have changed. startUpdating(); } @@ -829,13 +813,6 @@ void KFileItemModelRolesUpdater::startUpdating() // Determine the icons for the visible items synchronously. updateVisibleIcons(); - // Try to do at least a fast icon loading (without determining the - // mime type) for all items, to reduce the risk that the user sees - // "unknown" icons when scrolling. - if (m_hasUnknownIcons) { - updateAllIconsFast(MaxBlockTimeout - timer.elapsed()); - } - // A detailed update of the items in and near the visible area // only makes sense if sorting is finished. if (m_state == ResolvingSortRole) { @@ -887,58 +864,9 @@ void KFileItemModelRolesUpdater::updateVisibleIcons() applyResolvedRoles(item, ResolveFast); } - if (index > lastVisibleIndex) { - return; - } - - // If this didn't work before MaxBlockTimeout was reached, at least - // prevent that the user sees 'unknown' icons. - disconnect(m_model, SIGNAL(itemsChanged(KItemRangeList,QSet)), - this, SLOT(slotItemsChanged(KItemRangeList,QSet))); - - while (index <= lastVisibleIndex) { - if (!m_model->data(index).contains("iconName")) { - const KFileItem item = m_model->fileItem(index); - QHash data; - data.insert("iconName", item.iconName()); - m_model->setData(index, data); - } - ++index; - } - - connect(m_model, SIGNAL(itemsChanged(KItemRangeList,QSet)), - this, SLOT(slotItemsChanged(KItemRangeList,QSet))); -} - -void KFileItemModelRolesUpdater::updateAllIconsFast(int timeout) -{ - if (timeout <= 0) { - return; - } - - QElapsedTimer timer; - timer.start(); - - disconnect(m_model, SIGNAL(itemsChanged(KItemRangeList,QSet)), - this, SLOT(slotItemsChanged(KItemRangeList,QSet))); - - const int count = m_model->count(); - while (m_firstIndexWithoutIcon < count && timer.elapsed() < timeout) { - if (!m_model->data(m_firstIndexWithoutIcon).contains("iconName")) { - const KFileItem item = m_model->fileItem(m_firstIndexWithoutIcon); - QHash data; - data.insert("iconName", item.iconName()); - m_model->setData(m_firstIndexWithoutIcon, data); - } - ++m_firstIndexWithoutIcon; - } - - if (m_firstIndexWithoutIcon == count) { - m_hasUnknownIcons = false; - } - - connect(m_model, SIGNAL(itemsChanged(KItemRangeList,QSet)), - this, SLOT(slotItemsChanged(KItemRangeList,QSet))); + // KFileItemListView::initializeItemListWidget(KItemListWidget*) will load + // preliminary icons (i.e., without mime type determination) for the + // remaining items. } void KFileItemModelRolesUpdater::startPreviewJob() -- cgit v1.3