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

Unified Diff: ui/views/controls/textfield/textfield.cc

Issue 1923793002: Textfield: Move selection logic from GetCommandForKeyEvent to ExecuteCommand. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/views/controls/textfield/textfield.cc
diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc
index a42ec4dec17dcc9ca77a172926d3829a8d0eed1e..ea732bf848a06fa2b36942323e203d4a08ff15e7 100644
--- a/ui/views/controls/textfield/textfield.cc
+++ b/ui/views/controls/textfield/textfield.cc
@@ -83,8 +83,8 @@ int GetDragSelectionDelay() {
return 100;
}
-// Get the default command for a given key |event| and selection state.
-int GetCommandForKeyEvent(const ui::KeyEvent& event, bool has_selection) {
+// Get the default command for a given key |event|.
+int GetCommandForKeyEvent(const ui::KeyEvent& event) {
if (event.type() != ui::ET_KEY_PRESSED || event.IsUnicodeKeyCode())
return kNoCommand;
@@ -129,7 +129,7 @@ int GetCommandForKeyEvent(const ui::KeyEvent& event, bool has_selection) {
return shift ? IDS_MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION :
IDS_MOVE_TO_END_OF_LINE;
case ui::VKEY_BACK:
- if (!control || has_selection)
+ if (!control)
return IDS_DELETE_BACKWARD;
#if defined(OS_LINUX)
// Only erase by line break on Linux and ChromeOS.
@@ -138,14 +138,15 @@ int GetCommandForKeyEvent(const ui::KeyEvent& event, bool has_selection) {
#endif
return IDS_DELETE_WORD_BACKWARD;
case ui::VKEY_DELETE:
msw 2016/04/28 18:22:02 Consider rewriting this case a little bit for simp
karandeepb 2016/04/29 01:40:59 Done.
- if (!control || has_selection)
- return (shift && has_selection) ? IDS_APP_CUT : IDS_DELETE_FORWARD;
+ if (shift) {
#if defined(OS_LINUX)
- // Only erase by line break on Linux and ChromeOS.
- if (shift)
- return IDS_DELETE_TO_END_OF_LINE;
+ // Only erase by line break on Linux and ChromeOS.
+ if (control)
+ return IDS_DELETE_TO_END_OF_LINE;
#endif
- return IDS_DELETE_WORD_FORWARD;
+ return control ? IDS_DELETE_WORD_FORWARD : IDS_APP_CUT;
msw 2016/04/28 18:22:02 It's weird to return IDS_APP_CUT without knowing i
Peter Kasting 2016/04/28 19:09:18 Shift-delete with no selection should no-op. This
msw 2016/04/28 19:17:43 Okay, but note that Shift-Backspace acts as simply
Peter Kasting 2016/04/28 19:21:48 Shift-delete is normally "cut" whereas shift-backs
msw 2016/04/28 19:23:41 Okay, sounds good to me!
+ }
+ return control ? IDS_DELETE_WORD_FORWARD : IDS_DELETE_FORWARD;
case ui::VKEY_INSERT:
if (control && !shift)
return IDS_APP_COPY;
@@ -730,7 +731,7 @@ bool Textfield::OnKeyPressed(const ui::KeyEvent& event) {
#endif
if (edit_command == kNoCommand)
- edit_command = GetCommandForKeyEvent(event, HasSelection());
+ edit_command = GetCommandForKeyEvent(event);
if (!handled && IsCommandIdEnabled(edit_command)) {
ExecuteCommand(edit_command);
@@ -834,7 +835,7 @@ void Textfield::OnGestureEvent(ui::GestureEvent* event) {
bool Textfield::AcceleratorPressed(const ui::Accelerator& accelerator) {
ui::KeyEvent event(accelerator.type(), accelerator.key_code(),
accelerator.modifiers());
- ExecuteCommand(GetCommandForKeyEvent(event, HasSelection()));
+ ExecuteCommand(GetCommandForKeyEvent(event));
return true;
}
@@ -1303,6 +1304,20 @@ bool Textfield::GetAcceleratorForCommandId(int command_id,
void Textfield::ExecuteCommand(int command_id, int event_flags) {
DestroyTouchSelection();
+
+ if (HasSelection()) {
msw 2016/04/28 18:22:02 nit: add an explanatory comment that Linux and Mac
karandeepb 2016/04/29 01:40:59 Done.
+ switch (command_id) {
+ case IDS_DELETE_WORD_BACKWARD:
+ case IDS_DELETE_TO_BEGINNING_OF_LINE:
+ command_id = IDS_DELETE_BACKWARD;
msw 2016/04/28 18:22:02 It seems a little odd that this function would sup
karandeepb 2016/04/29 01:40:59 Yeah this should be easy to do on Mac at least. Bu
+ break;
+ case IDS_DELETE_WORD_FORWARD:
+ case IDS_DELETE_TO_END_OF_LINE:
+ command_id = IDS_DELETE_FORWARD;
+ break;
+ }
+ }
+
if (!IsCommandIdEnabled(command_id))
return;
« no previous file with comments | « no previous file | ui/views/controls/textfield/textfield_unittest.cc » ('j') | ui/views/controls/textfield/textfield_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698