Chromium Code Reviews| Index: views/controls/textfield/native_textfield_views.cc |
| diff --git a/views/controls/textfield/native_textfield_views.cc b/views/controls/textfield/native_textfield_views.cc |
| index 60589d229090235068af5680084ec849796437ec..7bbe8c2e9f91e50881df344d1278ba03152c93d8 100644 |
| --- a/views/controls/textfield/native_textfield_views.cc |
| +++ b/views/controls/textfield/native_textfield_views.cc |
| @@ -59,7 +59,9 @@ NativeTextfieldViews::NativeTextfieldViews(Textfield* parent) |
| text_offset_(0), |
| insert_(true), |
| is_cursor_visible_(false), |
| - ALLOW_THIS_IN_INITIALIZER_LIST(cursor_timer_(this)) { |
| + ALLOW_THIS_IN_INITIALIZER_LIST(cursor_timer_(this)), |
| + last_mouse_press_time_(base::Time::FromInternalValue(0)), |
| + tracking_triple_click_(false) { |
| set_border(text_border_); |
| // Multiline is not supported. |
| @@ -78,7 +80,7 @@ NativeTextfieldViews::~NativeTextfieldViews() { |
| bool NativeTextfieldViews::OnMousePressed(const views::MouseEvent& e) { |
| textfield_->RequestFocus(); |
| - if (e.IsLeftMouseButton()) { |
| + if (e.IsLeftMouseButton() && !DetectAndHandleDoubleAndTripleClick(e)) { |
| size_t pos = FindCursorPosition(e.location()); |
| if (model_->MoveCursorTo(pos, false)) { |
| UpdateCursorBoundsAndTextOffset(); |
| @@ -762,6 +764,27 @@ size_t NativeTextfieldViews::FindCursorPosition(const gfx::Point& point) const { |
| return left_pos; |
| } |
| +bool NativeTextfieldViews::DetectAndHandleDoubleAndTripleClick( |
| + const views::MouseEvent& e) { |
| + if (!e.IsOnlyLeftMouseButton()) |
| + return false; |
|
oshima
2011/01/18 19:52:54
1) mouse move (with some threshold) should cancel
varunjain
2011/01/25 04:06:40
Done.
|
| + base::TimeDelta elapsed_time = e.GetTimeStamp() - last_mouse_press_time_; |
| + last_mouse_press_time_ = e.GetTimeStamp(); |
| + if (elapsed_time.InMilliseconds() <= GetDoubleClickTimeMS()) { |
| + if (tracking_triple_click_) { |
| + model_->SelectAll(); |
| + } else { |
| + model_->SelectWord(); |
| + } |
| + tracking_triple_click_ = !tracking_triple_click_; |
| + SchedulePaint(); |
| + return true; |
| + } else { |
| + tracking_triple_click_ = false; |
| + } |
| + return false; |
| +} |
| + |
| void NativeTextfieldViews::PropagateTextChange() { |
| textfield_->SyncText(); |
| Textfield::Controller* controller = textfield_->GetController(); |