From 3045ac99f296b866b25df318f13726d8f64494e8 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sun, 21 Jun 2015 12:37:37 +0200 Subject: 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. Change-Id: I5971c404f4ae8473d4926b68eb7a9c60801f208d Reviewed-by: Olivier Goffart (Woboq GmbH) --- src/widgets/kernel/qgesturemanager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/widgets/kernel') diff --git a/src/widgets/kernel/qgesturemanager.cpp b/src/widgets/kernel/qgesturemanager.cpp index b5d3a56d3f..533ed6ac81 100644 --- a/src/widgets/kernel/qgesturemanager.cpp +++ b/src/widgets/kernel/qgesturemanager.cpp @@ -569,13 +569,13 @@ void QGestureManager::getGestureTargets(const QSet &gestures, } // for each gesture type - foreach (Qt::GestureType type, gestureByTypes.keys()) { - QHash gestures = gestureByTypes.value(type); + for (GestureByTypes::const_iterator git = gestureByTypes.cbegin(), gend = gestureByTypes.cend(); git != gend; ++git) { + const QHash &gestures = git.value(); foreach (QWidget *widget, gestures.keys()) { QWidget *w = widget->parentWidget(); while (w) { QMap::const_iterator it - = w->d_func()->gestureContext.constFind(type); + = w->d_func()->gestureContext.constFind(git.key()); if (it != w->d_func()->gestureContext.constEnd()) { // i.e. 'w' listens to gesture 'type' if (!(it.value() & Qt::DontStartGestureOnChildren) && w != widget) { -- cgit v1.2.3