Commit ee4ab8ce authored by Ismael Asensio's avatar Ismael Asensio Committed by Elvis Angelaccio
Browse files

Iterate over a const copy list of containers

This effectively reverts the mutable iterations approach on
2448f88c, and fix crashes
and ghost items when using the filter bar

BUG: 428374
parent e270aae9
......@@ -919,9 +919,9 @@ void KFileItemModel::slotCompleted()
// Note that the parent folder must be expanded before any of its subfolders become visible.
// Therefore, some URLs in m_restoredExpandedUrls might not be visible yet
// -> we expand the first visible URL we find in m_restoredExpandedUrls.
QMutableSetIterator<QUrl> it(m_urlsToExpand);
while (it.hasNext()) {
const QUrl url = it.next();
// Iterate over a const copy because items are deleted and inserted within the loop
const auto urlsToExpand = m_urlsToExpand;
for(const QUrl &url : urlsToExpand) {
const int indexForUrl = index(url);
if (indexForUrl >= 0) {
m_urlsToExpand.remove(url);
......
......@@ -957,9 +957,9 @@ void KFileItemModelRolesUpdater::updateChangedItems()
QList<int> visibleChangedIndexes;
QList<int> invisibleChangedIndexes;
QMutableSetIterator<KFileItem> it(m_changedItems);
while (it.hasNext()) {
const KFileItem item = it.next();
// Iterate over a const copy because items are deleted within the loop
const auto changedItems = m_changedItems;
for (const KFileItem item : changedItems) {
const int index = m_model->index(item);
if (index < 0) {
......
......@@ -1155,10 +1155,10 @@ void KItemListView::slotItemsRemoved(const KItemRangeList& itemRanges)
QVector<int> itemsToMove;
// Remove all KItemListWidget instances that got deleted
QMutableHashIterator<int, KItemListWidget*> it(m_visibleItems);
while (it.hasNext()) {
it.next();
KItemListWidget* widget = it.value();
// Iterate over a const copy because the container is mutated within the loop
// directly and in `recycleWidget()` (https://bugs.kde.org/show_bug.cgi?id=428374)
const auto visibleItems = m_visibleItems;
for (KItemListWidget* widget : visibleItems) {
const int i = widget->index();
if (i < firstRemovedIndex) {
continue;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment