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

Unified Diff: chrome/browser/autocomplete/autocomplete_edit_view_win.cc

Issue 467015: Reverts my r4300.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years 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
« no previous file with comments | « chrome/browser/autocomplete/autocomplete_edit_view_win.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/autocomplete/autocomplete_edit_view_win.cc
===================================================================
--- chrome/browser/autocomplete/autocomplete_edit_view_win.cc (revision 33947)
+++ chrome/browser/autocomplete/autocomplete_edit_view_win.cc (working copy)
@@ -617,26 +617,6 @@
void AutocompleteEditViewWin::SetWindowTextAndCaretPos(const std::wstring& text,
size_t caret_pos) {
- HIMC imm_context = ImmGetContext(m_hWnd);
- if (imm_context) {
- // In Windows Vista, SetWindowText() automatically cancels any ongoing
- // IME composition, and updates the text of the underlying edit control.
- // In Windows XP, however, SetWindowText() gets applied to the IME
- // composition string if it exists, and doesn't update the underlying edit
- // control. To avoid this, we force the IME to cancel any outstanding
- // compositions here. This is harmless in Vista and in cases where the IME
- // isn't composing.
-
- // NOTE: We MUST ignore messages like WM_IME_COMPOSITION that may be sent as
- // a result of doing this. Until the SetWindowText() call below, the
- // underlying edit (on XP) has out-of-date text in it; for problems this can
- // cause, see OnImeComposition().
- ignore_ime_messages_ = true;
- ImmNotifyIME(imm_context, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
- ImmReleaseContext(m_hWnd, imm_context);
- ignore_ime_messages_ = false;
- }
-
SetWindowText(text.c_str());
PlaceCaretAt(caret_pos);
}
@@ -803,9 +783,6 @@
return false;
ScopedFreeze freeze(this, GetTextObjectModel());
- // NOTE: We don't need the IME composition hack in SetWindowTextAndCaretPos()
- // here, because UpdatePopup() disables inline autocomplete when a
- // composition is in progress, thus preventing us from reaching this code.
SetWindowText(display_text.c_str());
// Set a reversed selection to keep the caret in the same position, which
// avoids scrolling the user's text.
@@ -1718,6 +1695,20 @@
SetMsgHandled(false);
}
+LRESULT AutocompleteEditViewWin::OnSetText(const wchar_t* text) {
+ // Ignore all IME messages while we process this WM_SETTEXT message.
+ // When SetWindowText() is called while an IME is composing text, the IME
+ // calls SendMessage() to send a WM_IME_COMPOSITION message. When we receive
+ // this WM_IME_COMPOSITION message, we update the omnibox and may call
+ // SetWindowText() again. To stop this recursive message-handler call, we
+ // stop updating the omnibox while we process a WM_SETTEXT message.
+ // We wouldn't need to do this update anyway, because either we're in the
+ // middle of updating the omnibox already or the caller of SetWindowText()
+ // is going to update the omnibox next.
+ AutoReset auto_reset_ignore_ime_messages(&ignore_ime_messages_, true);
+ return DefWindowProc(WM_SETTEXT, 0, reinterpret_cast<LPARAM>(text));
+}
+
void AutocompleteEditViewWin::OnSysChar(TCHAR ch,
UINT repeat_count,
UINT flags) {
« no previous file with comments | « chrome/browser/autocomplete/autocomplete_edit_view_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698