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 |