diff options
| author | Frank Reininghaus <[email protected]> | 2013-08-14 23:40:02 +0200 |
|---|---|---|
| committer | Frank Reininghaus <[email protected]> | 2013-08-14 23:40:02 +0200 |
| commit | 7e5b7d562672ecda1ec2db0cceb80a17407150f0 (patch) | |
| tree | 0931cb5d0869be45222b31ee54d56e2f2dcb02cf | |
| parent | 87f830302347e9773404f51de73afc7041829374 (diff) | |
Fix crash when disabling "Show in groups"
The problem was that items are removed from m_visibleGroups while
a QMutableHashIterator iterates over this hash, such that the iterator
can become invalid. The solution is to use a QHashIterator instead,
which takes a copy of the hash. Therefore, it is not affected if
m_visibleGroups is modified in any way.
BUG: 323248
FIXED-IN: 4.11.1
REVIEW: 111919
| -rw-r--r-- | src/kitemviews/kitemlistview.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index 0c3183cd5..7f1526151 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -1237,8 +1237,10 @@ void KItemListView::slotGroupedSortingChanged(bool current) if (m_grouped) { updateGroupHeaderHeight(); } else { - // Clear all visible headers - QMutableHashIterator<KItemListWidget*, KItemListGroupHeader*> it (m_visibleGroups); + // Clear all visible headers. Note that the QHashIterator takes a copy of + // m_visibleGroups. Therefore, it remains valid even if items are removed + // from m_visibleGroups in recycleGroupHeaderForWidget(). + QHashIterator<KItemListWidget*, KItemListGroupHeader*> it(m_visibleGroups); while (it.hasNext()) { it.next(); recycleGroupHeaderForWidget(it.key()); |
