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
This commit is contained in:
Frank Reininghaus 2013-08-14 23:40:02 +02:00
parent 87f8303023
commit 7e5b7d5626

View file

@ -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());