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

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: Address comments 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
« no previous file with comments | « chrome/browser/ui/views/omnibox/omnibox_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/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..1e02470091f9956b3eeaf1dd53b6b87d5f7d4f3b 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_autocompletion =
+ (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 (Cicero
+ // Unaware Application Support) translates it into an IMM32 protocol message
+ // like WM_IME_COMPOSITION. As a result, autocompleted text will not be
+ // updated as expected. To workaround this issue, temporary disable
+ // autocompletion 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;
Yohei Yukawa 2012/10/11 01:02:10 AutoReset<bool> auto_reset_in_on_ime_composition(&
Seigo Nonaka 2012/10/11 02:11:33 Done.
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;
}
« no previous file with comments | « chrome/browser/ui/views/omnibox/omnibox_view_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698