diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2015-06-21 13:21:12 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2015-06-21 13:42:39 +0000 |
commit | 08e0963e0862726feaa10c09b0e3b401c89b9224 (patch) | |
tree | 8cdfe732c9e4898e36d309593d9d652cc47544fa /src/widgets/kernel/qgesturemanager.cpp | |
parent | e4750177536d096221a50d221124a4f1047a5456 (diff) |
QGestureManager: fix expensive iteration over QHash::keys()
... with iteration over the hash itself.
gesturesByType is a local variable, so there's no way
functions called in the loop can modify it.
This dividing operation would greatly benefit from
a splice operation in QHash...
Change-Id: Ifd241d2da9c6998c2ad0b08294fca84d5b188d0f
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'src/widgets/kernel/qgesturemanager.cpp')
-rw-r--r-- | src/widgets/kernel/qgesturemanager.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/widgets/kernel/qgesturemanager.cpp b/src/widgets/kernel/qgesturemanager.cpp index 533ed6ac81..8cb7c2b560 100644 --- a/src/widgets/kernel/qgesturemanager.cpp +++ b/src/widgets/kernel/qgesturemanager.cpp @@ -571,7 +571,8 @@ void QGestureManager::getGestureTargets(const QSet<QGesture*> &gestures, // for each gesture type for (GestureByTypes::const_iterator git = gestureByTypes.cbegin(), gend = gestureByTypes.cend(); git != gend; ++git) { const QHash<QWidget *, QGesture *> &gestures = git.value(); - foreach (QWidget *widget, gestures.keys()) { + for (QHash<QWidget *, QGesture *>::const_iterator wit = gestures.cbegin(), wend = gestures.cend(); wit != wend; ++wit) { + QWidget *widget = wit.key(); QWidget *w = widget->parentWidget(); while (w) { QMap<Qt::GestureType, Qt::GestureFlags>::const_iterator it @@ -580,7 +581,7 @@ void QGestureManager::getGestureTargets(const QSet<QGesture*> &gestures, // i.e. 'w' listens to gesture 'type' if (!(it.value() & Qt::DontStartGestureOnChildren) && w != widget) { // conflicting gesture! - (*conflicts)[widget].append(gestures[widget]); + (*conflicts)[widget].append(wit.value()); break; } } @@ -591,7 +592,7 @@ void QGestureManager::getGestureTargets(const QSet<QGesture*> &gestures, w = w->parentWidget(); } if (!w) - (*normal)[widget].append(gestures[widget]); + (*normal)[widget].append(wit.value()); } } } |