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

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

Issue 138363004: Views Textfield fixes and cleanup. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sync and rebase. Created 6 years, 11 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
« no previous file with comments | « ui/views/controls/textfield/textfield.h ('k') | ui/views/controls/textfield/textfield_model_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/controls/textfield/textfield.cc
diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc
index 8d31a8929b015e40c16e1af896f78cc0244492cb..93cc7b3c6eb95e988e0791d48682cb3f0df43035 100644
--- a/ui/views/controls/textfield/textfield.cc
+++ b/ui/views/controls/textfield/textfield.cc
@@ -7,7 +7,6 @@
#include <string>
#include "base/debug/trace_event.h"
-#include "base/i18n/case_conversion.h"
#include "grit/ui_strings.h"
#include "ui/base/accessibility/accessible_view_state.h"
#include "ui/base/dragdrop/drag_drop_types.h"
@@ -75,7 +74,6 @@ size_t Textfield::GetCaretBlinkMs() {
Textfield::Textfield()
: model_(new TextfieldModel(this)),
controller_(NULL),
- style_(STYLE_DEFAULT),
read_only_(false),
default_width_in_chars_(0),
text_color_(SK_ColorBLACK),
@@ -96,7 +94,7 @@ Textfield::Textfield()
SetFocusable(true);
if (ViewsDelegate::views_delegate) {
- obscured_reveal_duration_ = ViewsDelegate::views_delegate->
+ password_reveal_duration_ = ViewsDelegate::views_delegate->
GetDefaultTextfieldObscuredRevealDuration();
}
@@ -104,51 +102,7 @@ Textfield::Textfield()
focus_painter_ = Painter::CreateDashedFocusPainter();
}
-Textfield::Textfield(StyleFlags style)
- : model_(new TextfieldModel(this)),
- controller_(NULL),
- style_(style),
- read_only_(false),
- default_width_in_chars_(0),
- text_color_(SK_ColorBLACK),
- use_default_text_color_(true),
- background_color_(SK_ColorWHITE),
- use_default_background_color_(true),
- placeholder_text_color_(kDefaultPlaceholderTextColor),
- text_input_type_(ui::TEXT_INPUT_TYPE_TEXT),
- skip_input_method_cancel_composition_(false),
- cursor_visible_(false),
- drop_cursor_visible_(false),
- initiating_drag_(false),
- aggregated_clicks_(0),
- weak_ptr_factory_(this) {
- set_context_menu_controller(this);
- set_drag_controller(this);
- set_border(new FocusableBorder());
- SetFocusable(true);
-
- if (IsObscured())
- SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD);
-
- if (ViewsDelegate::views_delegate) {
- obscured_reveal_duration_ = ViewsDelegate::views_delegate->
- GetDefaultTextfieldObscuredRevealDuration();
- }
-
- if (NativeViewHost::kRenderNativeControlFocus)
- focus_painter_ = Painter::CreateDashedFocusPainter();
-}
-
-Textfield::~Textfield() {
-}
-
-void Textfield::SetController(TextfieldController* controller) {
- controller_ = controller;
-}
-
-TextfieldController* Textfield::GetController() const {
- return controller_;
-}
+Textfield::~Textfield() {}
void Textfield::SetReadOnly(bool read_only) {
// Update read-only without changing the focusable state (or active, etc.).
@@ -159,34 +113,17 @@ void Textfield::SetReadOnly(bool read_only) {
UpdateBackgroundColor();
}
-bool Textfield::IsObscured() const {
- return style_ & STYLE_OBSCURED;
-}
-
-void Textfield::SetObscured(bool obscured) {
- if (obscured) {
- style_ = static_cast<StyleFlags>(style_ | STYLE_OBSCURED);
- SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD);
- } else {
- style_ = static_cast<StyleFlags>(style_ & ~STYLE_OBSCURED);
- SetTextInputType(ui::TEXT_INPUT_TYPE_TEXT);
- }
- GetRenderText()->SetObscured(obscured);
+void Textfield::SetTextInputType(ui::TextInputType type) {
+ GetRenderText()->SetObscured(type == ui::TEXT_INPUT_TYPE_PASSWORD);
+ text_input_type_ = type;
OnCaretBoundsChanged();
if (GetInputMethod())
GetInputMethod()->OnTextInputTypeChanged(this);
SchedulePaint();
}
-void Textfield::SetTextInputType(ui::TextInputType type) {
- text_input_type_ = type;
- bool should_be_obscured = type == ui::TEXT_INPUT_TYPE_PASSWORD;
- if (IsObscured() != should_be_obscured)
- SetObscured(should_be_obscured);
-}
-
void Textfield::SetText(const base::string16& new_text) {
- model_->SetText(GetTextForDisplay(new_text));
+ model_->SetText(new_text);
OnCaretBoundsChanged();
SchedulePaint();
NotifyAccessibilityEvent(ui::AccessibilityTypes::EVENT_TEXT_CHANGED, true);
@@ -195,7 +132,7 @@ void Textfield::SetText(const base::string16& new_text) {
void Textfield::AppendText(const base::string16& new_text) {
if (new_text.empty())
return;
- model_->Append(GetTextForDisplay(new_text));
+ model_->Append(new_text);
OnCaretBoundsChanged();
SchedulePaint();
}
@@ -411,7 +348,7 @@ bool Textfield::OnKeyPressed(const ui::KeyEvent& event) {
gfx::RenderText* render_text = GetRenderText();
const bool editable = !read_only();
- const bool readable = !IsObscured();
+ const bool readable = text_input_type_ != ui::TEXT_INPUT_TYPE_PASSWORD;
const bool shift = event.IsShiftDown();
const bool control = event.IsControlDown();
const bool alt = event.IsAltDown() || event.IsAltGrDown();
@@ -642,7 +579,7 @@ void Textfield::GetAccessibleState(ui::AccessibleViewState* state) {
state->name = accessible_name_;
if (read_only())
state->state |= ui::AccessibilityTypes::STATE_READONLY;
- if (IsObscured())
+ if (text_input_type_ == ui::TEXT_INPUT_TYPE_PASSWORD)
state->state |= ui::AccessibilityTypes::STATE_PROTECTED;
state->value = text();
@@ -841,7 +778,6 @@ int Textfield::OnPerformDrop(const ui::DropTargetEvent& event) {
render_text->FindCursorPosition(event.location());
base::string16 new_text;
event.data().GetString(&new_text);
- new_text = GetTextForDisplay(new_text);
// Delete the current selection for a drag and drop within this view.
const bool move = initiating_drag_ && !event.IsControlDown() &&
@@ -924,11 +860,13 @@ void Textfield::WriteDragDataForView(views::View* sender,
int Textfield::GetDragOperationsForView(views::View* sender,
const gfx::Point& p) {
int drag_operations = ui::DragDropTypes::DRAG_COPY;
- if (!enabled() || IsObscured() || !GetRenderText()->IsPointInSelection(p))
+ if (!enabled() || text_input_type_ == ui::TEXT_INPUT_TYPE_PASSWORD ||
+ !GetRenderText()->IsPointInSelection(p)) {
drag_operations = ui::DragDropTypes::DRAG_NONE;
- else if (sender == this && !read_only())
+ } else if (sender == this && !read_only()) {
drag_operations =
ui::DragDropTypes::DRAG_MOVE | ui::DragDropTypes::DRAG_COPY;
+ }
if (controller_)
controller_->OnGetDragOperationsForTextfield(&drag_operations);
return drag_operations;
@@ -1008,13 +946,14 @@ bool Textfield::IsCommandIdChecked(int command_id) const {
bool Textfield::IsCommandIdEnabled(int command_id) const {
base::string16 result;
bool editable = !read_only();
+ bool readable = text_input_type_ != ui::TEXT_INPUT_TYPE_PASSWORD;
switch (command_id) {
case IDS_APP_UNDO:
return editable && model_->CanUndo();
case IDS_APP_CUT:
- return editable && model_->HasSelection() && !IsObscured();
+ return editable && readable && model_->HasSelection();
case IDS_APP_COPY:
- return model_->HasSelection() && !IsObscured();
+ return readable && model_->HasSelection();
case IDS_APP_PASTE:
ui::Clipboard::GetForCurrentThread()->ReadText(
ui::CLIPBOARD_TYPE_COPY_PASTE, &result);
@@ -1128,9 +1067,9 @@ void Textfield::InsertText(const base::string16& new_text) {
OnBeforeUserAction();
skip_input_method_cancel_composition_ = true;
if (GetRenderText()->insert_mode())
- model_->InsertText(GetTextForDisplay(new_text));
+ model_->InsertText(new_text);
else
- model_->ReplaceText(GetTextForDisplay(new_text));
+ model_->ReplaceText(new_text);
skip_input_method_cancel_composition_ = false;
UpdateAfterChange(true, true);
OnAfterUserAction();
@@ -1154,15 +1093,14 @@ void Textfield::InsertChar(base::char16 ch, int flags) {
model_->ReplaceChar(ch);
skip_input_method_cancel_composition_ = false;
- model_->SetText(GetTextForDisplay(text()));
-
UpdateAfterChange(true, true);
OnAfterUserAction();
- if (IsObscured() && obscured_reveal_duration_ != base::TimeDelta()) {
+ if (text_input_type_ == ui::TEXT_INPUT_TYPE_PASSWORD &&
+ password_reveal_duration_ != base::TimeDelta()) {
const size_t change_offset = model_->GetCursorPosition();
DCHECK_GT(change_offset, 0u);
- RevealObscuredChar(change_offset - 1, obscured_reveal_duration_);
+ RevealPasswordChar(change_offset - 1);
}
}
@@ -1335,10 +1273,6 @@ gfx::RenderText* Textfield::GetRenderText() const {
////////////////////////////////////////////////////////////////////////////////
// Textfield, private:
-base::string16 Textfield::GetTextForDisplay(const base::string16& raw) {
- return style_ & Textfield::STYLE_LOWERCASE ? base::i18n::ToLower(raw) : raw;
-}
-
void Textfield::AccessibilitySetValue(const base::string16& new_value) {
if (!read_only()) {
SetText(new_value);
@@ -1448,7 +1382,8 @@ void Textfield::OnAfterUserAction() {
}
bool Textfield::Cut() {
- if (!read_only() && !IsObscured() && model_->Cut()) {
+ if (!read_only() && text_input_type_ != ui::TEXT_INPUT_TYPE_PASSWORD &&
+ model_->Cut()) {
if (controller_)
controller_->OnAfterCutOrCopy();
return true;
@@ -1457,7 +1392,7 @@ bool Textfield::Cut() {
}
bool Textfield::Copy() {
- if (!IsObscured() && model_->Copy()) {
+ if (text_input_type_ != ui::TEXT_INPUT_TYPE_PASSWORD && model_->Copy()) {
if (controller_)
controller_->OnAfterCutOrCopy();
return true;
@@ -1466,16 +1401,7 @@ bool Textfield::Copy() {
}
bool Textfield::Paste() {
- if (read_only())
- return false;
-
- const base::string16 original_text = text();
- if (model_->Paste()) {
- // As Paste is handled in model_->Paste(), the RenderText may contain
- // upper case characters. This is not consistent with other places
- // which keeps RenderText only containing lower case characters.
- base::string16 new_text = GetTextForDisplay(text());
- model_->SetText(new_text);
+ if (!read_only() && model_->Paste()) {
if (controller_)
controller_->OnAfterPaste();
return true;
@@ -1524,14 +1450,14 @@ bool Textfield::ImeEditingAllowed() const {
return (t != ui::TEXT_INPUT_TYPE_NONE && t != ui::TEXT_INPUT_TYPE_PASSWORD);
}
-void Textfield::RevealObscuredChar(int index, const base::TimeDelta& duration) {
+void Textfield::RevealPasswordChar(int index) {
GetRenderText()->SetObscuredRevealIndex(index);
SchedulePaint();
if (index != -1) {
- obscured_reveal_timer_.Start(FROM_HERE, duration,
- base::Bind(&Textfield::RevealObscuredChar, base::Unretained(this),
- -1, base::TimeDelta()));
+ password_reveal_timer_.Start(FROM_HERE, password_reveal_duration_,
+ base::Bind(&Textfield::RevealPasswordChar,
+ weak_ptr_factory_.GetWeakPtr(), -1));
}
}
« no previous file with comments | « ui/views/controls/textfield/textfield.h ('k') | ui/views/controls/textfield/textfield_model_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698