| Index: content/browser/renderer_host/input/touch_handle.cc
|
| diff --git a/content/browser/renderer_host/input/touch_handle.cc b/content/browser/renderer_host/input/touch_handle.cc
|
| index d5bda485dca02ced7e60a57ecea442f74a031c5d..acfe3bd70f87f1716272adbdccca88de11269f9e 100644
|
| --- a/content/browser/renderer_host/input/touch_handle.cc
|
| +++ b/content/browser/renderer_host/input/touch_handle.cc
|
| @@ -40,7 +40,8 @@ TouchHandle::TouchHandle(TouchHandleClient* client,
|
| animate_deferred_fade_(false),
|
| enabled_(true),
|
| is_visible_(false),
|
| - is_dragging_(false) {
|
| + is_dragging_(false),
|
| + is_drag_within_tap_region_(false) {
|
| DCHECK_NE(orientation, TOUCH_HANDLE_ORIENTATION_UNDEFINED);
|
| drawable_->SetEnabled(enabled_);
|
| drawable_->SetOrientation(orientation_);
|
| @@ -140,17 +141,26 @@ bool TouchHandle::WillHandleTouchEvent(const ui::MotionEvent& event) {
|
| } break;
|
|
|
| case ui::MotionEvent::ACTION_MOVE: {
|
| - gfx::PointF new_position =
|
| - gfx::PointF(event.GetX(), event.GetY()) + touch_to_focus_offset_;
|
| - client_->OnHandleDragUpdate(*this, new_position);
|
| + gfx::PointF touch_move_position(event.GetX(), event.GetY());
|
| + if (is_drag_within_tap_region_) {
|
| + const float tap_slop = client_->GetTapSlop();
|
| + is_drag_within_tap_region_ =
|
| + (touch_move_position - touch_down_position_).LengthSquared() <
|
| + tap_slop * tap_slop;
|
| + }
|
| +
|
| + // Note that we signal drag update even if we're inside the tap region,
|
| + // as there are cases where characters are narrower than the slop length.
|
| + client_->OnHandleDragUpdate(*this,
|
| + touch_move_position + touch_to_focus_offset_);
|
| } break;
|
|
|
| case ui::MotionEvent::ACTION_UP: {
|
| - // TODO(jdduke): Use the platform touch slop distance and tap delay to
|
| - // properly detect a tap, crbug.com/394093.
|
| - base::TimeDelta delay = event.GetEventTime() - touch_down_time_;
|
| - if (delay < base::TimeDelta::FromMilliseconds(180))
|
| + if (is_drag_within_tap_region_ &&
|
| + (event.GetEventTime() - touch_down_time_) <
|
| + client_->GetTapTimeout()) {
|
| client_->OnHandleTapped(*this);
|
| + }
|
|
|
| EndDrag();
|
| } break;
|
| @@ -192,6 +202,7 @@ void TouchHandle::BeginDrag() {
|
| return;
|
| EndFade();
|
| is_dragging_ = true;
|
| + is_drag_within_tap_region_ = true;
|
| client_->OnHandleDragBegin(*this);
|
| }
|
|
|
| @@ -201,6 +212,7 @@ void TouchHandle::EndDrag() {
|
| return;
|
|
|
| is_dragging_ = false;
|
| + is_drag_within_tap_region_ = false;
|
| client_->OnHandleDragEnd(*this);
|
|
|
| if (deferred_orientation_ != TOUCH_HANDLE_ORIENTATION_UNDEFINED) {
|
|
|