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