| 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 9ed0c589b1a5109e4eadd68adae8f2f174ffda18..8921e008073805c872b043c15294a4536e58858c 100644
|
| --- a/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm
|
| +++ b/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm
|
| @@ -29,28 +29,28 @@
|
|
|
| using content::WebContents;
|
|
|
| -// Focus-handling between |field_| and |model_| is a bit subtle.
|
| +// Focus-handling between |field_| and model() is a bit subtle.
|
| // Other platforms detect change of focus, which is inconvenient
|
| // without subclassing NSTextField (even with a subclass, the use of a
|
| // field editor may complicate things).
|
| //
|
| -// |model_| doesn't actually do anything when it gains focus, it just
|
| +// model() doesn't actually do anything when it gains focus, it just
|
| // initializes. Visible activity happens only after the user edits.
|
| // NSTextField delegate receives messages around starting and ending
|
| // edits, so that suffices to catch focus changes. Since all calls
|
| -// into |model_| start from OmniboxViewMac, in the worst case
|
| +// into model() start from OmniboxViewMac, in the worst case
|
| // we can add code to sync up the sense of focus as needed.
|
| //
|
| // I've added DCHECK(IsFirstResponder()) in the places which I believe
|
| // should only be reachable when |field_| is being edited. If these
|
| // fire, it probably means someone unexpected is calling into
|
| -// |model_|.
|
| +// model().
|
| //
|
| // Other platforms don't appear to have the sense of "key window" that
|
| // Mac does (I believe their fields lose focus when the window loses
|
| // focus). Rather than modifying focus outside the control's edit
|
| // scope, when the window resigns key the autocomplete popup is
|
| -// closed. |model_| still believes it has focus, and the popup will
|
| +// closed. model() still believes it has focus, and the popup will
|
| // be regenerated on the user's next edit. That seems to match how
|
| // things work on other platforms.
|
|
|
| @@ -139,11 +139,8 @@ OmniboxViewMac::OmniboxViewMac(OmniboxEditController* controller,
|
| Profile* profile,
|
| CommandUpdater* command_updater,
|
| AutocompleteTextField* field)
|
| - : model_(new OmniboxEditModel(this, controller, profile)),
|
| - popup_view_(new OmniboxPopupViewMac(this, model_.get(), field)),
|
| - controller_(controller),
|
| - toolbar_model_(toolbar_model),
|
| - command_updater_(command_updater),
|
| + : OmniboxView(profile, controller, toolbar_model, command_updater),
|
| + popup_view_(new OmniboxPopupViewMac(this, model(), field)),
|
| field_(field),
|
| suggest_text_length_(0),
|
| delete_was_pressed_(false),
|
| @@ -169,23 +166,13 @@ OmniboxViewMac::OmniboxViewMac(OmniboxEditController* controller,
|
|
|
| OmniboxViewMac::~OmniboxViewMac() {
|
| // Destroy popup view before this object in case it tries to call us
|
| - // back in the destructor. Likewise for destroying the model before
|
| - // this object.
|
| + // back in the destructor.
|
| popup_view_.reset();
|
| - model_.reset();
|
|
|
| // Disconnect from |field_|, it outlives this object.
|
| [field_ setObserver:NULL];
|
| }
|
|
|
| -OmniboxEditModel* OmniboxViewMac::model() {
|
| - return model_.get();
|
| -}
|
| -
|
| -const OmniboxEditModel* OmniboxViewMac::model() const {
|
| - return model_.get();
|
| -}
|
| -
|
| void OmniboxViewMac::SaveStateToTab(WebContents* tab) {
|
| DCHECK(tab);
|
|
|
| @@ -200,7 +187,7 @@ void OmniboxViewMac::SaveStateToTab(WebContents* tab) {
|
| range = NSMakeRange(0, GetTextLength());
|
| }
|
|
|
| - OmniboxViewMacState state(model_->GetStateForTabSwitch(), hasFocus, range);
|
| + OmniboxViewMacState state(model()->GetStateForTabSwitch(), hasFocus, range);
|
| StoreStateToTab(tab, state);
|
| }
|
|
|
| @@ -210,7 +197,7 @@ void OmniboxViewMac::Update(const WebContents* tab_for_state_restoring) {
|
| // that the field isn't always updated correctly. Figure out why
|
| // this is. Maybe this method should be refactored into more
|
| // specific cases.
|
| - bool user_visible = model_->UpdatePermanentText(toolbar_model_->GetText());
|
| + bool user_visible = model()->UpdatePermanentText(toolbar_model()->GetText());
|
|
|
| if (tab_for_state_restoring) {
|
| RevertAll();
|
| @@ -218,7 +205,7 @@ void OmniboxViewMac::Update(const WebContents* tab_for_state_restoring) {
|
| const OmniboxViewMacState* state = GetStateFromTab(tab_for_state_restoring);
|
| if (state) {
|
| // Should restore the user's text via SetUserText().
|
| - model_->RestoreState(state->model_state);
|
| + model()->RestoreState(state->model_state);
|
|
|
| // Restore focus and selection if they were present when the tab
|
| // was switched away.
|
| @@ -244,55 +231,17 @@ void OmniboxViewMac::Update(const WebContents* tab_for_state_restoring) {
|
| // TODO(shess): This corresponds to _win and _gtk, except those
|
| // guard it with a test for whether the security level changed.
|
| // But AFAICT, that can only change if the text changed, and that
|
| - // code compares the toolbar_model_ security level with the local
|
| + // code compares the toolbar_model() security level with the local
|
| // security level. Dig in and figure out why this isn't a no-op
|
| // that should go away.
|
| EmphasizeURLComponents();
|
| }
|
| }
|
|
|
| -void OmniboxViewMac::OpenMatch(const AutocompleteMatch& match,
|
| - WindowOpenDisposition disposition,
|
| - const GURL& alternate_nav_url,
|
| - size_t selected_line) {
|
| - // TODO(shess): Why is the caller passing an invalid url in the
|
| - // first place? Make sure that case isn't being dropped on the
|
| - // floor.
|
| - if (!match.destination_url.is_valid()) {
|
| - return;
|
| - }
|
| -
|
| - model_->OpenMatch(match, disposition, alternate_nav_url, selected_line);
|
| -}
|
| -
|
| string16 OmniboxViewMac::GetText() const {
|
| return base::SysNSStringToUTF16(GetNonSuggestTextSubstring());
|
| }
|
|
|
| -bool OmniboxViewMac::IsEditingOrEmpty() const {
|
| - return model_->user_input_in_progress() || !GetTextLength();
|
| -}
|
| -
|
| -int OmniboxViewMac::GetIcon() const {
|
| - return IsEditingOrEmpty() ?
|
| - AutocompleteMatch::TypeToIcon(model_->CurrentTextType()) :
|
| - toolbar_model_->GetIcon();
|
| -}
|
| -
|
| -void OmniboxViewMac::SetUserText(const string16& text) {
|
| - SetUserText(text, text, true);
|
| -}
|
| -
|
| -void OmniboxViewMac::SetUserText(const string16& text,
|
| - const string16& display_text,
|
| - bool update_popup) {
|
| - model_->SetUserText(text);
|
| - // TODO(shess): TODO below from gtk.
|
| - // TODO(deanm): something about selection / focus change here.
|
| - SetWindowTextAndCaretPos(display_text, display_text.length(), update_popup,
|
| - true);
|
| -}
|
| -
|
| NSRange OmniboxViewMac::GetSelectedRange() const {
|
| return [[field_ currentEditor] selectedRange];
|
| }
|
| @@ -305,8 +254,8 @@ NSRange OmniboxViewMac::GetMarkedRange() const {
|
| void OmniboxViewMac::SetSelectedRange(const NSRange range) {
|
| // This can be called when we don't have focus. For instance, when
|
| // the user clicks the "Go" button.
|
| - if (model_->has_focus()) {
|
| - // TODO(shess): If |model_| thinks we have focus, this should not
|
| + if (model()->has_focus()) {
|
| + // TODO(shess): If model() thinks we have focus, this should not
|
| // be necessary. Try to convert to DCHECK(IsFirstResponder()).
|
| if (![field_ currentEditor]) {
|
| [[field_ window] makeFirstResponder:field_];
|
| @@ -382,15 +331,13 @@ void OmniboxViewMac::SelectAll(bool reversed) {
|
| }
|
|
|
| void OmniboxViewMac::RevertAll() {
|
| - ClosePopup();
|
| - model_->Revert();
|
| - model_->OnChanged();
|
| + OmniboxView::RevertAll();
|
| [field_ clearUndoChain];
|
| }
|
|
|
| void OmniboxViewMac::UpdatePopup() {
|
| - model_->SetInputInProgress(true);
|
| - if (!model_->has_focus())
|
| + model()->SetInputInProgress(true);
|
| + if (!model()->has_focus())
|
| return;
|
|
|
| // Comment copied from OmniboxViewWin::UpdatePopup():
|
| @@ -407,12 +354,14 @@ void OmniboxViewMac::UpdatePopup() {
|
| prevent_inline_autocomplete = true;
|
| }
|
|
|
| - model_->StartAutocomplete([editor selectedRange].length != 0,
|
| + model()->StartAutocomplete([editor selectedRange].length != 0,
|
| prevent_inline_autocomplete);
|
| }
|
|
|
| -void OmniboxViewMac::ClosePopup() {
|
| - model_->StopAutocomplete();
|
| +void OmniboxViewMac::CloseOmniboxPopup() {
|
| + // Call both base class methods.
|
| + ClosePopup();
|
| + OmniboxView::CloseOmniboxPopup();
|
| }
|
|
|
| void OmniboxViewMac::SetFocus() {
|
| @@ -434,9 +383,9 @@ void OmniboxViewMac::SetTextInternal(const string16& display_text) {
|
| [field_ setAttributedStringValue:as];
|
|
|
| // TODO(shess): This may be an appropriate place to call:
|
| - // model_->OnChanged();
|
| + // model()->OnChanged();
|
| // In the current implementation, this tells LocationBarViewMac to
|
| - // mess around with |model_| and update |field_|. Unfortunately,
|
| + // mess around with model() and update |field_|. Unfortunately,
|
| // when I look at our peer implementations, it's not entirely clear
|
| // to me if this is safe. SetTextInternal() is sort of an utility method,
|
| // and different callers sometimes have different needs. Research
|
| @@ -497,11 +446,6 @@ void OmniboxViewMac::EmphasizeURLComponents() {
|
| }
|
| }
|
|
|
| -void OmniboxViewMac::TextChanged() {
|
| - EmphasizeURLComponents();
|
| - model_->OnChanged();
|
| -}
|
| -
|
| void OmniboxViewMac::ApplyTextAttributes(const string16& display_text,
|
| NSMutableAttributedString* as) {
|
| NSUInteger as_length = [as length];
|
| @@ -530,8 +474,8 @@ void OmniboxViewMac::ApplyTextAttributes(const string16& display_text,
|
|
|
| url_parse::Component scheme, host;
|
| AutocompleteInput::ParseForEmphasizeComponents(
|
| - display_text, model_->GetDesiredTLD(), &scheme, &host);
|
| - const bool emphasize = model_->CurrentTextIsURL() && (host.len > 0);
|
| + display_text, model()->GetDesiredTLD(), &scheme, &host);
|
| + const bool emphasize = model()->CurrentTextIsURL() && (host.len > 0);
|
| if (emphasize) {
|
| [as addAttribute:NSForegroundColorAttributeName value:BaseTextColor()
|
| range:as_entire_string];
|
| @@ -544,10 +488,10 @@ void OmniboxViewMac::ApplyTextAttributes(const string16& display_text,
|
| // [Could it be to not change if no change? If so, I'm guessing
|
| // AppKit may already handle that.]
|
| const ToolbarModel::SecurityLevel security_level =
|
| - toolbar_model_->GetSecurityLevel();
|
| + toolbar_model()->GetSecurityLevel();
|
|
|
| // Emphasize the scheme for security UI display purposes (if necessary).
|
| - if (!model_->user_input_in_progress() && scheme.is_nonempty() &&
|
| + if (!model()->user_input_in_progress() && scheme.is_nonempty() &&
|
| (security_level != ToolbarModel::NONE)) {
|
| NSColor* color;
|
| if (security_level == ToolbarModel::EV_SECURE ||
|
| @@ -577,7 +521,7 @@ void OmniboxViewMac::OnTemporaryTextMaybeChanged(const string16& display_text,
|
|
|
| suggest_text_length_ = 0;
|
| SetWindowTextAndCaretPos(display_text, display_text.size(), false, false);
|
| - model_->OnChanged();
|
| + model()->OnChanged();
|
| [field_ clearUndoChain];
|
| }
|
|
|
| @@ -601,7 +545,7 @@ bool OmniboxViewMac::OnInlineAutocompleteTextMaybeChanged(
|
| const NSRange range =
|
| NSMakeRange(user_text_length, display_text.size() - user_text_length);
|
| SetTextAndSelectedRange(display_text, range);
|
| - model_->OnChanged();
|
| + model()->OnChanged();
|
| [field_ clearUndoChain];
|
|
|
| return true;
|
| @@ -655,7 +599,7 @@ bool OmniboxViewMac::OnAfterPossibleChange() {
|
|
|
| delete_at_end_pressed_ = false;
|
|
|
| - const bool something_changed = model_->OnAfterPossibleChange(
|
| + const bool something_changed = model()->OnAfterPossibleChange(
|
| text_before_change_, new_text, new_selection.location,
|
| NSMaxRange(new_selection), selection_differs, text_differs,
|
| just_deleted_text, !IsImeComposing());
|
| @@ -685,10 +629,6 @@ gfx::NativeView OmniboxViewMac::GetRelativeWindowForPopup() const {
|
| return NULL;
|
| }
|
|
|
| -CommandUpdater* OmniboxViewMac::GetCommandUpdater() {
|
| - return command_updater_;
|
| -}
|
| -
|
| void OmniboxViewMac::SetInstantSuggestion(const string16& suggest_text,
|
| bool animate_to_complete) {
|
| NSString* text = GetNonSuggestTextSubstring();
|
| @@ -738,7 +678,7 @@ void OmniboxViewMac::OnBeforeChange() {
|
| }
|
|
|
| void OmniboxViewMac::OnDidChange() {
|
| - // Figure out what changed and notify the model_.
|
| + // Figure out what changed and notify the model.
|
| OnAfterPossibleChange();
|
| }
|
|
|
| @@ -765,19 +705,19 @@ bool OmniboxViewMac::OnDoCommandBySelector(SEL cmd) {
|
| // Don't intercept up/down-arrow or backtab if the popup isn't open.
|
| if (popup_view_->IsOpen()) {
|
| if (cmd == @selector(moveDown:)) {
|
| - model_->OnUpOrDownKeyPressed(1);
|
| + model()->OnUpOrDownKeyPressed(1);
|
| return true;
|
| }
|
|
|
| if (cmd == @selector(moveUp:)) {
|
| - model_->OnUpOrDownKeyPressed(-1);
|
| + model()->OnUpOrDownKeyPressed(-1);
|
| return true;
|
| }
|
|
|
| if (cmd == @selector(insertBacktab:) &&
|
| - model_->popup_model()->selected_line_state() ==
|
| + model()->popup_model()->selected_line_state() ==
|
| OmniboxPopupModel::KEYWORD) {
|
| - model_->ClearKeyword(GetText());
|
| + model()->ClearKeyword(GetText());
|
| return true;
|
| }
|
| }
|
| @@ -786,29 +726,29 @@ bool OmniboxViewMac::OnDoCommandBySelector(SEL cmd) {
|
| // Only commit suggested text if the cursor is all the way to the right and
|
| // there is no selection.
|
| if (suggest_text_length_ > 0 && IsCaretAtEnd()) {
|
| - model_->CommitSuggestedText(true);
|
| + model()->CommitSuggestedText(true);
|
| return true;
|
| }
|
| }
|
|
|
| if (cmd == @selector(scrollPageDown:)) {
|
| - model_->OnUpOrDownKeyPressed(model_->result().size());
|
| + model()->OnUpOrDownKeyPressed(model()->result().size());
|
| return true;
|
| }
|
|
|
| if (cmd == @selector(scrollPageUp:)) {
|
| - model_->OnUpOrDownKeyPressed(-model_->result().size());
|
| + model()->OnUpOrDownKeyPressed(-model()->result().size());
|
| return true;
|
| }
|
|
|
| if (cmd == @selector(cancelOperation:)) {
|
| - return model_->OnEscapeKeyPressed();
|
| + return model()->OnEscapeKeyPressed();
|
| }
|
|
|
| if ((cmd == @selector(insertTab:) ||
|
| cmd == @selector(insertTabIgnoringFieldEditor:)) &&
|
| - model_->is_keyword_hint()) {
|
| - return model_->AcceptKeyword();
|
| + model()->is_keyword_hint()) {
|
| + return model()->AcceptKeyword();
|
| }
|
|
|
| // |-noop:| is sent when the user presses Cmd+Return. Override the no-op
|
| @@ -820,7 +760,7 @@ bool OmniboxViewMac::OnDoCommandBySelector(SEL cmd) {
|
| [event keyCode] == kVK_Return)) {
|
| WindowOpenDisposition disposition =
|
| event_utils::WindowOpenDispositionFromNSEvent(event);
|
| - model_->AcceptInput(disposition, false);
|
| + model()->AcceptInput(disposition, false);
|
| // Opening a URL in a background tab should also revert the omnibox contents
|
| // to their original state. We cannot do a blanket revert in OpenURL()
|
| // because middle-clicks also open in a new background tab, but those should
|
| @@ -831,19 +771,19 @@ bool OmniboxViewMac::OnDoCommandBySelector(SEL cmd) {
|
|
|
| // Option-Return
|
| if (cmd == @selector(insertNewlineIgnoringFieldEditor:)) {
|
| - model_->AcceptInput(NEW_FOREGROUND_TAB, false);
|
| + model()->AcceptInput(NEW_FOREGROUND_TAB, false);
|
| return true;
|
| }
|
|
|
| // When the user does Control-Enter, the existing content has "www."
|
| - // prepended and ".com" appended. |model_| should already have
|
| + // prepended and ".com" appended. model() should already have
|
| // received notification when the Control key was depressed, but it
|
| // is safe to tell it twice.
|
| if (cmd == @selector(insertLineBreak:)) {
|
| OnControlKeyChanged(true);
|
| WindowOpenDisposition disposition =
|
| event_utils::WindowOpenDispositionFromNSEvent([NSApp currentEvent]);
|
| - model_->AcceptInput(disposition, false);
|
| + model()->AcceptInput(disposition, false);
|
| return true;
|
| }
|
|
|
| @@ -856,8 +796,8 @@ bool OmniboxViewMac::OnDoCommandBySelector(SEL cmd) {
|
| if (cmd == @selector(deleteForward:)) {
|
| const NSUInteger modifiers = [[NSApp currentEvent] modifierFlags];
|
| if ((modifiers & NSShiftKeyMask) != 0) {
|
| - if (model_->popup_model()->IsOpen()) {
|
| - model_->popup_model()->TryDeletingCurrentItem();
|
| + if (model()->popup_model()->IsOpen()) {
|
| + model()->popup_model()->TryDeletingCurrentItem();
|
| return true;
|
| }
|
| }
|
| @@ -867,15 +807,15 @@ bool OmniboxViewMac::OnDoCommandBySelector(SEL cmd) {
|
| }
|
|
|
| void OmniboxViewMac::OnSetFocus(bool control_down) {
|
| - model_->OnSetFocus(control_down);
|
| - controller_->OnSetFocus();
|
| + model()->OnSetFocus(control_down);
|
| + controller()->OnSetFocus();
|
| }
|
|
|
| void OmniboxViewMac::OnKillFocus() {
|
| // Tell the model to reset itself.
|
| - model_->OnWillKillFocus(NULL);
|
| - model_->OnKillFocus();
|
| - controller_->OnKillFocus();
|
| + model()->OnWillKillFocus(NULL);
|
| + model()->OnKillFocus();
|
| + controller()->OnKillFocus();
|
| }
|
|
|
| bool OmniboxViewMac::CanCopy() {
|
| @@ -892,7 +832,7 @@ void OmniboxViewMac::CopyToPasteboard(NSPasteboard* pb) {
|
|
|
| GURL url;
|
| bool write_url = false;
|
| - model_->AdjustTextForCopy(selection.location, IsSelectAll(), &text, &url,
|
| + model()->AdjustTextForCopy(selection.location, IsSelectAll(), &text, &url,
|
| &write_url);
|
|
|
| NSString* nstext = base::SysUTF16ToNSString(text);
|
| @@ -925,7 +865,7 @@ void OmniboxViewMac::OnPaste() {
|
| const NSRange selectedRange = GetSelectedRange();
|
| if ([editor shouldChangeTextInRange:selectedRange replacementString:s]) {
|
| // Record this paste, so we can do different behavior.
|
| - model_->on_paste();
|
| + model()->on_paste();
|
|
|
| // Force a Paste operation to trigger the text_changed code in
|
| // OnAfterPossibleChange(), even if identical contents are pasted
|
| @@ -938,20 +878,20 @@ void OmniboxViewMac::OnPaste() {
|
| }
|
|
|
| bool OmniboxViewMac::CanPasteAndGo() {
|
| - return model_->CanPasteAndGo(GetClipboardText());
|
| + return model()->CanPasteAndGo(GetClipboardText());
|
| }
|
|
|
| int OmniboxViewMac::GetPasteActionStringId() {
|
| string16 text(GetClipboardText());
|
| - DCHECK(model_->CanPasteAndGo(text));
|
| - return model_->IsPasteAndSearch(GetClipboardText()) ?
|
| + DCHECK(model()->CanPasteAndGo(text));
|
| + return model()->IsPasteAndSearch(GetClipboardText()) ?
|
| IDS_PASTE_AND_SEARCH : IDS_PASTE_AND_GO;
|
| }
|
|
|
| void OmniboxViewMac::OnPasteAndGo() {
|
| string16 text(GetClipboardText());
|
| - if (model_->CanPasteAndGo(text))
|
| - model_->PasteAndGo(text);
|
| + if (model()->CanPasteAndGo(text))
|
| + model()->PasteAndGo(text);
|
| }
|
|
|
| void OmniboxViewMac::OnFrameChanged() {
|
| @@ -960,15 +900,19 @@ void OmniboxViewMac::OnFrameChanged() {
|
| // things even cheaper by refactoring between the popup-placement
|
| // code and the matrix-population code.
|
| popup_view_->UpdatePopupAppearance();
|
| - model_->PopupBoundsChangedTo(popup_view_->GetTargetBounds());
|
| + model()->PopupBoundsChangedTo(popup_view_->GetTargetBounds());
|
|
|
| // Give controller a chance to rearrange decorations.
|
| - model_->OnChanged();
|
| + model()->OnChanged();
|
| +}
|
| +
|
| +void OmniboxViewMac::ClosePopup() {
|
| + OmniboxView::CloseOmniboxPopup();
|
| }
|
|
|
| bool OmniboxViewMac::OnBackspacePressed() {
|
| // Don't intercept if not in keyword search mode.
|
| - if (model_->is_keyword_hint() || model_->keyword().empty()) {
|
| + if (model()->is_keyword_hint() || model()->keyword().empty()) {
|
| return false;
|
| }
|
|
|
| @@ -981,7 +925,7 @@ bool OmniboxViewMac::OnBackspacePressed() {
|
|
|
| // We're showing a keyword and the user pressed backspace at the
|
| // beginning of the text. Delete the selected keyword.
|
| - model_->ClearKeyword(GetText());
|
| + model()->ClearKeyword(GetText());
|
| return true;
|
| }
|
|
|
| @@ -1013,7 +957,7 @@ NSRange OmniboxViewMac::SelectionRangeForProposedRange(NSRange proposed_range) {
|
| }
|
|
|
| void OmniboxViewMac::OnControlKeyChanged(bool pressed) {
|
| - model_->OnControlKeyChanged(pressed);
|
| + model()->OnControlKeyChanged(pressed);
|
| }
|
|
|
| void OmniboxViewMac::FocusLocation(bool select_all) {
|
| @@ -1033,17 +977,16 @@ NSFont* OmniboxViewMac::GetFieldFont() {
|
| return rb.GetFont(ResourceBundle::BaseFont).GetNativeFont();
|
| }
|
|
|
| +int OmniboxViewMac::GetOmniboxTextLength() const {
|
| + return static_cast<int>(GetTextLength());
|
| +}
|
| +
|
| NSUInteger OmniboxViewMac::GetTextLength() const {
|
| return ([field_ currentEditor] ?
|
| [[[field_ currentEditor] string] length] :
|
| [[field_ stringValue] length]) - suggest_text_length_;
|
| }
|
|
|
| -void OmniboxViewMac::PlaceCaretAt(NSUInteger pos) {
|
| - DCHECK(pos <= GetTextLength());
|
| - SetSelectedRange(NSMakeRange(pos, pos));
|
| -}
|
| -
|
| bool OmniboxViewMac::IsCaretAtEnd() const {
|
| const NSRange selection = GetSelectedRange();
|
| return selection.length == 0 && selection.location == GetTextLength();
|
|
|