Chromium Code Reviews| Index: ui/base/gestures/gesture_recognizer_impl.cc |
| diff --git a/ui/base/gestures/gesture_recognizer_impl.cc b/ui/base/gestures/gesture_recognizer_impl.cc |
| index 20b88d4a437d7344bf02e38dda8e1e79847132f5..eade930d3e4e25d83d8c08153fc60318bf8657ea 100644 |
| --- a/ui/base/gestures/gesture_recognizer_impl.cc |
| +++ b/ui/base/gestures/gesture_recognizer_impl.cc |
| @@ -137,6 +137,16 @@ void TransferConsumer(GestureConsumer* current_consumer, |
| } |
| } |
| +template <typename T> |
| +void TransferConsumer(GestureConsumer* current_consumer, |
| + GestureConsumer* new_consumer, |
| + std::map<GestureConsumer*, scoped_ptr<T>>* map) { |
| + if (map->count(current_consumer)) { |
| + (*map)[new_consumer].swap((*map)[current_consumer]); |
| + map->erase(current_consumer); |
|
girard
2012/08/02 17:14:20
Partial template specialization (from generic Tran
|
| + } |
| +} |
| + |
| void RemoveConsumerFromMap(GestureConsumer* consumer, |
| GestureRecognizerImpl::TouchIdToConsumerMap* map) { |
| for (GestureRecognizerImpl::TouchIdToConsumerMap::iterator i = map->begin(); |
| @@ -191,7 +201,7 @@ GestureConsumer* GestureRecognizerImpl::GetTargetForLocation( |
| const gfx::Point& location) { |
| const GesturePoint* closest_point = NULL; |
| int closest_distance_squared = 0; |
| - std::map<GestureConsumer*, GestureSequence*>::iterator i; |
| + std::map<GestureConsumer*, scoped_ptr<GestureSequence>>::iterator i; |
| for (i = consumer_sequence_.begin(); i != consumer_sequence_.end(); ++i) { |
| const GesturePoint* points = i->second->points(); |
| for (int j = 0; j < GestureSequence::kMaxGesturePoints; ++j) { |
| @@ -268,10 +278,10 @@ GestureSequence* GestureRecognizerImpl::CreateSequence( |
| GestureSequence* GestureRecognizerImpl::GetGestureSequenceForConsumer( |
| GestureConsumer* consumer) { |
| - GestureSequence* gesture_sequence = consumer_sequence_[consumer]; |
| + GestureSequence* gesture_sequence = consumer_sequence_[consumer].get(); |
| if (!gesture_sequence) { |
| gesture_sequence = CreateSequence(helper_); |
| - consumer_sequence_[consumer] = gesture_sequence; |
| + consumer_sequence_[consumer].reset(gesture_sequence); |
| } |
| return gesture_sequence; |
| } |
| @@ -327,10 +337,8 @@ GestureSequence::Gestures* GestureRecognizerImpl::AdvanceTouchQueue( |
| } |
| void GestureRecognizerImpl::FlushTouchQueue(GestureConsumer* consumer) { |
| - if (consumer_sequence_.count(consumer)) { |
| - delete consumer_sequence_[consumer]; |
| + if (consumer_sequence_.count(consumer)) |
| consumer_sequence_.erase(consumer); |
| - } |
| if (event_queue_.count(consumer)) { |
| delete event_queue_[consumer]; |