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

Unified Diff: chrome/browser/autocomplete/autocomplete_edit_view_mac.mm

Issue 5966006: Hitting Tab should always move cursor to end of omnibox text. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Mac build. Created 9 years, 11 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/autocomplete/autocomplete_edit_view_mac.mm
diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_mac.mm b/chrome/browser/autocomplete/autocomplete_edit_view_mac.mm
index a003166bc4d071ed7db2a3c3485b3d423d01cca4..c2841f46a3296a0011f4723b4a3778c652cc9591 100644
--- a/chrome/browser/autocomplete/autocomplete_edit_view_mac.mm
+++ b/chrome/browser/autocomplete/autocomplete_edit_view_mac.mm
@@ -216,7 +216,7 @@ void AutocompleteEditViewMac::SaveStateToTab(TabContents* tab) {
} else {
// If we are not focussed, there is no selection. Manufacture
// something reasonable in case it starts to matter in the future.
- range = NSMakeRange(0, [[field_ stringValue] length]);
+ range = NSMakeRange(0, GetTextLength());
}
AutocompleteEditViewMacState state(model_->GetStateForTabSwitch(),
@@ -296,8 +296,7 @@ string16 AutocompleteEditViewMac::GetText() const {
}
bool AutocompleteEditViewMac::IsEditingOrEmpty() const {
- return model_->user_input_in_progress() ||
- ([[field_ stringValue] length] == 0);
+ return model_->user_input_in_progress() || !GetTextLength();
}
int AutocompleteEditViewMac::GetIcon() const {
@@ -324,7 +323,6 @@ void AutocompleteEditViewMac::SetUserText(const string16& text,
}
NSRange AutocompleteEditViewMac::GetSelectedRange() const {
- DCHECK([field_ currentEditor]);
return [[field_ currentEditor] selectedRange];
}
@@ -374,7 +372,7 @@ void AutocompleteEditViewMac::SetForcedQuery() {
bool AutocompleteEditViewMac::IsSelectAll() {
if (![field_ currentEditor])
return true;
- const NSRange all_range = NSMakeRange(0, GetText().length());
+ const NSRange all_range = NSMakeRange(0, GetTextLength());
return NSEqualRanges(all_range, GetSelectedRange());
}
@@ -401,7 +399,7 @@ void AutocompleteEditViewMac::SelectAll(bool reversed) {
// TODO(shess): Verify that we should be stealing focus at this
// point.
- SetSelectedRange(NSMakeRange(0, GetText().length()));
+ SetSelectedRange(NSMakeRange(0, GetTextLength()));
}
void AutocompleteEditViewMac::RevertAll() {
@@ -422,16 +420,8 @@ void AutocompleteEditViewMac::UpdatePopup() {
// * The caret/selection isn't at the end of the text
// * The user has just pasted in something that replaced all the text
// * The user is trying to compose something in an IME
- bool prevent_inline_autocomplete = IsImeComposing();
- NSTextView* editor = (NSTextView*)[field_ currentEditor];
- if (editor) {
- if (NSMaxRange([editor selectedRange]) <
- [[editor textStorage] length] - suggest_text_length_)
- prevent_inline_autocomplete = true;
- }
-
- model_->StartAutocomplete([editor selectedRange].length != 0,
- prevent_inline_autocomplete);
+ model_->StartAutocomplete(GetSelectedRange().length != 0,
+ IsImeComposing() || !IsCaretAtEnd());
}
void AutocompleteEditViewMac::ClosePopup() {
@@ -444,19 +434,6 @@ void AutocompleteEditViewMac::ClosePopup() {
void AutocompleteEditViewMac::SetFocus() {
}
-bool AutocompleteEditViewMac::CommitSuggestText() {
- if (suggest_text_length_ == 0)
- return false;
-
- string16 input_text(GetText());
- suggest_text_length_ = 0;
- string16 text(GetText());
- // Call SetText() to force a redraw and move the cursor to the end.
- SetText(text);
- model()->FinalizeInstantQuery(input_text, text.substr(input_text.size()));
- return true;
-}
-
void AutocompleteEditViewMac::SetText(const string16& display_text) {
// If we are setting the text directly, there cannot be any suggest text.
suggest_text_length_ = 0;
@@ -507,6 +484,16 @@ NSString* AutocompleteEditViewMac::GetNonSuggestTextSubstring() const {
return text;
}
+NSString* AutocompleteEditViewMac::GetSuggestTextSubstring() const {
+ if (suggest_text_length_ == 0)
+ return nil;
+
+ NSString* text = [field_ stringValue];
+ NSUInteger length = [text length];
+ DCHECK_LE(suggest_text_length_, length);
+ return [text substringFromIndex:(length - suggest_text_length_)];
+}
+
void AutocompleteEditViewMac::EmphasizeURLComponents() {
NSTextView* editor = (NSTextView*)[field_ currentEditor];
// If the autocomplete text field is in editing mode, then we can just change
@@ -723,6 +710,11 @@ void AutocompleteEditViewMac::SetInstantSuggestion(
}
}
+string16 AutocompleteEditViewMac::GetInstantSuggestion() const {
+ return suggest_text_length_ ?
+ base::SysNSStringToUTF16(GetSuggestTextSubstring()) : string16();
+}
+
int AutocompleteEditViewMac::TextWidth() const {
// Not used on mac.
NOTREACHED();
@@ -785,12 +777,8 @@ bool AutocompleteEditViewMac::OnDoCommandBySelector(SEL cmd) {
if (cmd == @selector(moveRight:)) {
// Only commit suggested text if the cursor is all the way to the right and
// there is no selection.
- NSRange range = GetSelectedRange();
- if (range.length == 0 &&
- suggest_text_length_ > 0 &&
- (range.location + suggest_text_length_ ==
- [[field_ stringValue] length])) {
- controller_->OnCommitSuggestedText(GetText());
+ if (suggest_text_length_ > 0 && IsCaretAtEnd()) {
+ controller_->OnCommitSuggestedText(true);
return true;
}
}
@@ -815,7 +803,15 @@ bool AutocompleteEditViewMac::OnDoCommandBySelector(SEL cmd) {
return model_->AcceptKeyword();
if (suggest_text_length_ > 0) {
- controller_->OnCommitSuggestedText(GetText());
+ controller_->OnCommitSuggestedText(true);
+ return true;
+ }
+
+ if (!IsCaretAtEnd()) {
+ PlaceCaretAt(GetTextLength());
+ // OnDidChange() will not be triggered when setting selected range in this
+ // method, so we need to call it explicitly.
+ OnDidChange();
return true;
}
@@ -1094,3 +1090,19 @@ NSFont* AutocompleteEditViewMac::GetFieldFont() {
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
return rb.GetFont(ResourceBundle::BaseFont).GetNativeFont();
}
+
+NSUInteger AutocompleteEditViewMac::GetTextLength() const {
+ return ([field_ currentEditor] ?
+ [[[field_ currentEditor] string] length] :
+ [[field_ stringValue] length]) - suggest_text_length_;
+}
+
+void AutocompleteEditViewMac::PlaceCaretAt(NSUInteger pos) {
+ DCHECK(pos <= GetTextLength());
+ SetSelectedRange(NSMakeRange(pos, pos));
+}
+
+bool AutocompleteEditViewMac::IsCaretAtEnd() const {
+ const NSRange selection = GetSelectedRange();
+ return selection.length == 0 && selection.location == GetTextLength();
+}
« no previous file with comments | « chrome/browser/autocomplete/autocomplete_edit_view_mac.h ('k') | chrome/browser/autocomplete/autocomplete_edit_view_views.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698