┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIsmael Asensio <[email protected]>2020-11-06 21:22:14 +0100
committerElvis Angelaccio <[email protected]>2020-11-08 21:59:34 +0000
commitee4ab8ce699bd0fd10fe664e053eb6f26da94268 (patch)
tree4b6c8f3eac895168893fa9de8136f13c296d74b7 /src
parente270aae9203949d25e983f53f33415fb17a0d064 (diff)
Iterate over a const copy list of containers
This effectively reverts the mutable iterations approach on 2448f88c5f42d7a2040fcf3bcd3c5f2a2f62cd03, and fix crashes and ghost items when using the filter bar BUG: 428374
Diffstat (limited to 'src')
-rw-r--r--src/kitemviews/kfileitemmodel.cpp6
-rw-r--r--src/kitemviews/kfileitemmodelrolesupdater.cpp6
-rw-r--r--src/kitemviews/kitemlistview.cpp8
3 files changed, 10 insertions, 10 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp
index c06202fd8..dbbd63a6a 100644
--- a/src/kitemviews/kfileitemmodel.cpp
+++ b/src/kitemviews/kfileitemmodel.cpp
@@ -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);
diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp
index 25e1a3685..f6f2815df 100644
--- a/src/kitemviews/kfileitemmodelrolesupdater.cpp
+++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp
@@ -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) {
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
index 281edc3e9..f6e5e666b 100644
--- a/src/kitemviews/kitemlistview.cpp
+++ b/src/kitemviews/kitemlistview.cpp
@@ -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;