| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/events/keycodes/keyboard_code_conversion_x.h" | 5 #include "ui/events/keycodes/keyboard_code_conversion_x.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #define XK_3270 // for XK_3270_BackTab | 9 #define XK_3270 // for XK_3270_BackTab |
| 10 #include <X11/XF86keysym.h> | 10 #include <X11/XF86keysym.h> |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 // e.g. in UK keyboard, the key between Quote and Enter keys has the VKEY code | 48 // e.g. in UK keyboard, the key between Quote and Enter keys has the VKEY code |
| 49 // VKEY_OEM_5 instead of VKEY_3. | 49 // VKEY_OEM_5 instead of VKEY_3. |
| 50 // | 50 // |
| 51 // The key symbols which are not [a-zA-Z0-9] and functional/extend keys (e.g. | 51 // The key symbols which are not [a-zA-Z0-9] and functional/extend keys (e.g. |
| 52 // TAB, ENTER, BS, Arrow keys, modifier keys, F1-F12, media/app keys, etc.) | 52 // TAB, ENTER, BS, Arrow keys, modifier keys, F1-F12, media/app keys, etc.) |
| 53 // should go through these maps for correct VKEY codes. | 53 // should go through these maps for correct VKEY codes. |
| 54 // | 54 // |
| 55 // Please refer to crbug.com/386066. | 55 // Please refer to crbug.com/386066. |
| 56 // | 56 // |
| 57 const struct MAP0 { | 57 const struct MAP0 { |
| 58 uint16 ch0; | 58 KeySym ch0; |
| 59 uint8 vk; | 59 uint8 vk; |
| 60 bool operator()(const MAP0& m1, const MAP0& m2) const { | 60 bool operator()(const MAP0& m1, const MAP0& m2) const { |
| 61 return m1.ch0 < m2.ch0; | 61 return m1.ch0 < m2.ch0; |
| 62 } | 62 } |
| 63 } map0[] = { | 63 } map0[] = { |
| 64 {0x0025, 0x35}, // XK_percent: VKEY_5 | 64 {0x0025, 0x35}, // XK_percent: VKEY_5 |
| 65 {0x0026, 0x31}, // XK_ampersand: VKEY_1 | 65 {0x0026, 0x31}, // XK_ampersand: VKEY_1 |
| 66 {0x003C, 0xDC}, // XK_less: VKEY_OEM_5 | 66 {0x003C, 0xDC}, // XK_less: VKEY_OEM_5 |
| 67 {0x007B, 0xDE}, // XK_braceleft: VKEY_OEM_7 | 67 {0x007B, 0xDE}, // XK_braceleft: VKEY_OEM_7 |
| 68 {0x007C, 0xDC}, // XK_bar: VKEY_OEM_5 | 68 {0x007C, 0xDC}, // XK_bar: VKEY_OEM_5 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 {0x02F5, 0xDB}, // XK_gabovedot: VKEY_OEM_4 | 108 {0x02F5, 0xDB}, // XK_gabovedot: VKEY_OEM_4 |
| 109 {0x03B6, 0xBF}, // XK_lcedilla: VKEY_OEM_2 | 109 {0x03B6, 0xBF}, // XK_lcedilla: VKEY_OEM_2 |
| 110 {0x03BA, 0x57}, // XK_emacron: VKEY_W | 110 {0x03BA, 0x57}, // XK_emacron: VKEY_W |
| 111 {0x03E0, 0xDF}, // XK_amacron: VKEY_OEM_8 | 111 {0x03E0, 0xDF}, // XK_amacron: VKEY_OEM_8 |
| 112 {0x03EF, 0xDD}, // XK_imacron: VKEY_OEM_6 | 112 {0x03EF, 0xDD}, // XK_imacron: VKEY_OEM_6 |
| 113 {0x03F1, 0xDB}, // XK_ncedilla: VKEY_OEM_4 | 113 {0x03F1, 0xDB}, // XK_ncedilla: VKEY_OEM_4 |
| 114 {0x03F3, 0xDC}, // XK_kcedilla: VKEY_OEM_5 | 114 {0x03F3, 0xDC}, // XK_kcedilla: VKEY_OEM_5 |
| 115 }; | 115 }; |
| 116 | 116 |
| 117 const struct MAP1 { | 117 const struct MAP1 { |
| 118 uint16 ch0; | 118 KeySym ch0; |
| 119 uint8 sc; | 119 unsigned sc; |
| 120 uint8 vk; | 120 uint8 vk; |
| 121 bool operator()(const MAP1& m1, const MAP1& m2) const { | 121 bool operator()(const MAP1& m1, const MAP1& m2) const { |
| 122 if (m1.ch0 == m2.ch0) | 122 if (m1.ch0 == m2.ch0) |
| 123 return m1.sc < m2.sc; | 123 return m1.sc < m2.sc; |
| 124 return m1.ch0 < m2.ch0; | 124 return m1.ch0 < m2.ch0; |
| 125 } | 125 } |
| 126 } map1[] = { | 126 } map1[] = { |
| 127 {0x0021, 0x0A, 0x31}, // XK_exclam+AE01: VKEY_1 | 127 {0x0021, 0x0A, 0x31}, // XK_exclam+AE01: VKEY_1 |
| 128 {0x0021, 0x11, 0x38}, // XK_exclam+AE08: VKEY_8 | 128 {0x0021, 0x11, 0x38}, // XK_exclam+AE08: VKEY_8 |
| 129 {0x0021, 0x3D, 0xDF}, // XK_exclam+AB10: VKEY_OEM_8 | 129 {0x0021, 0x3D, 0xDF}, // XK_exclam+AB10: VKEY_OEM_8 |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 {0x03E7, 0x0E, 0x35}, // XK_iogonek+AE05: VKEY_5 | 293 {0x03E7, 0x0E, 0x35}, // XK_iogonek+AE05: VKEY_5 |
| 294 {0x03EC, 0x0D, 0x34}, // XK_eabovedot+AE04: VKEY_4 | 294 {0x03EC, 0x0D, 0x34}, // XK_eabovedot+AE04: VKEY_4 |
| 295 {0x03EC, 0x30, 0xDE}, // XK_eabovedot+AC11: VKEY_OEM_7 | 295 {0x03EC, 0x30, 0xDE}, // XK_eabovedot+AC11: VKEY_OEM_7 |
| 296 {0x03F9, 0x10, 0x37}, // XK_uogonek+AE07: VKEY_7 | 296 {0x03F9, 0x10, 0x37}, // XK_uogonek+AE07: VKEY_7 |
| 297 {0x03FE, 0x11, 0x38}, // XK_umacron+AE08: VKEY_8 | 297 {0x03FE, 0x11, 0x38}, // XK_umacron+AE08: VKEY_8 |
| 298 {0x03FE, 0x18, 0x51}, // XK_umacron+AD01: VKEY_Q | 298 {0x03FE, 0x18, 0x51}, // XK_umacron+AD01: VKEY_Q |
| 299 {0x03FE, 0x35, 0x58}, // XK_umacron+AB02: VKEY_X | 299 {0x03FE, 0x35, 0x58}, // XK_umacron+AB02: VKEY_X |
| 300 }; | 300 }; |
| 301 | 301 |
| 302 const struct MAP2 { | 302 const struct MAP2 { |
| 303 uint16 ch0; | 303 KeySym ch0; |
| 304 uint8 sc; | 304 unsigned sc; |
| 305 uint16 ch1; | 305 KeySym ch1; |
| 306 uint8 vk; | 306 uint8 vk; |
| 307 bool operator()(const MAP2& m1, const MAP2& m2) const { | 307 bool operator()(const MAP2& m1, const MAP2& m2) const { |
| 308 if (m1.ch0 == m2.ch0 && m1.sc == m2.sc) | 308 if (m1.ch0 == m2.ch0 && m1.sc == m2.sc) |
| 309 return m1.ch1 < m2.ch1; | 309 return m1.ch1 < m2.ch1; |
| 310 if (m1.ch0 == m2.ch0) | 310 if (m1.ch0 == m2.ch0) |
| 311 return m1.sc < m2.sc; | 311 return m1.sc < m2.sc; |
| 312 return m1.ch0 < m2.ch0; | 312 return m1.ch0 < m2.ch0; |
| 313 } | 313 } |
| 314 } map2[] = { | 314 } map2[] = { |
| 315 {0x0023, 0x33, 0x0027, | 315 {0x0023, 0x33, 0x0027, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 337 {0x00E0, 0x30, 0x00B0, 0xDE}, // XK_agrave+AC11+XK_degree: VKEY_OEM_7 | 337 {0x00E0, 0x30, 0x00B0, 0xDE}, // XK_agrave+AC11+XK_degree: VKEY_OEM_7 |
| 338 {0x00E0, 0x30, 0x00E4, 0xDC}, // XK_agrave+AC11+XK_adiaeresis: VKEY_OEM_5 | 338 {0x00E0, 0x30, 0x00E4, 0xDC}, // XK_agrave+AC11+XK_adiaeresis: VKEY_OEM_5 |
| 339 {0x00E4, 0x30, 0x00E0, 0xDC}, // XK_adiaeresis+AC11+XK_agrave: VKEY_OEM_5 | 339 {0x00E4, 0x30, 0x00E0, 0xDC}, // XK_adiaeresis+AC11+XK_agrave: VKEY_OEM_5 |
| 340 {0x00E9, 0x2F, 0x00C9, 0xBA}, // XK_eacute+AC10+XK_Eacute: VKEY_OEM_1 | 340 {0x00E9, 0x2F, 0x00C9, 0xBA}, // XK_eacute+AC10+XK_Eacute: VKEY_OEM_1 |
| 341 {0x00E9, 0x2F, 0x00F6, 0xDE}, // XK_eacute+AC10+XK_odiaeresis: VKEY_OEM_7 | 341 {0x00E9, 0x2F, 0x00F6, 0xDE}, // XK_eacute+AC10+XK_odiaeresis: VKEY_OEM_7 |
| 342 {0x00F6, 0x2F, 0x00E9, 0xDE}, // XK_odiaeresis+AC10+XK_eacute: VKEY_OEM_7 | 342 {0x00F6, 0x2F, 0x00E9, 0xDE}, // XK_odiaeresis+AC10+XK_eacute: VKEY_OEM_7 |
| 343 {0x00FC, 0x22, 0x00E8, 0xBA}, // XK_udiaeresis+AD11+XK_egrave: VKEY_OEM_1 | 343 {0x00FC, 0x22, 0x00E8, 0xBA}, // XK_udiaeresis+AD11+XK_egrave: VKEY_OEM_1 |
| 344 }; | 344 }; |
| 345 | 345 |
| 346 const struct MAP3 { | 346 const struct MAP3 { |
| 347 uint16 ch0; | 347 KeySym ch0; |
| 348 uint8 sc; | 348 unsigned sc; |
| 349 uint16 ch1; | 349 KeySym ch1; |
| 350 uint16 ch2; | 350 KeySym ch2; |
| 351 uint8 vk; | 351 uint8 vk; |
| 352 bool operator()(const MAP3& m1, const MAP3& m2) const { | 352 bool operator()(const MAP3& m1, const MAP3& m2) const { |
| 353 if (m1.ch0 == m2.ch0 && m1.sc == m2.sc && m1.ch1 == m2.ch1) | 353 if (m1.ch0 == m2.ch0 && m1.sc == m2.sc && m1.ch1 == m2.ch1) |
| 354 return m1.ch2 < m2.ch2; | 354 return m1.ch2 < m2.ch2; |
| 355 if (m1.ch0 == m2.ch0 && m1.sc == m2.sc) | 355 if (m1.ch0 == m2.ch0 && m1.sc == m2.sc) |
| 356 return m1.ch1 < m2.ch1; | 356 return m1.ch1 < m2.ch1; |
| 357 if (m1.ch0 == m2.ch0) | 357 if (m1.ch0 == m2.ch0) |
| 358 return m1.sc < m2.sc; | 358 return m1.sc < m2.sc; |
| 359 return m1.ch0 < m2.ch0; | 359 return m1.ch0 < m2.ch0; |
| 360 } | 360 } |
| (...skipping 986 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1347 // alone does not map to XK_less; XKeysymToKeycode() returns KEY_102ND | 1347 // alone does not map to XK_less; XKeysymToKeycode() returns KEY_102ND |
| 1348 // (the '<>' key between Shift and Z on 105-key keyboards) which does. | 1348 // (the '<>' key between Shift and Z on 105-key keyboards) which does. |
| 1349 // | 1349 // |
| 1350 // crbug.com/386066 and crbug.com/390263 are examples of problems | 1350 // crbug.com/386066 and crbug.com/390263 are examples of problems |
| 1351 // associated with this. | 1351 // associated with this. |
| 1352 // | 1352 // |
| 1353 return XKeysymToKeycode(display, XKeysymForWindowsKeyCode(key_code, false)); | 1353 return XKeysymToKeycode(display, XKeysymForWindowsKeyCode(key_code, false)); |
| 1354 } | 1354 } |
| 1355 | 1355 |
| 1356 } // namespace ui | 1356 } // namespace ui |
| OLD | NEW |