| Index: ui/touch_selection/touch_selection_controller.cc
|
| diff --git a/ui/touch_selection/touch_selection_controller.cc b/ui/touch_selection/touch_selection_controller.cc
|
| index 6c70d47d0d4b6d70c73145ac9f99939b1aaacfd9..ad010c3807275ac0aee8b74fe7b2dc227e8c4510 100644
|
| --- a/ui/touch_selection/touch_selection_controller.cc
|
| +++ b/ui/touch_selection/touch_selection_controller.cc
|
| @@ -153,11 +153,30 @@ bool TouchSelectionController::WillHandleTouchEvent(const MotionEvent& event) {
|
| return false;
|
| }
|
|
|
| -void TouchSelectionController::OnLongPressEvent() {
|
| +bool TouchSelectionController::WillHandleTapEvent(const gfx::PointF& location) {
|
| + if (WillHandleTapOrLongPress(location))
|
| + return true;
|
| +
|
| + response_pending_input_event_ = TAP;
|
| + if (active_status_ != SELECTION_ACTIVE)
|
| + activate_selection_automatically_ = false;
|
| + ShowInsertionHandleAutomatically();
|
| + if (selection_empty_ && !show_on_tap_for_empty_editable_)
|
| + DeactivateInsertion();
|
| + ForceNextUpdateIfInactive();
|
| + return false;
|
| +}
|
| +
|
| +bool TouchSelectionController::WillHandleLongPressEvent(
|
| + const gfx::PointF& location) {
|
| + if (WillHandleTapOrLongPress(location))
|
| + return true;
|
| +
|
| response_pending_input_event_ = LONG_PRESS;
|
| ShowSelectionHandlesAutomatically();
|
| ShowInsertionHandleAutomatically();
|
| ForceNextUpdateIfInactive();
|
| + return false;
|
| }
|
|
|
| void TouchSelectionController::AllowShowingFromCurrentSelection() {
|
| @@ -174,16 +193,6 @@ void TouchSelectionController::AllowShowingFromCurrentSelection() {
|
| }
|
| }
|
|
|
| -void TouchSelectionController::OnTapEvent() {
|
| - response_pending_input_event_ = TAP;
|
| - if (active_status_ != SELECTION_ACTIVE)
|
| - activate_selection_automatically_ = false;
|
| - ShowInsertionHandleAutomatically();
|
| - if (selection_empty_ && !show_on_tap_for_empty_editable_)
|
| - DeactivateInsertion();
|
| - ForceNextUpdateIfInactive();
|
| -}
|
| -
|
| void TouchSelectionController::HideAndDisallowShowingAutomatically() {
|
| response_pending_input_event_ = INPUT_EVENT_TYPE_NONE;
|
| DeactivateInsertion();
|
| @@ -352,6 +361,22 @@ void TouchSelectionController::ShowSelectionHandlesAutomatically() {
|
| ForceNextUpdateIfInactive();
|
| }
|
|
|
| +bool TouchSelectionController::WillHandleTapOrLongPress(
|
| + const gfx::PointF& location) {
|
| + // If there is an active selection that was not triggered by a user gesture,
|
| + // allow showing the handles for that selection if a gesture occurs within
|
| + // the selection rect. Note that this hit test is at best a crude
|
| + // approximation, and may swallow taps that actually fall outside the
|
| + // real selection.
|
| + if (active_status_ == INACTIVE &&
|
| + GetStartPosition() != GetEndPosition() &&
|
| + RectFBetweenSelectionBounds(start_, end_).Contains(location)) {
|
| + AllowShowingFromCurrentSelection();
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| void TouchSelectionController::OnInsertionChanged() {
|
| DeactivateSelection();
|
|
|
|
|