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

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

Issue 307783003: Fix Textfield::OnKeyPressed command handling for Linux Aura. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync and rebase. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/views/controls/textfield/textfield.h" 5 #include "ui/views/controls/textfield/textfield.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "grit/ui_strings.h" 10 #include "grit/ui_strings.h"
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 int GetDragSelectionDelay() { 68 int GetDragSelectionDelay() {
69 switch (ui::ScopedAnimationDurationScaleMode::duration_scale_mode()) { 69 switch (ui::ScopedAnimationDurationScaleMode::duration_scale_mode()) {
70 case ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION: return 100; 70 case ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION: return 100;
71 case ui::ScopedAnimationDurationScaleMode::FAST_DURATION: return 25; 71 case ui::ScopedAnimationDurationScaleMode::FAST_DURATION: return 25;
72 case ui::ScopedAnimationDurationScaleMode::SLOW_DURATION: return 400; 72 case ui::ScopedAnimationDurationScaleMode::SLOW_DURATION: return 400;
73 case ui::ScopedAnimationDurationScaleMode::ZERO_DURATION: return 0; 73 case ui::ScopedAnimationDurationScaleMode::ZERO_DURATION: return 0;
74 } 74 }
75 return 100; 75 return 100;
76 } 76 }
77 77
78 // Get the default command for a given key |event| and selection state.
78 int GetCommandForKeyEvent(const ui::KeyEvent& event, bool has_selection) { 79 int GetCommandForKeyEvent(const ui::KeyEvent& event, bool has_selection) {
79 if (event.type() != ui::ET_KEY_PRESSED || event.IsUnicodeKeyCode()) 80 if (event.type() != ui::ET_KEY_PRESSED || event.IsUnicodeKeyCode())
80 return kNoCommand; 81 return kNoCommand;
81 82
82 const bool shift = event.IsShiftDown(); 83 const bool shift = event.IsShiftDown();
83 const bool control = event.IsControlDown(); 84 const bool control = event.IsControlDown();
84 const bool alt = event.IsAltDown() || event.IsAltGrDown(); 85 const bool alt = event.IsAltDown() || event.IsAltGrDown();
85 switch (event.key_code()) { 86 switch (event.key_code()) {
86 case ui::VKEY_Z: 87 case ui::VKEY_Z:
87 if (control && !shift && !alt) 88 if (control && !shift && !alt)
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 case ui::VKEY_INSERT: 141 case ui::VKEY_INSERT:
141 if (control && !shift) 142 if (control && !shift)
142 return IDS_APP_COPY; 143 return IDS_APP_COPY;
143 return (shift && !control) ? IDS_APP_PASTE : kNoCommand; 144 return (shift && !control) ? IDS_APP_PASTE : kNoCommand;
144 default: 145 default:
145 return kNoCommand; 146 return kNoCommand;
146 } 147 }
147 } 148 }
148 149
149 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) 150 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
151 // Convert a custom text edit |command| to the equivalent views command ID.
150 int GetViewsCommand(const ui::TextEditCommandAuraLinux& command, bool rtl) { 152 int GetViewsCommand(const ui::TextEditCommandAuraLinux& command, bool rtl) {
151 const bool select = command.extend_selection(); 153 const bool select = command.extend_selection();
152 switch (command.command_id()) { 154 switch (command.command_id()) {
153 case ui::TextEditCommandAuraLinux::COPY: 155 case ui::TextEditCommandAuraLinux::COPY:
154 return IDS_APP_COPY; 156 return IDS_APP_COPY;
155 case ui::TextEditCommandAuraLinux::CUT: 157 case ui::TextEditCommandAuraLinux::CUT:
156 return IDS_APP_CUT; 158 return IDS_APP_CUT;
157 case ui::TextEditCommandAuraLinux::DELETE_BACKWARD: 159 case ui::TextEditCommandAuraLinux::DELETE_BACKWARD:
158 return IDS_DELETE_BACKWARD; 160 return IDS_DELETE_BACKWARD;
159 case ui::TextEditCommandAuraLinux::DELETE_FORWARD: 161 case ui::TextEditCommandAuraLinux::DELETE_FORWARD:
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 // Cancel suspected drag initiations, the user was clicking in the selection. 595 // Cancel suspected drag initiations, the user was clicking in the selection.
594 if (initiating_drag_) 596 if (initiating_drag_)
595 MoveCursorTo(event.location(), false); 597 MoveCursorTo(event.location(), false);
596 initiating_drag_ = false; 598 initiating_drag_ = false;
597 UpdateSelectionClipboard(); 599 UpdateSelectionClipboard();
598 OnAfterUserAction(); 600 OnAfterUserAction();
599 } 601 }
600 602
601 bool Textfield::OnKeyPressed(const ui::KeyEvent& event) { 603 bool Textfield::OnKeyPressed(const ui::KeyEvent& event) {
602 bool handled = controller_ && controller_->HandleKeyEvent(this, event); 604 bool handled = controller_ && controller_->HandleKeyEvent(this, event);
603 if (handled)
604 return true;
605 605
606 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) 606 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
607 ui::TextEditKeyBindingsDelegateAuraLinux* delegate = 607 ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
608 ui::GetTextEditKeyBindingsDelegate(); 608 ui::GetTextEditKeyBindingsDelegate();
609 std::vector<ui::TextEditCommandAuraLinux> commands; 609 std::vector<ui::TextEditCommandAuraLinux> commands;
610 if (delegate) { 610 if (!handled && delegate && delegate->MatchEvent(event, &commands)) {
611 if (!delegate->MatchEvent(event, &commands))
612 return false;
613 const bool rtl = GetTextDirection() == base::i18n::RIGHT_TO_LEFT; 611 const bool rtl = GetTextDirection() == base::i18n::RIGHT_TO_LEFT;
614 for (size_t i = 0; i < commands.size(); ++i) { 612 for (size_t i = 0; i < commands.size(); ++i) {
615 int command = GetViewsCommand(commands[i], rtl); 613 const int command = GetViewsCommand(commands[i], rtl);
616 if (IsCommandIdEnabled(command)) { 614 if (IsCommandIdEnabled(command)) {
617 ExecuteCommand(command); 615 ExecuteCommand(command);
618 handled = true; 616 handled = true;
619 } 617 }
620 } 618 }
621 return handled; 619 return handled;
622 } 620 }
623 #endif 621 #endif
624 622
625 const int command = GetCommandForKeyEvent(event, HasSelection()); 623 const int command = GetCommandForKeyEvent(event, HasSelection());
626 if (IsCommandIdEnabled(command)) { 624 if (!handled && IsCommandIdEnabled(command)) {
627 ExecuteCommand(command); 625 ExecuteCommand(command);
628 return true; 626 handled = true;
629 } 627 }
630 return false; 628 return handled;
631 } 629 }
632 630
633 ui::TextInputClient* Textfield::GetTextInputClient() { 631 ui::TextInputClient* Textfield::GetTextInputClient() {
634 return read_only_ ? NULL : this; 632 return read_only_ ? NULL : this;
635 } 633 }
636 634
637 void Textfield::OnGestureEvent(ui::GestureEvent* event) { 635 void Textfield::OnGestureEvent(ui::GestureEvent* event) {
638 switch (event->type()) { 636 switch (event->type()) {
639 case ui::ET_GESTURE_TAP_DOWN: 637 case ui::ET_GESTURE_TAP_DOWN:
640 OnBeforeUserAction(); 638 OnBeforeUserAction();
(...skipping 1069 matching lines...) Expand 10 before | Expand all | Expand 10 after
1710 const size_t length = selection_clipboard_text.length(); 1708 const size_t length = selection_clipboard_text.length();
1711 range = gfx::Range(range.start() + length, range.end() + length); 1709 range = gfx::Range(range.start() + length, range.end() + length);
1712 } 1710 }
1713 model_->MoveCursorTo(gfx::SelectionModel(range, affinity)); 1711 model_->MoveCursorTo(gfx::SelectionModel(range, affinity));
1714 UpdateAfterChange(true, true); 1712 UpdateAfterChange(true, true);
1715 OnAfterUserAction(); 1713 OnAfterUserAction();
1716 } 1714 }
1717 } 1715 }
1718 1716
1719 } // namespace views 1717 } // namespace views
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698