Index: app/keyboard_code_conversion_x.cc |
diff --git a/app/keyboard_code_conversion_x.cc b/app/keyboard_code_conversion_x.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..679423b4aaad2d5eb0dd9d5060f5f000a24d676f |
--- /dev/null |
+++ b/app/keyboard_code_conversion_x.cc |
@@ -0,0 +1,163 @@ |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "app/keyboard_code_conversion_x.h" |
+ |
+#include <X11/keysym.h> |
+#include <X11/Xlib.h> |
+ |
+#include "base/logging.h" |
+ |
+namespace app { |
+ |
+// Get an app::KeyboardCode from an X keyevent |
+KeyboardCode KeyboardCodeFromXKeyEvent(XEvent* xev) { |
+ KeySym keysym = XLookupKeysym(&xev->xkey, 0); |
+ |
+ // TODO(sad): Have |keysym| go through the X map list? |
+ |
+ switch (keysym) { |
+ case XK_BackSpace: |
+ return VKEY_BACK; |
+ case XK_Tab: |
+ return VKEY_TAB; |
+ case XK_Linefeed: |
+ case XK_Return: |
+ return VKEY_RETURN; |
+ case XK_Clear: |
+ return VKEY_CLEAR; |
+ case XK_KP_Space: |
+ case XK_space: |
+ return VKEY_SPACE; |
+ case XK_Home: |
+ case XK_KP_Home: |
+ return VKEY_HOME; |
+ case XK_End: |
+ case XK_KP_End: |
+ return VKEY_END; |
+ case XK_Left: |
+ case XK_KP_Left: |
+ return VKEY_LEFT; |
+ case XK_Right: |
+ case XK_KP_Right: |
+ return VKEY_RIGHT; |
+ case XK_Down: |
+ case XK_KP_Down: |
+ return VKEY_DOWN; |
+ case XK_Up: |
+ case XK_KP_Up: |
+ return VKEY_UP; |
+ case XK_Control_L: |
+ return VKEY_LCONTROL; |
+ case XK_Control_R: |
+ return VKEY_RCONTROL; |
+ case XK_Escape: |
+ return VKEY_ESCAPE; |
+ case XK_A: |
+ case XK_a: |
+ return VKEY_A; |
+ case XK_B: |
+ case XK_b: |
+ return VKEY_B; |
+ case XK_C: |
+ case XK_c: |
+ return VKEY_C; |
+ case XK_D: |
+ case XK_d: |
+ return VKEY_D; |
+ case XK_E: |
+ case XK_e: |
+ return VKEY_E; |
+ case XK_F: |
+ case XK_f: |
+ return VKEY_F; |
+ case XK_G: |
+ case XK_g: |
+ return VKEY_G; |
+ case XK_H: |
+ case XK_h: |
+ return VKEY_H; |
+ case XK_I: |
+ case XK_i: |
+ return VKEY_I; |
+ case XK_J: |
+ case XK_j: |
+ return VKEY_J; |
+ case XK_K: |
+ case XK_k: |
+ return VKEY_K; |
+ case XK_L: |
+ case XK_l: |
+ return VKEY_L; |
+ case XK_M: |
+ case XK_m: |
+ return VKEY_M; |
+ case XK_N: |
+ case XK_n: |
+ return VKEY_N; |
+ case XK_O: |
+ case XK_o: |
+ return VKEY_O; |
+ case XK_P: |
+ case XK_p: |
+ return VKEY_P; |
+ case XK_Q: |
+ case XK_q: |
+ return VKEY_Q; |
+ case XK_R: |
+ case XK_r: |
+ return VKEY_R; |
+ case XK_S: |
+ case XK_s: |
+ return VKEY_S; |
+ case XK_T: |
+ case XK_t: |
+ return VKEY_T; |
+ case XK_U: |
+ case XK_u: |
+ return VKEY_U; |
+ case XK_V: |
+ case XK_v: |
+ return VKEY_V; |
+ case XK_W: |
+ case XK_w: |
+ return VKEY_W; |
+ case XK_X: |
+ case XK_x: |
+ return VKEY_X; |
+ case XK_Y: |
+ case XK_y: |
+ return VKEY_Y; |
+ case XK_Z: |
+ case XK_z: |
+ return VKEY_Z; |
+ case XK_0: |
+ return VKEY_0; |
+ case XK_1: |
+ return VKEY_1; |
+ case XK_2: |
+ return VKEY_2; |
+ case XK_3: |
+ return VKEY_3; |
+ case XK_4: |
+ return VKEY_4; |
+ case XK_5: |
+ return VKEY_5; |
+ case XK_6: |
+ return VKEY_6; |
+ case XK_7: |
+ return VKEY_7; |
+ case XK_8: |
+ return VKEY_8; |
+ case XK_9: |
+ return VKEY_9; |
+ |
+ // TODO(sad): A lot of keycodes are still missing. |
+ } |
+ |
+ DLOG(WARNING) << "Unknown keycode: " << keysym; |
+ return VKEY_UNKNOWN; |
+} |
+ |
+} // namespace app |