OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/web_contents/touch_editable_impl_aura.h" | 5 #include "content/browser/web_contents/touch_editable_impl_aura.h" |
6 | 6 |
7 #include "content/browser/renderer_host/render_widget_host_impl.h" | 7 #include "content/browser/renderer_host/render_widget_host_impl.h" |
8 #include "content/browser/renderer_host/render_widget_host_view_aura.h" | 8 #include "content/browser/renderer_host/render_widget_host_view_aura.h" |
9 #include "content/common/view_messages.h" | 9 #include "content/common/view_messages.h" |
10 #include "content/public/browser/render_widget_host.h" | 10 #include "content/public/browser/render_widget_host.h" |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 // using mouse or keyboard). | 55 // using mouse or keyboard). |
56 if (selection_gesture_in_process_ && !scroll_in_progress_ && | 56 if (selection_gesture_in_process_ && !scroll_in_progress_ && |
57 selection_anchor_rect_ != selection_focus_rect_) | 57 selection_anchor_rect_ != selection_focus_rect_) |
58 StartTouchEditing(); | 58 StartTouchEditing(); |
59 | 59 |
60 if (text_input_type_ != ui::TEXT_INPUT_TYPE_NONE || | 60 if (text_input_type_ != ui::TEXT_INPUT_TYPE_NONE || |
61 selection_anchor_rect_ != selection_focus_rect_) { | 61 selection_anchor_rect_ != selection_focus_rect_) { |
62 if (touch_selection_controller_) | 62 if (touch_selection_controller_) |
63 touch_selection_controller_->SelectionChanged(); | 63 touch_selection_controller_->SelectionChanged(); |
64 } else { | 64 } else { |
65 EndTouchEditing(); | 65 EndTouchEditing(false); |
66 } | 66 } |
67 } | 67 } |
68 | 68 |
69 void TouchEditableImplAura::OverscrollStarted() { | 69 void TouchEditableImplAura::OverscrollStarted() { |
70 overscroll_in_progress_ = true; | 70 overscroll_in_progress_ = true; |
71 } | 71 } |
72 | 72 |
73 void TouchEditableImplAura::OverscrollCompleted() { | 73 void TouchEditableImplAura::OverscrollCompleted() { |
74 // We might receive multiple OverscrollStarted() and OverscrollCompleted() | 74 // We might receive multiple OverscrollStarted() and OverscrollCompleted() |
75 // during the same scroll session (for example, when the scroll direction | 75 // during the same scroll session (for example, when the scroll direction |
(...skipping 22 matching lines...) Expand all Loading... |
98 return; | 98 return; |
99 | 99 |
100 if (!touch_selection_controller_) { | 100 if (!touch_selection_controller_) { |
101 touch_selection_controller_.reset( | 101 touch_selection_controller_.reset( |
102 ui::TouchSelectionController::create(this)); | 102 ui::TouchSelectionController::create(this)); |
103 } | 103 } |
104 if (touch_selection_controller_) | 104 if (touch_selection_controller_) |
105 touch_selection_controller_->SelectionChanged(); | 105 touch_selection_controller_->SelectionChanged(); |
106 } | 106 } |
107 | 107 |
108 void TouchEditableImplAura::EndTouchEditing() { | 108 void TouchEditableImplAura::EndTouchEditing(bool quick) { |
109 if (touch_selection_controller_) { | 109 if (touch_selection_controller_) { |
110 if (touch_selection_controller_->IsHandleDragInProgress()) | 110 if (touch_selection_controller_->IsHandleDragInProgress()) { |
111 touch_selection_controller_->SelectionChanged(); | 111 touch_selection_controller_->SelectionChanged(); |
112 else | 112 } else { |
| 113 touch_selection_controller_->HideHandles(quick); |
113 touch_selection_controller_.reset(); | 114 touch_selection_controller_.reset(); |
| 115 } |
114 } | 116 } |
115 } | 117 } |
116 | 118 |
117 void TouchEditableImplAura::OnSelectionOrCursorChanged(const gfx::Rect& anchor, | 119 void TouchEditableImplAura::OnSelectionOrCursorChanged(const gfx::Rect& anchor, |
118 const gfx::Rect& focus) { | 120 const gfx::Rect& focus) { |
119 selection_anchor_rect_ = anchor; | 121 selection_anchor_rect_ = anchor; |
120 selection_focus_rect_ = focus; | 122 selection_focus_rect_ = focus; |
121 UpdateEditingController(); | 123 UpdateEditingController(); |
122 } | 124 } |
123 | 125 |
124 void TouchEditableImplAura::OnTextInputTypeChanged(ui::TextInputType type) { | 126 void TouchEditableImplAura::OnTextInputTypeChanged(ui::TextInputType type) { |
125 text_input_type_ = type; | 127 text_input_type_ = type; |
126 } | 128 } |
127 | 129 |
128 bool TouchEditableImplAura::HandleInputEvent(const ui::Event* event) { | 130 bool TouchEditableImplAura::HandleInputEvent(const ui::Event* event) { |
129 DCHECK(rwhva_); | 131 DCHECK(rwhva_); |
130 if (event->IsTouchEvent()) | 132 if (event->IsTouchEvent()) |
131 return false; | 133 return false; |
132 | 134 |
133 if (!event->IsGestureEvent()) { | 135 if (!event->IsGestureEvent()) { |
134 EndTouchEditing(); | 136 EndTouchEditing(false); |
135 return false; | 137 return false; |
136 } | 138 } |
137 | 139 |
138 const ui::GestureEvent* gesture_event = | 140 const ui::GestureEvent* gesture_event = |
139 static_cast<const ui::GestureEvent*>(event); | 141 static_cast<const ui::GestureEvent*>(event); |
140 switch (event->type()) { | 142 switch (event->type()) { |
141 case ui::ET_GESTURE_TAP: | 143 case ui::ET_GESTURE_TAP: |
142 tap_gesture_tap_count_queue_.push(gesture_event->details().tap_count()); | 144 tap_gesture_tap_count_queue_.push(gesture_event->details().tap_count()); |
143 if (gesture_event->details().tap_count() > 1) | 145 if (gesture_event->details().tap_count() > 1) |
144 selection_gesture_in_process_ = true; | 146 selection_gesture_in_process_ = true; |
(...skipping 23 matching lines...) Expand all Loading... |
168 break; | 170 break; |
169 case ui::ET_GESTURE_SCROLL_BEGIN: | 171 case ui::ET_GESTURE_SCROLL_BEGIN: |
170 // If selection handles are currently visible, we want to get them back up | 172 // If selection handles are currently visible, we want to get them back up |
171 // when scrolling ends. So we set |handles_hidden_due_to_scroll_| so that | 173 // when scrolling ends. So we set |handles_hidden_due_to_scroll_| so that |
172 // we can re-start touch editing when we call |UpdateEditingController()| | 174 // we can re-start touch editing when we call |UpdateEditingController()| |
173 // on scroll end gesture. | 175 // on scroll end gesture. |
174 scroll_in_progress_ = true; | 176 scroll_in_progress_ = true; |
175 handles_hidden_due_to_scroll_ = false; | 177 handles_hidden_due_to_scroll_ = false; |
176 if (touch_selection_controller_) | 178 if (touch_selection_controller_) |
177 handles_hidden_due_to_scroll_ = true; | 179 handles_hidden_due_to_scroll_ = true; |
178 EndTouchEditing(); | 180 EndTouchEditing(true); |
179 break; | 181 break; |
180 case ui::ET_GESTURE_SCROLL_END: | 182 case ui::ET_GESTURE_SCROLL_END: |
181 // Scroll has ended, but we might still be in overscroll animation. | 183 // Scroll has ended, but we might still be in overscroll animation. |
182 if (handles_hidden_due_to_scroll_ && !overscroll_in_progress_ && | 184 if (handles_hidden_due_to_scroll_ && !overscroll_in_progress_ && |
183 (selection_anchor_rect_ != selection_focus_rect_ || | 185 (selection_anchor_rect_ != selection_focus_rect_ || |
184 text_input_type_ != ui::TEXT_INPUT_TYPE_NONE)) { | 186 text_input_type_ != ui::TEXT_INPUT_TYPE_NONE)) { |
185 StartTouchEditing(); | 187 StartTouchEditing(); |
186 UpdateEditingController(); | 188 UpdateEditingController(); |
187 } | 189 } |
188 // fall through to reset |scroll_in_progress_|. | 190 // fall through to reset |scroll_in_progress_|. |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 return false; | 282 return false; |
281 } | 283 } |
282 | 284 |
283 void TouchEditableImplAura::OpenContextMenu(const gfx::Point& anchor) { | 285 void TouchEditableImplAura::OpenContextMenu(const gfx::Point& anchor) { |
284 if (!rwhva_) | 286 if (!rwhva_) |
285 return; | 287 return; |
286 gfx::Point point = anchor; | 288 gfx::Point point = anchor; |
287 ConvertPointFromScreen(&point); | 289 ConvertPointFromScreen(&point); |
288 RenderWidgetHost* host = rwhva_->GetRenderWidgetHost(); | 290 RenderWidgetHost* host = rwhva_->GetRenderWidgetHost(); |
289 host->Send(new ViewMsg_ShowContextMenu(host->GetRoutingID(), point)); | 291 host->Send(new ViewMsg_ShowContextMenu(host->GetRoutingID(), point)); |
290 EndTouchEditing(); | 292 EndTouchEditing(false); |
291 } | 293 } |
292 | 294 |
293 bool TouchEditableImplAura::IsCommandIdChecked(int command_id) const { | 295 bool TouchEditableImplAura::IsCommandIdChecked(int command_id) const { |
294 NOTREACHED(); | 296 NOTREACHED(); |
295 return false; | 297 return false; |
296 } | 298 } |
297 | 299 |
298 bool TouchEditableImplAura::IsCommandIdEnabled(int command_id) const { | 300 bool TouchEditableImplAura::IsCommandIdEnabled(int command_id) const { |
299 if (!rwhva_) | 301 if (!rwhva_) |
300 return false; | 302 return false; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 case IDS_APP_DELETE: | 347 case IDS_APP_DELETE: |
346 host->Delete(); | 348 host->Delete(); |
347 break; | 349 break; |
348 case IDS_APP_SELECT_ALL: | 350 case IDS_APP_SELECT_ALL: |
349 host->SelectAll(); | 351 host->SelectAll(); |
350 break; | 352 break; |
351 default: | 353 default: |
352 NOTREACHED(); | 354 NOTREACHED(); |
353 break; | 355 break; |
354 } | 356 } |
355 EndTouchEditing(); | 357 EndTouchEditing(false); |
356 } | 358 } |
357 | 359 |
358 //////////////////////////////////////////////////////////////////////////////// | 360 //////////////////////////////////////////////////////////////////////////////// |
359 // TouchEditableImplAura, private: | 361 // TouchEditableImplAura, private: |
360 | 362 |
361 TouchEditableImplAura::TouchEditableImplAura() | 363 TouchEditableImplAura::TouchEditableImplAura() |
362 : text_input_type_(ui::TEXT_INPUT_TYPE_NONE), | 364 : text_input_type_(ui::TEXT_INPUT_TYPE_NONE), |
363 rwhva_(NULL), | 365 rwhva_(NULL), |
364 selection_gesture_in_process_(false), | 366 selection_gesture_in_process_(false), |
365 handles_hidden_due_to_scroll_(false), | 367 handles_hidden_due_to_scroll_(false), |
366 scroll_in_progress_(false), | 368 scroll_in_progress_(false), |
367 overscroll_in_progress_(false), | 369 overscroll_in_progress_(false), |
368 is_tap_on_focused_textfield_(false) { | 370 is_tap_on_focused_textfield_(false) { |
369 } | 371 } |
370 | 372 |
371 void TouchEditableImplAura::Cleanup() { | 373 void TouchEditableImplAura::Cleanup() { |
372 if (rwhva_) { | 374 if (rwhva_) { |
373 rwhva_->set_touch_editing_client(NULL); | 375 rwhva_->set_touch_editing_client(NULL); |
374 rwhva_ = NULL; | 376 rwhva_ = NULL; |
375 } | 377 } |
376 text_input_type_ = ui::TEXT_INPUT_TYPE_NONE; | 378 text_input_type_ = ui::TEXT_INPUT_TYPE_NONE; |
377 touch_selection_controller_.reset(); | 379 EndTouchEditing(true); |
378 handles_hidden_due_to_scroll_ = false; | 380 handles_hidden_due_to_scroll_ = false; |
379 scroll_in_progress_ = false; | 381 scroll_in_progress_ = false; |
380 overscroll_in_progress_ = false; | 382 overscroll_in_progress_ = false; |
381 } | 383 } |
382 | 384 |
383 } // namespace content | 385 } // namespace content |
OLD | NEW |