Index: chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm |
diff --git a/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm b/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm |
index 479d8e911f92699003cec4eeb628c987b3418d51..c64581119e782cdfb10246735969ba5f4e3475bb 100644 |
--- a/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm |
+++ b/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm |
@@ -355,14 +355,12 @@ void OmniboxViewMac::SetForcedQuery() { |
// We need to do this first, else |SetSelectedRange()| won't work. |
FocusLocation(true); |
- const base::string16 current_text(GetText()); |
- const size_t start = current_text.find_first_not_of(base::kWhitespaceUTF16); |
- if (start == base::string16::npos || (current_text[start] != '?')) { |
- SetUserText(base::ASCIIToUTF16("?")); |
- } else { |
- NSRange range = NSMakeRange(start + 1, current_text.size() - start - 1); |
- [[field_ currentEditor] setSelectedRange:range]; |
- } |
+ // 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); |
+ NSRange range = NSMakeRange(0, GetText().size()); |
+ [[field_ currentEditor] setSelectedRange:range]; |
} |
bool OmniboxViewMac::IsSelectAll() const { |
@@ -654,6 +652,8 @@ void OmniboxViewMac::OnBeforePossibleChange() { |
selection_before_change_ = GetSelectedRange(); |
text_before_change_ = GetText(); |
+ keyword_before_change_ = model()->keyword(); |
+ is_keyword_selected_before_change_ = model()->is_keyword_selected(); |
marked_range_before_change_ = GetMarkedRange(); |
} |
@@ -663,6 +663,8 @@ bool OmniboxViewMac::OnAfterPossibleChange(bool allow_keyword_ui_change) { |
const NSRange new_selection(GetSelectedRange()); |
const base::string16 new_text(GetText()); |
+ const base::string16 new_keyword(model()->keyword()); |
+ const bool new_is_keyword_selected = model()->is_keyword_selected(); |
const size_t length = new_text.length(); |
const bool selection_differs = |
@@ -671,6 +673,10 @@ bool OmniboxViewMac::OnAfterPossibleChange(bool allow_keyword_ui_change) { |
const bool at_end_of_edit = (length == new_selection.location); |
const bool text_differs = (new_text != text_before_change_) || |
!NSEqualRanges(marked_range_before_change_, GetMarkedRange()); |
+ const bool keyword_differs = |
+ (new_is_keyword_selected != is_keyword_selected_before_change_) || |
+ (new_is_keyword_selected && is_keyword_selected_before_change_ && |
+ new_keyword != keyword_before_change_); |
// When the user has deleted text, we don't allow inline |
// autocomplete. This is assumed if the text has gotten shorter AND |
@@ -691,7 +697,8 @@ bool OmniboxViewMac::OnAfterPossibleChange(bool allow_keyword_ui_change) { |
const bool something_changed = model()->OnAfterPossibleChange( |
text_before_change_, new_text, new_selection.location, |
NSMaxRange(new_selection), selection_differs, text_differs, |
- just_deleted_text, allow_keyword_ui_change && !IsImeComposing()); |
+ keyword_differs, just_deleted_text, |
+ allow_keyword_ui_change && !IsImeComposing()); |
if (delete_was_pressed_ && at_end_of_edit) |
delete_at_end_pressed_ = true; |