| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/autocomplete/autocomplete_edit_view_mac.h" | 5 #include "chrome/browser/autocomplete/autocomplete_edit_view_mac.h" |
| 6 | 6 |
| 7 #include <Carbon/Carbon.h> // kVK_Return | 7 #include <Carbon/Carbon.h> // kVK_Return |
| 8 | 8 |
| 9 #include "app/mac/nsimage_cache.h" | 9 #include "app/mac/nsimage_cache.h" |
| 10 #include "app/resource_bundle.h" | 10 #include "app/resource_bundle.h" |
| (...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 } | 641 } |
| 642 | 642 |
| 643 bool AutocompleteEditViewMac::OnAfterPossibleChange() { | 643 bool AutocompleteEditViewMac::OnAfterPossibleChange() { |
| 644 // We should only arrive here when the field is focussed. | 644 // We should only arrive here when the field is focussed. |
| 645 DCHECK(IsFirstResponder()); | 645 DCHECK(IsFirstResponder()); |
| 646 | 646 |
| 647 const NSRange new_selection(GetSelectedRange()); | 647 const NSRange new_selection(GetSelectedRange()); |
| 648 const std::wstring new_text(GetText()); | 648 const std::wstring new_text(GetText()); |
| 649 const size_t length = new_text.length(); | 649 const size_t length = new_text.length(); |
| 650 | 650 |
| 651 const bool selection_differs = !NSEqualRanges(new_selection, | 651 const bool selection_differs = |
| 652 selection_before_change_); | 652 (new_selection.length || selection_before_change_.length) && |
| 653 !NSEqualRanges(new_selection, selection_before_change_); |
| 653 const bool at_end_of_edit = (length == new_selection.location); | 654 const bool at_end_of_edit = (length == new_selection.location); |
| 654 const bool text_differs = (new_text != text_before_change_) || | 655 const bool text_differs = (new_text != text_before_change_) || |
| 655 !NSEqualRanges(marked_range_before_change_, GetMarkedRange()); | 656 !NSEqualRanges(marked_range_before_change_, GetMarkedRange()); |
| 656 | 657 |
| 657 // When the user has deleted text, we don't allow inline | 658 // When the user has deleted text, we don't allow inline |
| 658 // autocomplete. This is assumed if the text has gotten shorter AND | 659 // autocomplete. This is assumed if the text has gotten shorter AND |
| 659 // the selection has shifted towards the front of the text. During | 660 // the selection has shifted towards the front of the text. During |
| 660 // normal typing the text will almost always be shorter (as the new | 661 // normal typing the text will almost always be shorter (as the new |
| 661 // input replaces the autocomplete suggestion), but in that case the | 662 // input replaces the autocomplete suggestion), but in that case the |
| 662 // selection point will have moved towards the end of the text. | 663 // selection point will have moved towards the end of the text. |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 803 model_->OnUpOrDownKeyPressed(-model_->result().size()); | 804 model_->OnUpOrDownKeyPressed(-model_->result().size()); |
| 804 return true; | 805 return true; |
| 805 } | 806 } |
| 806 | 807 |
| 807 if (cmd == @selector(cancelOperation:)) { | 808 if (cmd == @selector(cancelOperation:)) { |
| 808 return model_->OnEscapeKeyPressed(); | 809 return model_->OnEscapeKeyPressed(); |
| 809 } | 810 } |
| 810 | 811 |
| 811 if (cmd == @selector(insertTab:) || | 812 if (cmd == @selector(insertTab:) || |
| 812 cmd == @selector(insertTabIgnoringFieldEditor:)) { | 813 cmd == @selector(insertTabIgnoringFieldEditor:)) { |
| 813 if (model_->is_keyword_hint() && !model_->keyword().empty()) { | 814 if (model_->is_keyword_hint()) |
| 814 model_->AcceptKeyword(); | 815 return model_->AcceptKeyword(); |
| 815 return true; | |
| 816 } | |
| 817 | 816 |
| 818 if (suggest_text_length_ > 0) { | 817 if (suggest_text_length_ > 0) { |
| 819 controller_->OnCommitSuggestedText(GetText()); | 818 controller_->OnCommitSuggestedText(GetText()); |
| 820 return true; | 819 return true; |
| 821 } | 820 } |
| 822 | 821 |
| 823 if (controller_->AcceptCurrentInstantPreview()) | 822 if (controller_->AcceptCurrentInstantPreview()) |
| 824 return true; | 823 return true; |
| 825 } | 824 } |
| 826 | 825 |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 932 | 931 |
| 933 // -shouldChangeTextInRange:* and -didChangeText are documented in | 932 // -shouldChangeTextInRange:* and -didChangeText are documented in |
| 934 // NSTextView as things you need to do if you write additional | 933 // NSTextView as things you need to do if you write additional |
| 935 // user-initiated editing functions. They cause the appropriate | 934 // user-initiated editing functions. They cause the appropriate |
| 936 // delegate methods to be called. | 935 // delegate methods to be called. |
| 937 // TODO(shess): It would be nice to separate the Cocoa-specific code | 936 // TODO(shess): It would be nice to separate the Cocoa-specific code |
| 938 // from the Chrome-specific code. | 937 // from the Chrome-specific code. |
| 939 NSTextView* editor = static_cast<NSTextView*>([field_ currentEditor]); | 938 NSTextView* editor = static_cast<NSTextView*>([field_ currentEditor]); |
| 940 const NSRange selectedRange = GetSelectedRange(); | 939 const NSRange selectedRange = GetSelectedRange(); |
| 941 if ([editor shouldChangeTextInRange:selectedRange replacementString:s]) { | 940 if ([editor shouldChangeTextInRange:selectedRange replacementString:s]) { |
| 942 // If this paste will be replacing all the text, record that, so | 941 // Record this paste, so we can do different behavior. |
| 943 // we can do different behaviors in such a case. | 942 model_->on_paste(); |
| 944 if (IsSelectAll()) | |
| 945 model_->on_paste_replacing_all(); | |
| 946 | 943 |
| 947 // Force a Paste operation to trigger the text_changed code in | 944 // Force a Paste operation to trigger the text_changed code in |
| 948 // OnAfterPossibleChange(), even if identical contents are pasted | 945 // OnAfterPossibleChange(), even if identical contents are pasted |
| 949 // into the text box. | 946 // into the text box. |
| 950 text_before_change_.clear(); | 947 text_before_change_.clear(); |
| 951 | 948 |
| 952 [editor replaceCharactersInRange:selectedRange withString:s]; | 949 [editor replaceCharactersInRange:selectedRange withString:s]; |
| 953 [editor didChangeText]; | 950 [editor didChangeText]; |
| 954 } | 951 } |
| 955 } | 952 } |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1090 } | 1087 } |
| 1091 | 1088 |
| 1092 return std::wstring(); | 1089 return std::wstring(); |
| 1093 } | 1090 } |
| 1094 | 1091 |
| 1095 // static | 1092 // static |
| 1096 NSFont* AutocompleteEditViewMac::GetFieldFont() { | 1093 NSFont* AutocompleteEditViewMac::GetFieldFont() { |
| 1097 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 1094 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| 1098 return rb.GetFont(ResourceBundle::BaseFont).GetNativeFont(); | 1095 return rb.GetFont(ResourceBundle::BaseFont).GetNativeFont(); |
| 1099 } | 1096 } |
| OLD | NEW |