Chromium Code Reviews| Index: ui/views/controls/textfield/textfield.cc |
| diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc |
| index fdfe19b095fc0cdb63d857ba800f0d88b509abf0..3bdc036754a45cc62eeb37edc7b57da8e5a02aec 100644 |
| --- a/ui/views/controls/textfield/textfield.cc |
| +++ b/ui/views/controls/textfield/textfield.cc |
| @@ -883,8 +883,8 @@ int Textfield::OnPerformDrop(const ui::DropTargetEvent& event) { |
| model_->InsertText(new_text); |
| } |
| skip_input_method_cancel_composition_ = false; |
| - UpdateAfterChange(true, true); |
| OnAfterUserAction(); |
| + UpdateAfterChange(true, true); |
| return move ? ui::DragDropTypes::DRAG_MOVE : ui::DragDropTypes::DRAG_COPY; |
| } |
| @@ -1263,8 +1263,8 @@ void Textfield::SetCompositionText(const ui::CompositionText& composition) { |
| skip_input_method_cancel_composition_ = true; |
| model_->SetCompositionText(composition); |
| skip_input_method_cancel_composition_ = false; |
| - UpdateAfterChange(true, true); |
| OnAfterUserAction(); |
| + UpdateAfterChange(true, true); |
| } |
| void Textfield::ConfirmCompositionText() { |
| @@ -1275,8 +1275,8 @@ void Textfield::ConfirmCompositionText() { |
| skip_input_method_cancel_composition_ = true; |
| model_->ConfirmCompositionText(); |
| skip_input_method_cancel_composition_ = false; |
| - UpdateAfterChange(true, true); |
| OnAfterUserAction(); |
| + UpdateAfterChange(true, true); |
| } |
| void Textfield::ClearCompositionText() { |
| @@ -1287,8 +1287,8 @@ void Textfield::ClearCompositionText() { |
| skip_input_method_cancel_composition_ = true; |
| model_->CancelCompositionText(); |
| skip_input_method_cancel_composition_ = false; |
| - UpdateAfterChange(true, true); |
| OnAfterUserAction(); |
| + UpdateAfterChange(true, true); |
| } |
| void Textfield::InsertText(const base::string16& new_text) { |
| @@ -1300,8 +1300,8 @@ void Textfield::InsertText(const base::string16& new_text) { |
| skip_input_method_cancel_composition_ = true; |
| model_->InsertText(new_text); |
| skip_input_method_cancel_composition_ = false; |
| - UpdateAfterChange(true, true); |
| OnAfterUserAction(); |
| + UpdateAfterChange(true, true); |
| } |
| void Textfield::InsertChar(const ui::KeyEvent& event) { |
| @@ -1583,8 +1583,8 @@ void Textfield::DoInsertChar(base::char16 ch) { |
| model_->InsertChar(ch); |
| skip_input_method_cancel_composition_ = false; |
| - UpdateAfterChange(true, true); |
| OnAfterUserAction(); |
| + UpdateAfterChange(true, true); |
| } |
| gfx::RenderText* Textfield::GetRenderText() const { |
| @@ -1605,6 +1605,25 @@ base::string16 Textfield::GetSelectionClipboardText() const { |
| void Textfield::ExecuteTextEditCommand(ui::TextEditCommand command) { |
| DestroyTouchSelection(); |
| + // We only execute the commands enabled in Textfield::IsTextEditCommandEnabled |
| + // below. Hence don't do a virtual IsTextEditCommandEnabled call. |
| + if (!Textfield::IsTextEditCommandEnabled(command)) |
| + return; |
| + |
| + gfx::SelectionModel selection_model = GetSelectionModel(); |
| + OnBeforeUserAction(); |
| + |
| + bool text_changed = ExecuteTextEditCommandImpl(command); |
| + bool cursor_changed = text_changed; |
| + |
| + cursor_changed |= GetSelectionModel() != selection_model; |
| + if (cursor_changed && HasSelection()) |
| + UpdateSelectionClipboard(); |
| + OnAfterUserAction(); |
| + UpdateAfterChange(text_changed, cursor_changed); |
| +} |
| + |
| +bool Textfield::ExecuteTextEditCommandImpl(ui::TextEditCommand command) { |
| bool add_to_kill_buffer = false; |
| // Some codepaths may bypass GetCommandForKeyEvent, so any selection-dependent |
| @@ -1625,43 +1644,35 @@ void Textfield::ExecuteTextEditCommand(ui::TextEditCommand command) { |
| break; |
| } |
|
sadrul
2017/03/09 01:47:38
This part where we may change |command| should mov
yiyix
2017/03/09 02:45:33
Done. It doesn't change the current implementation
|
| - // We only execute the commands enabled in Textfield::IsTextEditCommandEnabled |
| - // below. Hence don't do a virtual IsTextEditCommandEnabled call. |
| - if (!Textfield::IsTextEditCommandEnabled(command)) |
| - return; |
| - |
| - bool text_changed = false; |
| - bool cursor_changed = false; |
| bool rtl = GetTextDirection() == base::i18n::RIGHT_TO_LEFT; |
| gfx::VisualCursorDirection begin = rtl ? gfx::CURSOR_RIGHT : gfx::CURSOR_LEFT; |
| gfx::VisualCursorDirection end = rtl ? gfx::CURSOR_LEFT : gfx::CURSOR_RIGHT; |
| - gfx::SelectionModel selection_model = GetSelectionModel(); |
| + bool is_text_changed = false; |
| - OnBeforeUserAction(); |
| switch (command) { |
| case ui::TextEditCommand::DELETE_BACKWARD: |
| - text_changed = cursor_changed = model_->Backspace(add_to_kill_buffer); |
| + is_text_changed = model_->Backspace(add_to_kill_buffer); |
| break; |
| case ui::TextEditCommand::DELETE_FORWARD: |
| - text_changed = cursor_changed = model_->Delete(add_to_kill_buffer); |
| + is_text_changed = model_->Delete(add_to_kill_buffer); |
| break; |
| case ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE: |
| case ui::TextEditCommand::DELETE_TO_BEGINNING_OF_PARAGRAPH: |
| model_->MoveCursor(gfx::LINE_BREAK, begin, gfx::SELECTION_RETAIN); |
| - text_changed = cursor_changed = model_->Backspace(add_to_kill_buffer); |
| + is_text_changed = model_->Backspace(add_to_kill_buffer); |
| break; |
| case ui::TextEditCommand::DELETE_TO_END_OF_LINE: |
| case ui::TextEditCommand::DELETE_TO_END_OF_PARAGRAPH: |
| model_->MoveCursor(gfx::LINE_BREAK, end, gfx::SELECTION_RETAIN); |
| - text_changed = cursor_changed = model_->Delete(add_to_kill_buffer); |
| + is_text_changed = model_->Delete(add_to_kill_buffer); |
| break; |
| case ui::TextEditCommand::DELETE_WORD_BACKWARD: |
| model_->MoveCursor(gfx::WORD_BREAK, begin, gfx::SELECTION_RETAIN); |
| - text_changed = cursor_changed = model_->Backspace(add_to_kill_buffer); |
| + is_text_changed = model_->Backspace(add_to_kill_buffer); |
| break; |
| case ui::TextEditCommand::DELETE_WORD_FORWARD: |
| model_->MoveCursor(gfx::WORD_BREAK, end, gfx::SELECTION_RETAIN); |
| - text_changed = cursor_changed = model_->Delete(add_to_kill_buffer); |
| + is_text_changed = model_->Delete(add_to_kill_buffer); |
| break; |
| case ui::TextEditCommand::MOVE_BACKWARD: |
| model_->MoveCursor(gfx::CHARACTER_BREAK, begin, gfx::SELECTION_NONE); |
| @@ -1761,28 +1772,28 @@ void Textfield::ExecuteTextEditCommand(ui::TextEditCommand command) { |
| kWordSelectionBehavior); |
| break; |
| case ui::TextEditCommand::UNDO: |
| - text_changed = cursor_changed = model_->Undo(); |
| + is_text_changed = model_->Undo(); |
| break; |
| case ui::TextEditCommand::REDO: |
| - text_changed = cursor_changed = model_->Redo(); |
| + is_text_changed = model_->Redo(); |
| break; |
| case ui::TextEditCommand::CUT: |
| - text_changed = cursor_changed = Cut(); |
| + is_text_changed = Cut(); |
| break; |
| case ui::TextEditCommand::COPY: |
| Copy(); |
| break; |
| case ui::TextEditCommand::PASTE: |
| - text_changed = cursor_changed = Paste(); |
| + is_text_changed = Paste(); |
| break; |
| case ui::TextEditCommand::SELECT_ALL: |
| SelectAll(false); |
| break; |
| case ui::TextEditCommand::TRANSPOSE: |
| - text_changed = cursor_changed = model_->Transpose(); |
| + is_text_changed = model_->Transpose(); |
| break; |
| case ui::TextEditCommand::YANK: |
| - text_changed = cursor_changed = model_->Yank(); |
| + is_text_changed = model_->Yank(); |
| break; |
| case ui::TextEditCommand::INSERT_TEXT: |
| case ui::TextEditCommand::SET_MARK: |
| @@ -1791,12 +1802,7 @@ void Textfield::ExecuteTextEditCommand(ui::TextEditCommand command) { |
| NOTREACHED(); |
| break; |
| } |
| - |
| - cursor_changed |= GetSelectionModel() != selection_model; |
| - if (cursor_changed && HasSelection()) |
| - UpdateSelectionClipboard(); |
| - UpdateAfterChange(text_changed, cursor_changed); |
| - OnAfterUserAction(); |
| + return is_text_changed; |
| } |
| //////////////////////////////////////////////////////////////////////////////// |