diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-25 16:58:53 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-25 16:58:53 +0000 |
commit | 6b1efe3b7fba6c62b020161bdc9eb9dd70fb3bb0 (patch) | |
tree | e71329badc4bf99ba3840435303ac6033dc91fbd /ui/base/keycodes | |
parent | 92da5d2733639e2bddaaf04233cc879799e31a38 (diff) | |
download | chromium_src-6b1efe3b7fba6c62b020161bdc9eb9dd70fb3bb0.zip chromium_src-6b1efe3b7fba6c62b020161bdc9eb9dd70fb3bb0.tar.gz chromium_src-6b1efe3b7fba6c62b020161bdc9eb9dd70fb3bb0.tar.bz2 |
aura: Fix shift/ctrl/alt keyevents with RWHVA and X11.
One of the functions didn't really do what it claimed it did. This ended up
causing problems where pressing just the shift key (or the ctrl or alt key)
would cause some garbage character to show up.
BUG=101440
TEST=manually
Review URL: http://codereview.chromium.org/8380033
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@107141 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/base/keycodes')
-rw-r--r-- | ui/base/keycodes/keyboard_code_conversion_gtk.cc | 7 | ||||
-rw-r--r-- | ui/base/keycodes/keyboard_code_conversion_x.cc | 12 | ||||
-rw-r--r-- | ui/base/keycodes/keyboard_code_conversion_x.h | 7 |
3 files changed, 18 insertions, 8 deletions
diff --git a/ui/base/keycodes/keyboard_code_conversion_gtk.cc b/ui/base/keycodes/keyboard_code_conversion_gtk.cc index 0eff5aa..7afed4b 100644 --- a/ui/base/keycodes/keyboard_code_conversion_gtk.cc +++ b/ui/base/keycodes/keyboard_code_conversion_gtk.cc @@ -39,11 +39,8 @@ #include <gdk/gdkkeysyms.h> #include "build/build_config.h" -#include "ui/base/keycodes/keyboard_codes_posix.h" - -#ifdef USE_X11 #include "ui/base/keycodes/keyboard_code_conversion_x.h" -#endif +#include "ui/base/keycodes/keyboard_codes_posix.h" namespace ui { @@ -637,14 +634,12 @@ int GdkNativeKeyCodeForWindowsKeyCode(KeyboardCode keycode, bool shift) { KeyboardCode KeyboardCodeFromGdkEventKey(GdkEventKey* event) { KeyboardCode keycode = WindowsKeyCodeForGdkKeyCode(event->keyval); -#ifdef USE_X11 // Gtk's key values are same as X11's keysyms. if (keycode == VKEY_UNKNOWN) { unsigned int keyval = DefaultXKeysymFromHardwareKeycode(event->hardware_keycode); keycode = WindowsKeyCodeForGdkKeyCode(keyval); } -#endif return keycode; } diff --git a/ui/base/keycodes/keyboard_code_conversion_x.cc b/ui/base/keycodes/keyboard_code_conversion_x.cc index 4235fca..494caff 100644 --- a/ui/base/keycodes/keyboard_code_conversion_x.cc +++ b/ui/base/keycodes/keyboard_code_conversion_x.cc @@ -6,9 +6,11 @@ #include <X11/keysym.h> #include <X11/Xlib.h> +#include <X11/Xutil.h> #include "base/basictypes.h" #include "base/logging.h" +#include "base/utf_string_conversions.h" namespace ui { @@ -289,6 +291,16 @@ KeyboardCode KeyboardCodeFromXKeysym(unsigned int keysym) { return VKEY_UNKNOWN; } +unsigned int DefaultSymbolFromXEvent(XEvent* xev) { + char buf[6]; + int bytes_written = XLookupString(&xev->xkey, buf, 6, NULL, NULL); + DCHECK_LE(bytes_written, 6); + + string16 result; + return (bytes_written > 0 && UTF8ToUTF16(buf, bytes_written, &result) && + result.length() == 1) ? result[0] : 0; +} + unsigned int DefaultXKeysymFromHardwareKeycode(unsigned int hardware_code) { static const unsigned int kHardwareKeycodeMap[] = { 0, // 0x00: diff --git a/ui/base/keycodes/keyboard_code_conversion_x.h b/ui/base/keycodes/keyboard_code_conversion_x.h index 17eab24..e42e02f 100644 --- a/ui/base/keycodes/keyboard_code_conversion_x.h +++ b/ui/base/keycodes/keyboard_code_conversion_x.h @@ -16,8 +16,11 @@ UI_EXPORT KeyboardCode KeyboardCodeFromXKeyEvent(XEvent* xev); UI_EXPORT KeyboardCode KeyboardCodeFromXKeysym(unsigned int keysym); -// Converts a hardware keycode into a key symbol on a standard US PC keyboard. -UI_EXPORT unsigned int DefaultXKeysymFromHardwareKeycode(unsigned int keycode); +// Returns a key symbol on a standard US PC keyboard from an XEvent. +UI_EXPORT unsigned int DefaultSymbolFromXEvent(XEvent* xev); + +// Converts an X keycode into an X KeySym. +unsigned int DefaultXKeysymFromHardwareKeycode(unsigned int keycode); } // namespace ui |