summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/render_widget.cc
diff options
context:
space:
mode:
authorhbono@chromium.org <hbono@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-17 08:36:34 +0000
committerhbono@chromium.org <hbono@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-17 08:36:34 +0000
commit9f23f59692cd588105bf8813b122e4e5aaa702d1 (patch)
tree3a86a655cbadaac641a0b47d690b558e49eb9a98 /chrome/renderer/render_widget.cc
parent01ba8f51513c615c2d54ed3ea8f26d9d8872af59 (diff)
downloadchromium_src-9f23f59692cd588105bf8813b122e4e5aaa702d1.zip
chromium_src-9f23f59692cd588105bf8813b122e4e5aaa702d1.tar.gz
chromium_src-9f23f59692cd588105bf8813b122e4e5aaa702d1.tar.bz2
A workaround fix for Issue 343 "Chinese Sogou input method lose first initial letter".
This issue is caused by our IME code that does not filter out focus events raised by an IME function of WebKit, WebCore::Editor::setComposition(). Its details are listed below: 1. WebKit sometimes creates a WebCore::EditingText instance and moves the input focus to the instance while updating a composition string in the Editor::setComposition() function; 2. Our IME code automatically finishes the ongoing composition everytime when WebKit moves the input focus to the WebCore::EditingText instance. As a wordaround for this issue, this change ignores focus events while a renderer process updates a composition string with the Editor::setComposition() function. Review URL: http://codereview.chromium.org/10827 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@5556 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/render_widget.cc')
-rw-r--r--chrome/renderer/render_widget.cc8
1 files changed, 7 insertions, 1 deletions
diff --git a/chrome/renderer/render_widget.cc b/chrome/renderer/render_widget.cc
index 7f0f7ca..4c00b27 100644
--- a/chrome/renderer/render_widget.cc
+++ b/chrome/renderer/render_widget.cc
@@ -90,6 +90,7 @@ RenderWidget::RenderWidget(RenderThreadBase* render_thread,
ime_control_y_(-1),
ime_control_new_state_(false),
ime_control_updated_(false),
+ ime_control_busy_(false),
focus_on_show_(focus_on_show) {
RenderProcess::AddRefProcess();
DCHECK(render_thread_);
@@ -668,9 +669,11 @@ void RenderWidget::OnImeSetComposition(int string_type,
int target_start, int target_end,
const std::wstring& ime_string) {
if (webwidget_) {
+ ime_control_busy_ = true;
webwidget_->ImeSetComposition(string_type, cursor_position,
target_start, target_end,
ime_string);
+ ime_control_busy_ = false;
}
}
@@ -705,7 +708,10 @@ void RenderWidget::UpdateIME() {
ime_control_updated_ = true;
ime_control_new_state_ = false;
}
- ime_control_new_state_ = enable_ime;
+ if (ime_control_new_state_ != enable_ime) {
+ ime_control_updated_ = true;
+ ime_control_new_state_ = enable_ime;
+ }
if (ime_control_updated_) {
// The input focus has been changed.
// Compare the current state with the updated state and choose actions.