Index: content/browser/renderer_host/input/gesture_text_selector.cc |
diff --git a/content/browser/renderer_host/input/gesture_text_selector.cc b/content/browser/renderer_host/input/gesture_text_selector.cc |
index 630373959ef6b75638ad7a4d36616a244ec17398..b565f2cb27eb9bcebff36a6f84175492f6deab06 100644 |
--- a/content/browser/renderer_host/input/gesture_text_selector.cc |
+++ b/content/browser/renderer_host/input/gesture_text_selector.cc |
@@ -34,7 +34,11 @@ scoped_ptr<GestureDetector> CreateGestureDetector( |
} // namespace |
GestureTextSelector::GestureTextSelector(GestureTextSelectorClient* client) |
- : client_(client), text_selection_triggered_(false) { |
+ : client_(client), |
+ text_selection_triggered_(false), |
+ secondary_button_pressed_(false), |
+ anchor_x_(0.0f), |
+ anchor_y_(0.0f) { |
DCHECK(client); |
} |
@@ -46,11 +50,24 @@ bool GestureTextSelector::OnTouchEvent(const MotionEvent& event) { |
// Only trigger selection on ACTION_DOWN to prevent partial touch or gesture |
// sequences from being forwarded. |
text_selection_triggered_ = ShouldStartTextSelection(event); |
+ secondary_button_pressed_ = |
+ event.GetButtonState() == MotionEvent::BUTTON_SECONDARY; |
+ anchor_x_ = event.GetX(); |
+ anchor_y_ = event.GetY(); |
} |
if (!text_selection_triggered_) |
return false; |
+ if (event.GetAction() == MotionEvent::ACTION_MOVE) { |
+ secondary_button_pressed_ = |
+ event.GetButtonState() == MotionEvent::BUTTON_SECONDARY; |
+ if (!secondary_button_pressed_) { |
+ anchor_x_ = event.GetX(); |
+ anchor_y_ = event.GetY(); |
+ } |
+ } |
+ |
if (!gesture_detector_) |
gesture_detector_ = CreateGestureDetector(this); |
@@ -72,11 +89,16 @@ bool GestureTextSelector::OnScroll(const MotionEvent& e1, |
float distance_x, |
float distance_y) { |
DCHECK(text_selection_triggered_); |
+ |
+ // Return if Stylus button is not pressed. |
+ if (!secondary_button_pressed_) |
+ return true; |
+ |
// TODO(changwan): check if we can show handles after the scroll finishes |
// instead. Currently it is not possible as ShowSelectionHandles should |
// be called before we change the selection. |
client_->ShowSelectionHandlesAutomatically(); |
- client_->SelectRange(e1.GetX(), e1.GetY(), e2.GetX(), e2.GetY()); |
+ client_->SelectRange(anchor_x_, anchor_y_, e2.GetX(), e2.GetY()); |
return true; |
} |