diff --git a/src/kitemviews/kfileitemlistview.cpp b/src/kitemviews/kfileitemlistview.cpp index 70ce11b1fb..2da238d7a1 100644 --- a/src/kitemviews/kfileitemlistview.cpp +++ b/src/kitemviews/kfileitemlistview.cpp @@ -190,6 +190,22 @@ KItemListWidgetCreatorBase* KFileItemListView::defaultWidgetCreator() const return new KItemListWidgetCreator(); } +void KFileItemListView::initializeItemListWidget(KItemListWidget* item) +{ + KStandardItemListView::initializeItemListWidget(item); + + // Make sure that the item has an icon. + QHash data = item->data(); + if (!data.contains("iconName") && data["iconPixmap"].value().isNull()) { + Q_ASSERT(qobject_cast(model())); + KFileItemModel* fileItemModel = static_cast(model()); + + const KFileItem fileItem = fileItemModel->fileItem(item->index()); + data.insert("iconName", fileItem.iconName()); + item->setData(data, QSet() << "iconName"); + } +} + void KFileItemListView::onPreviewsShownChanged(bool shown) { Q_UNUSED(shown); diff --git a/src/kitemviews/kfileitemlistview.h b/src/kitemviews/kfileitemlistview.h index d795c96b5e..49ff77318c 100644 --- a/src/kitemviews/kfileitemlistview.h +++ b/src/kitemviews/kfileitemlistview.h @@ -77,6 +77,7 @@ public: protected: virtual KItemListWidgetCreatorBase* defaultWidgetCreator() const; + virtual void initializeItemListWidget(KItemListWidget* item); virtual void onPreviewsShownChanged(bool shown); virtual void onItemLayoutChanged(ItemLayout current, ItemLayout previous); virtual void onModelChanged(KItemModelBase* current, KItemModelBase* previous); diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp index eaaab6bc05..317a7a3522 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() diff --git a/src/kitemviews/kfileitemmodelrolesupdater.h b/src/kitemviews/kfileitemmodelrolesupdater.h index 20ce21cfa4..605c36f81a 100644 --- a/src/kitemviews/kfileitemmodelrolesupdater.h +++ b/src/kitemviews/kfileitemmodelrolesupdater.h @@ -232,12 +232,6 @@ private: */ void updateVisibleIcons(); - /** - * Tries to load at least preliminary icons (without determining the - * mime type) for all items for \a timeout milliseconds. - */ - void updateAllIconsFast(int timeout); - /** * Creates previews for the items starting from the first item in * m_pendingPreviewItems. @@ -326,11 +320,6 @@ private: // Items for which the sort role still has to be determined. QSet m_pendingSortRoleItems; - // Determines if the next call of startUpdating() will try to do a fast - // icon loading (i.e., without determining the mime type) for all items. - bool m_hasUnknownIcons; - int m_firstIndexWithoutIcon; - // Indexes of items which still have to be handled by // resolveNextPendingRoles(). QList m_pendingIndexes;