summaryrefslogtreecommitdiffstats
path: root/views
diff options
context:
space:
mode:
authoryusukes@google.com <yusukes@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-10 06:52:57 +0000
committeryusukes@google.com <yusukes@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-10 06:52:57 +0000
commit6b7f5d8c0b6103f62e9744d5f06e78d61d7f262f (patch)
tree82eb89d2487ccfdf1abef4e26fa73aa6fabd8b91 /views
parente4853d549ea66da96fb66aba834abcc665f27bed (diff)
downloadchromium_src-6b7f5d8c0b6103f62e9744d5f06e78d61d7f262f.zip
chromium_src-6b7f5d8c0b6103f62e9744d5f06e78d61d7f262f.tar.gz
chromium_src-6b7f5d8c0b6103f62e9744d5f06e78d61d7f262f.tar.bz2
Add Aura support to InputMethodIBus.
- Fix IBusKeyEventFromViewsKeyEvent() so the function could work fine when USE_AURA is defined. - Rename GdkKeyCodeForWindowsKeyCode() to XKeysymForWindowsKeyCode() since the function actually does not depend on Gtk/Gdk. XKeysymForWindowsKeyCode() is called in IBusKeyEventFromViewsKeyEvent() when USE_AURA is defined. - This CL is based on Peng's work at http://codereview.chromium.org/8423037. With this CL, we can use IME on Omnibox since NativeWidgetAura already has some preliminary IME support (http://codereview.chromium.org/8183011/) while RWHVA doesn't. BUG=chromium:97261 TEST=Build Chrome inside Chrome OS chroot with USE=aura, boot the OS, enable a CJK IME, and type something on Omnibox. Verify an IME preedit string appears. Review URL: http://codereview.chromium.org/8502010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@109385 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views')
-rw-r--r--views/ime/input_method_ibus.cc26
1 files changed, 15 insertions, 11 deletions
diff --git a/views/ime/input_method_ibus.cc b/views/ime/input_method_ibus.cc
index 505f14b..1eff716 100644
--- a/views/ime/input_method_ibus.cc
+++ b/views/ime/input_method_ibus.cc
@@ -22,12 +22,13 @@
#include "base/third_party/icu/icu_utf.h"
#include "base/utf_string_conversions.h"
#include "ui/base/keycodes/keyboard_codes.h"
-#include "ui/base/keycodes/keyboard_code_conversion_gtk.h"
#include "views/events/event.h"
#include "views/widget/widget.h"
-#if defined(TOUCH_UI)
+#if defined(USE_AURA) || defined(TOUCH_UI)
#include "ui/base/keycodes/keyboard_code_conversion_x.h"
+#elif defined(TOOLKIT_USES_GTK)
+#include "ui/base/keycodes/keyboard_code_conversion_gtk.h"
#endif
namespace {
@@ -61,7 +62,12 @@ void IBusKeyEventFromViewsKeyEvent(const views::KeyEvent& key,
guint32* ibus_keyval,
guint32* ibus_keycode,
guint32* ibus_state) {
-#if defined(TOUCH_UI)
+#if defined(USE_AURA)
+ // TODO(yusukes): Handle native_event()?
+ *ibus_keyval = ui::XKeysymForWindowsKeyCode(
+ key.key_code(), key.IsShiftDown() ^ key.IsCapsLockDown());
+ *ibus_keycode = 0;
+#elif defined(TOUCH_UI)
if (key.native_event()) {
XKeyEvent* x_key = reinterpret_cast<XKeyEvent*>(key.native_event());
// Yes, ibus uses X11 keysym. We cannot use XLookupKeysym(), which doesn't
@@ -70,19 +76,17 @@ void IBusKeyEventFromViewsKeyEvent(const views::KeyEvent& key,
::XLookupString(x_key, NULL, 0, &keysym, NULL);
*ibus_keyval = keysym;
*ibus_keycode = x_key->keycode;
+ } else {
+ *ibus_keyval = ui::XKeysymForWindowsKeyCode(
+ key.key_code(), key.IsShiftDown() ^ key.IsCapsLockDown());
+ *ibus_keycode = 0;
}
#elif defined(TOOLKIT_USES_GTK)
if (key.gdk_event()) {
GdkEventKey* gdk_key = reinterpret_cast<GdkEventKey*>(key.gdk_event());
*ibus_keyval = gdk_key->keyval;
*ibus_keycode = gdk_key->hardware_keycode;
- }
-#endif
-#if defined(TOUCH_UI) || defined(TOOLKIT_USES_GTK)
- else {
- // GdkKeyCodeForWindowsKeyCode() is actually nothing to do with Gtk, we
- // probably want to rename it to something like XKeySymForWindowsKeyCode(),
- // because Gtk keyval is actually same as X KeySym.
+ } else {
*ibus_keyval = ui::GdkKeyCodeForWindowsKeyCode(
key.key_code(), key.IsShiftDown() ^ key.IsCapsLockDown());
*ibus_keycode = 0;
@@ -853,7 +857,7 @@ void InputMethodIBus::OnForwardKeyEvent(IBusInputContext* context,
DCHECK_EQ(context_, context);
ui::KeyboardCode key_code = ui::VKEY_UNKNOWN;
-#if defined(TOUCH_UI)
+#if defined(USE_AURA) || defined(TOUCH_UI)
key_code = ui::KeyboardCodeFromXKeysym(keyval);
#elif defined(TOOLKIT_USES_GTK)
key_code = ui::WindowsKeyCodeForGdkKeyCode(keyval);