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

Side by Side Diff: chrome/browser/autocomplete/autocomplete_edit_view_win.cc

Issue 6252003: Accept keyword by pressing space. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix a bug on Windows when using an IME. 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_win.h" 5 #include "chrome/browser/autocomplete/autocomplete_edit_view_win.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <locale> 8 #include <locale>
9 #include <string> 9 #include <string>
10 10
(...skipping 843 matching lines...) Expand 10 before | Expand all | Expand 10 after
854 CHARRANGE new_sel; 854 CHARRANGE new_sel;
855 GetSelection(new_sel); 855 GetSelection(new_sel);
856 const int length = GetTextLength(); 856 const int length = GetTextLength();
857 if ((new_sel.cpMin > length) || (new_sel.cpMax > length)) { 857 if ((new_sel.cpMin > length) || (new_sel.cpMax > length)) {
858 if (new_sel.cpMin > length) 858 if (new_sel.cpMin > length)
859 new_sel.cpMin = length; 859 new_sel.cpMin = length;
860 if (new_sel.cpMax > length) 860 if (new_sel.cpMax > length)
861 new_sel.cpMax = length; 861 new_sel.cpMax = length;
862 SetSelectionRange(new_sel); 862 SetSelectionRange(new_sel);
863 } 863 }
864 const bool selection_differs = (new_sel.cpMin != sel_before_change_.cpMin) || 864 const bool selection_differs =
865 (new_sel.cpMax != sel_before_change_.cpMax); 865 ((new_sel.cpMin != new_sel.cpMax) ||
Peter Kasting 2011/01/20 00:04:22 Nit: I suggest using a similar addition to this in
James Su 2011/01/20 06:49:31 Done.
866 (sel_before_change_.cpMin != sel_before_change_.cpMax)) &&
867 ((new_sel.cpMin != sel_before_change_.cpMin) ||
868 (new_sel.cpMax != sel_before_change_.cpMax));
866 const bool at_end_of_edit = 869 const bool at_end_of_edit =
867 (new_sel.cpMin == length) && (new_sel.cpMax == length); 870 (new_sel.cpMin == length) && (new_sel.cpMax == length);
868 871
869 // See if the text or selection have changed since OnBeforePossibleChange(). 872 // See if the text or selection have changed since OnBeforePossibleChange().
870 const std::wstring new_text(GetText()); 873 const std::wstring new_text(GetText());
871 const bool text_differs = (new_text != text_before_change_) || 874 const bool text_differs = (new_text != text_before_change_) ||
872 force_text_changed; 875 force_text_changed;
873 876
874 // When the user has deleted text, we don't allow inline autocomplete. Make 877 // When the user has deleted text, we don't allow inline autocomplete. Make
875 // sure to not flag cases like selecting part of the text and then pasting 878 // sure to not flag cases like selecting part of the text and then pasting
(...skipping 809 matching lines...) Expand 10 before | Expand all | Expand 10 after
1685 memory_dc.SelectBitmap(old_bitmap); 1688 memory_dc.SelectBitmap(old_bitmap);
1686 edit_hwnd = old_edit_hwnd; 1689 edit_hwnd = old_edit_hwnd;
1687 } 1690 }
1688 1691
1689 void AutocompleteEditViewWin::OnPaste() { 1692 void AutocompleteEditViewWin::OnPaste() {
1690 // Replace the selection if we have something to paste. 1693 // Replace the selection if we have something to paste.
1691 const std::wstring text(GetClipboardText()); 1694 const std::wstring text(GetClipboardText());
1692 if (!text.empty()) { 1695 if (!text.empty()) {
1693 // If this paste will be replacing all the text, record that, so we can do 1696 // If this paste will be replacing all the text, record that, so we can do
1694 // different behaviors in such a case. 1697 // different behaviors in such a case.
1695 if (IsSelectAll()) 1698 model_->OnPaste(IsSelectAll());
1696 model_->on_paste_replacing_all();
1697 // Force a Paste operation to trigger the text_changed code in 1699 // Force a Paste operation to trigger the text_changed code in
1698 // OnAfterPossibleChange(), even if identical contents are pasted into the 1700 // OnAfterPossibleChange(), even if identical contents are pasted into the
1699 // text box. 1701 // text box.
1700 text_before_change_.clear(); 1702 text_before_change_.clear();
1701 ReplaceSel(text.c_str(), true); 1703 ReplaceSel(text.c_str(), true);
1702 } 1704 }
1703 } 1705 }
1704 1706
1705 void AutocompleteEditViewWin::OnRButtonDblClk(UINT /*keys*/, 1707 void AutocompleteEditViewWin::OnRButtonDblClk(UINT /*keys*/,
1706 const CPoint& /*point*/) { 1708 const CPoint& /*point*/) {
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
1965 } 1967 }
1966 1968
1967 // We're showing a keyword and the user pressed backspace at the beginning 1969 // We're showing a keyword and the user pressed backspace at the beginning
1968 // of the text. Delete the selected keyword. 1970 // of the text. Delete the selected keyword.
1969 ScopedFreeze freeze(this, GetTextObjectModel()); 1971 ScopedFreeze freeze(this, GetTextObjectModel());
1970 model_->ClearKeyword(GetText()); 1972 model_->ClearKeyword(GetText());
1971 return true; 1973 return true;
1972 } 1974 }
1973 1975
1974 case VK_TAB: { 1976 case VK_TAB: {
1975 if (model_->is_keyword_hint() && !model_->keyword().empty()) { 1977 if (model_->is_keyword_hint()) {
1976 // Accept the keyword. 1978 // Accept the keyword.
1977 ScopedFreeze freeze(this, GetTextObjectModel()); 1979 ScopedFreeze freeze(this, GetTextObjectModel());
1978 model_->AcceptKeyword(); 1980 model_->AcceptKeyword();
1979 } else { 1981 } else {
1980 controller_->OnCommitSuggestedText(GetText()); 1982 controller_->OnCommitSuggestedText(GetText());
1981 } 1983 }
1982 return true; 1984 return true;
1983 } 1985 }
1984 1986
1985 case 0xbb: // Ctrl-'='. Triggers subscripting (even in plain text mode). 1987 case 0xbb: // Ctrl-'='. Triggers subscripting (even in plain text mode).
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after
2560 } 2562 }
2561 2563
2562 int AutocompleteEditViewWin::WidthNeededToDisplay( 2564 int AutocompleteEditViewWin::WidthNeededToDisplay(
2563 const std::wstring& text) const { 2565 const std::wstring& text) const {
2564 // Use font_.GetStringWidth() instead of 2566 // Use font_.GetStringWidth() instead of
2565 // PosFromChar(location_entry_->GetTextLength()) because PosFromChar() is 2567 // PosFromChar(location_entry_->GetTextLength()) because PosFromChar() is
2566 // apparently buggy. In both LTR UI and RTL UI with left-to-right layout, 2568 // apparently buggy. In both LTR UI and RTL UI with left-to-right layout,
2567 // PosFromChar(i) might return 0 when i is greater than 1. 2569 // PosFromChar(i) might return 0 when i is greater than 1.
2568 return font_.GetStringWidth(text) + GetHorizontalMargin(); 2570 return font_.GetStringWidth(text) + GetHorizontalMargin();
2569 } 2571 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698