Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2155)

Unified Diff: chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm

Issue 1855423003: Interpret '?' and Ctrl-K or Ctrl-E as putting omnibox in keyword search mode for Default Search Pro… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add includes for mac tests Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 2bf381da901a7b6da84306537604f33f2e35c315..61ee0ec2237224e24e2f23da1c3fab5bc6d56a92 100644
--- a/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm
+++ b/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm
@@ -214,7 +214,6 @@ OmniboxViewMac::OmniboxViewMac(OmniboxEditController* controller,
popup_view_(new OmniboxPopupViewMac(this, model(), field)),
field_(field),
saved_temporary_selection_(NSMakeRange(0, 0)),
- selection_before_change_(NSMakeRange(0, 0)),
marked_range_before_change_(NSMakeRange(0, 0)),
delete_was_pressed_(false),
delete_at_end_pressed_(false),
@@ -388,18 +387,15 @@ void OmniboxViewMac::SetWindowTextAndCaretPos(const base::string16& text,
TextChanged();
}
-void OmniboxViewMac::SetForcedQuery() {
+void OmniboxViewMac::EnterKeywordModeForDefaultSearchProvider() {
// 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(
+ KeywordModeEntryMethod::KEYBOARD_SHORTCUT);
+ SelectAll(false);
}
bool OmniboxViewMac::IsSelectAll() const {
@@ -683,8 +679,7 @@ void OmniboxViewMac::OnBeforePossibleChange() {
// We should only arrive here when the field is focused.
DCHECK(IsFirstResponder());
- selection_before_change_ = GetSelectedRange();
- text_before_change_ = GetText();
+ GetState(&state_before_change_);
marked_range_before_change_ = GetMarkedRange();
}
@@ -692,37 +687,17 @@ bool OmniboxViewMac::OnAfterPossibleChange(bool allow_keyword_ui_change) {
// We should only arrive here when the field is focused.
DCHECK(IsFirstResponder());
- const NSRange new_selection(GetSelectedRange());
- const base::string16 new_text(GetText());
- const size_t length = new_text.length();
-
- const bool selection_differs =
- (new_selection.length || selection_before_change_.length) &&
- !NSEqualRanges(new_selection, selection_before_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());
-
- // When the user has deleted text, we don't allow inline
- // autocomplete. This is assumed if the text has gotten shorter AND
- // the selection has shifted towards the front of the text. During
- // normal typing the text will almost always be shorter (as the new
- // input replaces the autocomplete suggestion), but in that case the
- // selection point will have moved towards the end of the text.
- // TODO(shess): In our implementation, we can catch -deleteBackward:
- // and other methods to provide positive knowledge that a delete
- // occurred, rather than intuiting it from context. Consider whether
- // that would be a stronger approach.
- const bool just_deleted_text =
- (length < text_before_change_.length() &&
- new_selection.location <= selection_before_change_.location);
+ State new_state;
+ GetState(&new_state);
+ OmniboxView::StateChanges state_changes =
+ GetStateChanges(state_before_change_, new_state);
+
+ const bool at_end_of_edit = (new_state.text.length() == new_state.sel_end);
delete_at_end_pressed_ = false;
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());
+ state_changes, allow_keyword_ui_change && !IsImeComposing());
if (delete_was_pressed_ && at_end_of_edit)
delete_at_end_pressed_ = true;
@@ -870,7 +845,7 @@ bool OmniboxViewMac::OnDoCommandBySelector(SEL cmd) {
if ((cmd == @selector(insertTab:) ||
cmd == @selector(insertTabIgnoringFieldEditor:)) &&
model()->is_keyword_hint()) {
- return model()->AcceptKeyword(ENTERED_KEYWORD_MODE_VIA_TAB);
+ return model()->AcceptKeyword(KeywordModeEntryMethod::TAB);
}
// |-noop:| is sent when the user presses Cmd+Return. Override the no-op
@@ -1023,7 +998,7 @@ void OmniboxViewMac::OnPaste() {
// Force a Paste operation to trigger the text_changed code in
// OnAfterPossibleChange(), even if identical contents are pasted
// into the text box.
- text_before_change_.clear();
+ state_before_change_.text.clear();
[editor replaceCharactersInRange:selectedRange withString:s];
[editor didChangeText];
« no previous file with comments | « chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.h ('k') | chrome/browser/ui/cocoa/omnibox/omnibox_view_mac_browsertest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698