Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1029)

Unified Diff: ui/base/keycodes/keyboard_code_conversion_x.cc

Issue 6674052: [cros] Fix accelerator keys when using non-US/Latin keyboard layouts. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/base/keycodes/keyboard_code_conversion_x.h ('k') | views/events/event_gtk.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/keycodes/keyboard_code_conversion_x.cc
diff --git a/ui/base/keycodes/keyboard_code_conversion_x.cc b/ui/base/keycodes/keyboard_code_conversion_x.cc
index 47ce8302dcdfd287e02b1746f2c7874042d59768..4235fca327cbfef0ca8de8c7fdd9aef219b9ffe0 100644
--- a/ui/base/keycodes/keyboard_code_conversion_x.cc
+++ b/ui/base/keycodes/keyboard_code_conversion_x.cc
@@ -7,6 +7,7 @@
#include <X11/keysym.h>
#include <X11/Xlib.h>
+#include "base/basictypes.h"
#include "base/logging.h"
namespace ui {
@@ -15,6 +16,16 @@ namespace ui {
KeyboardCode KeyboardCodeFromXKeyEvent(XEvent* xev) {
KeySym keysym = XLookupKeysym(&xev->xkey, 0);
+ KeyboardCode keycode = KeyboardCodeFromXKeysym(keysym);
+ if (keycode == VKEY_UNKNOWN) {
+ keysym = DefaultXKeysymFromHardwareKeycode(xev->xkey.keycode);
+ keycode = KeyboardCodeFromXKeysym(keysym);
+ }
+
+ return keycode;
+}
+
+KeyboardCode KeyboardCodeFromXKeysym(unsigned int keysym) {
// Consult GDK key translation (in WindowsKeyCodeForGdkKeyCode) for details
// about the following translations.
@@ -278,4 +289,91 @@ KeyboardCode KeyboardCodeFromXKeyEvent(XEvent* xev) {
return VKEY_UNKNOWN;
}
+unsigned int DefaultXKeysymFromHardwareKeycode(unsigned int hardware_code) {
+ static const unsigned int kHardwareKeycodeMap[] = {
+ 0, // 0x00:
+ 0, // 0x01:
+ 0, // 0x02:
+ 0, // 0x03:
+ 0, // 0x04:
+ 0, // 0x05:
+ 0, // 0x06:
+ 0, // 0x07:
+ 0, // 0x08:
+ XK_Escape, // 0x09: XK_Escape
+ XK_1, // 0x0A: XK_1
+ XK_2, // 0x0B: XK_2
+ XK_3, // 0x0C: XK_3
+ XK_4, // 0x0D: XK_4
+ XK_5, // 0x0E: XK_5
+ XK_6, // 0x0F: XK_6
+ XK_7, // 0x10: XK_7
+ XK_8, // 0x11: XK_8
+ XK_9, // 0x12: XK_9
+ XK_0, // 0x13: XK_0
+ XK_minus, // 0x14: XK_minus
+ XK_equal, // 0x15: XK_equal
+ XK_BackSpace, // 0x16: XK_BackSpace
+ XK_Tab, // 0x17: XK_Tab
+ XK_q, // 0x18: XK_q
+ XK_w, // 0x19: XK_w
+ XK_e, // 0x1A: XK_e
+ XK_r, // 0x1B: XK_r
+ XK_t, // 0x1C: XK_t
+ XK_y, // 0x1D: XK_y
+ XK_u, // 0x1E: XK_u
+ XK_i, // 0x1F: XK_i
+ XK_o, // 0x20: XK_o
+ XK_p, // 0x21: XK_p
+ XK_bracketleft, // 0x22: XK_bracketleft
+ XK_bracketright, // 0x23: XK_bracketright
+ XK_Return, // 0x24: XK_Return
+ XK_Control_L, // 0x25: XK_Control_L
+ XK_a, // 0x26: XK_a
+ XK_s, // 0x27: XK_s
+ XK_d, // 0x28: XK_d
+ XK_f, // 0x29: XK_f
+ XK_g, // 0x2A: XK_g
+ XK_h, // 0x2B: XK_h
+ XK_j, // 0x2C: XK_j
+ XK_k, // 0x2D: XK_k
+ XK_l, // 0x2E: XK_l
+ XK_semicolon, // 0x2F: XK_semicolon
+ XK_apostrophe, // 0x30: XK_apostrophe
+ XK_grave, // 0x31: XK_grave
+ XK_Shift_L, // 0x32: XK_Shift_L
+ XK_backslash, // 0x33: XK_backslash
+ XK_z, // 0x34: XK_z
+ XK_x, // 0x35: XK_x
+ XK_c, // 0x36: XK_c
+ XK_v, // 0x37: XK_v
+ XK_b, // 0x38: XK_b
+ XK_n, // 0x39: XK_n
+ XK_m, // 0x3A: XK_m
+ XK_comma, // 0x3B: XK_comma
+ XK_period, // 0x3C: XK_period
+ XK_slash, // 0x3D: XK_slash
+ XK_Shift_R, // 0x3E: XK_Shift_R
+ 0, // 0x3F: XK_KP_Multiply
+ XK_Alt_L, // 0x40: XK_Alt_L
+ XK_space, // 0x41: XK_space
+ XK_Caps_Lock, // 0x42: XK_Caps_Lock
+ XK_F1, // 0x43: XK_F1
+ XK_F2, // 0x44: XK_F2
+ XK_F3, // 0x45: XK_F3
+ XK_F4, // 0x46: XK_F4
+ XK_F5, // 0x47: XK_F5
+ XK_F6, // 0x48: XK_F6
+ XK_F7, // 0x49: XK_F7
+ XK_F8, // 0x4A: XK_F8
+ XK_F9, // 0x4B: XK_F9
+ XK_F10, // 0x4C: XK_F10
+ XK_Num_Lock, // 0x4D: XK_Num_Lock
+ XK_Scroll_Lock, // 0x4E: XK_Scroll_Lock
+ };
+
+ return hardware_code < arraysize(kHardwareKeycodeMap) ?
+ kHardwareKeycodeMap[hardware_code] : 0;
+}
+
} // namespace ui
« no previous file with comments | « ui/base/keycodes/keyboard_code_conversion_x.h ('k') | views/events/event_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698