Chromium Code Reviews| 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 eda35b46644308acb34d95671e72172e9d921230..eed41dbeba86b56ff4e100d526ecf1c23e8b5223 100644 |
| --- a/ui/base/keycodes/keyboard_code_conversion_x.cc |
| +++ b/ui/base/keycodes/keyboard_code_conversion_x.cc |
| @@ -11,6 +11,43 @@ |
| #include "base/basictypes.h" |
| #include "base/logging.h" |
| #include "base/utf_string_conversions.h" |
| +#include "ui/base/x/x11_util.h" |
| + |
| +namespace { |
| + |
| +// Converts ui::EventType to XKeyEvent state. |
| +unsigned int XKeyEventState(int flags) { |
| + return |
| + ((flags & ui::EF_SHIFT_DOWN) ? ShiftMask : 0) | |
| + ((flags & ui::EF_CONTROL_DOWN) ? ControlMask : 0) | |
| + ((flags & ui::EF_CAPS_LOCK_DOWN) ? LockMask : 0); |
| +} |
| + |
| +// Converts EventType to XKeyEvent type. |
| +int XKeyEventType(ui::EventType type) { |
| + switch (type) { |
| + case ui::ET_KEY_PRESSED: |
| + return KeyPress; |
| + case ui::ET_KEY_RELEASED: |
| + return KeyRelease; |
| + default: |
| + return 0; |
| + } |
| +} |
| + |
| +// Converts KeyboardCode to XKeyEvent keycode. |
| +unsigned int XKeyEventKeyCode(ui::KeyboardCode key_code, |
| + int flags, |
| + Display* display) { |
| + const int keysym = XKeysymForWindowsKeyCode(key_code, |
| + flags & ui::EF_SHIFT_DOWN); |
| + // Tests assume the keycode for XK_less is equal to the one of XK_comma, |
| + // but XKeysymToKeycode returns 94 for XK_less while it returns 59 for |
| + // XK_comma. Here we convert the value for XK_less to the value for XK_comma. |
| + return (keysym == XK_less) ? 59 : XKeysymToKeycode(display, keysym); |
| +} |
| + |
| +} // namespace |
| namespace ui { |
| @@ -620,4 +657,30 @@ int XKeysymForWindowsKeyCode(KeyboardCode keycode, bool shift) { |
| } |
| } |
| +XEvent* CreateXEventForTesting(EventType type, |
|
Daniel Erat
2011/12/07 16:37:13
rename to CreateXKeyEventForTesting()?
mazda
2011/12/08 04:44:28
Renamed to InitXKeyEventForTesting.
|
| + KeyboardCode key_code, |
| + int flags) { |
| + Display* display = GetXDisplay(); |
| + XKeyEvent key_event; |
| + key_event.type = XKeyEventType(type); |
|
Daniel Erat
2011/12/07 16:37:13
add a CHECK() that type is non-zero?
mazda
2011/12/08 04:44:28
Done.
|
| + key_event.serial = 0; |
| + key_event.send_event = 0; |
| + key_event.display = display; |
| + key_event.time = 0; |
| + key_event.window = 0; |
| + key_event.root = 0; |
| + key_event.subwindow = 0; |
| + key_event.x = 0; |
| + key_event.y = 0; |
| + key_event.x_root = 0; |
| + key_event.y_root = 0; |
| + key_event.state = XKeyEventState(flags); |
| + key_event.keycode = XKeyEventKeyCode(key_code, flags, display); |
| + key_event.same_screen = 1; |
| + XEvent* event = new XEvent; |
|
Daniel Erat
2011/12/07 16:37:13
i'd prefer that you passed a pointer to an already
mazda
2011/12/08 04:44:28
Done.
|
| + event->type = key_event.type; |
| + event->xkey = key_event; |
| + return event; |
| +} |
| + |
| } // namespace ui |