| 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 a04bcafc058b74f793bff3140d51f775564e8c1d..c2b934c0f124ca42cd0e1b3255159140d65f61fa 100644
|
| --- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
|
| +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
|
| @@ -642,13 +642,6 @@ void OmniboxViewViews::EmphasizeURLComponents() {
|
| }
|
| }
|
|
|
| -bool OmniboxViewViews::OnKeyReleased(const ui::KeyEvent& event) {
|
| - // The omnibox contents may change while the control key is pressed.
|
| - if (event.key_code() == ui::VKEY_CONTROL)
|
| - model()->OnControlKeyChanged(false);
|
| - return views::Textfield::OnKeyReleased(event);
|
| -}
|
| -
|
| bool OmniboxViewViews::IsItemForCommandIdDynamic(int command_id) const {
|
| return command_id == IDS_PASTE_AND_GO;
|
| }
|
| @@ -711,71 +704,6 @@ void OmniboxViewViews::OnMouseReleased(const ui::MouseEvent& event) {
|
| select_all_on_mouse_release_ = false;
|
| }
|
|
|
| -bool OmniboxViewViews::OnKeyPressed(const ui::KeyEvent& event) {
|
| - // Skip processing of [Alt]+<num-pad digit> Unicode alt key codes.
|
| - // Otherwise, if num-lock is off, the events are handled as [Up], [Down], etc.
|
| - if (event.IsUnicodeKeyCode())
|
| - 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:
|
| - model()->AcceptInput(alt ? NEW_FOREGROUND_TAB : CURRENT_TAB, false);
|
| - return true;
|
| - case ui::VKEY_ESCAPE:
|
| - return model()->OnEscapeKeyPressed();
|
| - case ui::VKEY_CONTROL:
|
| - model()->OnControlKeyChanged(true);
|
| - break;
|
| - case ui::VKEY_DELETE:
|
| - if (shift && model()->popup_model()->IsOpen())
|
| - model()->popup_model()->TryDeletingCurrentItem();
|
| - break;
|
| - case ui::VKEY_UP:
|
| - if (IsTextEditCommandEnabled(ui::TextEditCommand::MOVE_UP)) {
|
| - ExecuteTextEditCommand(ui::TextEditCommand::MOVE_UP);
|
| - return true;
|
| - }
|
| - break;
|
| - case ui::VKEY_DOWN:
|
| - if (IsTextEditCommandEnabled(ui::TextEditCommand::MOVE_DOWN)) {
|
| - ExecuteTextEditCommand(ui::TextEditCommand::MOVE_DOWN);
|
| - 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 &&
|
| - IsTextEditCommandEnabled(ui::TextEditCommand::PASTE)) {
|
| - ExecuteTextEditCommand(ui::TextEditCommand::PASTE);
|
| - return true;
|
| - }
|
| - break;
|
| - case ui::VKEY_INSERT:
|
| - if (shift && !control &&
|
| - IsTextEditCommandEnabled(ui::TextEditCommand::PASTE)) {
|
| - ExecuteTextEditCommand(ui::TextEditCommand::PASTE);
|
| - return true;
|
| - }
|
| - break;
|
| - default:
|
| - break;
|
| - }
|
| -
|
| - return views::Textfield::OnKeyPressed(event) || HandleEarlyTabActions(event);
|
| -}
|
| -
|
| void OmniboxViewViews::OnGestureEvent(ui::GestureEvent* event) {
|
| if (!HasFocus() && event->type() == ui::ET_GESTURE_TAP_DOWN) {
|
| select_all_on_gesture_tap_ = true;
|
| @@ -958,39 +886,105 @@ void OmniboxViewViews::ContentsChanged(views::Textfield* sender,
|
|
|
| bool OmniboxViewViews::HandleKeyEvent(views::Textfield* textfield,
|
| const ui::KeyEvent& event) {
|
| - if (event.type() != ui::ET_KEY_PRESSED)
|
| + if (event.type() == ui::ET_KEY_RELEASED) {
|
| + // The omnibox contents may change while the control key is pressed.
|
| + if (event.key_code() == ui::VKEY_CONTROL)
|
| + model()->OnControlKeyChanged(false);
|
| +
|
| return false;
|
| + }
|
|
|
| delete_at_end_pressed_ = false;
|
|
|
| - if (event.key_code() == ui::VKEY_BACK) {
|
| - // No extra handling is needed in keyword search mode, if there is a
|
| - // non-empty selection, or if the cursor is not leading the text.
|
| - if (model()->is_keyword_hint() || model()->keyword().empty() ||
|
| - HasSelection() || GetCursorPosition() != 0)
|
| - return false;
|
| - model()->ClearKeyword();
|
| - return true;
|
| - }
|
| + // Skip processing of [Alt]+<num-pad digit> Unicode alt key codes.
|
| + // Otherwise, if num-lock is off, the events are handled as [Up], [Down], etc.
|
| + if (event.IsUnicodeKeyCode())
|
| + return false;
|
|
|
| - if (event.key_code() == ui::VKEY_DELETE && !event.IsAltDown()) {
|
| - delete_at_end_pressed_ =
|
| - (!HasSelection() && GetCursorPosition() == text().length());
|
| - }
|
| + 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:
|
| + model()->AcceptInput(alt ? NEW_FOREGROUND_TAB : CURRENT_TAB, false);
|
| + return true;
|
| + case ui::VKEY_ESCAPE:
|
| + return model()->OnEscapeKeyPressed();
|
| + case ui::VKEY_CONTROL:
|
| + model()->OnControlKeyChanged(true);
|
| + break;
|
| + case ui::VKEY_DELETE:
|
| + if (shift && model()->popup_model()->IsOpen())
|
| + model()->popup_model()->TryDeletingCurrentItem();
|
|
|
| - // Handle the right-arrow key for LTR text and the left-arrow key for RTL text
|
| - // if there is gray text that needs to be committed.
|
| - if (GetCursorPosition() == text().length()) {
|
| - base::i18n::TextDirection direction = GetTextDirection();
|
| - if ((direction == base::i18n::LEFT_TO_RIGHT &&
|
| - event.key_code() == ui::VKEY_RIGHT) ||
|
| - (direction == base::i18n::RIGHT_TO_LEFT &&
|
| - event.key_code() == ui::VKEY_LEFT)) {
|
| - return model()->CommitSuggestedText();
|
| - }
|
| + delete_at_end_pressed_ = (!event.IsAltDown() && !HasSelection() &&
|
| + GetCursorPosition() == text().length());
|
| + break;
|
| + case ui::VKEY_UP:
|
| + if (IsTextEditCommandEnabled(ui::TextEditCommand::MOVE_UP)) {
|
| + ExecuteTextEditCommand(ui::TextEditCommand::MOVE_UP);
|
| + return true;
|
| + }
|
| + break;
|
| + case ui::VKEY_DOWN:
|
| + if (IsTextEditCommandEnabled(ui::TextEditCommand::MOVE_DOWN)) {
|
| + ExecuteTextEditCommand(ui::TextEditCommand::MOVE_DOWN);
|
| + 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 &&
|
| + IsTextEditCommandEnabled(ui::TextEditCommand::PASTE)) {
|
| + ExecuteTextEditCommand(ui::TextEditCommand::PASTE);
|
| + return true;
|
| + }
|
| + break;
|
| + case ui::VKEY_INSERT:
|
| + if (shift && !control &&
|
| + IsTextEditCommandEnabled(ui::TextEditCommand::PASTE)) {
|
| + ExecuteTextEditCommand(ui::TextEditCommand::PASTE);
|
| + return true;
|
| + }
|
| + break;
|
| + case ui::VKEY_BACK:
|
| + // No extra handling is needed in keyword search mode, if there is a
|
| + // non-empty selection, or if the cursor is not leading the text.
|
| + if (model()->is_keyword_hint() || model()->keyword().empty() ||
|
| + HasSelection() || GetCursorPosition() != 0)
|
| + return false;
|
| + model()->ClearKeyword();
|
| + return true;
|
| +
|
| + // Handle the right-arrow key for LTR text and the left-arrow key for RTL
|
| + // text if there is gray text that needs to be committed.
|
| + case ui::VKEY_RIGHT:
|
| + if (GetCursorPosition() == text().length() &&
|
| + GetTextDirection() == base::i18n::LEFT_TO_RIGHT) {
|
| + return model()->CommitSuggestedText();
|
| + }
|
| + break;
|
| + case ui::VKEY_LEFT:
|
| + if (GetCursorPosition() == text().length() &&
|
| + GetTextDirection() == base::i18n::RIGHT_TO_LEFT) {
|
| + return model()->CommitSuggestedText();
|
| + }
|
| + break;
|
| +
|
| + default:
|
| + break;
|
| }
|
|
|
| - return false;
|
| + return HandleEarlyTabActions(event);
|
| }
|
|
|
| void OmniboxViewViews::OnBeforeUserAction(views::Textfield* sender) {
|
|
|