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

Unified Diff: chrome/browser/renderer_host/gtk_im_context_wrapper.cc

Issue 5787004: [Linux] Workaround issue 45478: IME dysfunctional after BACKSPACE (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 10 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/renderer_host/gtk_im_context_wrapper.cc
diff --git a/chrome/browser/renderer_host/gtk_im_context_wrapper.cc b/chrome/browser/renderer_host/gtk_im_context_wrapper.cc
index 25ec4f0b7990af3fe12f07fdf39e31b185e471ba..78f0bf2bc43448d28ab4842588d9ff707e181eea 100644
--- a/chrome/browser/renderer_host/gtk_im_context_wrapper.cc
+++ b/chrome/browser/renderer_host/gtk_im_context_wrapper.cc
@@ -28,6 +28,22 @@
#include "grit/generated_resources.h"
#include "third_party/skia/include/core/SkColor.h"
+namespace {
+// Copied from third_party/WebKit/WebCore/page/EventHandler.cpp
+//
+// Match key code of composition keydown event on windows.
+// IE sends VK_PROCESSKEY which has value 229;
+//
+// Please refer to following documents for detals:
+// - Virtual-Key Codes
+// http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx
+// - How the IME System Works
+// http://msdn.microsoft.com/en-us/library/cc194848.aspx
+// - ImmGetVirtualKey Function
+// http://msdn.microsoft.com/en-us/library/dd318570(VS.85).aspx
+const int kCompositionEventKeyCode = 229;
+} // namespace
+
GtkIMContextWrapper::GtkIMContextWrapper(RenderWidgetHostViewGtk* host_view)
: host_view_(host_view),
context_(gtk_im_multicontext_new()),
@@ -317,20 +333,6 @@ bool GtkIMContextWrapper::NeedCommitByForwardingCharEvent() {
void GtkIMContextWrapper::ProcessFilteredKeyPressEvent(
NativeWebKeyboardEvent* wke) {
- // Copied from third_party/WebKit/WebCore/page/EventHandler.cpp
- //
- // Match key code of composition keydown event on windows.
- // IE sends VK_PROCESSKEY which has value 229;
- //
- // Please refer to following documents for detals:
- // - Virtual-Key Codes
- // http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx
- // - How the IME System Works
- // http://msdn.microsoft.com/en-us/library/cc194848.aspx
- // - ImmGetVirtualKey Function
- // http://msdn.microsoft.com/en-us/library/dd318570(VS.85).aspx
- const int kCompositionEventKeyCode = 229;
-
// If IME has filtered this event, then replace virtual key code with
// VK_PROCESSKEY. See comment in ProcessKeyEvent() for details.
// It's only required for keydown events.
@@ -450,8 +452,19 @@ void GtkIMContextWrapper::HandleCommit(const string16& text) {
// It's possible that commit signal is fired without a key event, for
// example when user input via a voice or handwriting recognition software.
// In this case, the text must be committed directly.
- if (!is_in_key_event_handler_ && host_view_->GetRenderWidgetHost())
+ if (!is_in_key_event_handler_ && host_view_->GetRenderWidgetHost()) {
+ // Workaround http://crbug.com/45478 by sending fake key down/up events.
+ NativeWebKeyboardEvent fake_event;
+ fake_event.windowsKeyCode = kCompositionEventKeyCode;
+ fake_event.skip_in_browser = true;
+ fake_event.type = WebKit::WebInputEvent::RawKeyDown;
+ host_view_->ForwardKeyboardEvent(fake_event);
+
host_view_->GetRenderWidgetHost()->ImeConfirmComposition(text);
+
+ fake_event.type = WebKit::WebInputEvent::KeyUp;
+ host_view_->ForwardKeyboardEvent(fake_event);
+ }
}
void GtkIMContextWrapper::HandlePreeditStart() {
@@ -490,9 +503,19 @@ void GtkIMContextWrapper::HandlePreeditChanged(const gchar* text,
// Otherwise, we need send it here if it's been changed.
if (!is_in_key_event_handler_ && is_composing_text_ &&
host_view_->GetRenderWidgetHost()) {
+ // Workaround http://crbug.com/45478 by sending fake key down/up events.
+ NativeWebKeyboardEvent fake_event;
+ fake_event.windowsKeyCode = kCompositionEventKeyCode;
+ fake_event.skip_in_browser = true;
+ fake_event.type = WebKit::WebInputEvent::RawKeyDown;
+ host_view_->ForwardKeyboardEvent(fake_event);
Evan Martin 2010/12/13 22:46:00 Since this occurs twice, maybe this could be refac
+
host_view_->GetRenderWidgetHost()->ImeSetComposition(
preedit_text_, preedit_underlines_, preedit_selection_start_,
preedit_selection_end_);
+
+ fake_event.type = WebKit::WebInputEvent::KeyUp;
+ host_view_->ForwardKeyboardEvent(fake_event);
}
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698