Index: ui/events/gestures/gesture_recognizer_impl.cc |
diff --git a/ui/events/gestures/gesture_recognizer_impl.cc b/ui/events/gestures/gesture_recognizer_impl.cc |
index c27af4aaafdce5247c72a2ed3b375c43fbf4ddb9..6ec5ccf96f1932ea09af8cada291058428dcb528 100644 |
--- a/ui/events/gestures/gesture_recognizer_impl.cc |
+++ b/ui/events/gestures/gesture_recognizer_impl.cc |
@@ -308,7 +308,7 @@ void GestureRecognizerImpl::DispatchGestureEvent(GestureEvent* event) { |
} |
} |
-GestureSequence::Gestures* GestureRecognizerImpl::ProcessTouchEventForGesture( |
+ScopedVector<GestureEvent>* GestureRecognizerImpl::ProcessTouchEventForGesture( |
const TouchEvent& event, |
ui::EventResult result, |
GestureConsumer* target) { |
@@ -322,8 +322,10 @@ GestureSequence::Gestures* GestureRecognizerImpl::ProcessTouchEventForGesture( |
GetGestureProviderForConsumer(target); |
// TODO(tdresser) - detect gestures eagerly. |
if (!(result & ER_CONSUMED)) { |
- if (gesture_provider->OnTouchEvent(event)) |
+ if (gesture_provider->OnTouchEvent(event)) { |
gesture_provider->OnTouchEventAck(result != ER_UNHANDLED); |
+ return gesture_provider->GetAndResetPendingGestures(); |
+ } |
} |
return NULL; |
} |
@@ -342,10 +344,7 @@ bool GestureRecognizerImpl::CleanupStateForConsumer( |
} else { |
if (consumer_gesture_provider_.count(consumer)) { |
state_cleaned_up = true; |
- // Don't immediately delete the GestureProvider, as we could be in the |
- // middle of dispatching a set of gestures. |
- base::MessageLoop::current()->DeleteSoon( |
- FROM_HERE, consumer_gesture_provider_[consumer]); |
+ delete consumer_gesture_provider_[consumer]; |
consumer_gesture_provider_.erase(consumer); |
} |
} |