| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "views/ime/input_method_ibus.h" | 5 #include "views/ime/input_method_ibus.h" |
| 6 | 6 |
| 7 #include <ibus.h> | 7 #include <ibus.h> |
| 8 | 8 |
| 9 #include <cstring> | 9 #include <cstring> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 (flags & ui::EF_LEFT_BUTTON_DOWN ? IBUS_BUTTON1_MASK : 0) | | 55 (flags & ui::EF_LEFT_BUTTON_DOWN ? IBUS_BUTTON1_MASK : 0) | |
| 56 (flags & ui::EF_MIDDLE_BUTTON_DOWN ? IBUS_BUTTON2_MASK : 0) | | 56 (flags & ui::EF_MIDDLE_BUTTON_DOWN ? IBUS_BUTTON2_MASK : 0) | |
| 57 (flags & ui::EF_RIGHT_BUTTON_DOWN ? IBUS_BUTTON3_MASK : 0); | 57 (flags & ui::EF_RIGHT_BUTTON_DOWN ? IBUS_BUTTON3_MASK : 0); |
| 58 } | 58 } |
| 59 | 59 |
| 60 void IBusKeyEventFromViewsKeyEvent(const views::KeyEvent& key, | 60 void IBusKeyEventFromViewsKeyEvent(const views::KeyEvent& key, |
| 61 guint32* ibus_keyval, | 61 guint32* ibus_keyval, |
| 62 guint32* ibus_keycode, | 62 guint32* ibus_keycode, |
| 63 guint32* ibus_state) { | 63 guint32* ibus_state) { |
| 64 #if defined(TOUCH_UI) | 64 #if defined(TOUCH_UI) |
| 65 if (key.native_event_2()) { | 65 if (key.native_event()) { |
| 66 XKeyEvent* x_key = reinterpret_cast<XKeyEvent*>(key.native_event_2()); | 66 XKeyEvent* x_key = reinterpret_cast<XKeyEvent*>(key.native_event()); |
| 67 // Yes, ibus uses X11 keysym. We cannot use XLookupKeysym(), which doesn't | 67 // Yes, ibus uses X11 keysym. We cannot use XLookupKeysym(), which doesn't |
| 68 // translate Shift and CapsLock states. | 68 // translate Shift and CapsLock states. |
| 69 KeySym keysym = NoSymbol; | 69 KeySym keysym = NoSymbol; |
| 70 ::XLookupString(x_key, NULL, 0, &keysym, NULL); | 70 ::XLookupString(x_key, NULL, 0, &keysym, NULL); |
| 71 *ibus_keyval = keysym; | 71 *ibus_keyval = keysym; |
| 72 *ibus_keycode = x_key->keycode; | 72 *ibus_keycode = x_key->keycode; |
| 73 } | 73 } |
| 74 #elif defined(TOOLKIT_USES_GTK) | 74 #elif defined(TOOLKIT_USES_GTK) |
| 75 if (key.native_event()) { | 75 if (key.gdk_event()) { |
| 76 GdkEventKey* gdk_key = reinterpret_cast<GdkEventKey*>(key.native_event()); | 76 GdkEventKey* gdk_key = reinterpret_cast<GdkEventKey*>(key.gdk_event()); |
| 77 *ibus_keyval = gdk_key->keyval; | 77 *ibus_keyval = gdk_key->keyval; |
| 78 *ibus_keycode = gdk_key->hardware_keycode; | 78 *ibus_keycode = gdk_key->hardware_keycode; |
| 79 } | 79 } |
| 80 #endif | 80 #endif |
| 81 else { | 81 else { |
| 82 // GdkKeyCodeForWindowsKeyCode() is actually nothing to do with Gtk, we | 82 // GdkKeyCodeForWindowsKeyCode() is actually nothing to do with Gtk, we |
| 83 // probably want to rename it to something like XKeySymForWindowsKeyCode(), | 83 // probably want to rename it to something like XKeySymForWindowsKeyCode(), |
| 84 // because Gtk keyval is actually same as X KeySym. | 84 // because Gtk keyval is actually same as X KeySym. |
| 85 *ibus_keyval = ui::GdkKeyCodeForWindowsKeyCode( | 85 *ibus_keyval = ui::GdkKeyCodeForWindowsKeyCode( |
| 86 key.key_code(), key.IsShiftDown() ^ key.IsCapsLockDown()); | 86 key.key_code(), key.IsShiftDown() ^ key.IsCapsLockDown()); |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 : input_method_(input_method), | 216 : input_method_(input_method), |
| 217 type_(key.type()), | 217 type_(key.type()), |
| 218 flags_(key.flags()), | 218 flags_(key.flags()), |
| 219 key_code_(key.key_code()), | 219 key_code_(key.key_code()), |
| 220 character_(key.GetCharacter()), | 220 character_(key.GetCharacter()), |
| 221 unmodified_character_(key.GetUnmodifiedCharacter()), | 221 unmodified_character_(key.GetUnmodifiedCharacter()), |
| 222 ibus_keyval_(ibus_keyval) { | 222 ibus_keyval_(ibus_keyval) { |
| 223 DCHECK(input_method_); | 223 DCHECK(input_method_); |
| 224 | 224 |
| 225 #if defined(TOUCH_UI) | 225 #if defined(TOUCH_UI) |
| 226 if (key.native_event_2()) | 226 if (key.native_event()) |
| 227 x_event_ = *reinterpret_cast<XKeyEvent*>(key.native_event_2()); | 227 x_event_ = *reinterpret_cast<XKeyEvent*>(key.native_event()); |
| 228 else | 228 else |
| 229 memset(&x_event_, 0, sizeof(x_event_)); | 229 memset(&x_event_, 0, sizeof(x_event_)); |
| 230 #endif | 230 #endif |
| 231 } | 231 } |
| 232 | 232 |
| 233 InputMethodIBus::PendingKeyEvent::~PendingKeyEvent() { | 233 InputMethodIBus::PendingKeyEvent::~PendingKeyEvent() { |
| 234 if (input_method_) | 234 if (input_method_) |
| 235 input_method_->FinishPendingKeyEvent(this); | 235 input_method_->FinishPendingKeyEvent(this); |
| 236 } | 236 } |
| 237 | 237 |
| 238 void InputMethodIBus::PendingKeyEvent::ProcessPostIME(bool handled) { | 238 void InputMethodIBus::PendingKeyEvent::ProcessPostIME(bool handled) { |
| 239 if (!input_method_) | 239 if (!input_method_) |
| 240 return; | 240 return; |
| 241 | 241 |
| 242 #if defined(TOUCH_UI) | 242 #if defined(TOUCH_UI) |
| 243 if (x_event_.type == KeyPress || x_event_.type == KeyRelease) { | 243 if (x_event_.type == KeyPress || x_event_.type == KeyRelease) { |
| 244 Event::FromNativeEvent2 from_native; | 244 KeyEvent key(reinterpret_cast<XEvent*>(&x_event_)); |
| 245 KeyEvent key(reinterpret_cast<XEvent*>(&x_event_), from_native); | |
| 246 input_method_->ProcessKeyEventPostIME(key, ibus_keyval_, handled); | 245 input_method_->ProcessKeyEventPostIME(key, ibus_keyval_, handled); |
| 247 return; | 246 return; |
| 248 } | 247 } |
| 249 #endif | 248 #endif |
| 250 KeyEvent key(type_, key_code_, flags_); | 249 KeyEvent key(type_, key_code_, flags_); |
| 251 if (key_code_ == ui::VKEY_UNKNOWN) { | 250 if (key_code_ == ui::VKEY_UNKNOWN) { |
| 252 key.set_character(character_); | 251 key.set_character(character_); |
| 253 key.set_unmodified_character(unmodified_character_); | 252 key.set_unmodified_character(unmodified_character_); |
| 254 } | 253 } |
| 255 input_method_->ProcessKeyEventPostIME(key, ibus_keyval_, handled); | 254 input_method_->ProcessKeyEventPostIME(key, ibus_keyval_, handled); |
| (...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1012 DCHECK_EQ(GetIBus(), bus); | 1011 DCHECK_EQ(GetIBus(), bus); |
| 1013 DCHECK(data); | 1012 DCHECK(data); |
| 1014 IBusInputContext* ic = | 1013 IBusInputContext* ic = |
| 1015 ibus_bus_create_input_context_async_finish(bus, res, NULL); | 1014 ibus_bus_create_input_context_async_finish(bus, res, NULL); |
| 1016 if (ic) | 1015 if (ic) |
| 1017 data->StoreOrAbandonInputContext(ic); | 1016 data->StoreOrAbandonInputContext(ic); |
| 1018 delete data; | 1017 delete data; |
| 1019 } | 1018 } |
| 1020 | 1019 |
| 1021 } // namespace views | 1020 } // namespace views |
| OLD | NEW |