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]; |