From dd59023394a8f4cdaf4be9f632d58434f52c76e4 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Fri, 7 May 2010 14:52:00 +0200 Subject: Removed the "maybe" timer from gesturemanager. According to users of the api "maybe" timer (that is supposed to cancel gestures that have stayed in the "MaybeGesture" state for too long) is not useful and might even harm some gestures, so removing it completely and leaving it up to the author of a gesture recognizer to make sure the state machine is implemented properly. Task-number: QTBUG-9926 Reviewed-by: Thomas Zander --- src/gui/kernel/qgesturemanager.cpp | 42 ++++++-------------------------------- src/gui/kernel/qgesturemanager_p.h | 3 +-- 2 files changed, 7 insertions(+), 38 deletions(-) diff --git a/src/gui/kernel/qgesturemanager.cpp b/src/gui/kernel/qgesturemanager.cpp index 6fad18c..43facef 100644 --- a/src/gui/kernel/qgesturemanager.cpp +++ b/src/gui/kernel/qgesturemanager.cpp @@ -288,24 +288,14 @@ bool QGestureManager::filterEventThroughContexts(const QMultiMap canceledGestures = m_activeGestures & notGestures; - // start timers for new gestures in maybe state - foreach (QGesture *state, newMaybeGestures) { - QBasicTimer &timer = m_maybeGestures[state]; - if (!timer.isActive()) - timer.start(3000, this); - } - // kill timers for gestures that were in maybe state + // new gestures in maybe state + m_maybeGestures += newMaybeGestures; + + // gestures that were in maybe state QSet notMaybeGestures = (startedGestures | triggeredGestures | finishedGestures | canceledGestures | notGestures); - foreach(QGesture *gesture, notMaybeGestures) { - QHash::iterator it = - m_maybeGestures.find(gesture); - if (it != m_maybeGestures.end()) { - it.value().stop(); - m_maybeGestures.erase(it); - } - } + m_maybeGestures -= notMaybeGestures; Q_ASSERT((startedGestures & finishedGestures).isEmpty()); Q_ASSERT((startedGestures & newMaybeGestures).isEmpty()); @@ -349,7 +339,7 @@ bool QGestureManager::filterEventThroughContexts(const QMultiMap &gestures, } } -void QGestureManager::timerEvent(QTimerEvent *event) -{ - QHash::iterator it = m_maybeGestures.begin(), - e = m_maybeGestures.end(); - for (; it != e; ) { - QBasicTimer &timer = it.value(); - Q_ASSERT(timer.isActive()); - if (timer.timerId() == event->timerId()) { - timer.stop(); - QGesture *gesture = it.key(); - it = m_maybeGestures.erase(it); - DEBUG() << "QGestureManager::timerEvent: gesture stopped due to timeout:" - << gesture; - recycle(gesture); - } else { - ++it; - } - } -} - void QGestureManager::recycle(QGesture *gesture) { QGestureRecognizer *recognizer = m_gestureToRecognizer.value(gesture, 0); diff --git a/src/gui/kernel/qgesturemanager_p.h b/src/gui/kernel/qgesturemanager_p.h index c105c9b..c452f49 100644 --- a/src/gui/kernel/qgesturemanager_p.h +++ b/src/gui/kernel/qgesturemanager_p.h @@ -85,7 +85,6 @@ public: void recycle(QGesture *gesture); protected: - void timerEvent(QTimerEvent *event); bool filterEventThroughContexts(const QMultiMap &contexts, QEvent *event); @@ -93,7 +92,7 @@ private: QMultiMap m_recognizers; QSet m_activeGestures; - QHash m_maybeGestures; + QSet m_maybeGestures; enum State { Gesture, -- cgit v0.12