Chromium Code Reviews| Index: ui/events/keycodes/keyboard_code_conversion_x.cc |
| diff --git a/ui/events/keycodes/keyboard_code_conversion_x.cc b/ui/events/keycodes/keyboard_code_conversion_x.cc |
| index 20c329771e7f75dd6345aba42c82ba077c437114..34d531ffd2d71693b140983bf9e5128b5d3b6614 100644 |
| --- a/ui/events/keycodes/keyboard_code_conversion_x.cc |
| +++ b/ui/events/keycodes/keyboard_code_conversion_x.cc |
| @@ -1276,4 +1276,30 @@ int XKeysymForWindowsKeyCode(KeyboardCode keycode, bool shift) { |
| } |
| } |
| +unsigned int XKeyEventKeyCode(ui::KeyboardCode key_code, |
| + int flags, |
| + XDisplay* display) { |
| + // SHIFT state is ignored in the call to |XKeysymForWindowsKeyCode()| here |
|
Daniel Erat
2014/07/07 21:07:01
nit: don't need pipes around function names in com
kpschoedel
2014/07/08 14:40:21
Done. Thanks, I'll follow that in the future.
|
| + // because we map the XKeysym back to a keycode, i.e. a physical key position. |
| + // Using a SHIFT-modified XKeysym would sometimes yield X keycodes that, |
| + // while technically valid, may be surprising in that they do not match |
| + // the keycode of the original press, and conflict with assumptions in |
| + // other code. |
| + // |
| + // For example, in a US layout, Shift-9 has the interpretation XK_parenleft, |
| + // but the keycode KEY_9 alone does not map to XK_parenleft; instead, |
| + // |XKeysymToKeycode()| returns KEY_KPLEFTPAREN (keypad left parenthesis) |
| + // which does map to XK_parenleft -- notwithstanding that keyboards with |
| + // dedicated number pad parenthesis keys are currently uncommon. |
| + // |
| + // Similarly, Shift-Comma has the interpretation XK_less, but KEY_COMMA |
| + // alone does not map to XK_less; |XKeysymToKeycode()| returns KEY_102ND |
| + // (the '<>' key between Shift and Z on 105-key keyboards) which does. |
| + // |
| + // crbug.com/386066 and crbug.com/390263 are examples of problems |
| + // associated with this. |
| + // |
| + return XKeysymToKeycode(display, XKeysymForWindowsKeyCode(key_code, false)); |
| +} |
| + |
| } // namespace ui |