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

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

Issue 15684004: Refine Views textfield state interaction, testing, and examples. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Expand cut/copy/paste test. Created 7 years, 7 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/native_textfield_views.cc
diff --git a/ui/views/controls/textfield/native_textfield_views.cc b/ui/views/controls/textfield/native_textfield_views.cc
index 724ad683f3c0f2f7f43d6b367d7b38393e07b667..5da334dcef5f317254de410d2139666b4a533ce1 100644
--- a/ui/views/controls/textfield/native_textfield_views.cc
+++ b/ui/views/controls/textfield/native_textfield_views.cc
@@ -1168,39 +1168,40 @@ bool NativeTextfieldViews::HandleKeyEvent(const ui::KeyEvent& key_event) {
return false;
OnBeforeUserAction();
- bool editable = !textfield_->read_only();
- bool readable = !textfield_->IsObscured();
- bool shift = key_event.IsShiftDown();
- bool control = key_event.IsControlDown();
+ const bool editable = !textfield_->read_only();
+ const bool readable = !textfield_->IsObscured();
+ const bool shift = key_event.IsShiftDown();
+ const bool control = key_event.IsControlDown();
+ const bool alt = key_event.IsAltDown();
bool text_changed = false;
bool cursor_changed = false;
switch (key_code) {
case ui::VKEY_Z:
- if (control && !shift && editable)
+ if (control && !shift && !alt && editable)
cursor_changed = text_changed = model_->Undo();
- else if (control && shift && editable)
+ else if (control && shift && !alt && editable)
cursor_changed = text_changed = model_->Redo();
break;
case ui::VKEY_Y:
- if (control && editable)
+ if (control && !alt && editable)
cursor_changed = text_changed = model_->Redo();
break;
case ui::VKEY_A:
- if (control) {
+ if (control && !alt) {
model_->SelectAll(false);
cursor_changed = true;
}
break;
case ui::VKEY_X:
- if (control && editable && readable)
+ if (control && !alt && editable && readable)
cursor_changed = text_changed = Cut();
break;
case ui::VKEY_C:
- if (control && readable)
+ if (control && !alt && readable)
Copy();
break;
case ui::VKEY_V:
- if (control && editable)
+ if (control && !alt && editable)
cursor_changed = text_changed = Paste();
break;
case ui::VKEY_RIGHT:
@@ -1208,7 +1209,7 @@ bool NativeTextfieldViews::HandleKeyEvent(const ui::KeyEvent& key_event) {
// We should ignore the alt-left/right keys because alt key doesn't make
// any special effects for them and they can be shortcut keys such like
// forward/back of the browser history.
- if (key_event.IsAltDown())
+ if (alt)
break;
size_t cursor_position = model_->GetCursorPosition();
model_->MoveCursor(
@@ -1258,9 +1259,9 @@ bool NativeTextfieldViews::HandleKeyEvent(const ui::KeyEvent& key_event) {
text_changed = true;
break;
case ui::VKEY_INSERT:
- if (control && !shift)
+ if (control && !shift && readable)
Copy();
- else if (shift && !control)
+ else if (shift && !control && editable)
cursor_changed = text_changed = Paste();
break;
default:
@@ -1363,7 +1364,7 @@ void NativeTextfieldViews::OnAfterUserAction() {
}
bool NativeTextfieldViews::Cut() {
- if (model_->Cut()) {
+ if (!textfield_->read_only() && !textfield_->IsObscured() && model_->Cut()) {
TextfieldController* controller = textfield_->GetController();
if (controller)
controller->OnAfterCutOrCopy();
@@ -1373,7 +1374,7 @@ bool NativeTextfieldViews::Cut() {
}
bool NativeTextfieldViews::Copy() {
- if (model_->Copy()) {
+ if (!textfield_->IsObscured() && model_->Copy()) {
TextfieldController* controller = textfield_->GetController();
if (controller)
controller->OnAfterCutOrCopy();
@@ -1383,6 +1384,9 @@ bool NativeTextfieldViews::Copy() {
}
bool NativeTextfieldViews::Paste() {
+ if (textfield_->read_only())
+ return false;
+
const string16 original_text = GetText();
const bool success = model_->Paste();

Powered by Google App Engine
This is Rietveld 408576698