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

Unified Diff: chrome/browser/ui/views/omnibox/omnibox_view_win.cc

Issue 11093044: Fix omnibox suggestion: restore selection on WM_IME_ENDCOMPOSITION (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 2 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/ui/views/omnibox/omnibox_view_win.cc
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_win.cc b/chrome/browser/ui/views/omnibox/omnibox_view_win.cc
index ca7e4c575737eca669711b7c6a025afbb7c9694d..2659c136fd7fa8c655770d00a0d9e4311841ec00 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_view_win.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_win.cc
@@ -477,7 +477,8 @@ OmniboxViewWin::OmniboxViewWin(OmniboxEditController* controller,
chrome::search::IsInstantExtendedAPIEnabled(parent_view_->profile()),
ToolbarModel::NONE, LocationBarView::BACKGROUND))),
security_level_(ToolbarModel::NONE),
- text_object_model_(NULL) {
+ text_object_model_(NULL),
+ in_on_ime_composition_(false) {
if (!loaded_library_module_)
loaded_library_module_ = LoadLibrary(kRichEditDLLName);
@@ -751,8 +752,22 @@ void OmniboxViewWin::UpdatePopup() {
// * The user is trying to compose something in an IME
CHARRANGE sel;
GetSel(sel);
+ bool prevent_inline_auto_completion =
falken 2012/10/10 09:51:33 nit: I think this can just be prevent_inline_autoc
Seigo Nonaka 2012/10/10 10:18:22 Done.
+ (sel.cpMax < GetTextLength()) || IsImeComposing();
+
+ // SetSel doesn't work when the TSF based text input modules such as CJK
+ // on-screen keyboards on Windows 8 insert a character and then CUAS
falken 2012/10/10 09:51:33 I think the CUAS acronym isn't widely known. Consi
Seigo Nonaka 2012/10/10 10:18:22 Done.
+ // translates it into IMM32 protocol like WM_IME_COMPOSITION. As a result,
falken 2012/10/10 09:51:33 "into an IMM32 protocol message"
Seigo Nonaka 2012/10/10 10:18:22 Done.
+ // auto-completed text will not be updated as expected. To workaround this
+ // issue, temporary disable auto-completion during WM_IME_COMPOSITION iff
+ // Windows 8.
+ // TODO(nona): Re-enable auto-completion for Korean, where this issue is not
+ // reproducible for some reasons.
+ // TODO(nona): Remove this workaround after fixing crbug.com/154379.
+ if (base::win::GetVersion() >= base::win::VERSION_WIN8)
+ prevent_inline_auto_completion |= in_on_ime_composition_;
model()->StartAutocomplete(sel.cpMax != sel.cpMin,
- (sel.cpMax < GetTextLength()) || IsImeComposing());
+ prevent_inline_auto_completion);
}
void OmniboxViewWin::SetFocus() {
@@ -1408,6 +1423,7 @@ LRESULT OmniboxViewWin::OnImeComposition(UINT message,
return DefWindowProc(message, wparam, lparam);
}
+ in_on_ime_composition_ = true;
ScopedFreeze freeze(this, GetTextObjectModel());
OnBeforePossibleChange();
LRESULT result = DefWindowProc(message, wparam, lparam);
@@ -1415,6 +1431,7 @@ LRESULT OmniboxViewWin::OnImeComposition(UINT message,
// code in OnAfterPossibleChange(), even if identical contents are confirmed,
// to make sure the model can update its internal states correctly.
OnAfterPossibleChangeInternal((lparam & GCS_RESULTSTR) != 0);
+ in_on_ime_composition_ = false;
return result;
}

Powered by Google App Engine
This is Rietveld 408576698