Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: ui/views/controls/textfield/textfield.cc

Issue 2027133002: Modify ui::TextInputClient to use ui::TextEditCommand enum in place of resource ids. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@refactor4_up_down_mac
Patch Set: Address review comments. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/views/controls/textfield/textfield.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/views/controls/textfield/textfield.h" 5 #include "ui/views/controls/textfield/textfield.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
11 #include "build/build_config.h" 11 #include "build/build_config.h"
12 #include "ui/accessibility/ax_view_state.h" 12 #include "ui/accessibility/ax_view_state.h"
13 #include "ui/base/clipboard/scoped_clipboard_writer.h" 13 #include "ui/base/clipboard/scoped_clipboard_writer.h"
14 #include "ui/base/cursor/cursor.h" 14 #include "ui/base/cursor/cursor.h"
15 #include "ui/base/default_style.h" 15 #include "ui/base/default_style.h"
16 #include "ui/base/dragdrop/drag_drop_types.h" 16 #include "ui/base/dragdrop/drag_drop_types.h"
17 #include "ui/base/dragdrop/drag_utils.h" 17 #include "ui/base/dragdrop/drag_utils.h"
18 #include "ui/base/ime/input_method.h" 18 #include "ui/base/ime/input_method.h"
19 #include "ui/base/ime/text_edit_commands.h"
19 #include "ui/base/resource/resource_bundle.h" 20 #include "ui/base/resource/resource_bundle.h"
20 #include "ui/base/ui_base_switches_util.h" 21 #include "ui/base/ui_base_switches_util.h"
21 #include "ui/compositor/canvas_painter.h" 22 #include "ui/compositor/canvas_painter.h"
22 #include "ui/compositor/scoped_animation_duration_scale_mode.h" 23 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
23 #include "ui/display/display.h" 24 #include "ui/display/display.h"
24 #include "ui/display/screen.h" 25 #include "ui/display/screen.h"
25 #include "ui/events/base_event_utils.h" 26 #include "ui/events/base_event_utils.h"
26 #include "ui/events/event.h" 27 #include "ui/events/event.h"
27 #include "ui/events/keycodes/keyboard_codes.h" 28 #include "ui/events/keycodes/keyboard_codes.h"
28 #include "ui/gfx/canvas.h" 29 #include "ui/gfx/canvas.h"
(...skipping 26 matching lines...) Expand all
55 #include "ui/events/linux/text_edit_key_bindings_delegate_auralinux.h" 56 #include "ui/events/linux/text_edit_key_bindings_delegate_auralinux.h"
56 #endif 57 #endif
57 58
58 namespace views { 59 namespace views {
59 60
60 namespace { 61 namespace {
61 62
62 // Default placeholder text color. 63 // Default placeholder text color.
63 const SkColor kDefaultPlaceholderTextColor = SK_ColorLTGRAY; 64 const SkColor kDefaultPlaceholderTextColor = SK_ColorLTGRAY;
64 65
65 const int kNoCommand = 0;
66
67 void ConvertRectToScreen(const View* src, gfx::Rect* r) { 66 void ConvertRectToScreen(const View* src, gfx::Rect* r) {
68 DCHECK(src); 67 DCHECK(src);
69 68
70 gfx::Point new_origin = r->origin(); 69 gfx::Point new_origin = r->origin();
71 View::ConvertPointToScreen(src, &new_origin); 70 View::ConvertPointToScreen(src, &new_origin);
72 r->set_origin(new_origin); 71 r->set_origin(new_origin);
73 } 72 }
74 73
75 // Get the drag selection timer delay, respecting animation scaling for testing. 74 // Get the drag selection timer delay, respecting animation scaling for testing.
76 int GetDragSelectionDelay() { 75 int GetDragSelectionDelay() {
77 switch (ui::ScopedAnimationDurationScaleMode::duration_scale_mode()) { 76 switch (ui::ScopedAnimationDurationScaleMode::duration_scale_mode()) {
78 case ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION: return 100; 77 case ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION: return 100;
79 case ui::ScopedAnimationDurationScaleMode::FAST_DURATION: return 25; 78 case ui::ScopedAnimationDurationScaleMode::FAST_DURATION: return 25;
80 case ui::ScopedAnimationDurationScaleMode::SLOW_DURATION: return 400; 79 case ui::ScopedAnimationDurationScaleMode::SLOW_DURATION: return 400;
81 case ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION: return 1; 80 case ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION: return 1;
82 case ui::ScopedAnimationDurationScaleMode::ZERO_DURATION: return 0; 81 case ui::ScopedAnimationDurationScaleMode::ZERO_DURATION: return 0;
83 } 82 }
84 return 100; 83 return 100;
85 } 84 }
86 85
87 // Get the default command for a given key |event|. 86 // Get the default command for a given key |event|.
88 int GetCommandForKeyEvent(const ui::KeyEvent& event) { 87 ui::TextEditCommand GetCommandForKeyEvent(const ui::KeyEvent& event) {
89 if (event.type() != ui::ET_KEY_PRESSED || event.IsUnicodeKeyCode()) 88 if (event.type() != ui::ET_KEY_PRESSED || event.IsUnicodeKeyCode())
90 return kNoCommand; 89 return ui::TextEditCommand::INVALID_COMMAND;
91 90
92 const bool shift = event.IsShiftDown(); 91 const bool shift = event.IsShiftDown();
93 const bool control = event.IsControlDown(); 92 const bool control = event.IsControlDown();
94 const bool alt = event.IsAltDown() || event.IsAltGrDown(); 93 const bool alt = event.IsAltDown() || event.IsAltGrDown();
95 switch (event.key_code()) { 94 switch (event.key_code()) {
96 case ui::VKEY_Z: 95 case ui::VKEY_Z:
97 if (control && !shift && !alt) 96 if (control && !shift && !alt)
98 return IDS_APP_UNDO; 97 return ui::TextEditCommand::UNDO;
99 return (control && shift && !alt) ? IDS_APP_REDO : kNoCommand; 98 return (control && shift && !alt) ? ui::TextEditCommand::REDO
99 : ui::TextEditCommand::INVALID_COMMAND;
100 case ui::VKEY_Y: 100 case ui::VKEY_Y:
101 return (control && !alt) ? IDS_APP_REDO : kNoCommand; 101 return (control && !alt) ? ui::TextEditCommand::REDO
102 : ui::TextEditCommand::INVALID_COMMAND;
102 case ui::VKEY_A: 103 case ui::VKEY_A:
103 return (control && !alt) ? IDS_APP_SELECT_ALL : kNoCommand; 104 return (control && !alt) ? ui::TextEditCommand::SELECT_ALL
105 : ui::TextEditCommand::INVALID_COMMAND;
104 case ui::VKEY_X: 106 case ui::VKEY_X:
105 return (control && !alt) ? IDS_APP_CUT : kNoCommand; 107 return (control && !alt) ? ui::TextEditCommand::CUT
108 : ui::TextEditCommand::INVALID_COMMAND;
106 case ui::VKEY_C: 109 case ui::VKEY_C:
107 return (control && !alt) ? IDS_APP_COPY : kNoCommand; 110 return (control && !alt) ? ui::TextEditCommand::COPY
111 : ui::TextEditCommand::INVALID_COMMAND;
108 case ui::VKEY_V: 112 case ui::VKEY_V:
109 return (control && !alt) ? IDS_APP_PASTE : kNoCommand; 113 return (control && !alt) ? ui::TextEditCommand::PASTE
114 : ui::TextEditCommand::INVALID_COMMAND;
110 case ui::VKEY_RIGHT: 115 case ui::VKEY_RIGHT:
111 // Ignore alt+right, which may be a browser navigation shortcut. 116 // Ignore alt+right, which may be a browser navigation shortcut.
112 if (alt) 117 if (alt)
113 return kNoCommand; 118 return ui::TextEditCommand::INVALID_COMMAND;
114 if (!shift) 119 if (!shift) {
115 return control ? IDS_MOVE_WORD_RIGHT : IDS_MOVE_RIGHT; 120 return control ? ui::TextEditCommand::MOVE_WORD_RIGHT
116 return control ? IDS_MOVE_WORD_RIGHT_AND_MODIFY_SELECTION : 121 : ui::TextEditCommand::MOVE_RIGHT;
117 IDS_MOVE_RIGHT_AND_MODIFY_SELECTION; 122 }
123 return control ? ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION
124 : ui::TextEditCommand::MOVE_RIGHT_AND_MODIFY_SELECTION;
118 case ui::VKEY_LEFT: 125 case ui::VKEY_LEFT:
119 // Ignore alt+left, which may be a browser navigation shortcut. 126 // Ignore alt+left, which may be a browser navigation shortcut.
120 if (alt) 127 if (alt)
121 return kNoCommand; 128 return ui::TextEditCommand::INVALID_COMMAND;
122 if (!shift) 129 if (!shift) {
123 return control ? IDS_MOVE_WORD_LEFT : IDS_MOVE_LEFT; 130 return control ? ui::TextEditCommand::MOVE_WORD_LEFT
124 return control ? IDS_MOVE_WORD_LEFT_AND_MODIFY_SELECTION : 131 : ui::TextEditCommand::MOVE_LEFT;
125 IDS_MOVE_LEFT_AND_MODIFY_SELECTION; 132 }
133 return control ? ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION
134 : ui::TextEditCommand::MOVE_LEFT_AND_MODIFY_SELECTION;
126 case ui::VKEY_HOME: 135 case ui::VKEY_HOME:
127 return shift ? IDS_MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION : 136 return shift ? ui::TextEditCommand::
128 IDS_MOVE_TO_BEGINNING_OF_LINE; 137 MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION
138 : ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE;
129 case ui::VKEY_END: 139 case ui::VKEY_END:
130 return shift ? IDS_MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION : 140 return shift
131 IDS_MOVE_TO_END_OF_LINE; 141 ? ui::TextEditCommand::MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION
142 : ui::TextEditCommand::MOVE_TO_END_OF_LINE;
132 case ui::VKEY_BACK: 143 case ui::VKEY_BACK:
133 if (!control) 144 if (!control)
134 return IDS_DELETE_BACKWARD; 145 return ui::TextEditCommand::DELETE_BACKWARD;
135 #if defined(OS_LINUX) 146 #if defined(OS_LINUX)
136 // Only erase by line break on Linux and ChromeOS. 147 // Only erase by line break on Linux and ChromeOS.
137 if (shift) 148 if (shift)
138 return IDS_DELETE_TO_BEGINNING_OF_LINE; 149 return ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE;
139 #endif 150 #endif
140 return IDS_DELETE_WORD_BACKWARD; 151 return ui::TextEditCommand::DELETE_WORD_BACKWARD;
141 case ui::VKEY_DELETE: 152 case ui::VKEY_DELETE:
142 #if defined(OS_LINUX) 153 #if defined(OS_LINUX)
143 // Only erase by line break on Linux and ChromeOS. 154 // Only erase by line break on Linux and ChromeOS.
144 if (shift && control) 155 if (shift && control)
145 return IDS_DELETE_TO_END_OF_LINE; 156 return ui::TextEditCommand::DELETE_TO_END_OF_LINE;
146 #endif 157 #endif
147 if (control) 158 if (control)
148 return IDS_DELETE_WORD_FORWARD; 159 return ui::TextEditCommand::DELETE_WORD_FORWARD;
149 return shift ? IDS_APP_CUT : IDS_DELETE_FORWARD; 160 return shift ? ui::TextEditCommand::CUT
161 : ui::TextEditCommand::DELETE_FORWARD;
150 case ui::VKEY_INSERT: 162 case ui::VKEY_INSERT:
151 if (control && !shift) 163 if (control && !shift)
152 return IDS_APP_COPY; 164 return ui::TextEditCommand::COPY;
153 return (shift && !control) ? IDS_APP_PASTE : kNoCommand; 165 return (shift && !control) ? ui::TextEditCommand::PASTE
166 : ui::TextEditCommand::INVALID_COMMAND;
154 default: 167 default:
155 return kNoCommand; 168 return ui::TextEditCommand::INVALID_COMMAND;
156 } 169 }
157 } 170 }
158 171
159 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) 172 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
160 // Convert a custom text edit |command| to the equivalent views command ID. 173 // Convert a custom text edit |command| to the equivalent views command ID.
161 int GetViewsCommand(const ui::TextEditCommandAuraLinux& command, bool rtl) { 174 ui::TextEditCommand GetViewsCommand(const ui::TextEditCommandAuraLinux& command,
175 bool rtl) {
162 const bool select = command.extend_selection(); 176 const bool select = command.extend_selection();
163 switch (command.command_id()) { 177 switch (command.command_id()) {
164 case ui::TextEditCommandAuraLinux::COPY: 178 case ui::TextEditCommandAuraLinux::COPY:
165 return IDS_APP_COPY; 179 return ui::TextEditCommand::COPY;
166 case ui::TextEditCommandAuraLinux::CUT: 180 case ui::TextEditCommandAuraLinux::CUT:
167 return IDS_APP_CUT; 181 return ui::TextEditCommand::CUT;
168 case ui::TextEditCommandAuraLinux::DELETE_BACKWARD: 182 case ui::TextEditCommandAuraLinux::DELETE_BACKWARD:
169 return IDS_DELETE_BACKWARD; 183 return ui::TextEditCommand::DELETE_BACKWARD;
170 case ui::TextEditCommandAuraLinux::DELETE_FORWARD: 184 case ui::TextEditCommandAuraLinux::DELETE_FORWARD:
171 return IDS_DELETE_FORWARD; 185 return ui::TextEditCommand::DELETE_FORWARD;
172 case ui::TextEditCommandAuraLinux::DELETE_TO_BEGINING_OF_LINE: 186 case ui::TextEditCommandAuraLinux::DELETE_TO_BEGINING_OF_LINE:
173 case ui::TextEditCommandAuraLinux::DELETE_TO_BEGINING_OF_PARAGRAPH: 187 case ui::TextEditCommandAuraLinux::DELETE_TO_BEGINING_OF_PARAGRAPH:
174 return IDS_DELETE_TO_BEGINNING_OF_LINE; 188 return ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE;
175 case ui::TextEditCommandAuraLinux::DELETE_TO_END_OF_LINE: 189 case ui::TextEditCommandAuraLinux::DELETE_TO_END_OF_LINE:
176 case ui::TextEditCommandAuraLinux::DELETE_TO_END_OF_PARAGRAPH: 190 case ui::TextEditCommandAuraLinux::DELETE_TO_END_OF_PARAGRAPH:
177 return IDS_DELETE_TO_END_OF_LINE; 191 return ui::TextEditCommand::DELETE_TO_END_OF_LINE;
178 case ui::TextEditCommandAuraLinux::DELETE_WORD_BACKWARD: 192 case ui::TextEditCommandAuraLinux::DELETE_WORD_BACKWARD:
179 return IDS_DELETE_WORD_BACKWARD; 193 return ui::TextEditCommand::DELETE_WORD_BACKWARD;
180 case ui::TextEditCommandAuraLinux::DELETE_WORD_FORWARD: 194 case ui::TextEditCommandAuraLinux::DELETE_WORD_FORWARD:
181 return IDS_DELETE_WORD_FORWARD; 195 return ui::TextEditCommand::DELETE_WORD_FORWARD;
182 case ui::TextEditCommandAuraLinux::INSERT_TEXT: 196 case ui::TextEditCommandAuraLinux::INSERT_TEXT:
183 return kNoCommand; 197 return ui::TextEditCommand::INVALID_COMMAND;
184 case ui::TextEditCommandAuraLinux::MOVE_BACKWARD: 198 case ui::TextEditCommandAuraLinux::MOVE_BACKWARD:
185 if (rtl) 199 if (rtl) {
186 return select ? IDS_MOVE_RIGHT_AND_MODIFY_SELECTION : IDS_MOVE_RIGHT; 200 return select ? ui::TextEditCommand::MOVE_RIGHT_AND_MODIFY_SELECTION
187 return select ? IDS_MOVE_LEFT_AND_MODIFY_SELECTION : IDS_MOVE_LEFT; 201 : ui::TextEditCommand::MOVE_RIGHT;
202 }
203 return select ? ui::TextEditCommand::MOVE_LEFT_AND_MODIFY_SELECTION
204 : ui::TextEditCommand::MOVE_LEFT;
188 case ui::TextEditCommandAuraLinux::MOVE_DOWN: 205 case ui::TextEditCommandAuraLinux::MOVE_DOWN:
189 return IDS_MOVE_DOWN; 206 return ui::TextEditCommand::MOVE_DOWN;
190 case ui::TextEditCommandAuraLinux::MOVE_FORWARD: 207 case ui::TextEditCommandAuraLinux::MOVE_FORWARD:
191 if (rtl) 208 if (rtl) {
192 return select ? IDS_MOVE_LEFT_AND_MODIFY_SELECTION : IDS_MOVE_LEFT; 209 return select ? ui::TextEditCommand::MOVE_LEFT_AND_MODIFY_SELECTION
193 return select ? IDS_MOVE_RIGHT_AND_MODIFY_SELECTION : IDS_MOVE_RIGHT; 210 : ui::TextEditCommand::MOVE_LEFT;
211 }
212 return select ? ui::TextEditCommand::MOVE_RIGHT_AND_MODIFY_SELECTION
213 : ui::TextEditCommand::MOVE_RIGHT;
194 case ui::TextEditCommandAuraLinux::MOVE_LEFT: 214 case ui::TextEditCommandAuraLinux::MOVE_LEFT:
195 return select ? IDS_MOVE_LEFT_AND_MODIFY_SELECTION : IDS_MOVE_LEFT; 215 return select ? ui::TextEditCommand::MOVE_LEFT_AND_MODIFY_SELECTION
216 : ui::TextEditCommand::MOVE_LEFT;
196 case ui::TextEditCommandAuraLinux::MOVE_PAGE_DOWN: 217 case ui::TextEditCommandAuraLinux::MOVE_PAGE_DOWN:
197 case ui::TextEditCommandAuraLinux::MOVE_PAGE_UP: 218 case ui::TextEditCommandAuraLinux::MOVE_PAGE_UP:
198 return kNoCommand; 219 return ui::TextEditCommand::INVALID_COMMAND;
199 case ui::TextEditCommandAuraLinux::MOVE_RIGHT: 220 case ui::TextEditCommandAuraLinux::MOVE_RIGHT:
200 return select ? IDS_MOVE_RIGHT_AND_MODIFY_SELECTION : IDS_MOVE_RIGHT; 221 return select ? ui::TextEditCommand::MOVE_RIGHT_AND_MODIFY_SELECTION
222 : ui::TextEditCommand::MOVE_RIGHT;
201 case ui::TextEditCommandAuraLinux::MOVE_TO_BEGINING_OF_DOCUMENT: 223 case ui::TextEditCommandAuraLinux::MOVE_TO_BEGINING_OF_DOCUMENT:
202 case ui::TextEditCommandAuraLinux::MOVE_TO_BEGINING_OF_LINE: 224 case ui::TextEditCommandAuraLinux::MOVE_TO_BEGINING_OF_LINE:
203 case ui::TextEditCommandAuraLinux::MOVE_TO_BEGINING_OF_PARAGRAPH: 225 case ui::TextEditCommandAuraLinux::MOVE_TO_BEGINING_OF_PARAGRAPH:
204 return select ? IDS_MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION : 226 return select ? ui::TextEditCommand::
205 IDS_MOVE_TO_BEGINNING_OF_LINE; 227 MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION
228 : ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE;
206 case ui::TextEditCommandAuraLinux::MOVE_TO_END_OF_DOCUMENT: 229 case ui::TextEditCommandAuraLinux::MOVE_TO_END_OF_DOCUMENT:
207 case ui::TextEditCommandAuraLinux::MOVE_TO_END_OF_LINE: 230 case ui::TextEditCommandAuraLinux::MOVE_TO_END_OF_LINE:
208 case ui::TextEditCommandAuraLinux::MOVE_TO_END_OF_PARAGRAPH: 231 case ui::TextEditCommandAuraLinux::MOVE_TO_END_OF_PARAGRAPH:
209 return select ? IDS_MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION : 232 return select
210 IDS_MOVE_TO_END_OF_LINE; 233 ? ui::TextEditCommand::MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION
234 : ui::TextEditCommand::MOVE_TO_END_OF_LINE;
211 case ui::TextEditCommandAuraLinux::MOVE_UP: 235 case ui::TextEditCommandAuraLinux::MOVE_UP:
212 return IDS_MOVE_UP; 236 return ui::TextEditCommand::MOVE_UP;
213 case ui::TextEditCommandAuraLinux::MOVE_WORD_BACKWARD: 237 case ui::TextEditCommandAuraLinux::MOVE_WORD_BACKWARD:
214 if (rtl) { 238 if (rtl) {
215 return select ? IDS_MOVE_WORD_RIGHT_AND_MODIFY_SELECTION : 239 return select
216 IDS_MOVE_WORD_RIGHT; 240 ? ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION
241 : ui::TextEditCommand::MOVE_WORD_RIGHT;
217 } 242 }
218 return select ? IDS_MOVE_WORD_LEFT_AND_MODIFY_SELECTION : 243 return select ? ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION
219 IDS_MOVE_WORD_LEFT; 244 : ui::TextEditCommand::MOVE_WORD_LEFT;
220 case ui::TextEditCommandAuraLinux::MOVE_WORD_FORWARD: 245 case ui::TextEditCommandAuraLinux::MOVE_WORD_FORWARD:
221 if (rtl) { 246 if (rtl) {
222 return select ? IDS_MOVE_WORD_LEFT_AND_MODIFY_SELECTION : 247 return select ? ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION
223 IDS_MOVE_WORD_LEFT; 248 : ui::TextEditCommand::MOVE_WORD_LEFT;
224 } 249 }
225 return select ? IDS_MOVE_WORD_RIGHT_AND_MODIFY_SELECTION : 250 return select ? ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION
226 IDS_MOVE_WORD_RIGHT; 251 : ui::TextEditCommand::MOVE_WORD_RIGHT;
227 case ui::TextEditCommandAuraLinux::MOVE_WORD_LEFT: 252 case ui::TextEditCommandAuraLinux::MOVE_WORD_LEFT:
228 return select ? IDS_MOVE_WORD_LEFT_AND_MODIFY_SELECTION : 253 return select ? ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION
229 IDS_MOVE_WORD_LEFT; 254 : ui::TextEditCommand::MOVE_WORD_LEFT;
230 case ui::TextEditCommandAuraLinux::MOVE_WORD_RIGHT: 255 case ui::TextEditCommandAuraLinux::MOVE_WORD_RIGHT:
231 return select ? IDS_MOVE_WORD_RIGHT_AND_MODIFY_SELECTION : 256 return select ? ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION
232 IDS_MOVE_WORD_RIGHT; 257 : ui::TextEditCommand::MOVE_WORD_RIGHT;
233 case ui::TextEditCommandAuraLinux::PASTE: 258 case ui::TextEditCommandAuraLinux::PASTE:
234 return IDS_APP_PASTE; 259 return ui::TextEditCommand::PASTE;
235 case ui::TextEditCommandAuraLinux::SELECT_ALL: 260 case ui::TextEditCommandAuraLinux::SELECT_ALL:
236 return IDS_APP_SELECT_ALL; 261 return ui::TextEditCommand::SELECT_ALL;
237 case ui::TextEditCommandAuraLinux::SET_MARK: 262 case ui::TextEditCommandAuraLinux::SET_MARK:
238 case ui::TextEditCommandAuraLinux::UNSELECT: 263 case ui::TextEditCommandAuraLinux::UNSELECT:
239 case ui::TextEditCommandAuraLinux::INVALID_COMMAND: 264 case ui::TextEditCommandAuraLinux::INVALID_COMMAND:
240 return kNoCommand; 265 return ui::TextEditCommand::INVALID_COMMAND;
241 } 266 }
242 return kNoCommand; 267 NOTREACHED();
268 return ui::TextEditCommand::INVALID_COMMAND;
243 } 269 }
244 #endif 270 #endif
245 271
246 const gfx::FontList& GetDefaultFontList() { 272 const gfx::FontList& GetDefaultFontList() {
247 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 273 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
248 return rb.GetFontListWithDelta(ui::kLabelFontSizeDelta); 274 return rb.GetFontListWithDelta(ui::kLabelFontSizeDelta);
249 } 275 }
250 276
251 // Returns true if |command_id| is a menu action installed by this textfield. 277 // Returns the ui::TextEditCommand corresponding to the |command_id| menu
252 // Keep in sync with UpdateContextMenu. 278 // action. Keep in sync with UpdateContextMenu.
253 bool IsMenuCommand(int command_id) { 279 ui::TextEditCommand GetTextEditCommandFromMenuCommand(int command_id) {
254 switch (command_id) { 280 switch (command_id) {
255 case IDS_APP_UNDO: 281 case IDS_APP_UNDO:
282 return ui::TextEditCommand::UNDO;
256 case IDS_APP_CUT: 283 case IDS_APP_CUT:
284 return ui::TextEditCommand::CUT;
257 case IDS_APP_COPY: 285 case IDS_APP_COPY:
286 return ui::TextEditCommand::COPY;
258 case IDS_APP_PASTE: 287 case IDS_APP_PASTE:
288 return ui::TextEditCommand::PASTE;
259 case IDS_APP_DELETE: 289 case IDS_APP_DELETE:
290 return ui::TextEditCommand::DELETE_SELECTION;
260 case IDS_APP_SELECT_ALL: 291 case IDS_APP_SELECT_ALL:
261 return true; 292 return ui::TextEditCommand::SELECT_ALL;
293 default:
294 return ui::TextEditCommand::INVALID_COMMAND;
262 } 295 }
263 return false;
264 } 296 }
265 297
266 } // namespace 298 } // namespace
267 299
268 // static 300 // static
269 const char Textfield::kViewClassName[] = "Textfield"; 301 const char Textfield::kViewClassName[] = "Textfield";
270 const int Textfield::kTextPadding = 3; 302 const int Textfield::kTextPadding = 3;
271 303
272 // static 304 // static
273 size_t Textfield::GetCaretBlinkMs() { 305 size_t Textfield::GetCaretBlinkMs() {
274 static const size_t default_value = 500; 306 static const size_t default_value = 500;
275 #if defined(OS_WIN) 307 #if defined(OS_WIN)
276 static const size_t system_value = ::GetCaretBlinkTime(); 308 static const size_t system_value = ::GetCaretBlinkTime();
277 if (system_value != 0) 309 if (system_value != 0)
278 return (system_value == INFINITE) ? 0 : system_value; 310 return (system_value == INFINITE) ? 0 : system_value;
279 #endif 311 #endif
280 return default_value; 312 return default_value;
281 } 313 }
282 314
283 Textfield::Textfield() 315 Textfield::Textfield()
284 : model_(new TextfieldModel(this)), 316 : model_(new TextfieldModel(this)),
285 controller_(NULL), 317 controller_(NULL),
286 scheduled_edit_command_(kNoCommand), 318 scheduled_text_edit_command_(ui::TextEditCommand::INVALID_COMMAND),
287 read_only_(false), 319 read_only_(false),
288 default_width_in_chars_(0), 320 default_width_in_chars_(0),
289 use_default_text_color_(true), 321 use_default_text_color_(true),
290 use_default_background_color_(true), 322 use_default_background_color_(true),
291 use_default_selection_text_color_(true), 323 use_default_selection_text_color_(true),
292 use_default_selection_background_color_(true), 324 use_default_selection_background_color_(true),
293 text_color_(SK_ColorBLACK), 325 text_color_(SK_ColorBLACK),
294 background_color_(SK_ColorWHITE), 326 background_color_(SK_ColorWHITE),
295 selection_text_color_(SK_ColorWHITE), 327 selection_text_color_(SK_ColorWHITE),
296 selection_background_color_(SK_ColorBLUE), 328 selection_background_color_(SK_ColorBLUE),
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 drag_selection_timer_.Stop(); 733 drag_selection_timer_.Stop();
702 // Cancel suspected drag initiations, the user was clicking in the selection. 734 // Cancel suspected drag initiations, the user was clicking in the selection.
703 if (initiating_drag_) 735 if (initiating_drag_)
704 MoveCursorTo(event.location(), false); 736 MoveCursorTo(event.location(), false);
705 initiating_drag_ = false; 737 initiating_drag_ = false;
706 UpdateSelectionClipboard(); 738 UpdateSelectionClipboard();
707 OnAfterUserAction(); 739 OnAfterUserAction();
708 } 740 }
709 741
710 bool Textfield::OnKeyPressed(const ui::KeyEvent& event) { 742 bool Textfield::OnKeyPressed(const ui::KeyEvent& event) {
711 int edit_command = scheduled_edit_command_; 743 ui::TextEditCommand edit_command = scheduled_text_edit_command_;
712 scheduled_edit_command_ = kNoCommand; 744 scheduled_text_edit_command_ = ui::TextEditCommand::INVALID_COMMAND;
713 745
714 // Since HandleKeyEvent() might destroy |this|, get a weak pointer and verify 746 // Since HandleKeyEvent() might destroy |this|, get a weak pointer and verify
715 // it isn't null before proceeding. 747 // it isn't null before proceeding.
716 base::WeakPtr<Textfield> textfield(weak_ptr_factory_.GetWeakPtr()); 748 base::WeakPtr<Textfield> textfield(weak_ptr_factory_.GetWeakPtr());
717 749
718 bool handled = controller_ && controller_->HandleKeyEvent(this, event); 750 bool handled = controller_ && controller_->HandleKeyEvent(this, event);
719 751
720 if (!textfield) 752 if (!textfield)
721 return handled; 753 return handled;
722 754
723 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) 755 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
724 ui::TextEditKeyBindingsDelegateAuraLinux* delegate = 756 ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
725 ui::GetTextEditKeyBindingsDelegate(); 757 ui::GetTextEditKeyBindingsDelegate();
726 std::vector<ui::TextEditCommandAuraLinux> commands; 758 std::vector<ui::TextEditCommandAuraLinux> commands;
727 if (!handled && delegate && delegate->MatchEvent(event, &commands)) { 759 if (!handled && delegate && delegate->MatchEvent(event, &commands)) {
728 const bool rtl = GetTextDirection() == base::i18n::RIGHT_TO_LEFT; 760 const bool rtl = GetTextDirection() == base::i18n::RIGHT_TO_LEFT;
729 for (size_t i = 0; i < commands.size(); ++i) { 761 for (size_t i = 0; i < commands.size(); ++i) {
730 const int command = GetViewsCommand(commands[i], rtl); 762 const ui::TextEditCommand command = GetViewsCommand(commands[i], rtl);
731 if (IsEditCommandEnabled(command)) { 763 if (IsTextEditCommandEnabled(command)) {
732 ExecuteEditCommand(command); 764 ExecuteTextEditCommand(command);
733 handled = true; 765 handled = true;
734 } 766 }
735 } 767 }
736 return handled; 768 return handled;
737 } 769 }
738 #endif 770 #endif
739 771
740 if (edit_command == kNoCommand) 772 if (edit_command == ui::TextEditCommand::INVALID_COMMAND)
741 edit_command = GetCommandForKeyEvent(event); 773 edit_command = GetCommandForKeyEvent(event);
742 774
743 if (!handled && IsEditCommandEnabled(edit_command)) { 775 if (!handled && IsTextEditCommandEnabled(edit_command)) {
744 ExecuteEditCommand(edit_command); 776 ExecuteTextEditCommand(edit_command);
745 handled = true; 777 handled = true;
746 } 778 }
747 return handled; 779 return handled;
748 } 780 }
749 781
750 void Textfield::OnGestureEvent(ui::GestureEvent* event) { 782 void Textfield::OnGestureEvent(ui::GestureEvent* event) {
751 switch (event->type()) { 783 switch (event->type()) {
752 case ui::ET_GESTURE_TAP_DOWN: 784 case ui::ET_GESTURE_TAP_DOWN:
753 RequestFocus(); 785 RequestFocus();
754 ShowImeIfNeeded(); 786 ShowImeIfNeeded();
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 break; 870 break;
839 default: 871 default:
840 return; 872 return;
841 } 873 }
842 } 874 }
843 875
844 // This function is called by BrowserView to execute clipboard commands. 876 // This function is called by BrowserView to execute clipboard commands.
845 bool Textfield::AcceleratorPressed(const ui::Accelerator& accelerator) { 877 bool Textfield::AcceleratorPressed(const ui::Accelerator& accelerator) {
846 ui::KeyEvent event(accelerator.type(), accelerator.key_code(), 878 ui::KeyEvent event(accelerator.type(), accelerator.key_code(),
847 accelerator.modifiers()); 879 accelerator.modifiers());
848 ExecuteEditCommand(GetCommandForKeyEvent(event)); 880 ExecuteTextEditCommand(GetCommandForKeyEvent(event));
849 return true; 881 return true;
850 } 882 }
851 883
852 bool Textfield::CanHandleAccelerators() const { 884 bool Textfield::CanHandleAccelerators() const {
853 return GetRenderText()->focused() && View::CanHandleAccelerators(); 885 return GetRenderText()->focused() && View::CanHandleAccelerators();
854 } 886 }
855 887
856 void Textfield::AboutToRequestFocusFromTabTraversal(bool reverse) { 888 void Textfield::AboutToRequestFocusFromTabTraversal(bool reverse) {
857 SelectAll(false); 889 SelectAll(false);
858 } 890 }
859 891
860 bool Textfield::SkipDefaultKeyEventProcessing(const ui::KeyEvent& event) { 892 bool Textfield::SkipDefaultKeyEventProcessing(const ui::KeyEvent& event) {
861 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) 893 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
862 // Skip any accelerator handling that conflicts with custom keybindings. 894 // Skip any accelerator handling that conflicts with custom keybindings.
863 ui::TextEditKeyBindingsDelegateAuraLinux* delegate = 895 ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
864 ui::GetTextEditKeyBindingsDelegate(); 896 ui::GetTextEditKeyBindingsDelegate();
865 std::vector<ui::TextEditCommandAuraLinux> commands; 897 std::vector<ui::TextEditCommandAuraLinux> commands;
866 if (delegate && delegate->MatchEvent(event, &commands)) { 898 if (delegate && delegate->MatchEvent(event, &commands)) {
867 const bool rtl = GetTextDirection() == base::i18n::RIGHT_TO_LEFT; 899 const bool rtl = GetTextDirection() == base::i18n::RIGHT_TO_LEFT;
868 for (size_t i = 0; i < commands.size(); ++i) 900 for (size_t i = 0; i < commands.size(); ++i)
869 if (IsEditCommandEnabled(GetViewsCommand(commands[i], rtl))) 901 if (IsTextEditCommandEnabled(GetViewsCommand(commands[i], rtl)))
870 return true; 902 return true;
871 } 903 }
872 #endif 904 #endif
873 905
874 // Skip backspace accelerator handling; editable textfields handle this key. 906 // Skip backspace accelerator handling; editable textfields handle this key.
875 // Also skip processing Windows [Alt]+<num-pad digit> Unicode alt-codes. 907 // Also skip processing Windows [Alt]+<num-pad digit> Unicode alt-codes.
876 const bool is_backspace = event.key_code() == ui::VKEY_BACK; 908 const bool is_backspace = event.key_code() == ui::VKEY_BACK;
877 return (is_backspace && !read_only()) || event.IsUnicodeKeyCode(); 909 return (is_backspace && !read_only()) || event.IsUnicodeKeyCode();
878 } 910 }
879 911
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
1232 } 1264 }
1233 1265
1234 //////////////////////////////////////////////////////////////////////////////// 1266 ////////////////////////////////////////////////////////////////////////////////
1235 // Textfield, ui::SimpleMenuModel::Delegate overrides: 1267 // Textfield, ui::SimpleMenuModel::Delegate overrides:
1236 1268
1237 bool Textfield::IsCommandIdChecked(int command_id) const { 1269 bool Textfield::IsCommandIdChecked(int command_id) const {
1238 return true; 1270 return true;
1239 } 1271 }
1240 1272
1241 bool Textfield::IsCommandIdEnabled(int command_id) const { 1273 bool Textfield::IsCommandIdEnabled(int command_id) const {
1242 return IsMenuCommand(command_id) && 1274 return Textfield::IsTextEditCommandEnabled(
1243 Textfield::IsEditCommandEnabled(command_id); 1275 GetTextEditCommandFromMenuCommand(command_id));
1244 } 1276 }
1245 1277
1246 bool Textfield::GetAcceleratorForCommandId(int command_id, 1278 bool Textfield::GetAcceleratorForCommandId(int command_id,
1247 ui::Accelerator* accelerator) { 1279 ui::Accelerator* accelerator) {
1248 switch (command_id) { 1280 switch (command_id) {
1249 case IDS_APP_UNDO: 1281 case IDS_APP_UNDO:
1250 *accelerator = ui::Accelerator(ui::VKEY_Z, ui::EF_CONTROL_DOWN); 1282 *accelerator = ui::Accelerator(ui::VKEY_Z, ui::EF_CONTROL_DOWN);
1251 return true; 1283 return true;
1252 1284
1253 case IDS_APP_CUT: 1285 case IDS_APP_CUT:
(...skipping 11 matching lines...) Expand all
1265 case IDS_APP_SELECT_ALL: 1297 case IDS_APP_SELECT_ALL:
1266 *accelerator = ui::Accelerator(ui::VKEY_A, ui::EF_CONTROL_DOWN); 1298 *accelerator = ui::Accelerator(ui::VKEY_A, ui::EF_CONTROL_DOWN);
1267 return true; 1299 return true;
1268 1300
1269 default: 1301 default:
1270 return false; 1302 return false;
1271 } 1303 }
1272 } 1304 }
1273 1305
1274 void Textfield::ExecuteCommand(int command_id, int event_flags) { 1306 void Textfield::ExecuteCommand(int command_id, int event_flags) {
1275 DestroyTouchSelection(); 1307 Textfield::ExecuteTextEditCommand(
1276 if (Textfield::IsCommandIdEnabled(command_id)) 1308 GetTextEditCommandFromMenuCommand(command_id));
1277 Textfield::ExecuteEditCommand(command_id);
1278 } 1309 }
1279 1310
1280 //////////////////////////////////////////////////////////////////////////////// 1311 ////////////////////////////////////////////////////////////////////////////////
1281 // Textfield, ui::TextInputClient overrides: 1312 // Textfield, ui::TextInputClient overrides:
1282 1313
1283 void Textfield::SetCompositionText(const ui::CompositionText& composition) { 1314 void Textfield::SetCompositionText(const ui::CompositionText& composition) {
1284 if (GetTextInputType() == ui::TEXT_INPUT_TYPE_NONE) 1315 if (GetTextInputType() == ui::TEXT_INPUT_TYPE_NONE)
1285 return; 1316 return;
1286 1317
1287 OnBeforeUserAction(); 1318 OnBeforeUserAction();
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
1489 1520
1490 range.set_start(range.start() - before); 1521 range.set_start(range.start() - before);
1491 range.set_end(range.end() + after); 1522 range.set_end(range.end() + after);
1492 gfx::Range text_range; 1523 gfx::Range text_range;
1493 if (GetTextRange(&text_range) && text_range.Contains(range)) 1524 if (GetTextRange(&text_range) && text_range.Contains(range))
1494 DeleteRange(range); 1525 DeleteRange(range);
1495 } 1526 }
1496 1527
1497 void Textfield::EnsureCaretInRect(const gfx::Rect& rect) {} 1528 void Textfield::EnsureCaretInRect(const gfx::Rect& rect) {}
1498 1529
1499 bool Textfield::IsEditCommandEnabled(int command_id) const { 1530 bool Textfield::IsTextEditCommandEnabled(ui::TextEditCommand command) const {
1500 base::string16 result; 1531 base::string16 result;
1501 bool editable = !read_only(); 1532 bool editable = !read_only();
1502 bool readable = text_input_type_ != ui::TEXT_INPUT_TYPE_PASSWORD; 1533 bool readable = text_input_type_ != ui::TEXT_INPUT_TYPE_PASSWORD;
1503 switch (command_id) { 1534 switch (command) {
1504 case IDS_APP_UNDO: 1535 case ui::TextEditCommand::INVALID_COMMAND:
1536 return false;
1537 case ui::TextEditCommand::UNDO:
1505 return editable && model_->CanUndo(); 1538 return editable && model_->CanUndo();
1506 case IDS_APP_REDO: 1539 case ui::TextEditCommand::REDO:
1507 return editable && model_->CanRedo(); 1540 return editable && model_->CanRedo();
1508 case IDS_APP_CUT: 1541 case ui::TextEditCommand::CUT:
1509 return editable && readable && model_->HasSelection(); 1542 return editable && readable && model_->HasSelection();
1510 case IDS_APP_COPY: 1543 case ui::TextEditCommand::COPY:
1511 return readable && model_->HasSelection(); 1544 return readable && model_->HasSelection();
1512 case IDS_APP_PASTE: 1545 case ui::TextEditCommand::PASTE:
1513 ui::Clipboard::GetForCurrentThread()->ReadText( 1546 ui::Clipboard::GetForCurrentThread()->ReadText(
1514 ui::CLIPBOARD_TYPE_COPY_PASTE, &result); 1547 ui::CLIPBOARD_TYPE_COPY_PASTE, &result);
1515 return editable && !result.empty(); 1548 return editable && !result.empty();
1516 case IDS_APP_DELETE: 1549 case ui::TextEditCommand::DELETE_SELECTION:
1517 return editable && model_->HasSelection(); 1550 return editable && model_->HasSelection();
1518 case IDS_APP_SELECT_ALL: 1551 case ui::TextEditCommand::SELECT_ALL:
1519 return !text().empty(); 1552 return !text().empty();
1520 case IDS_DELETE_FORWARD: 1553 case ui::TextEditCommand::DELETE_FORWARD:
1521 case IDS_DELETE_BACKWARD: 1554 case ui::TextEditCommand::DELETE_BACKWARD:
1522 case IDS_DELETE_TO_BEGINNING_OF_LINE: 1555 case ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE:
1523 case IDS_DELETE_TO_END_OF_LINE: 1556 case ui::TextEditCommand::DELETE_TO_END_OF_LINE:
1524 case IDS_DELETE_WORD_BACKWARD: 1557 case ui::TextEditCommand::DELETE_WORD_BACKWARD:
1525 case IDS_DELETE_WORD_FORWARD: 1558 case ui::TextEditCommand::DELETE_WORD_FORWARD:
1526 return editable; 1559 return editable;
1527 case IDS_MOVE_LEFT: 1560 case ui::TextEditCommand::MOVE_LEFT:
1528 case IDS_MOVE_LEFT_AND_MODIFY_SELECTION: 1561 case ui::TextEditCommand::MOVE_LEFT_AND_MODIFY_SELECTION:
1529 case IDS_MOVE_RIGHT: 1562 case ui::TextEditCommand::MOVE_RIGHT:
1530 case IDS_MOVE_RIGHT_AND_MODIFY_SELECTION: 1563 case ui::TextEditCommand::MOVE_RIGHT_AND_MODIFY_SELECTION:
1531 case IDS_MOVE_WORD_LEFT: 1564 case ui::TextEditCommand::MOVE_WORD_LEFT:
1532 case IDS_MOVE_WORD_LEFT_AND_MODIFY_SELECTION: 1565 case ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION:
1533 case IDS_MOVE_WORD_RIGHT: 1566 case ui::TextEditCommand::MOVE_WORD_RIGHT:
1534 case IDS_MOVE_WORD_RIGHT_AND_MODIFY_SELECTION: 1567 case ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION:
1535 case IDS_MOVE_TO_BEGINNING_OF_LINE: 1568 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE:
1536 case IDS_MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION: 1569 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION:
1537 case IDS_MOVE_TO_END_OF_LINE: 1570 case ui::TextEditCommand::MOVE_TO_END_OF_LINE:
1538 case IDS_MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION: 1571 case ui::TextEditCommand::MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION:
1539 return true; 1572 return true;
1540 default: 1573 case ui::TextEditCommand::MOVE_UP:
1574 case ui::TextEditCommand::MOVE_DOWN:
1541 return false; 1575 return false;
1542 } 1576 }
1577 NOTREACHED();
1578 return false;
1543 } 1579 }
1544 1580
1545 void Textfield::SetEditCommandForNextKeyEvent(int command_id) { 1581 void Textfield::SetTextEditCommandForNextKeyEvent(ui::TextEditCommand command) {
1546 DCHECK_EQ(kNoCommand, scheduled_edit_command_); 1582 DCHECK_EQ(ui::TextEditCommand::INVALID_COMMAND, scheduled_text_edit_command_);
1547 scheduled_edit_command_ = command_id; 1583 scheduled_text_edit_command_ = command;
1548 } 1584 }
1549 1585
1550 //////////////////////////////////////////////////////////////////////////////// 1586 ////////////////////////////////////////////////////////////////////////////////
1551 // Textfield, protected: 1587 // Textfield, protected:
1552 1588
1553 void Textfield::DoInsertChar(base::char16 ch) { 1589 void Textfield::DoInsertChar(base::char16 ch) {
1554 OnBeforeUserAction(); 1590 OnBeforeUserAction();
1555 skip_input_method_cancel_composition_ = true; 1591 skip_input_method_cancel_composition_ = true;
1556 if (GetRenderText()->insert_mode()) 1592 if (GetRenderText()->insert_mode())
1557 model_->InsertChar(ch); 1593 model_->InsertChar(ch);
1558 else 1594 else
1559 model_->ReplaceChar(ch); 1595 model_->ReplaceChar(ch);
1560 skip_input_method_cancel_composition_ = false; 1596 skip_input_method_cancel_composition_ = false;
1561 1597
1562 UpdateAfterChange(true, true); 1598 UpdateAfterChange(true, true);
1563 OnAfterUserAction(); 1599 OnAfterUserAction();
1564 } 1600 }
1565 1601
1566 gfx::RenderText* Textfield::GetRenderText() const { 1602 gfx::RenderText* Textfield::GetRenderText() const {
1567 return model_->render_text(); 1603 return model_->render_text();
1568 } 1604 }
1569 1605
1570 base::string16 Textfield::GetSelectionClipboardText() const { 1606 base::string16 Textfield::GetSelectionClipboardText() const {
1571 base::string16 selection_clipboard_text; 1607 base::string16 selection_clipboard_text;
1572 ui::Clipboard::GetForCurrentThread()->ReadText( 1608 ui::Clipboard::GetForCurrentThread()->ReadText(
1573 ui::CLIPBOARD_TYPE_SELECTION, &selection_clipboard_text); 1609 ui::CLIPBOARD_TYPE_SELECTION, &selection_clipboard_text);
1574 return selection_clipboard_text; 1610 return selection_clipboard_text;
1575 } 1611 }
1576 1612
1577 void Textfield::ExecuteEditCommand(int command_id) { 1613 void Textfield::ExecuteTextEditCommand(ui::TextEditCommand command) {
1578 DestroyTouchSelection(); 1614 DestroyTouchSelection();
1579 1615
1580 // Some codepaths may bypass GetCommandForKeyEvent, so any selection-dependent 1616 // Some codepaths may bypass GetCommandForKeyEvent, so any selection-dependent
1581 // modifications of the command should happen here. 1617 // modifications of the command should happen here.
1582 if (HasSelection()) { 1618 if (HasSelection()) {
1583 switch (command_id) { 1619 switch (command) {
1584 case IDS_DELETE_WORD_BACKWARD: 1620 case ui::TextEditCommand::DELETE_WORD_BACKWARD:
1585 case IDS_DELETE_TO_BEGINNING_OF_LINE: 1621 case ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE:
1586 command_id = IDS_DELETE_BACKWARD; 1622 command = ui::TextEditCommand::DELETE_BACKWARD;
1587 break; 1623 break;
1588 case IDS_DELETE_WORD_FORWARD: 1624 case ui::TextEditCommand::DELETE_WORD_FORWARD:
1589 case IDS_DELETE_TO_END_OF_LINE: 1625 case ui::TextEditCommand::DELETE_TO_END_OF_LINE:
1590 command_id = IDS_DELETE_FORWARD; 1626 command = ui::TextEditCommand::DELETE_FORWARD;
1627 break;
1628 default:
1591 break; 1629 break;
1592 } 1630 }
1593 } 1631 }
1594 1632
1595 // We only execute the commands enabled in Textfield::IsEditCommandEnabled 1633 // We only execute the commands enabled in Textfield::IsTextEditCommandEnabled
1596 // below. Hence don't do a virtual IsEditCommandEnabled call. 1634 // below. Hence don't do a virtual IsTextEditCommandEnabled call.
1597 if (!Textfield::IsEditCommandEnabled(command_id)) 1635 if (!Textfield::IsTextEditCommandEnabled(command))
1598 return; 1636 return;
1599 1637
1600 bool text_changed = false; 1638 bool text_changed = false;
1601 bool cursor_changed = false; 1639 bool cursor_changed = false;
1602 bool rtl = GetTextDirection() == base::i18n::RIGHT_TO_LEFT; 1640 bool rtl = GetTextDirection() == base::i18n::RIGHT_TO_LEFT;
1603 gfx::VisualCursorDirection begin = rtl ? gfx::CURSOR_RIGHT : gfx::CURSOR_LEFT; 1641 gfx::VisualCursorDirection begin = rtl ? gfx::CURSOR_RIGHT : gfx::CURSOR_LEFT;
1604 gfx::VisualCursorDirection end = rtl ? gfx::CURSOR_LEFT : gfx::CURSOR_RIGHT; 1642 gfx::VisualCursorDirection end = rtl ? gfx::CURSOR_LEFT : gfx::CURSOR_RIGHT;
1605 gfx::SelectionModel selection_model = GetSelectionModel(); 1643 gfx::SelectionModel selection_model = GetSelectionModel();
1606 1644
1607 OnBeforeUserAction(); 1645 OnBeforeUserAction();
1608 switch (command_id) { 1646 switch (command) {
1609 case IDS_APP_UNDO: 1647 case ui::TextEditCommand::UNDO:
1610 text_changed = cursor_changed = model_->Undo(); 1648 text_changed = cursor_changed = model_->Undo();
1611 break; 1649 break;
1612 case IDS_APP_REDO: 1650 case ui::TextEditCommand::REDO:
1613 text_changed = cursor_changed = model_->Redo(); 1651 text_changed = cursor_changed = model_->Redo();
1614 break; 1652 break;
1615 case IDS_APP_CUT: 1653 case ui::TextEditCommand::CUT:
1616 text_changed = cursor_changed = Cut(); 1654 text_changed = cursor_changed = Cut();
1617 break; 1655 break;
1618 case IDS_APP_COPY: 1656 case ui::TextEditCommand::COPY:
1619 Copy(); 1657 Copy();
1620 break; 1658 break;
1621 case IDS_APP_PASTE: 1659 case ui::TextEditCommand::PASTE:
1622 text_changed = cursor_changed = Paste(); 1660 text_changed = cursor_changed = Paste();
1623 break; 1661 break;
1624 case IDS_APP_DELETE: 1662 case ui::TextEditCommand::DELETE_SELECTION:
1625 text_changed = cursor_changed = model_->Delete(); 1663 text_changed = cursor_changed = model_->Delete();
1626 break; 1664 break;
1627 case IDS_APP_SELECT_ALL: 1665 case ui::TextEditCommand::SELECT_ALL:
1628 SelectAll(false); 1666 SelectAll(false);
1629 break; 1667 break;
1630 case IDS_DELETE_BACKWARD: 1668 case ui::TextEditCommand::DELETE_BACKWARD:
1631 text_changed = cursor_changed = model_->Backspace(); 1669 text_changed = cursor_changed = model_->Backspace();
1632 break; 1670 break;
1633 case IDS_DELETE_FORWARD: 1671 case ui::TextEditCommand::DELETE_FORWARD:
1634 text_changed = cursor_changed = model_->Delete(); 1672 text_changed = cursor_changed = model_->Delete();
1635 break; 1673 break;
1636 case IDS_DELETE_TO_END_OF_LINE: 1674 case ui::TextEditCommand::DELETE_TO_END_OF_LINE:
1637 model_->MoveCursor(gfx::LINE_BREAK, end, true); 1675 model_->MoveCursor(gfx::LINE_BREAK, end, true);
1638 text_changed = cursor_changed = model_->Delete(); 1676 text_changed = cursor_changed = model_->Delete();
1639 break; 1677 break;
1640 case IDS_DELETE_TO_BEGINNING_OF_LINE: 1678 case ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE:
1641 model_->MoveCursor(gfx::LINE_BREAK, begin, true); 1679 model_->MoveCursor(gfx::LINE_BREAK, begin, true);
1642 text_changed = cursor_changed = model_->Backspace(); 1680 text_changed = cursor_changed = model_->Backspace();
1643 break; 1681 break;
1644 case IDS_DELETE_WORD_BACKWARD: 1682 case ui::TextEditCommand::DELETE_WORD_BACKWARD:
1645 model_->MoveCursor(gfx::WORD_BREAK, begin, true); 1683 model_->MoveCursor(gfx::WORD_BREAK, begin, true);
1646 text_changed = cursor_changed = model_->Backspace(); 1684 text_changed = cursor_changed = model_->Backspace();
1647 break; 1685 break;
1648 case IDS_DELETE_WORD_FORWARD: 1686 case ui::TextEditCommand::DELETE_WORD_FORWARD:
1649 model_->MoveCursor(gfx::WORD_BREAK, end, true); 1687 model_->MoveCursor(gfx::WORD_BREAK, end, true);
1650 text_changed = cursor_changed = model_->Delete(); 1688 text_changed = cursor_changed = model_->Delete();
1651 break; 1689 break;
1652 case IDS_MOVE_LEFT: 1690 case ui::TextEditCommand::MOVE_LEFT:
1653 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, false); 1691 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, false);
1654 break; 1692 break;
1655 case IDS_MOVE_LEFT_AND_MODIFY_SELECTION: 1693 case ui::TextEditCommand::MOVE_LEFT_AND_MODIFY_SELECTION:
1656 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, true); 1694 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, true);
1657 break; 1695 break;
1658 case IDS_MOVE_RIGHT: 1696 case ui::TextEditCommand::MOVE_RIGHT:
1659 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false); 1697 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false);
1660 break; 1698 break;
1661 case IDS_MOVE_RIGHT_AND_MODIFY_SELECTION: 1699 case ui::TextEditCommand::MOVE_RIGHT_AND_MODIFY_SELECTION:
1662 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true); 1700 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true);
1663 break; 1701 break;
1664 case IDS_MOVE_WORD_LEFT: 1702 case ui::TextEditCommand::MOVE_WORD_LEFT:
1665 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, false); 1703 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, false);
1666 break; 1704 break;
1667 case IDS_MOVE_WORD_LEFT_AND_MODIFY_SELECTION: 1705 case ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION:
1668 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, true); 1706 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, true);
1669 break; 1707 break;
1670 case IDS_MOVE_WORD_RIGHT: 1708 case ui::TextEditCommand::MOVE_WORD_RIGHT:
1671 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, false); 1709 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, false);
1672 break; 1710 break;
1673 case IDS_MOVE_WORD_RIGHT_AND_MODIFY_SELECTION: 1711 case ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION:
1674 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, true); 1712 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, true);
1675 break; 1713 break;
1676 case IDS_MOVE_TO_BEGINNING_OF_LINE: 1714 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE:
1677 model_->MoveCursor(gfx::LINE_BREAK, begin, false); 1715 model_->MoveCursor(gfx::LINE_BREAK, begin, false);
1678 break; 1716 break;
1679 case IDS_MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION: 1717 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION:
1680 model_->MoveCursor(gfx::LINE_BREAK, begin, true); 1718 model_->MoveCursor(gfx::LINE_BREAK, begin, true);
1681 break; 1719 break;
1682 case IDS_MOVE_TO_END_OF_LINE: 1720 case ui::TextEditCommand::MOVE_TO_END_OF_LINE:
1683 model_->MoveCursor(gfx::LINE_BREAK, end, false); 1721 model_->MoveCursor(gfx::LINE_BREAK, end, false);
1684 break; 1722 break;
1685 case IDS_MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION: 1723 case ui::TextEditCommand::MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION:
1686 model_->MoveCursor(gfx::LINE_BREAK, end, true); 1724 model_->MoveCursor(gfx::LINE_BREAK, end, true);
1687 break; 1725 break;
1688 default: 1726 case ui::TextEditCommand::MOVE_UP:
1727 case ui::TextEditCommand::MOVE_DOWN:
1728 case ui::TextEditCommand::INVALID_COMMAND:
1689 NOTREACHED(); 1729 NOTREACHED();
1690 break; 1730 break;
1691 } 1731 }
1692 1732
1693 cursor_changed |= GetSelectionModel() != selection_model; 1733 cursor_changed |= GetSelectionModel() != selection_model;
1694 if (cursor_changed) 1734 if (cursor_changed)
1695 UpdateSelectionClipboard(); 1735 UpdateSelectionClipboard();
1696 UpdateAfterChange(text_changed, cursor_changed); 1736 UpdateAfterChange(text_changed, cursor_changed);
1697 OnAfterUserAction(); 1737 OnAfterUserAction();
1698 } 1738 }
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
1952 RequestFocus(); 1992 RequestFocus();
1953 model_->MoveCursorTo(mouse); 1993 model_->MoveCursorTo(mouse);
1954 if (!selection_clipboard_text.empty()) { 1994 if (!selection_clipboard_text.empty()) {
1955 model_->InsertText(selection_clipboard_text); 1995 model_->InsertText(selection_clipboard_text);
1956 UpdateAfterChange(true, true); 1996 UpdateAfterChange(true, true);
1957 } 1997 }
1958 OnAfterUserAction(); 1998 OnAfterUserAction();
1959 } 1999 }
1960 2000
1961 } // namespace views 2001 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/controls/textfield/textfield.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698