| Index: ui/events/gestures/gesture_sequence.cc
|
| diff --git a/ui/events/gestures/gesture_sequence.cc b/ui/events/gestures/gesture_sequence.cc
|
| index 65d813aa83c016e3f4617b243fe2a50ac85d5620..c516c33f498848cfe407e3aacd46be7504751f33 100644
|
| --- a/ui/events/gestures/gesture_sequence.cc
|
| +++ b/ui/events/gestures/gesture_sequence.cc
|
| @@ -479,23 +479,23 @@ void UpdateGestureEventLatencyInfo(const TouchEvent& event,
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // GestureSequence Public:
|
|
|
| -GestureSequence::GestureSequence(GestureSequenceDelegate* delegate)
|
| +GestureSequence::GestureSequence(GestureEventQueueTimerInterface* geq_timers)
|
| : state_(GS_NO_GESTURE),
|
| flags_(0),
|
| pinch_distance_start_(0.f),
|
| pinch_distance_current_(0.f),
|
| scroll_type_(ST_FREE),
|
| point_count_(0),
|
| - delegate_(delegate) {
|
| - CHECK(delegate_);
|
| + geq_timers_(geq_timers) {
|
| }
|
|
|
| GestureSequence::~GestureSequence() {
|
| }
|
|
|
| GestureSequence::Gestures* GestureSequence::ProcessTouchEventForGesture(
|
| - const TouchEvent& event,
|
| - EventResult result) {
|
| + const TouchEvent& event) {
|
| + // TODO(tdresser): Remove depency on EventResult from GestureSequence.
|
| + EventResult result = ER_UNHANDLED;
|
| StopTimersIfRequired(event);
|
| last_touch_location_ = event.location();
|
| if (result & ER_CONSUMED)
|
| @@ -531,8 +531,11 @@ GestureSequence::Gestures* GestureSequence::ProcessTouchEventForGesture(
|
| RecreateBoundingBox();
|
| flags_ = event.flags();
|
| const int point_id = point.point_id();
|
| - if (point_id < 0)
|
| + if (point_id < 0) {
|
| + LOG(ERROR) << "GS sees event for touch which isn't down " << event.type();
|
| + LOG(ERROR) << "Touch id is " << event.touch_id();
|
| return NULL;
|
| + }
|
|
|
| // Send GESTURE_BEGIN for any touch pressed.
|
| if (event.type() == ui::ET_TOUCH_PRESSED)
|
| @@ -751,8 +754,14 @@ GestureSequence::Gestures* GestureSequence::ProcessTouchEventForGesture(
|
| << " touch id: " << event.touch_id();
|
|
|
| if (last_state == GS_PENDING_SYNTHETIC_CLICK && state_ != last_state) {
|
| - GetLongPressTimer()->Stop();
|
| - GetShowPressTimer()->Stop();
|
| + if (GetLongPressTimer()->IsRunning()) {
|
| + GetLongPressTimer()->Stop();
|
| + geq_timers_->TimerCancelled();
|
| + }
|
| + if (GetShowPressTimer()->IsRunning()) {
|
| + GetShowPressTimer()->Stop();
|
| + geq_timers_->TimerCancelled();
|
| + }
|
| }
|
|
|
| // The set of point_ids must be contiguous and include 0.
|
| @@ -818,17 +827,20 @@ void GestureSequence::ResetVelocities() {
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // GestureSequence Protected:
|
|
|
| -base::OneShotTimer<GestureSequence>* GestureSequence::CreateTimer() {
|
| - return new base::OneShotTimer<GestureSequence>();
|
| +base::OneShotTimer<GestureEventQueueTimerInterface>*
|
| +GestureSequence::CreateTimer() {
|
| + return new base::OneShotTimer<GestureEventQueueTimerInterface>();
|
| }
|
|
|
| -base::OneShotTimer<GestureSequence>* GestureSequence::GetLongPressTimer() {
|
| +base::OneShotTimer<GestureEventQueueTimerInterface>*
|
| +GestureSequence::GetLongPressTimer() {
|
| if (!long_press_timer_.get())
|
| long_press_timer_.reset(CreateTimer());
|
| return long_press_timer_.get();
|
| }
|
|
|
| -base::OneShotTimer<GestureSequence>* GestureSequence::GetShowPressTimer() {
|
| +base::OneShotTimer<GestureEventQueueTimerInterface>*
|
| +GestureSequence::GetShowPressTimer() {
|
| if (!show_press_timer_.get())
|
| show_press_timer_.reset(CreateTimer());
|
| return show_press_timer_.get();
|
| @@ -1110,7 +1122,7 @@ bool GestureSequence::Click(const TouchEvent& event,
|
| tap_count = 2;
|
| if (tap_count == 1 && GetShowPressTimer()->IsRunning()) {
|
| GetShowPressTimer()->Stop();
|
| - AppendShowPressGestureEvent();
|
| + geq_timers_->TimerCancelled();
|
| }
|
| AppendClickGestureEvent(point, tap_count, gestures);
|
| return true;
|
| @@ -1164,19 +1176,22 @@ bool GestureSequence::TouchDown(const TouchEvent& event,
|
| Gestures* gestures) {
|
| DCHECK(state_ == GS_NO_GESTURE);
|
| AppendTapDownGestureEvent(point, gestures);
|
| + AppendLongPressGestureEvent(point, gestures);
|
| + AppendShowPressGestureEvent(point, gestures);
|
| +
|
| GetLongPressTimer()->Start(
|
| FROM_HERE,
|
| base::TimeDelta::FromMilliseconds(
|
| GestureConfiguration::long_press_time_in_seconds() * 1000),
|
| - this,
|
| - &GestureSequence::AppendLongPressGestureEvent);
|
| + geq_timers_,
|
| + &GestureEventQueueTimerInterface::TimerFired);
|
|
|
| GetShowPressTimer()->Start(
|
| FROM_HERE,
|
| base::TimeDelta::FromMilliseconds(
|
| GestureConfiguration::show_press_delay_in_ms()),
|
| - this,
|
| - &GestureSequence::AppendShowPressGestureEvent);
|
| + geq_timers_,
|
| + &GestureEventQueueTimerInterface::TimerFired);
|
|
|
| return true;
|
| }
|
| @@ -1225,26 +1240,25 @@ bool GestureSequence::TwoFingerTouchReleased(const TouchEvent& event,
|
| return true;
|
| }
|
|
|
| -void GestureSequence::AppendLongPressGestureEvent() {
|
| - const GesturePoint* point = GetPointByPointId(0);
|
| - scoped_ptr<GestureEvent> gesture(CreateGestureEvent(
|
| +void GestureSequence::AppendLongPressGestureEvent(const GesturePoint& point,
|
| + Gestures* gestures) {
|
| + gestures->push_back(CreateGestureEvent(
|
| GestureEventDetails(ui::ET_GESTURE_LONG_PRESS, 0, 0),
|
| - point->first_touch_position(),
|
| + point.first_touch_position(),
|
| flags_,
|
| - base::Time::FromDoubleT(point->last_touch_time()),
|
| - 1 << point->touch_id()));
|
| - delegate_->DispatchPostponedGestureEvent(gesture.get());
|
| + base::Time::FromDoubleT(point.last_touch_time()),
|
| + 1 << point.touch_id()));
|
| }
|
|
|
| -void GestureSequence::AppendShowPressGestureEvent() {
|
| - const GesturePoint* point = GetPointByPointId(0);
|
| - scoped_ptr<GestureEvent> gesture(CreateGestureEvent(
|
| +
|
| +void GestureSequence::AppendShowPressGestureEvent(const GesturePoint& point,
|
| + Gestures* gestures) {
|
| + gestures->push_back(CreateGestureEvent(
|
| GestureEventDetails(ui::ET_GESTURE_SHOW_PRESS, 0, 0),
|
| - point->first_touch_position(),
|
| + point.first_touch_position(),
|
| flags_,
|
| - base::Time::FromDoubleT(point->last_touch_time()),
|
| - 1 << point->touch_id()));
|
| - delegate_->DispatchPostponedGestureEvent(gesture.get());
|
| + base::Time::FromDoubleT(point.last_touch_time()),
|
| + 1 << point.touch_id()));
|
| }
|
|
|
| void GestureSequence::AppendLongTapGestureEvent(const GesturePoint& point,
|
| @@ -1440,8 +1454,14 @@ void GestureSequence::StopTimersIfRequired(const TouchEvent& event) {
|
| const GesturePoint* point = GetPointByPointId(0);
|
| if (!ui::gestures::IsInsideManhattanSquare(point->first_touch_position(),
|
| event.location())) {
|
| - GetLongPressTimer()->Stop();
|
| - GetShowPressTimer()->Stop();
|
| + if (GetLongPressTimer()->IsRunning()) {
|
| + GetLongPressTimer()->Stop();
|
| + geq_timers_->TimerCancelled();
|
| + }
|
| + if (GetShowPressTimer()->IsRunning()) {
|
| + GetShowPressTimer()->Stop();
|
| + geq_timers_->TimerCancelled();
|
| + }
|
| }
|
| }
|
|
|
|
|