X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/7c0b5c08cc97eded7755ca5cef9c7e5ba5c15537..9e8e58147:/src/kitemviews/kfileitemmodelrolesupdater.cpp diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp index d18387f51..a603a94da 100644 --- a/src/kitemviews/kfileitemmodelrolesupdater.cpp +++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp @@ -782,7 +782,11 @@ void KFileItemModelRolesUpdater::slotDirectoryContentsCountReceived(const QStrin data.insert("isExpandable", count > 0); } + disconnect(m_model, &KFileItemModel::itemsChanged, + this, &KFileItemModelRolesUpdater::slotItemsChanged); m_model->setData(index, data); + connect(m_model, &KFileItemModel::itemsChanged, + this, &KFileItemModelRolesUpdater::slotItemsChanged); } } } @@ -957,15 +961,16 @@ void KFileItemModelRolesUpdater::updateChangedItems() visibleChangedIndexes.reserve(m_changedItems.size()); invisibleChangedIndexes.reserve(m_changedItems.size()); - // Iterate over a const copy because items are deleted within the loop - const auto changedItems = m_changedItems; - for (const KFileItem &item : changedItems) { + auto changedItemsIt = m_changedItems.begin(); + while (changedItemsIt != m_changedItems.end()) { + const auto& item = *changedItemsIt; const int index = m_model->index(item); if (index < 0) { - m_changedItems.remove(item); + changedItemsIt = m_changedItems.erase(changedItemsIt); continue; } + ++changedItemsIt; if (index >= m_firstVisibleIndex && index <= m_lastVisibleIndex) { visibleChangedIndexes.append(index);