Chromium Code Reviews| Index: chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
| diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
| index 78a6608b22d9ba50a3833266589ca81783dc758c..1da55f0742402b3654a8e95f31d83a969f25f821 100644 |
| --- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
| +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
| @@ -131,6 +131,37 @@ ui::TextInputType DetermineTextInputType() { |
| return ui::TEXT_INPUT_TYPE_URL; |
| } |
| +ui::TextEditCommand GetCommandForKeyEvent(const ui::KeyEvent& event) { |
| + const bool shift = event.IsShiftDown(); |
| + const bool control = event.IsControlDown(); |
| + const bool alt = event.IsAltDown() || event.IsAltGrDown(); |
| + switch (event.key_code()) { |
| + case ui::VKEY_UP: |
| + return ui::TextEditCommand::MOVE_UP; |
| + case ui::VKEY_DOWN: |
| + return ui::TextEditCommand::MOVE_DOWN; |
| + case ui::VKEY_PRIOR: |
| + if (!(control || alt || shift)) |
| + return ui::TextEditCommand::MOVE_PAGE_UP; |
| + break; |
| + case ui::VKEY_NEXT: |
| + if (!(control || alt || shift)) |
| + return ui::TextEditCommand::MOVE_PAGE_DOWN; |
| + break; |
| + case ui::VKEY_V: |
| + if (control && !alt) |
| + return ui::TextEditCommand::PASTE; |
| + break; |
| + case ui::VKEY_INSERT: |
| + if (shift && !control) |
| + return ui::TextEditCommand::PASTE; |
| + break; |
| + default: |
| + break; |
| + } |
| + return ui::TextEditCommand::INVALID_COMMAND; |
| +} |
| + |
| } // namespace |
| @@ -367,14 +398,9 @@ void OmniboxViewViews::ExecuteCommand(int command_id, int event_flags) { |
| case IDC_EDIT_SEARCH_ENGINES: |
| location_bar_view_->command_updater()->ExecuteCommand(command_id); |
| return; |
| - case IDS_MOVE_DOWN: |
| - case IDS_MOVE_UP: |
| - model()->OnUpOrDownKeyPressed(command_id == IDS_MOVE_DOWN ? 1 : -1); |
| - return; |
| - |
| // These commands do invoke the popup. |
| case IDS_APP_PASTE: |
| - OnPaste(); |
| + ExecuteEditCommand(ui::TextEditCommand::PASTE); |
| return; |
| default: |
| if (Textfield::IsCommandIdEnabled(command_id)) { |
| @@ -390,6 +416,33 @@ void OmniboxViewViews::ExecuteCommand(int command_id, int event_flags) { |
| } |
| } |
| +void OmniboxViewViews::ExecuteEditCommand(ui::TextEditCommand command) { |
| + if (!IsEditCommandEnabled(command)) |
| + return; |
| + |
| + DestroyTouchSelection(); |
| + switch (command) { |
| + case ui::TextEditCommand::MOVE_UP: |
| + model()->OnUpOrDownKeyPressed(-1); |
| + break; |
| + case ui::TextEditCommand::MOVE_DOWN: |
| + model()->OnUpOrDownKeyPressed(1); |
| + break; |
| + case ui::TextEditCommand::PASTE: |
| + OnPaste(); |
| + break; |
| + case ui::TextEditCommand::MOVE_PAGE_UP: |
| + model()->OnUpOrDownKeyPressed(-1 * model()->result().size()); |
| + break; |
| + case ui::TextEditCommand::MOVE_PAGE_DOWN: |
| + model()->OnUpOrDownKeyPressed(model()->result().size()); |
| + break; |
| + default: |
| + Textfield::ExecuteEditCommand(command); |
| + break; |
| + } |
| +} |
| + |
| void OmniboxViewViews::SetTextAndSelectedRange(const base::string16& text, |
| const gfx::Range& range) { |
| SetText(text); |
| @@ -445,6 +498,23 @@ void OmniboxViewViews::UpdateSecurityLevel() { |
| security_level_ = controller()->GetToolbarModel()->GetSecurityLevel(false); |
| } |
| +bool OmniboxViewViews::IsEditCommandEnabledInternal( |
| + ui::TextEditCommand command) const { |
| + switch (command) { |
| + case ui::TextEditCommand::MOVE_UP: |
| + case ui::TextEditCommand::MOVE_DOWN: |
| + case ui::TextEditCommand::PASTE: |
| + return !read_only(); |
| + // Todo shouldn't this also have read_only? |
| + case ui::TextEditCommand::MOVE_PAGE_UP: |
| + case ui::TextEditCommand::MOVE_PAGE_DOWN: |
| + return true; |
| + default: |
| + break; |
| + } |
| + return false; |
| +} |
| + |
| void OmniboxViewViews::SetWindowTextAndCaretPos(const base::string16& text, |
| size_t caret_pos, |
| bool update_popup, |
| @@ -743,7 +813,6 @@ bool OmniboxViewViews::OnKeyPressed(const ui::KeyEvent& event) { |
| return views::Textfield::OnKeyPressed(event); |
| const bool shift = event.IsShiftDown(); |
| - const bool control = event.IsControlDown(); |
| const bool alt = event.IsAltDown() || event.IsAltGrDown(); |
| switch (event.key_code()) { |
| case ui::VKEY_RETURN: |
| @@ -758,44 +827,20 @@ bool OmniboxViewViews::OnKeyPressed(const ui::KeyEvent& event) { |
| if (shift && model()->popup_model()->IsOpen()) |
| model()->popup_model()->TryDeletingCurrentItem(); |
| break; |
| - case ui::VKEY_UP: |
| - if (!read_only()) { |
| - model()->OnUpOrDownKeyPressed(-1); |
| - return true; |
| - } |
| - break; |
| - case ui::VKEY_DOWN: |
| - if (!read_only()) { |
| - model()->OnUpOrDownKeyPressed(1); |
| - return true; |
| - } |
| - break; |
| - case ui::VKEY_PRIOR: |
| - if (control || alt || shift) |
| - return false; |
| - model()->OnUpOrDownKeyPressed(-1 * model()->result().size()); |
| - return true; |
| - case ui::VKEY_NEXT: |
| - if (control || alt || shift) |
| - return false; |
| - model()->OnUpOrDownKeyPressed(model()->result().size()); |
| - return true; |
| - case ui::VKEY_V: |
| - if (control && !alt && !read_only()) { |
| - ExecuteCommand(IDS_APP_PASTE, 0); |
| - return true; |
| - } |
| - break; |
| - case ui::VKEY_INSERT: |
| - if (shift && !control && !read_only()) { |
| - ExecuteCommand(IDS_APP_PASTE, 0); |
| - return true; |
| - } |
| - break; |
| default: |
| break; |
| } |
| + ui::TextEditCommand command = scheduled_edit_command(); |
| + if (command == ui::TextEditCommand::INVALID_COMMAND) |
| + command = GetCommandForKeyEvent(event); |
| + |
| + if (IsEditCommandEnabledInternal(command)) { |
| + reset_scheduled_edit_command(); |
| + ExecuteEditCommand(command); |
| + return true; |
| + } |
| + |
| return views::Textfield::OnKeyPressed(event) || HandleEarlyTabActions(event); |
| } |
| @@ -909,8 +954,8 @@ bool OmniboxViewViews::IsCommandIdEnabled(int command_id) const { |
| return !read_only() && model()->CanPasteAndGo(GetClipboardText()); |
| if (command_id == IDS_SHOW_URL) |
| return controller()->GetToolbarModel()->WouldReplaceURL(); |
| - return command_id == IDS_MOVE_DOWN || command_id == IDS_MOVE_UP || |
| - Textfield::IsCommandIdEnabled(command_id) || |
| + // What about IDC_EDIT_SEARCH_ENGINES? |
|
tapted
2016/05/31 04:18:16
What's the context for this? I think this is depre
karandeepb
2016/05/31 05:12:32
Edit Search Engines still remains as a context men
|
| + return Textfield::IsCommandIdEnabled(command_id) || |
| location_bar_view_->command_updater()->IsCommandEnabled(command_id); |
| } |
| @@ -926,6 +971,11 @@ void OmniboxViewViews::DoInsertChar(base::char16 ch) { |
| Textfield::DoInsertChar(ch); |
| } |
| +bool OmniboxViewViews::IsEditCommandEnabled(ui::TextEditCommand command) const { |
| + return IsEditCommandEnabledInternal(command) || |
| + Textfield::IsEditCommandEnabled(command); |
| +} |
| + |
| #if defined(OS_CHROMEOS) |
| void OmniboxViewViews::CandidateWindowOpened( |
| chromeos::input_method::InputMethodManager* manager) { |