1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ui/events/x/events_x_utils.h"
7 #include <X11/keysym.h>
11 #include "base/logging.h"
12 #include "ui/events/keycodes/keyboard_code_conversion_x.h"
16 // Converts ui::EventType to XKeyEvent state.
17 unsigned int XKeyEventState(int flags) {
19 ((flags & ui::EF_SHIFT_DOWN) ? ShiftMask : 0) |
20 ((flags & ui::EF_CONTROL_DOWN) ? ControlMask : 0) |
21 ((flags & ui::EF_ALT_DOWN) ? Mod1Mask : 0) |
22 ((flags & ui::EF_CAPS_LOCK_DOWN) ? LockMask : 0);
25 // Converts EventType to XKeyEvent type.
26 int XKeyEventType(ui::EventType type) {
28 case ui::ET_KEY_PRESSED:
30 case ui::ET_KEY_RELEASED:
37 // Converts KeyboardCode to XKeyEvent keycode.
38 unsigned int XKeyEventKeyCode(ui::KeyboardCode key_code,
41 const int keysym = XKeysymForWindowsKeyCode(key_code,
42 flags & ui::EF_SHIFT_DOWN);
43 // Tests assume the keycode for XK_less is equal to the one of XK_comma,
44 // but XKeysymToKeycode returns 94 for XK_less while it returns 59 for
45 // XK_comma. Here we convert the value for XK_less to the value for XK_comma.
46 return (keysym == XK_less) ? 59 : XKeysymToKeycode(display, keysym);
53 void InitXKeyEventForTesting(EventType type,
54 KeyboardCode key_code,
58 XDisplay* display = gfx::GetXDisplay();
60 key_event.type = XKeyEventType(type);
61 CHECK_NE(0, key_event.type);
63 key_event.send_event = 0;
64 key_event.display = display;
68 key_event.subwindow = 0;
73 key_event.state = XKeyEventState(flags);
74 key_event.keycode = XKeyEventKeyCode(key_code, flags, display);
75 key_event.same_screen = 1;
76 event->type = key_event.type;
77 event->xkey = key_event;