Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/resource/resource_bundle.h" | 19 #include "ui/base/resource/resource_bundle.h" |
| 20 #include "ui/base/ui_base_switches_util.h" | 20 #include "ui/base/ui_base_switches_util.h" |
| 21 #include "ui/compositor/canvas_painter.h" | 21 #include "ui/compositor/canvas_painter.h" |
| 22 #include "ui/compositor/scoped_animation_duration_scale_mode.h" | 22 #include "ui/compositor/scoped_animation_duration_scale_mode.h" |
| 23 #include "ui/display/display.h" | 23 #include "ui/display/display.h" |
| 24 #include "ui/display/screen.h" | 24 #include "ui/display/screen.h" |
| 25 #include "ui/events/base_event_utils.h" | 25 #include "ui/events/base_event_utils.h" |
| 26 #include "ui/events/event.h" | 26 #include "ui/events/event.h" |
| 27 #include "ui/events/keycodes/keyboard_codes.h" | 27 #include "ui/events/keycodes/keyboard_codes.h" |
| 28 #include "ui/events/text_edit_commands.h" | |
| 28 #include "ui/gfx/canvas.h" | 29 #include "ui/gfx/canvas.h" |
| 29 #include "ui/gfx/geometry/insets.h" | 30 #include "ui/gfx/geometry/insets.h" |
| 30 #include "ui/gfx/selection_bound.h" | 31 #include "ui/gfx/selection_bound.h" |
| 31 #include "ui/native_theme/native_theme.h" | 32 #include "ui/native_theme/native_theme.h" |
| 32 #include "ui/strings/grit/ui_strings.h" | 33 #include "ui/strings/grit/ui_strings.h" |
| 33 #include "ui/views/background.h" | 34 #include "ui/views/background.h" |
| 34 #include "ui/views/controls/focusable_border.h" | 35 #include "ui/views/controls/focusable_border.h" |
| 35 #include "ui/views/controls/label.h" | 36 #include "ui/views/controls/label.h" |
| 36 #include "ui/views/controls/menu/menu_runner.h" | 37 #include "ui/views/controls/menu/menu_runner.h" |
| 37 #include "ui/views/controls/native/native_view_host.h" | 38 #include "ui/views/controls/native/native_view_host.h" |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 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 return control ? ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION |
| 123 : ui::TextEditCommand::MOVE_RIGHT_AND_MODIFY_SELECTION; | |
| 118 case ui::VKEY_LEFT: | 124 case ui::VKEY_LEFT: |
| 119 // Ignore alt+left, which may be a browser navigation shortcut. | 125 // Ignore alt+left, which may be a browser navigation shortcut. |
| 120 if (alt) | 126 if (alt) |
| 121 return kNoCommand; | 127 return ui::TextEditCommand::INVALID_COMMAND; |
| 122 if (!shift) | 128 if (!shift) |
|
msw
2016/06/10 00:48:51
nit: add curly braces.
karandeepb
2016/06/10 08:20:46
Done.
| |
| 123 return control ? IDS_MOVE_WORD_LEFT : IDS_MOVE_LEFT; | 129 return control ? ui::TextEditCommand::MOVE_WORD_LEFT |
| 124 return control ? IDS_MOVE_WORD_LEFT_AND_MODIFY_SELECTION : | 130 : ui::TextEditCommand::MOVE_LEFT; |
| 125 IDS_MOVE_LEFT_AND_MODIFY_SELECTION; | 131 return control ? ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION |
| 132 : ui::TextEditCommand::MOVE_LEFT_AND_MODIFY_SELECTION; | |
| 126 case ui::VKEY_HOME: | 133 case ui::VKEY_HOME: |
| 127 return shift ? IDS_MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION : | 134 return shift ? ui::TextEditCommand:: |
| 128 IDS_MOVE_TO_BEGINNING_OF_LINE; | 135 MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION |
| 136 : ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE; | |
| 129 case ui::VKEY_END: | 137 case ui::VKEY_END: |
| 130 return shift ? IDS_MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION : | 138 return shift |
| 131 IDS_MOVE_TO_END_OF_LINE; | 139 ? ui::TextEditCommand::MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION |
| 140 : ui::TextEditCommand::MOVE_TO_END_OF_LINE; | |
| 132 case ui::VKEY_BACK: | 141 case ui::VKEY_BACK: |
| 133 if (!control) | 142 if (!control) |
| 134 return IDS_DELETE_BACKWARD; | 143 return ui::TextEditCommand::DELETE_BACKWARD; |
| 135 #if defined(OS_LINUX) | 144 #if defined(OS_LINUX) |
| 136 // Only erase by line break on Linux and ChromeOS. | 145 // Only erase by line break on Linux and ChromeOS. |
| 137 if (shift) | 146 if (shift) |
| 138 return IDS_DELETE_TO_BEGINNING_OF_LINE; | 147 return ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE; |
| 139 #endif | 148 #endif |
| 140 return IDS_DELETE_WORD_BACKWARD; | 149 return ui::TextEditCommand::DELETE_WORD_BACKWARD; |
| 141 case ui::VKEY_DELETE: | 150 case ui::VKEY_DELETE: |
| 142 #if defined(OS_LINUX) | 151 #if defined(OS_LINUX) |
| 143 // Only erase by line break on Linux and ChromeOS. | 152 // Only erase by line break on Linux and ChromeOS. |
| 144 if (shift && control) | 153 if (shift && control) |
| 145 return IDS_DELETE_TO_END_OF_LINE; | 154 return ui::TextEditCommand::DELETE_TO_END_OF_LINE; |
| 146 #endif | 155 #endif |
| 147 if (control) | 156 if (control) |
| 148 return IDS_DELETE_WORD_FORWARD; | 157 return ui::TextEditCommand::DELETE_WORD_FORWARD; |
| 149 return shift ? IDS_APP_CUT : IDS_DELETE_FORWARD; | 158 return shift ? ui::TextEditCommand::CUT |
| 159 : ui::TextEditCommand::DELETE_FORWARD; | |
| 150 case ui::VKEY_INSERT: | 160 case ui::VKEY_INSERT: |
| 151 if (control && !shift) | 161 if (control && !shift) |
| 152 return IDS_APP_COPY; | 162 return ui::TextEditCommand::COPY; |
| 153 return (shift && !control) ? IDS_APP_PASTE : kNoCommand; | 163 return (shift && !control) ? ui::TextEditCommand::PASTE |
| 164 : ui::TextEditCommand::INVALID_COMMAND; | |
| 154 default: | 165 default: |
| 155 return kNoCommand; | 166 return ui::TextEditCommand::INVALID_COMMAND; |
| 156 } | 167 } |
| 157 } | 168 } |
| 158 | 169 |
| 159 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) | 170 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| 160 // Convert a custom text edit |command| to the equivalent views command ID. | 171 // Convert a custom text edit |command| to the equivalent views command ID. |
| 161 int GetViewsCommand(const ui::TextEditCommandAuraLinux& command, bool rtl) { | 172 ui::TextEditCommand GetViewsCommand(const ui::TextEditCommandAuraLinux& command, |
| 173 bool rtl) { | |
| 162 const bool select = command.extend_selection(); | 174 const bool select = command.extend_selection(); |
| 163 switch (command.command_id()) { | 175 switch (command.command_id()) { |
| 164 case ui::TextEditCommandAuraLinux::COPY: | 176 case ui::TextEditCommandAuraLinux::COPY: |
| 165 return IDS_APP_COPY; | 177 return ui::TextEditCommand::COPY; |
| 166 case ui::TextEditCommandAuraLinux::CUT: | 178 case ui::TextEditCommandAuraLinux::CUT: |
| 167 return IDS_APP_CUT; | 179 return ui::TextEditCommand::CUT; |
| 168 case ui::TextEditCommandAuraLinux::DELETE_BACKWARD: | 180 case ui::TextEditCommandAuraLinux::DELETE_BACKWARD: |
| 169 return IDS_DELETE_BACKWARD; | 181 return ui::TextEditCommand::DELETE_BACKWARD; |
| 170 case ui::TextEditCommandAuraLinux::DELETE_FORWARD: | 182 case ui::TextEditCommandAuraLinux::DELETE_FORWARD: |
| 171 return IDS_DELETE_FORWARD; | 183 return ui::TextEditCommand::DELETE_FORWARD; |
| 172 case ui::TextEditCommandAuraLinux::DELETE_TO_BEGINING_OF_LINE: | 184 case ui::TextEditCommandAuraLinux::DELETE_TO_BEGINING_OF_LINE: |
| 173 case ui::TextEditCommandAuraLinux::DELETE_TO_BEGINING_OF_PARAGRAPH: | 185 case ui::TextEditCommandAuraLinux::DELETE_TO_BEGINING_OF_PARAGRAPH: |
| 174 return IDS_DELETE_TO_BEGINNING_OF_LINE; | 186 return ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE; |
| 175 case ui::TextEditCommandAuraLinux::DELETE_TO_END_OF_LINE: | 187 case ui::TextEditCommandAuraLinux::DELETE_TO_END_OF_LINE: |
| 176 case ui::TextEditCommandAuraLinux::DELETE_TO_END_OF_PARAGRAPH: | 188 case ui::TextEditCommandAuraLinux::DELETE_TO_END_OF_PARAGRAPH: |
| 177 return IDS_DELETE_TO_END_OF_LINE; | 189 return ui::TextEditCommand::DELETE_TO_END_OF_LINE; |
| 178 case ui::TextEditCommandAuraLinux::DELETE_WORD_BACKWARD: | 190 case ui::TextEditCommandAuraLinux::DELETE_WORD_BACKWARD: |
| 179 return IDS_DELETE_WORD_BACKWARD; | 191 return ui::TextEditCommand::DELETE_WORD_BACKWARD; |
| 180 case ui::TextEditCommandAuraLinux::DELETE_WORD_FORWARD: | 192 case ui::TextEditCommandAuraLinux::DELETE_WORD_FORWARD: |
| 181 return IDS_DELETE_WORD_FORWARD; | 193 return ui::TextEditCommand::DELETE_WORD_FORWARD; |
| 182 case ui::TextEditCommandAuraLinux::INSERT_TEXT: | 194 case ui::TextEditCommandAuraLinux::INSERT_TEXT: |
| 183 return kNoCommand; | 195 return ui::TextEditCommand::INVALID_COMMAND; |
| 184 case ui::TextEditCommandAuraLinux::MOVE_BACKWARD: | 196 case ui::TextEditCommandAuraLinux::MOVE_BACKWARD: |
| 185 if (rtl) | 197 if (rtl) |
| 186 return select ? IDS_MOVE_RIGHT_AND_MODIFY_SELECTION : IDS_MOVE_RIGHT; | 198 return select ? ui::TextEditCommand::MOVE_RIGHT_AND_MODIFY_SELECTION |
| 187 return select ? IDS_MOVE_LEFT_AND_MODIFY_SELECTION : IDS_MOVE_LEFT; | 199 : ui::TextEditCommand::MOVE_RIGHT; |
| 200 return select ? ui::TextEditCommand::MOVE_LEFT_AND_MODIFY_SELECTION | |
| 201 : ui::TextEditCommand::MOVE_LEFT; | |
| 188 case ui::TextEditCommandAuraLinux::MOVE_DOWN: | 202 case ui::TextEditCommandAuraLinux::MOVE_DOWN: |
| 189 return IDS_MOVE_DOWN; | 203 return ui::TextEditCommand::MOVE_DOWN; |
| 190 case ui::TextEditCommandAuraLinux::MOVE_FORWARD: | 204 case ui::TextEditCommandAuraLinux::MOVE_FORWARD: |
| 191 if (rtl) | 205 if (rtl) |
| 192 return select ? IDS_MOVE_LEFT_AND_MODIFY_SELECTION : IDS_MOVE_LEFT; | 206 return select ? ui::TextEditCommand::MOVE_LEFT_AND_MODIFY_SELECTION |
| 193 return select ? IDS_MOVE_RIGHT_AND_MODIFY_SELECTION : IDS_MOVE_RIGHT; | 207 : ui::TextEditCommand::MOVE_LEFT; |
| 208 return select ? ui::TextEditCommand::MOVE_RIGHT_AND_MODIFY_SELECTION | |
| 209 : ui::TextEditCommand::MOVE_RIGHT; | |
| 194 case ui::TextEditCommandAuraLinux::MOVE_LEFT: | 210 case ui::TextEditCommandAuraLinux::MOVE_LEFT: |
| 195 return select ? IDS_MOVE_LEFT_AND_MODIFY_SELECTION : IDS_MOVE_LEFT; | 211 return select ? ui::TextEditCommand::MOVE_LEFT_AND_MODIFY_SELECTION |
| 212 : ui::TextEditCommand::MOVE_LEFT; | |
| 196 case ui::TextEditCommandAuraLinux::MOVE_PAGE_DOWN: | 213 case ui::TextEditCommandAuraLinux::MOVE_PAGE_DOWN: |
| 197 case ui::TextEditCommandAuraLinux::MOVE_PAGE_UP: | 214 case ui::TextEditCommandAuraLinux::MOVE_PAGE_UP: |
| 198 return kNoCommand; | 215 return ui::TextEditCommand::INVALID_COMMAND; |
| 199 case ui::TextEditCommandAuraLinux::MOVE_RIGHT: | 216 case ui::TextEditCommandAuraLinux::MOVE_RIGHT: |
| 200 return select ? IDS_MOVE_RIGHT_AND_MODIFY_SELECTION : IDS_MOVE_RIGHT; | 217 return select ? ui::TextEditCommand::MOVE_RIGHT_AND_MODIFY_SELECTION |
| 218 : ui::TextEditCommand::MOVE_RIGHT; | |
| 201 case ui::TextEditCommandAuraLinux::MOVE_TO_BEGINING_OF_DOCUMENT: | 219 case ui::TextEditCommandAuraLinux::MOVE_TO_BEGINING_OF_DOCUMENT: |
| 202 case ui::TextEditCommandAuraLinux::MOVE_TO_BEGINING_OF_LINE: | 220 case ui::TextEditCommandAuraLinux::MOVE_TO_BEGINING_OF_LINE: |
| 203 case ui::TextEditCommandAuraLinux::MOVE_TO_BEGINING_OF_PARAGRAPH: | 221 case ui::TextEditCommandAuraLinux::MOVE_TO_BEGINING_OF_PARAGRAPH: |
| 204 return select ? IDS_MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION : | 222 return select ? ui::TextEditCommand:: |
| 205 IDS_MOVE_TO_BEGINNING_OF_LINE; | 223 MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION |
| 224 : ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE; | |
| 206 case ui::TextEditCommandAuraLinux::MOVE_TO_END_OF_DOCUMENT: | 225 case ui::TextEditCommandAuraLinux::MOVE_TO_END_OF_DOCUMENT: |
| 207 case ui::TextEditCommandAuraLinux::MOVE_TO_END_OF_LINE: | 226 case ui::TextEditCommandAuraLinux::MOVE_TO_END_OF_LINE: |
| 208 case ui::TextEditCommandAuraLinux::MOVE_TO_END_OF_PARAGRAPH: | 227 case ui::TextEditCommandAuraLinux::MOVE_TO_END_OF_PARAGRAPH: |
| 209 return select ? IDS_MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION : | 228 return select |
| 210 IDS_MOVE_TO_END_OF_LINE; | 229 ? ui::TextEditCommand::MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION |
| 230 : ui::TextEditCommand::MOVE_TO_END_OF_LINE; | |
| 211 case ui::TextEditCommandAuraLinux::MOVE_UP: | 231 case ui::TextEditCommandAuraLinux::MOVE_UP: |
| 212 return IDS_MOVE_UP; | 232 return ui::TextEditCommand::MOVE_UP; |
| 213 case ui::TextEditCommandAuraLinux::MOVE_WORD_BACKWARD: | 233 case ui::TextEditCommandAuraLinux::MOVE_WORD_BACKWARD: |
| 214 if (rtl) { | 234 if (rtl) { |
| 215 return select ? IDS_MOVE_WORD_RIGHT_AND_MODIFY_SELECTION : | 235 return select |
| 216 IDS_MOVE_WORD_RIGHT; | 236 ? ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION |
| 237 : ui::TextEditCommand::MOVE_WORD_RIGHT; | |
| 217 } | 238 } |
| 218 return select ? IDS_MOVE_WORD_LEFT_AND_MODIFY_SELECTION : | 239 return select ? ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION |
| 219 IDS_MOVE_WORD_LEFT; | 240 : ui::TextEditCommand::MOVE_WORD_LEFT; |
| 220 case ui::TextEditCommandAuraLinux::MOVE_WORD_FORWARD: | 241 case ui::TextEditCommandAuraLinux::MOVE_WORD_FORWARD: |
| 221 if (rtl) { | 242 if (rtl) { |
| 222 return select ? IDS_MOVE_WORD_LEFT_AND_MODIFY_SELECTION : | 243 return select ? ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION |
| 223 IDS_MOVE_WORD_LEFT; | 244 : ui::TextEditCommand::MOVE_WORD_LEFT; |
| 224 } | 245 } |
| 225 return select ? IDS_MOVE_WORD_RIGHT_AND_MODIFY_SELECTION : | 246 return select ? ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION |
| 226 IDS_MOVE_WORD_RIGHT; | 247 : ui::TextEditCommand::MOVE_WORD_RIGHT; |
| 227 case ui::TextEditCommandAuraLinux::MOVE_WORD_LEFT: | 248 case ui::TextEditCommandAuraLinux::MOVE_WORD_LEFT: |
| 228 return select ? IDS_MOVE_WORD_LEFT_AND_MODIFY_SELECTION : | 249 return select ? ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION |
| 229 IDS_MOVE_WORD_LEFT; | 250 : ui::TextEditCommand::MOVE_WORD_LEFT; |
| 230 case ui::TextEditCommandAuraLinux::MOVE_WORD_RIGHT: | 251 case ui::TextEditCommandAuraLinux::MOVE_WORD_RIGHT: |
| 231 return select ? IDS_MOVE_WORD_RIGHT_AND_MODIFY_SELECTION : | 252 return select ? ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION |
| 232 IDS_MOVE_WORD_RIGHT; | 253 : ui::TextEditCommand::MOVE_WORD_RIGHT; |
| 233 case ui::TextEditCommandAuraLinux::PASTE: | 254 case ui::TextEditCommandAuraLinux::PASTE: |
| 234 return IDS_APP_PASTE; | 255 return ui::TextEditCommand::PASTE; |
| 235 case ui::TextEditCommandAuraLinux::SELECT_ALL: | 256 case ui::TextEditCommandAuraLinux::SELECT_ALL: |
| 236 return IDS_APP_SELECT_ALL; | 257 return ui::TextEditCommand::SELECT_ALL; |
| 237 case ui::TextEditCommandAuraLinux::SET_MARK: | 258 case ui::TextEditCommandAuraLinux::SET_MARK: |
| 238 case ui::TextEditCommandAuraLinux::UNSELECT: | 259 case ui::TextEditCommandAuraLinux::UNSELECT: |
| 239 case ui::TextEditCommandAuraLinux::INVALID_COMMAND: | 260 case ui::TextEditCommandAuraLinux::INVALID_COMMAND: |
| 240 return kNoCommand; | 261 return ui::TextEditCommand::INVALID_COMMAND; |
| 241 } | 262 } |
| 242 return kNoCommand; | 263 NOTREACHED(); |
| 264 return ui::TextEditCommand::INVALID_COMMAND; | |
| 243 } | 265 } |
| 244 #endif | 266 #endif |
| 245 | 267 |
| 246 const gfx::FontList& GetDefaultFontList() { | 268 const gfx::FontList& GetDefaultFontList() { |
| 247 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 269 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
| 248 return rb.GetFontListWithDelta(ui::kLabelFontSizeDelta); | 270 return rb.GetFontListWithDelta(ui::kLabelFontSizeDelta); |
| 249 } | 271 } |
| 250 | 272 |
| 251 // Returns true if |command_id| is a menu action installed by this textfield. | 273 // Returns ui::TextEditCommand corresponding to |command_id| menu action. Keep |
|
msw
2016/06/10 00:48:51
nit: "returns the", "to the"
karandeepb
2016/06/10 08:20:46
Done.
| |
| 252 // Keep in sync with UpdateContextMenu. | 274 // in sync with UpdateContextMenu. |
| 253 bool IsMenuCommand(int command_id) { | 275 ui::TextEditCommand GetTextEditCommandFromMenuCommand(int command_id) { |
| 254 switch (command_id) { | 276 switch (command_id) { |
| 255 case IDS_APP_UNDO: | 277 case IDS_APP_UNDO: |
| 278 return ui::TextEditCommand::UNDO; | |
| 256 case IDS_APP_CUT: | 279 case IDS_APP_CUT: |
| 280 return ui::TextEditCommand::CUT; | |
| 257 case IDS_APP_COPY: | 281 case IDS_APP_COPY: |
| 282 return ui::TextEditCommand::COPY; | |
| 258 case IDS_APP_PASTE: | 283 case IDS_APP_PASTE: |
| 284 return ui::TextEditCommand::PASTE; | |
| 259 case IDS_APP_DELETE: | 285 case IDS_APP_DELETE: |
| 286 return ui::TextEditCommand::DELETE_SELECTION; | |
| 260 case IDS_APP_SELECT_ALL: | 287 case IDS_APP_SELECT_ALL: |
| 261 return true; | 288 return ui::TextEditCommand::SELECT_ALL; |
| 289 default: | |
| 290 return ui::TextEditCommand::INVALID_COMMAND; | |
| 262 } | 291 } |
| 263 return false; | |
| 264 } | 292 } |
| 265 | 293 |
| 266 } // namespace | 294 } // namespace |
| 267 | 295 |
| 268 // static | 296 // static |
| 269 const char Textfield::kViewClassName[] = "Textfield"; | 297 const char Textfield::kViewClassName[] = "Textfield"; |
| 270 const int Textfield::kTextPadding = 3; | 298 const int Textfield::kTextPadding = 3; |
| 271 | 299 |
| 272 // static | 300 // static |
| 273 size_t Textfield::GetCaretBlinkMs() { | 301 size_t Textfield::GetCaretBlinkMs() { |
| 274 static const size_t default_value = 500; | 302 static const size_t default_value = 500; |
| 275 #if defined(OS_WIN) | 303 #if defined(OS_WIN) |
| 276 static const size_t system_value = ::GetCaretBlinkTime(); | 304 static const size_t system_value = ::GetCaretBlinkTime(); |
| 277 if (system_value != 0) | 305 if (system_value != 0) |
| 278 return (system_value == INFINITE) ? 0 : system_value; | 306 return (system_value == INFINITE) ? 0 : system_value; |
| 279 #endif | 307 #endif |
| 280 return default_value; | 308 return default_value; |
| 281 } | 309 } |
| 282 | 310 |
| 283 Textfield::Textfield() | 311 Textfield::Textfield() |
| 284 : model_(new TextfieldModel(this)), | 312 : model_(new TextfieldModel(this)), |
| 285 controller_(NULL), | 313 controller_(NULL), |
| 286 scheduled_edit_command_(kNoCommand), | 314 scheduled_edit_command_(ui::TextEditCommand::INVALID_COMMAND), |
| 287 read_only_(false), | 315 read_only_(false), |
| 288 default_width_in_chars_(0), | 316 default_width_in_chars_(0), |
| 289 use_default_text_color_(true), | 317 use_default_text_color_(true), |
| 290 use_default_background_color_(true), | 318 use_default_background_color_(true), |
| 291 use_default_selection_text_color_(true), | 319 use_default_selection_text_color_(true), |
| 292 use_default_selection_background_color_(true), | 320 use_default_selection_background_color_(true), |
| 293 text_color_(SK_ColorBLACK), | 321 text_color_(SK_ColorBLACK), |
| 294 background_color_(SK_ColorWHITE), | 322 background_color_(SK_ColorWHITE), |
| 295 selection_text_color_(SK_ColorWHITE), | 323 selection_text_color_(SK_ColorWHITE), |
| 296 selection_background_color_(SK_ColorBLUE), | 324 selection_background_color_(SK_ColorBLUE), |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 701 drag_selection_timer_.Stop(); | 729 drag_selection_timer_.Stop(); |
| 702 // Cancel suspected drag initiations, the user was clicking in the selection. | 730 // Cancel suspected drag initiations, the user was clicking in the selection. |
| 703 if (initiating_drag_) | 731 if (initiating_drag_) |
| 704 MoveCursorTo(event.location(), false); | 732 MoveCursorTo(event.location(), false); |
| 705 initiating_drag_ = false; | 733 initiating_drag_ = false; |
| 706 UpdateSelectionClipboard(); | 734 UpdateSelectionClipboard(); |
| 707 OnAfterUserAction(); | 735 OnAfterUserAction(); |
| 708 } | 736 } |
| 709 | 737 |
| 710 bool Textfield::OnKeyPressed(const ui::KeyEvent& event) { | 738 bool Textfield::OnKeyPressed(const ui::KeyEvent& event) { |
| 711 int edit_command = scheduled_edit_command_; | 739 ui::TextEditCommand edit_command = scheduled_edit_command_; |
| 712 scheduled_edit_command_ = kNoCommand; | 740 scheduled_edit_command_ = ui::TextEditCommand::INVALID_COMMAND; |
| 713 | 741 |
| 714 // Since HandleKeyEvent() might destroy |this|, get a weak pointer and verify | 742 // Since HandleKeyEvent() might destroy |this|, get a weak pointer and verify |
| 715 // it isn't null before proceeding. | 743 // it isn't null before proceeding. |
| 716 base::WeakPtr<Textfield> textfield(weak_ptr_factory_.GetWeakPtr()); | 744 base::WeakPtr<Textfield> textfield(weak_ptr_factory_.GetWeakPtr()); |
| 717 | 745 |
| 718 bool handled = controller_ && controller_->HandleKeyEvent(this, event); | 746 bool handled = controller_ && controller_->HandleKeyEvent(this, event); |
| 719 | 747 |
| 720 if (!textfield) | 748 if (!textfield) |
| 721 return handled; | 749 return handled; |
| 722 | 750 |
| 723 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) | 751 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| 724 ui::TextEditKeyBindingsDelegateAuraLinux* delegate = | 752 ui::TextEditKeyBindingsDelegateAuraLinux* delegate = |
| 725 ui::GetTextEditKeyBindingsDelegate(); | 753 ui::GetTextEditKeyBindingsDelegate(); |
| 726 std::vector<ui::TextEditCommandAuraLinux> commands; | 754 std::vector<ui::TextEditCommandAuraLinux> commands; |
| 727 if (!handled && delegate && delegate->MatchEvent(event, &commands)) { | 755 if (!handled && delegate && delegate->MatchEvent(event, &commands)) { |
| 728 const bool rtl = GetTextDirection() == base::i18n::RIGHT_TO_LEFT; | 756 const bool rtl = GetTextDirection() == base::i18n::RIGHT_TO_LEFT; |
| 729 for (size_t i = 0; i < commands.size(); ++i) { | 757 for (size_t i = 0; i < commands.size(); ++i) { |
| 730 const int command = GetViewsCommand(commands[i], rtl); | 758 const ui::TextEditCommand command = GetViewsCommand(commands[i], rtl); |
| 731 if (IsEditCommandEnabled(command)) { | 759 if (IsEditCommandEnabled(command)) { |
| 732 ExecuteEditCommand(command); | 760 ExecuteEditCommand(command); |
| 733 handled = true; | 761 handled = true; |
| 734 } | 762 } |
| 735 } | 763 } |
| 736 return handled; | 764 return handled; |
| 737 } | 765 } |
| 738 #endif | 766 #endif |
| 739 | 767 |
| 740 if (edit_command == kNoCommand) | 768 if (edit_command == ui::TextEditCommand::INVALID_COMMAND) |
| 741 edit_command = GetCommandForKeyEvent(event); | 769 edit_command = GetCommandForKeyEvent(event); |
| 742 | 770 |
| 743 if (!handled && IsEditCommandEnabled(edit_command)) { | 771 if (!handled && IsEditCommandEnabled(edit_command)) { |
| 744 ExecuteEditCommand(edit_command); | 772 ExecuteEditCommand(edit_command); |
| 745 handled = true; | 773 handled = true; |
| 746 } | 774 } |
| 747 return handled; | 775 return handled; |
| 748 } | 776 } |
| 749 | 777 |
| 750 void Textfield::OnGestureEvent(ui::GestureEvent* event) { | 778 void Textfield::OnGestureEvent(ui::GestureEvent* event) { |
| (...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1232 } | 1260 } |
| 1233 | 1261 |
| 1234 //////////////////////////////////////////////////////////////////////////////// | 1262 //////////////////////////////////////////////////////////////////////////////// |
| 1235 // Textfield, ui::SimpleMenuModel::Delegate overrides: | 1263 // Textfield, ui::SimpleMenuModel::Delegate overrides: |
| 1236 | 1264 |
| 1237 bool Textfield::IsCommandIdChecked(int command_id) const { | 1265 bool Textfield::IsCommandIdChecked(int command_id) const { |
| 1238 return true; | 1266 return true; |
| 1239 } | 1267 } |
| 1240 | 1268 |
| 1241 bool Textfield::IsCommandIdEnabled(int command_id) const { | 1269 bool Textfield::IsCommandIdEnabled(int command_id) const { |
| 1242 return IsMenuCommand(command_id) && | 1270 return Textfield::IsEditCommandEnabled( |
| 1243 Textfield::IsEditCommandEnabled(command_id); | 1271 GetTextEditCommandFromMenuCommand(command_id)); |
| 1244 } | 1272 } |
| 1245 | 1273 |
| 1246 bool Textfield::GetAcceleratorForCommandId(int command_id, | 1274 bool Textfield::GetAcceleratorForCommandId(int command_id, |
| 1247 ui::Accelerator* accelerator) { | 1275 ui::Accelerator* accelerator) { |
| 1248 switch (command_id) { | 1276 switch (command_id) { |
| 1249 case IDS_APP_UNDO: | 1277 case IDS_APP_UNDO: |
| 1250 *accelerator = ui::Accelerator(ui::VKEY_Z, ui::EF_CONTROL_DOWN); | 1278 *accelerator = ui::Accelerator(ui::VKEY_Z, ui::EF_CONTROL_DOWN); |
| 1251 return true; | 1279 return true; |
| 1252 | 1280 |
| 1253 case IDS_APP_CUT: | 1281 case IDS_APP_CUT: |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 1265 case IDS_APP_SELECT_ALL: | 1293 case IDS_APP_SELECT_ALL: |
| 1266 *accelerator = ui::Accelerator(ui::VKEY_A, ui::EF_CONTROL_DOWN); | 1294 *accelerator = ui::Accelerator(ui::VKEY_A, ui::EF_CONTROL_DOWN); |
| 1267 return true; | 1295 return true; |
| 1268 | 1296 |
| 1269 default: | 1297 default: |
| 1270 return false; | 1298 return false; |
| 1271 } | 1299 } |
| 1272 } | 1300 } |
| 1273 | 1301 |
| 1274 void Textfield::ExecuteCommand(int command_id, int event_flags) { | 1302 void Textfield::ExecuteCommand(int command_id, int event_flags) { |
| 1275 DestroyTouchSelection(); | 1303 Textfield::ExecuteEditCommand(GetTextEditCommandFromMenuCommand(command_id)); |
| 1276 if (!Textfield::IsCommandIdEnabled(command_id)) | |
| 1277 return; | |
| 1278 Textfield::ExecuteEditCommand(command_id); | |
| 1279 } | 1304 } |
| 1280 | 1305 |
| 1281 //////////////////////////////////////////////////////////////////////////////// | 1306 //////////////////////////////////////////////////////////////////////////////// |
| 1282 // Textfield, ui::TextInputClient overrides: | 1307 // Textfield, ui::TextInputClient overrides: |
| 1283 | 1308 |
| 1284 void Textfield::SetCompositionText(const ui::CompositionText& composition) { | 1309 void Textfield::SetCompositionText(const ui::CompositionText& composition) { |
| 1285 if (GetTextInputType() == ui::TEXT_INPUT_TYPE_NONE) | 1310 if (GetTextInputType() == ui::TEXT_INPUT_TYPE_NONE) |
| 1286 return; | 1311 return; |
| 1287 | 1312 |
| 1288 OnBeforeUserAction(); | 1313 OnBeforeUserAction(); |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1490 | 1515 |
| 1491 range.set_start(range.start() - before); | 1516 range.set_start(range.start() - before); |
| 1492 range.set_end(range.end() + after); | 1517 range.set_end(range.end() + after); |
| 1493 gfx::Range text_range; | 1518 gfx::Range text_range; |
| 1494 if (GetTextRange(&text_range) && text_range.Contains(range)) | 1519 if (GetTextRange(&text_range) && text_range.Contains(range)) |
| 1495 DeleteRange(range); | 1520 DeleteRange(range); |
| 1496 } | 1521 } |
| 1497 | 1522 |
| 1498 void Textfield::EnsureCaretInRect(const gfx::Rect& rect) {} | 1523 void Textfield::EnsureCaretInRect(const gfx::Rect& rect) {} |
| 1499 | 1524 |
| 1500 bool Textfield::IsEditCommandEnabled(int command_id) const { | 1525 bool Textfield::IsEditCommandEnabled(ui::TextEditCommand command) const { |
| 1501 base::string16 result; | 1526 base::string16 result; |
| 1502 bool editable = !read_only(); | 1527 bool editable = !read_only(); |
| 1503 bool readable = text_input_type_ != ui::TEXT_INPUT_TYPE_PASSWORD; | 1528 bool readable = text_input_type_ != ui::TEXT_INPUT_TYPE_PASSWORD; |
| 1504 switch (command_id) { | 1529 switch (command) { |
| 1505 case IDS_APP_UNDO: | 1530 case ui::TextEditCommand::INVALID_COMMAND: |
| 1531 return false; | |
| 1532 case ui::TextEditCommand::UNDO: | |
| 1506 return editable && model_->CanUndo(); | 1533 return editable && model_->CanUndo(); |
| 1507 case IDS_APP_REDO: | 1534 case ui::TextEditCommand::REDO: |
| 1508 return editable && model_->CanRedo(); | 1535 return editable && model_->CanRedo(); |
| 1509 case IDS_APP_CUT: | 1536 case ui::TextEditCommand::CUT: |
| 1510 return editable && readable && model_->HasSelection(); | 1537 return editable && readable && model_->HasSelection(); |
| 1511 case IDS_APP_COPY: | 1538 case ui::TextEditCommand::COPY: |
| 1512 return readable && model_->HasSelection(); | 1539 return readable && model_->HasSelection(); |
| 1513 case IDS_APP_PASTE: | 1540 case ui::TextEditCommand::PASTE: |
| 1514 ui::Clipboard::GetForCurrentThread()->ReadText( | 1541 ui::Clipboard::GetForCurrentThread()->ReadText( |
| 1515 ui::CLIPBOARD_TYPE_COPY_PASTE, &result); | 1542 ui::CLIPBOARD_TYPE_COPY_PASTE, &result); |
| 1516 return editable && !result.empty(); | 1543 return editable && !result.empty(); |
| 1517 case IDS_APP_DELETE: | 1544 case ui::TextEditCommand::DELETE_SELECTION: |
| 1518 return editable && model_->HasSelection(); | 1545 return editable && model_->HasSelection(); |
| 1519 case IDS_APP_SELECT_ALL: | 1546 case ui::TextEditCommand::SELECT_ALL: |
| 1520 return !text().empty(); | 1547 return !text().empty(); |
| 1521 case IDS_DELETE_FORWARD: | 1548 case ui::TextEditCommand::DELETE_FORWARD: |
| 1522 case IDS_DELETE_BACKWARD: | 1549 case ui::TextEditCommand::DELETE_BACKWARD: |
| 1523 case IDS_DELETE_TO_BEGINNING_OF_LINE: | 1550 case ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE: |
| 1524 case IDS_DELETE_TO_END_OF_LINE: | 1551 case ui::TextEditCommand::DELETE_TO_END_OF_LINE: |
| 1525 case IDS_DELETE_WORD_BACKWARD: | 1552 case ui::TextEditCommand::DELETE_WORD_BACKWARD: |
| 1526 case IDS_DELETE_WORD_FORWARD: | 1553 case ui::TextEditCommand::DELETE_WORD_FORWARD: |
| 1527 return editable; | 1554 return editable; |
| 1528 case IDS_MOVE_LEFT: | 1555 case ui::TextEditCommand::MOVE_LEFT: |
| 1529 case IDS_MOVE_LEFT_AND_MODIFY_SELECTION: | 1556 case ui::TextEditCommand::MOVE_LEFT_AND_MODIFY_SELECTION: |
| 1530 case IDS_MOVE_RIGHT: | 1557 case ui::TextEditCommand::MOVE_RIGHT: |
| 1531 case IDS_MOVE_RIGHT_AND_MODIFY_SELECTION: | 1558 case ui::TextEditCommand::MOVE_RIGHT_AND_MODIFY_SELECTION: |
| 1532 case IDS_MOVE_WORD_LEFT: | 1559 case ui::TextEditCommand::MOVE_WORD_LEFT: |
| 1533 case IDS_MOVE_WORD_LEFT_AND_MODIFY_SELECTION: | 1560 case ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION: |
| 1534 case IDS_MOVE_WORD_RIGHT: | 1561 case ui::TextEditCommand::MOVE_WORD_RIGHT: |
| 1535 case IDS_MOVE_WORD_RIGHT_AND_MODIFY_SELECTION: | 1562 case ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION: |
| 1536 case IDS_MOVE_TO_BEGINNING_OF_LINE: | 1563 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE: |
| 1537 case IDS_MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION: | 1564 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION: |
| 1538 case IDS_MOVE_TO_END_OF_LINE: | 1565 case ui::TextEditCommand::MOVE_TO_END_OF_LINE: |
| 1539 case IDS_MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION: | 1566 case ui::TextEditCommand::MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION: |
| 1540 return true; | 1567 return true; |
| 1541 default: | 1568 case ui::TextEditCommand::MOVE_UP: |
| 1569 case ui::TextEditCommand::MOVE_DOWN: | |
| 1542 return false; | 1570 return false; |
| 1543 } | 1571 } |
| 1572 NOTREACHED(); | |
| 1573 return false; | |
| 1544 } | 1574 } |
| 1545 | 1575 |
| 1546 void Textfield::SetEditCommandForNextKeyEvent(int command_id) { | 1576 void Textfield::SetEditCommandForNextKeyEvent(ui::TextEditCommand command) { |
| 1547 DCHECK_EQ(kNoCommand, scheduled_edit_command_); | 1577 DCHECK(scheduled_edit_command_ == ui::TextEditCommand::INVALID_COMMAND); |
|
msw
2016/06/10 00:48:51
nit: why not DCHECK_EQ?
karandeepb
2016/06/10 08:20:46
Done. I maybe wrong but I think this was giving a
| |
| 1548 scheduled_edit_command_ = command_id; | 1578 scheduled_edit_command_ = command; |
| 1549 } | 1579 } |
| 1550 | 1580 |
| 1551 //////////////////////////////////////////////////////////////////////////////// | 1581 //////////////////////////////////////////////////////////////////////////////// |
| 1552 // Textfield, protected: | 1582 // Textfield, protected: |
| 1553 | 1583 |
| 1554 void Textfield::DoInsertChar(base::char16 ch) { | 1584 void Textfield::DoInsertChar(base::char16 ch) { |
| 1555 OnBeforeUserAction(); | 1585 OnBeforeUserAction(); |
| 1556 skip_input_method_cancel_composition_ = true; | 1586 skip_input_method_cancel_composition_ = true; |
| 1557 if (GetRenderText()->insert_mode()) | 1587 if (GetRenderText()->insert_mode()) |
| 1558 model_->InsertChar(ch); | 1588 model_->InsertChar(ch); |
| 1559 else | 1589 else |
| 1560 model_->ReplaceChar(ch); | 1590 model_->ReplaceChar(ch); |
| 1561 skip_input_method_cancel_composition_ = false; | 1591 skip_input_method_cancel_composition_ = false; |
| 1562 | 1592 |
| 1563 UpdateAfterChange(true, true); | 1593 UpdateAfterChange(true, true); |
| 1564 OnAfterUserAction(); | 1594 OnAfterUserAction(); |
| 1565 } | 1595 } |
| 1566 | 1596 |
| 1567 gfx::RenderText* Textfield::GetRenderText() const { | 1597 gfx::RenderText* Textfield::GetRenderText() const { |
| 1568 return model_->render_text(); | 1598 return model_->render_text(); |
| 1569 } | 1599 } |
| 1570 | 1600 |
| 1571 base::string16 Textfield::GetSelectionClipboardText() const { | 1601 base::string16 Textfield::GetSelectionClipboardText() const { |
| 1572 base::string16 selection_clipboard_text; | 1602 base::string16 selection_clipboard_text; |
| 1573 ui::Clipboard::GetForCurrentThread()->ReadText( | 1603 ui::Clipboard::GetForCurrentThread()->ReadText( |
| 1574 ui::CLIPBOARD_TYPE_SELECTION, &selection_clipboard_text); | 1604 ui::CLIPBOARD_TYPE_SELECTION, &selection_clipboard_text); |
| 1575 return selection_clipboard_text; | 1605 return selection_clipboard_text; |
| 1576 } | 1606 } |
| 1577 | 1607 |
| 1578 void Textfield::ExecuteEditCommand(int command_id) { | 1608 void Textfield::ExecuteEditCommand(ui::TextEditCommand command) { |
| 1579 DestroyTouchSelection(); | 1609 DestroyTouchSelection(); |
| 1580 | 1610 |
| 1581 // Some codepaths may bypass GetCommandForKeyEvent, so any selection-dependent | 1611 // Some codepaths may bypass GetCommandForKeyEvent, so any selection-dependent |
| 1582 // modifications of the command should happen here. | 1612 // modifications of the command should happen here. |
| 1583 if (HasSelection()) { | 1613 if (HasSelection()) { |
| 1584 switch (command_id) { | 1614 switch (command) { |
| 1585 case IDS_DELETE_WORD_BACKWARD: | 1615 case ui::TextEditCommand::DELETE_WORD_BACKWARD: |
| 1586 case IDS_DELETE_TO_BEGINNING_OF_LINE: | 1616 case ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE: |
| 1587 command_id = IDS_DELETE_BACKWARD; | 1617 command = ui::TextEditCommand::DELETE_BACKWARD; |
| 1588 break; | 1618 break; |
| 1589 case IDS_DELETE_WORD_FORWARD: | 1619 case ui::TextEditCommand::DELETE_WORD_FORWARD: |
| 1590 case IDS_DELETE_TO_END_OF_LINE: | 1620 case ui::TextEditCommand::DELETE_TO_END_OF_LINE: |
| 1591 command_id = IDS_DELETE_FORWARD; | 1621 command = ui::TextEditCommand::DELETE_FORWARD; |
| 1622 break; | |
| 1623 default: | |
| 1592 break; | 1624 break; |
| 1593 } | 1625 } |
| 1594 } | 1626 } |
| 1595 | 1627 |
| 1596 // We only execute the commands enabled in Textfield::IsEditCommandEnabled | 1628 // We only execute the commands enabled in Textfield::IsEditCommandEnabled |
| 1597 // below. Hence don't do a virtual IsEditCommandEnabled call. | 1629 // below. Hence don't do a virtual IsEditCommandEnabled call. |
| 1598 if (!Textfield::IsEditCommandEnabled(command_id)) | 1630 if (!Textfield::IsEditCommandEnabled(command)) |
| 1599 return; | 1631 return; |
| 1600 | 1632 |
| 1601 bool text_changed = false; | 1633 bool text_changed = false; |
| 1602 bool cursor_changed = false; | 1634 bool cursor_changed = false; |
| 1603 bool rtl = GetTextDirection() == base::i18n::RIGHT_TO_LEFT; | 1635 bool rtl = GetTextDirection() == base::i18n::RIGHT_TO_LEFT; |
| 1604 gfx::VisualCursorDirection begin = rtl ? gfx::CURSOR_RIGHT : gfx::CURSOR_LEFT; | 1636 gfx::VisualCursorDirection begin = rtl ? gfx::CURSOR_RIGHT : gfx::CURSOR_LEFT; |
| 1605 gfx::VisualCursorDirection end = rtl ? gfx::CURSOR_LEFT : gfx::CURSOR_RIGHT; | 1637 gfx::VisualCursorDirection end = rtl ? gfx::CURSOR_LEFT : gfx::CURSOR_RIGHT; |
| 1606 gfx::SelectionModel selection_model = GetSelectionModel(); | 1638 gfx::SelectionModel selection_model = GetSelectionModel(); |
| 1607 | 1639 |
| 1608 OnBeforeUserAction(); | 1640 OnBeforeUserAction(); |
| 1609 switch (command_id) { | 1641 switch (command) { |
| 1610 case IDS_APP_UNDO: | 1642 case ui::TextEditCommand::UNDO: |
| 1611 text_changed = cursor_changed = model_->Undo(); | 1643 text_changed = cursor_changed = model_->Undo(); |
| 1612 break; | 1644 break; |
| 1613 case IDS_APP_REDO: | 1645 case ui::TextEditCommand::REDO: |
| 1614 text_changed = cursor_changed = model_->Redo(); | 1646 text_changed = cursor_changed = model_->Redo(); |
| 1615 break; | 1647 break; |
| 1616 case IDS_APP_CUT: | 1648 case ui::TextEditCommand::CUT: |
| 1617 text_changed = cursor_changed = Cut(); | 1649 text_changed = cursor_changed = Cut(); |
| 1618 break; | 1650 break; |
| 1619 case IDS_APP_COPY: | 1651 case ui::TextEditCommand::COPY: |
| 1620 Copy(); | 1652 Copy(); |
| 1621 break; | 1653 break; |
| 1622 case IDS_APP_PASTE: | 1654 case ui::TextEditCommand::PASTE: |
| 1623 text_changed = cursor_changed = Paste(); | 1655 text_changed = cursor_changed = Paste(); |
| 1624 break; | 1656 break; |
| 1625 case IDS_APP_DELETE: | 1657 case ui::TextEditCommand::DELETE_SELECTION: |
| 1626 text_changed = cursor_changed = model_->Delete(); | 1658 text_changed = cursor_changed = model_->Delete(); |
| 1627 break; | 1659 break; |
| 1628 case IDS_APP_SELECT_ALL: | 1660 case ui::TextEditCommand::SELECT_ALL: |
| 1629 SelectAll(false); | 1661 SelectAll(false); |
| 1630 break; | 1662 break; |
| 1631 case IDS_DELETE_BACKWARD: | 1663 case ui::TextEditCommand::DELETE_BACKWARD: |
| 1632 text_changed = cursor_changed = model_->Backspace(); | 1664 text_changed = cursor_changed = model_->Backspace(); |
| 1633 break; | 1665 break; |
| 1634 case IDS_DELETE_FORWARD: | 1666 case ui::TextEditCommand::DELETE_FORWARD: |
| 1635 text_changed = cursor_changed = model_->Delete(); | 1667 text_changed = cursor_changed = model_->Delete(); |
| 1636 break; | 1668 break; |
| 1637 case IDS_DELETE_TO_END_OF_LINE: | 1669 case ui::TextEditCommand::DELETE_TO_END_OF_LINE: |
| 1638 model_->MoveCursor(gfx::LINE_BREAK, end, true); | 1670 model_->MoveCursor(gfx::LINE_BREAK, end, true); |
| 1639 text_changed = cursor_changed = model_->Delete(); | 1671 text_changed = cursor_changed = model_->Delete(); |
| 1640 break; | 1672 break; |
| 1641 case IDS_DELETE_TO_BEGINNING_OF_LINE: | 1673 case ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE: |
| 1642 model_->MoveCursor(gfx::LINE_BREAK, begin, true); | 1674 model_->MoveCursor(gfx::LINE_BREAK, begin, true); |
| 1643 text_changed = cursor_changed = model_->Backspace(); | 1675 text_changed = cursor_changed = model_->Backspace(); |
| 1644 break; | 1676 break; |
| 1645 case IDS_DELETE_WORD_BACKWARD: | 1677 case ui::TextEditCommand::DELETE_WORD_BACKWARD: |
| 1646 model_->MoveCursor(gfx::WORD_BREAK, begin, true); | 1678 model_->MoveCursor(gfx::WORD_BREAK, begin, true); |
| 1647 text_changed = cursor_changed = model_->Backspace(); | 1679 text_changed = cursor_changed = model_->Backspace(); |
| 1648 break; | 1680 break; |
| 1649 case IDS_DELETE_WORD_FORWARD: | 1681 case ui::TextEditCommand::DELETE_WORD_FORWARD: |
| 1650 model_->MoveCursor(gfx::WORD_BREAK, end, true); | 1682 model_->MoveCursor(gfx::WORD_BREAK, end, true); |
| 1651 text_changed = cursor_changed = model_->Delete(); | 1683 text_changed = cursor_changed = model_->Delete(); |
| 1652 break; | 1684 break; |
| 1653 case IDS_MOVE_LEFT: | 1685 case ui::TextEditCommand::MOVE_LEFT: |
| 1654 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, false); | 1686 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, false); |
| 1655 break; | 1687 break; |
| 1656 case IDS_MOVE_LEFT_AND_MODIFY_SELECTION: | 1688 case ui::TextEditCommand::MOVE_LEFT_AND_MODIFY_SELECTION: |
| 1657 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, true); | 1689 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, true); |
| 1658 break; | 1690 break; |
| 1659 case IDS_MOVE_RIGHT: | 1691 case ui::TextEditCommand::MOVE_RIGHT: |
| 1660 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false); | 1692 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false); |
| 1661 break; | 1693 break; |
| 1662 case IDS_MOVE_RIGHT_AND_MODIFY_SELECTION: | 1694 case ui::TextEditCommand::MOVE_RIGHT_AND_MODIFY_SELECTION: |
| 1663 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true); | 1695 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true); |
| 1664 break; | 1696 break; |
| 1665 case IDS_MOVE_WORD_LEFT: | 1697 case ui::TextEditCommand::MOVE_WORD_LEFT: |
| 1666 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, false); | 1698 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, false); |
| 1667 break; | 1699 break; |
| 1668 case IDS_MOVE_WORD_LEFT_AND_MODIFY_SELECTION: | 1700 case ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION: |
| 1669 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, true); | 1701 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, true); |
| 1670 break; | 1702 break; |
| 1671 case IDS_MOVE_WORD_RIGHT: | 1703 case ui::TextEditCommand::MOVE_WORD_RIGHT: |
| 1672 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, false); | 1704 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, false); |
| 1673 break; | 1705 break; |
| 1674 case IDS_MOVE_WORD_RIGHT_AND_MODIFY_SELECTION: | 1706 case ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION: |
| 1675 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, true); | 1707 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, true); |
| 1676 break; | 1708 break; |
| 1677 case IDS_MOVE_TO_BEGINNING_OF_LINE: | 1709 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE: |
| 1678 model_->MoveCursor(gfx::LINE_BREAK, begin, false); | 1710 model_->MoveCursor(gfx::LINE_BREAK, begin, false); |
| 1679 break; | 1711 break; |
| 1680 case IDS_MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION: | 1712 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION: |
| 1681 model_->MoveCursor(gfx::LINE_BREAK, begin, true); | 1713 model_->MoveCursor(gfx::LINE_BREAK, begin, true); |
| 1682 break; | 1714 break; |
| 1683 case IDS_MOVE_TO_END_OF_LINE: | 1715 case ui::TextEditCommand::MOVE_TO_END_OF_LINE: |
| 1684 model_->MoveCursor(gfx::LINE_BREAK, end, false); | 1716 model_->MoveCursor(gfx::LINE_BREAK, end, false); |
| 1685 break; | 1717 break; |
| 1686 case IDS_MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION: | 1718 case ui::TextEditCommand::MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION: |
| 1687 model_->MoveCursor(gfx::LINE_BREAK, end, true); | 1719 model_->MoveCursor(gfx::LINE_BREAK, end, true); |
| 1688 break; | 1720 break; |
| 1689 default: | 1721 case ui::TextEditCommand::MOVE_UP: |
| 1722 case ui::TextEditCommand::MOVE_DOWN: | |
| 1723 case ui::TextEditCommand::INVALID_COMMAND: | |
| 1690 NOTREACHED(); | 1724 NOTREACHED(); |
| 1691 break; | 1725 break; |
| 1692 } | 1726 } |
| 1693 | 1727 |
| 1694 cursor_changed |= GetSelectionModel() != selection_model; | 1728 cursor_changed |= GetSelectionModel() != selection_model; |
| 1695 if (cursor_changed) | 1729 if (cursor_changed) |
| 1696 UpdateSelectionClipboard(); | 1730 UpdateSelectionClipboard(); |
| 1697 UpdateAfterChange(text_changed, cursor_changed); | 1731 UpdateAfterChange(text_changed, cursor_changed); |
| 1698 OnAfterUserAction(); | 1732 OnAfterUserAction(); |
| 1699 } | 1733 } |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1953 RequestFocus(); | 1987 RequestFocus(); |
| 1954 model_->MoveCursorTo(mouse); | 1988 model_->MoveCursorTo(mouse); |
| 1955 if (!selection_clipboard_text.empty()) { | 1989 if (!selection_clipboard_text.empty()) { |
| 1956 model_->InsertText(selection_clipboard_text); | 1990 model_->InsertText(selection_clipboard_text); |
| 1957 UpdateAfterChange(true, true); | 1991 UpdateAfterChange(true, true); |
| 1958 } | 1992 } |
| 1959 OnAfterUserAction(); | 1993 OnAfterUserAction(); |
| 1960 } | 1994 } |
| 1961 | 1995 |
| 1962 } // namespace views | 1996 } // namespace views |
| OLD | NEW |