| 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 1c8ceae98b5fe1d7d6508e5a3c254ddf82ba4b9a..6c70d47d0d4b6d70c73145ac9f99939b1aaacfd9 100644
|
| --- a/ui/touch_selection/touch_selection_controller.cc
|
| +++ b/ui/touch_selection/touch_selection_controller.cc
|
| @@ -48,6 +48,7 @@ TouchSelectionController::TouchSelectionController(
|
| : client_(client),
|
| tap_timeout_(tap_timeout),
|
| tap_slop_(tap_slop),
|
| + force_next_update_(false),
|
| show_on_tap_for_empty_editable_(show_on_tap_for_empty_editable),
|
| response_pending_input_event_(INPUT_EVENT_TYPE_NONE),
|
| start_orientation_(TouchHandleOrientation::UNDEFINED),
|
| @@ -68,13 +69,14 @@ TouchSelectionController::~TouchSelectionController() {
|
| void TouchSelectionController::OnSelectionBoundsChanged(
|
| const SelectionBound& start,
|
| const SelectionBound& end) {
|
| - if (start == start_ && end_ == end)
|
| + if (!force_next_update_ && start == start_ && end_ == end)
|
| return;
|
|
|
| start_ = start;
|
| end_ = end;
|
| start_orientation_ = ToTouchHandleOrientation(start_.type());
|
| end_orientation_ = ToTouchHandleOrientation(end_.type());
|
| + force_next_update_ = false;
|
|
|
| if (!activate_selection_automatically_ &&
|
| !activate_insertion_automatically_) {
|
| @@ -155,7 +157,7 @@ void TouchSelectionController::OnLongPressEvent() {
|
| response_pending_input_event_ = LONG_PRESS;
|
| ShowSelectionHandlesAutomatically();
|
| ShowInsertionHandleAutomatically();
|
| - ResetCachedValuesIfInactive();
|
| + ForceNextUpdateIfInactive();
|
| }
|
|
|
| void TouchSelectionController::AllowShowingFromCurrentSelection() {
|
| @@ -179,7 +181,7 @@ void TouchSelectionController::OnTapEvent() {
|
| ShowInsertionHandleAutomatically();
|
| if (selection_empty_ && !show_on_tap_for_empty_editable_)
|
| DeactivateInsertion();
|
| - ResetCachedValuesIfInactive();
|
| + ForceNextUpdateIfInactive();
|
| }
|
|
|
| void TouchSelectionController::HideAndDisallowShowingAutomatically() {
|
| @@ -208,7 +210,7 @@ void TouchSelectionController::OnSelectionEditable(bool editable) {
|
| if (selection_editable_ == editable)
|
| return;
|
| selection_editable_ = editable;
|
| - ResetCachedValuesIfInactive();
|
| + ForceNextUpdateIfInactive();
|
| if (!selection_editable_)
|
| DeactivateInsertion();
|
| }
|
| @@ -217,7 +219,7 @@ void TouchSelectionController::OnSelectionEmpty(bool empty) {
|
| if (selection_empty_ == empty)
|
| return;
|
| selection_empty_ = empty;
|
| - ResetCachedValuesIfInactive();
|
| + ForceNextUpdateIfInactive();
|
| }
|
|
|
| bool TouchSelectionController::Animate(base::TimeTicks frame_time) {
|
| @@ -340,14 +342,14 @@ void TouchSelectionController::ShowInsertionHandleAutomatically() {
|
| if (activate_insertion_automatically_)
|
| return;
|
| activate_insertion_automatically_ = true;
|
| - ResetCachedValuesIfInactive();
|
| + ForceNextUpdateIfInactive();
|
| }
|
|
|
| void TouchSelectionController::ShowSelectionHandlesAutomatically() {
|
| if (activate_selection_automatically_)
|
| return;
|
| activate_selection_automatically_ = true;
|
| - ResetCachedValuesIfInactive();
|
| + ForceNextUpdateIfInactive();
|
| }
|
|
|
| void TouchSelectionController::OnInsertionChanged() {
|
| @@ -463,13 +465,9 @@ void TouchSelectionController::DeactivateSelection() {
|
| client_->OnSelectionEvent(SELECTION_CLEARED);
|
| }
|
|
|
| -void TouchSelectionController::ResetCachedValuesIfInactive() {
|
| - if (active_status_ != INACTIVE)
|
| - return;
|
| - start_ = SelectionBound();
|
| - end_ = SelectionBound();
|
| - start_orientation_ = TouchHandleOrientation::UNDEFINED;
|
| - end_orientation_ = TouchHandleOrientation::UNDEFINED;
|
| +void TouchSelectionController::ForceNextUpdateIfInactive() {
|
| + if (active_status_ == INACTIVE)
|
| + force_next_update_ = true;
|
| }
|
|
|
| gfx::Vector2dF TouchSelectionController::GetStartLineOffset() const {
|
|
|