Use QMutableHashIterator for deleting items from a QHash

KItemListViewAnimation::slotFinished() used a QHashIterator to iterate
over a QHash, and then removes an item from the hash using
QHash::remove() inside the loop.

This is quite unusual - the recommended way is to use a
QMutableHashIterator (or std-style iterators and then QHash::erase(it)).

This might be related to the cause of a crash in this function.

BUG: 331876
REVIEW: 116666
FIXED-IN: 4.13.0
This commit is contained in:
Frank Reininghaus 2014-03-11 09:07:23 +01:00
parent 6747241934
commit 773d505493

View file

@ -225,13 +225,13 @@ void KItemListViewAnimation::slotFinished()
{
QPropertyAnimation* finishedAnim = qobject_cast<QPropertyAnimation*>(sender());
for (int type = 0; type < AnimationTypeCount; ++type) {
QHashIterator<QGraphicsWidget*, QPropertyAnimation*> it(m_animation[type]);
QMutableHashIterator<QGraphicsWidget*, QPropertyAnimation*> it(m_animation[type]);
while (it.hasNext()) {
it.next();
QPropertyAnimation* propertyAnim = it.value();
if (propertyAnim == finishedAnim) {
QGraphicsWidget* widget = it.key();
m_animation[type].remove(widget);
it.remove();
finishedAnim->deleteLater();
emit finished(widget, static_cast<AnimationType>(type));