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..daf0011a73eba95a082d04783623660976f91014 100644 |
--- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
@@ -277,12 +277,11 @@ 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("?")); |
- else |
- SelectRange(gfx::Range(current_text.size(), start + 1)); |
+ // Transition the user into keyword mode using their default search provider. |
+ // Select their query if they typed one. |
+ model()->EnterKeywordModeForDefaultSearchProvider( |
+ ENTERED_KEYWORD_MODE_VIA_KEYBOARD_SHORTCUT); |
+ SelectRange(gfx::Range(text().size(), 0)); |
} |
void OmniboxViewViews::GetSelectionBounds( |
@@ -524,6 +523,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 +532,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 +556,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(); |