| Index: ui/base/ime/chromeos/character_composer.cc
|
| diff --git a/ui/base/ime/chromeos/character_composer.cc b/ui/base/ime/chromeos/character_composer.cc
|
| index 9155b739674d27e289a44d51bfd412118c268658..b7a8808e7d1b3ecda11cc0eda264ec6dbe718c8e 100644
|
| --- a/ui/base/ime/chromeos/character_composer.cc
|
| +++ b/ui/base/ime/chromeos/character_composer.cc
|
| @@ -4,9 +4,6 @@
|
|
|
| #include "ui/base/ime/chromeos/character_composer.h"
|
|
|
| -#include <X11/Xlib.h>
|
| -#include <X11/Xutil.h>
|
| -
|
| #include <algorithm>
|
| #include <iterator>
|
|
|
| @@ -15,10 +12,10 @@
|
| // Note for Gtk removal: gdkkeysyms.h only contains a set of
|
| // '#define GDK_KeyName 0xNNNN' macros and does not #include any Gtk headers.
|
| #include "third_party/gtk+/gdk/gdkkeysyms.h"
|
| +
|
| #include "ui/base/glib/glib_integers.h"
|
| #include "ui/events/event.h"
|
| -#include "ui/events/event_constants.h"
|
| -#include "ui/gfx/x/x11_types.h"
|
| +#include "ui/events/keycodes/keyboard_codes.h"
|
|
|
| // Note for Gtk removal: gtkimcontextsimpleseqs.h does not #include any Gtk
|
| // headers and only contains one big guint16 array |gtk_compose_seqs_compact|
|
| @@ -371,19 +368,6 @@ bool UTF32CharacterToUTF16(uint32 character, base::string16* output) {
|
| return true;
|
| }
|
|
|
| -// Converts a X keycode to a X keysym with no modifiers.
|
| -KeySym XKeyCodeToXKeySym(unsigned int keycode) {
|
| - XDisplay* display = gfx::GetXDisplay();
|
| - if (!display)
|
| - return NoSymbol;
|
| -
|
| - XKeyEvent x_key_event = {0};
|
| - x_key_event.type = KeyPress;
|
| - x_key_event.display = display;
|
| - x_key_event.keycode = keycode;
|
| - return ::XLookupKeysym(&x_key_event, 0);
|
| -}
|
| -
|
| // Returns an hexadecimal digit integer (0 to 15) corresponding to |keyval|.
|
| // -1 is returned when |keyval| cannot be a hexadecimal digit.
|
| int KeyvalToHexDigit(unsigned int keyval) {
|
| @@ -396,6 +380,16 @@ int KeyvalToHexDigit(unsigned int keyval) {
|
| return -1; // |keyval| cannot be a hexadecimal digit.
|
| }
|
|
|
| +// Returns an hexadecimal digit integer (0 to 15) corresponding to |keycode|.
|
| +// -1 is returned when |keycode| cannot be a hexadecimal digit.
|
| +int KeycodeToHexDigit(unsigned int keycode) {
|
| + if (ui::VKEY_0 <= keycode && keycode <= ui::VKEY_9)
|
| + return keycode - ui::VKEY_0;
|
| + if (ui::VKEY_A <= keycode && keycode <= ui::VKEY_F)
|
| + return keycode - ui::VKEY_A + 10;
|
| + return -1; // |keycode| cannot be a hexadecimal digit.
|
| +}
|
| +
|
| } // namespace
|
|
|
| namespace ui {
|
| @@ -412,16 +406,12 @@ void CharacterComposer::Reset() {
|
| }
|
|
|
| bool CharacterComposer::FilterKeyPress(const ui::KeyEvent& event) {
|
| - if (!event.HasNativeEvent() ||
|
| + uint32 keyval = event.platform_keycode();
|
| + if (!keyval ||
|
| (event.type() != ET_KEY_PRESSED && event.type() != ET_KEY_RELEASED))
|
| return false;
|
|
|
| - XEvent* xevent = event.native_event();
|
| - DCHECK(xevent);
|
| - KeySym keysym = NoSymbol;
|
| - ::XLookupString(&xevent->xkey, NULL, 0, &keysym, NULL);
|
| -
|
| - return FilterKeyPressInternal(keysym, xevent->xkey.keycode, event.flags());
|
| + return FilterKeyPressInternal(keyval, event.key_code(), event.flags());
|
| }
|
|
|
|
|
| @@ -507,7 +497,7 @@ bool CharacterComposer::FilterKeyPressHexMode(unsigned int keyval,
|
| // have intended to type '3'. So, if a hexadecimal character was not found,
|
| // suppose a user is holding shift key (and possibly control key, too) and
|
| // try a character with modifier keys removed.
|
| - hex_digit = KeyvalToHexDigit(XKeyCodeToXKeySym(keycode));
|
| + hex_digit = KeycodeToHexDigit(keycode);
|
| }
|
|
|
| if (keyval == GDK_KEY_Escape) {
|
|
|