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 533f98421d2e5b5750f68a4c53879768f83f1de0..075c7406e23a0ce5727f9889e0dfa1a5120be011 100644 |
| --- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
| +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
| @@ -277,12 +277,15 @@ void OmniboxViewViews::SetUserText(const base::string16& text, |
| } |
| void OmniboxViewViews::SetForcedQuery() { |
| - const base::string16 current_text(text()); |
| - const size_t start = current_text.find_first_not_of(base::kWhitespaceUTF16); |
| - if (start == base::string16::npos || (current_text[start] != '?')) |
| - OmniboxView::SetUserText(base::ASCIIToUTF16("?")); |
| + // If the user is already in keyword mode (for any search platform, not just |
| + // their default one), highlight their search only. If the user is not in |
| + // keyword mode, keep what they've typed and transition them into keyword mode |
| + // using their default search platform. |
|
Peter Kasting
2016/04/08 00:39:56
Nit: platform -> provider
Tom (Use chromium acct)
2016/04/12 20:03:05
Done.
|
| + if (model()->is_keyword_selected()) |
| + SelectRange(gfx::Range(text().size(), 0)); |
| else |
| - SelectRange(gfx::Range(current_text.size(), start + 1)); |
| + model()->SetKeywordWithDefaultSearchProvider( |
| + ENTERED_KEYWORD_MODE_VIA_KEYBOARD_SHORTCUT); |
| } |
| void OmniboxViewViews::GetSelectionBounds( |
| @@ -524,6 +527,8 @@ void OmniboxViewViews::OnRevertTemporaryText() { |
| void OmniboxViewViews::OnBeforePossibleChange() { |
| // Record our state. |
| text_before_change_ = text(); |
| + keyword_before_change_ = model()->keyword(); |
| + is_keyword_selected_before_change_ = model()->is_keyword_selected(); |
| sel_before_change_ = GetSelectedRange(); |
| ime_composing_before_change_ = IsIMEComposing(); |
| } |
| @@ -531,9 +536,15 @@ void OmniboxViewViews::OnBeforePossibleChange() { |
| bool OmniboxViewViews::OnAfterPossibleChange(bool allow_keyword_ui_change) { |
| // See if the text or selection have changed since OnBeforePossibleChange(). |
| const base::string16 new_text = text(); |
| + const base::string16 new_keyword = model()->keyword(); |
| + const bool new_is_keyword_selected = model()->is_keyword_selected(); |
| const gfx::Range new_sel = GetSelectedRange(); |
| const bool text_changed = (new_text != text_before_change_) || |
| (ime_composing_before_change_ != IsIMEComposing()); |
| + const bool keyword_changed = |
| + (new_is_keyword_selected != is_keyword_selected_before_change_) || |
| + (new_is_keyword_selected && is_keyword_selected_before_change_ && |
| + new_keyword != keyword_before_change_); |
| const bool selection_differs = |
| !((sel_before_change_.is_empty() && new_sel.is_empty()) || |
| sel_before_change_.EqualsIgnoringDirection(new_sel)); |
| @@ -549,14 +560,14 @@ bool OmniboxViewViews::OnAfterPossibleChange(bool allow_keyword_ui_change) { |
| const bool something_changed = model()->OnAfterPossibleChange( |
| text_before_change_, new_text, new_sel.start(), new_sel.end(), |
| - selection_differs, text_changed, just_deleted_text, |
| + selection_differs, text_changed, keyword_changed, just_deleted_text, |
| allow_keyword_ui_change && !IsIMEComposing()); |
| // If only selection was changed, we don't need to call model()'s |
| // OnChanged() method, which is called in TextChanged(). |
| // But we still need to call EmphasizeURLComponents() to make sure the text |
| // attributes are updated correctly. |
| - if (something_changed && text_changed) |
| + if (something_changed && (text_changed || keyword_changed)) |
| TextChanged(); |
| else if (selection_differs) |
| EmphasizeURLComponents(); |