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 #define XK_3270 // for XK_3270_BackTab | 7 #define XK_3270 // for XK_3270_BackTab |
8 #include <X11/keysym.h> | 8 #include <X11/keysym.h> |
9 #include <X11/Xlib.h> | 9 #include <X11/Xlib.h> |
10 #include <X11/Xutil.h> | 10 #include <X11/Xutil.h> |
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
435 char buf[6]; | 435 char buf[6]; |
436 int bytes_written = XLookupString(&xev->xkey, buf, 6, NULL, NULL); | 436 int bytes_written = XLookupString(&xev->xkey, buf, 6, NULL, NULL); |
437 DCHECK_LE(bytes_written, 6); | 437 DCHECK_LE(bytes_written, 6); |
438 | 438 |
439 base::string16 result; | 439 base::string16 result; |
440 return (bytes_written > 0 && base::UTF8ToUTF16(buf, bytes_written, &result) && | 440 return (bytes_written > 0 && base::UTF8ToUTF16(buf, bytes_written, &result) && |
441 result.length() == 1) ? result[0] : 0; | 441 result.length() == 1) ? result[0] : 0; |
442 } | 442 } |
443 | 443 |
444 unsigned int DefaultXKeysymFromHardwareKeycode(unsigned int hardware_code) { | 444 unsigned int DefaultXKeysymFromHardwareKeycode(unsigned int hardware_code) { |
| 445 // This function assumes that X11 is using evdev-based keycodes. |
445 static const unsigned int kHardwareKeycodeMap[] = { | 446 static const unsigned int kHardwareKeycodeMap[] = { |
446 0, // 0x00: | 447 // This table covers the core 105-key keyboard. |
447 0, // 0x01: | 448 0, // 0x00: |
448 0, // 0x02: | 449 0, // 0x01: |
449 0, // 0x03: | 450 0, // 0x02: |
450 0, // 0x04: | 451 0, // 0x03: |
451 0, // 0x05: | 452 0, // 0x04: |
452 0, // 0x06: | 453 0, // 0x05: |
453 0, // 0x07: | 454 0, // 0x06: |
454 0, // 0x08: | 455 0, // XKB evdev (XKB - 8) X KeySym |
455 XK_Escape, // 0x09: XK_Escape | 456 0, // === =============== ====== |
456 XK_1, // 0x0A: XK_1 | 457 XK_Escape, // 0x09: KEY_ESC Escape |
457 XK_2, // 0x0B: XK_2 | 458 XK_1, // 0x0A: KEY_1 1 |
458 XK_3, // 0x0C: XK_3 | 459 XK_2, // 0x0B: KEY_2 2 |
459 XK_4, // 0x0D: XK_4 | 460 XK_3, // 0x0C: KEY_3 3 |
460 XK_5, // 0x0E: XK_5 | 461 XK_4, // 0x0D: KEY_4 4 |
461 XK_6, // 0x0F: XK_6 | 462 XK_5, // 0x0E: KEY_5 5 |
462 XK_7, // 0x10: XK_7 | 463 XK_6, // 0x0F: KEY_6 6 |
463 XK_8, // 0x11: XK_8 | 464 XK_7, // 0x10: KEY_7 7 |
464 XK_9, // 0x12: XK_9 | 465 XK_8, // 0x11: KEY_8 8 |
465 XK_0, // 0x13: XK_0 | 466 XK_9, // 0x12: KEY_9 9 |
466 XK_minus, // 0x14: XK_minus | 467 XK_0, // 0x13: KEY_0 0 |
467 XK_equal, // 0x15: XK_equal | 468 XK_minus, // 0x14: KEY_MINUS minus |
468 XK_BackSpace, // 0x16: XK_BackSpace | 469 XK_equal, // 0x15: KEY_EQUAL equal |
469 XK_Tab, // 0x17: XK_Tab | 470 XK_BackSpace, // 0x16: KEY_BACKSPACE BackSpace |
470 XK_q, // 0x18: XK_q | 471 XK_Tab, // 0x17: KEY_TAB Tab |
471 XK_w, // 0x19: XK_w | 472 XK_q, // 0x18: KEY_Q q |
472 XK_e, // 0x1A: XK_e | 473 XK_w, // 0x19: KEY_W w |
473 XK_r, // 0x1B: XK_r | 474 XK_e, // 0x1A: KEY_E e |
474 XK_t, // 0x1C: XK_t | 475 XK_r, // 0x1B: KEY_R r |
475 XK_y, // 0x1D: XK_y | 476 XK_t, // 0x1C: KEY_T t |
476 XK_u, // 0x1E: XK_u | 477 XK_y, // 0x1D: KEY_Y y |
477 XK_i, // 0x1F: XK_i | 478 XK_u, // 0x1E: KEY_U u |
478 XK_o, // 0x20: XK_o | 479 XK_i, // 0x1F: KEY_I i |
479 XK_p, // 0x21: XK_p | 480 XK_o, // 0x20: KEY_O o |
480 XK_bracketleft, // 0x22: XK_bracketleft | 481 XK_p, // 0x21: KEY_P p |
481 XK_bracketright, // 0x23: XK_bracketright | 482 XK_bracketleft, // 0x22: KEY_LEFTBRACE bracketleft |
482 XK_Return, // 0x24: XK_Return | 483 XK_bracketright, // 0x23: KEY_RIGHTBRACE bracketright |
483 XK_Control_L, // 0x25: XK_Control_L | 484 XK_Return, // 0x24: KEY_ENTER Return |
484 XK_a, // 0x26: XK_a | 485 XK_Control_L, // 0x25: KEY_LEFTCTRL Control_L |
485 XK_s, // 0x27: XK_s | 486 XK_a, // 0x26: KEY_A a |
486 XK_d, // 0x28: XK_d | 487 XK_s, // 0x27: KEY_S s |
487 XK_f, // 0x29: XK_f | 488 XK_d, // 0x28: KEY_D d |
488 XK_g, // 0x2A: XK_g | 489 XK_f, // 0x29: KEY_F f |
489 XK_h, // 0x2B: XK_h | 490 XK_g, // 0x2A: KEY_G g |
490 XK_j, // 0x2C: XK_j | 491 XK_h, // 0x2B: KEY_H h |
491 XK_k, // 0x2D: XK_k | 492 XK_j, // 0x2C: KEY_J j |
492 XK_l, // 0x2E: XK_l | 493 XK_k, // 0x2D: KEY_K k |
493 XK_semicolon, // 0x2F: XK_semicolon | 494 XK_l, // 0x2E: KEY_L l |
494 XK_apostrophe, // 0x30: XK_apostrophe | 495 XK_semicolon, // 0x2F: KEY_SEMICOLON semicolon |
495 XK_grave, // 0x31: XK_grave | 496 XK_apostrophe, // 0x30: KEY_APOSTROPHE apostrophe |
496 XK_Shift_L, // 0x32: XK_Shift_L | 497 XK_grave, // 0x31: KEY_GRAVE grave |
497 XK_backslash, // 0x33: XK_backslash | 498 XK_Shift_L, // 0x32: KEY_LEFTSHIFT Shift_L |
498 XK_z, // 0x34: XK_z | 499 XK_backslash, // 0x33: KEY_BACKSLASH backslash |
499 XK_x, // 0x35: XK_x | 500 XK_z, // 0x34: KEY_Z z |
500 XK_c, // 0x36: XK_c | 501 XK_x, // 0x35: KEY_X x |
501 XK_v, // 0x37: XK_v | 502 XK_c, // 0x36: KEY_C c |
502 XK_b, // 0x38: XK_b | 503 XK_v, // 0x37: KEY_V v |
503 XK_n, // 0x39: XK_n | 504 XK_b, // 0x38: KEY_B b |
504 XK_m, // 0x3A: XK_m | 505 XK_n, // 0x39: KEY_N n |
505 XK_comma, // 0x3B: XK_comma | 506 XK_m, // 0x3A: KEY_M m |
506 XK_period, // 0x3C: XK_period | 507 XK_comma, // 0x3B: KEY_COMMA comma |
507 XK_slash, // 0x3D: XK_slash | 508 XK_period, // 0x3C: KEY_DOT period |
508 XK_Shift_R, // 0x3E: XK_Shift_R | 509 XK_slash, // 0x3D: KEY_SLASH slash |
509 0, // 0x3F: XK_KP_Multiply | 510 XK_Shift_R, // 0x3E: KEY_RIGHTSHIFT Shift_R |
510 XK_Alt_L, // 0x40: XK_Alt_L | 511 0, // 0x3F: KEY_KPASTERISK KP_Multiply |
511 XK_space, // 0x41: XK_space | 512 XK_Alt_L, // 0x40: KEY_LEFTALT Alt_L |
512 XK_Caps_Lock, // 0x42: XK_Caps_Lock | 513 XK_space, // 0x41: KEY_SPACE space |
513 XK_F1, // 0x43: XK_F1 | 514 XK_Caps_Lock, // 0x42: KEY_CAPSLOCK Caps_Lock |
514 XK_F2, // 0x44: XK_F2 | 515 XK_F1, // 0x43: KEY_F1 F1 |
515 XK_F3, // 0x45: XK_F3 | 516 XK_F2, // 0x44: KEY_F2 F2 |
516 XK_F4, // 0x46: XK_F4 | 517 XK_F3, // 0x45: KEY_F3 F3 |
517 XK_F5, // 0x47: XK_F5 | 518 XK_F4, // 0x46: KEY_F4 F4 |
518 XK_F6, // 0x48: XK_F6 | 519 XK_F5, // 0x47: KEY_F5 F5 |
519 XK_F7, // 0x49: XK_F7 | 520 XK_F6, // 0x48: KEY_F6 F6 |
520 XK_F8, // 0x4A: XK_F8 | 521 XK_F7, // 0x49: KEY_F7 F7 |
521 XK_F9, // 0x4B: XK_F9 | 522 XK_F8, // 0x4A: KEY_F8 F8 |
522 XK_F10, // 0x4C: XK_F10 | 523 XK_F9, // 0x4B: KEY_F9 F9 |
523 XK_Num_Lock, // 0x4D: XK_Num_Lock | 524 XK_F10, // 0x4C: KEY_F10 F10 |
524 XK_Scroll_Lock, // 0x4E: XK_Scroll_Lock | 525 XK_Num_Lock, // 0x4D: KEY_NUMLOCK Num_Lock |
| 526 XK_Scroll_Lock, // 0x4E: KEY_SCROLLLOCK Scroll_Lock |
| 527 XK_KP_7, // 0x4F: KEY_KP7 KP_7 |
| 528 XK_KP_8, // 0x50: KEY_KP8 KP_8 |
| 529 XK_KP_9, // 0x51: KEY_KP9 KP_9 |
| 530 XK_KP_Subtract, // 0x52: KEY_KPMINUS KP_Subtract |
| 531 XK_KP_4, // 0x53: KEY_KP4 KP_4 |
| 532 XK_KP_5, // 0x54: KEY_KP5 KP_5 |
| 533 XK_KP_6, // 0x55: KEY_KP6 KP_6 |
| 534 XK_KP_Add, // 0x56: KEY_KPPLUS KP_Add |
| 535 XK_KP_1, // 0x57: KEY_KP1 KP_1 |
| 536 XK_KP_2, // 0x58: KEY_KP2 KP_2 |
| 537 XK_KP_3, // 0x59: KEY_KP3 KP_3 |
| 538 XK_KP_0, // 0x5A: KEY_KP0 KP_0 |
| 539 XK_KP_Decimal, // 0x5B: KEY_KPDOT KP_Decimal |
| 540 0, // 0x5C: |
| 541 XK_Zenkaku_Hankaku, // 0x5D: KEY_ZENKAKUHANKAKU Zenkaku_Hankaku |
| 542 XK_backslash, // 0x5E: KEY_102ND backslash |
| 543 XK_F11, // 0x5F: KEY_F11 F11 |
| 544 XK_F12, // 0x60: KEY_F12 F12 |
| 545 XK_Romaji, // 0x61: KEY_RO Romaji |
| 546 XK_Katakana, // 0x62: KEY_KATAKANA Katakana |
| 547 XK_Hiragana, // 0x63: KEY_HIRAGANA Hiragana |
| 548 XK_Henkan, // 0x64: KEY_HENKAN Henkan |
| 549 XK_Hiragana_Katakana, // 0x65: KEY_KATAKANAHIRAGANA Hiragana_Katakana |
| 550 XK_Muhenkan, // 0x66: KEY_MUHENKAN Muhenkan |
| 551 XK_KP_Separator, // 0x67: KEY_KPJPCOMMA KP_Separator |
| 552 XK_KP_Enter, // 0x68: KEY_KPENTER KP_Enter |
| 553 XK_Control_R, // 0x69: KEY_RIGHTCTRL Control_R |
| 554 XK_KP_Divide, // 0x6A: KEY_KPSLASH KP_Divide |
| 555 XK_Print, // 0x6B: KEY_SYSRQ Print |
| 556 XK_Alt_R, // 0x6C: KEY_RIGHTALT Alt_R |
| 557 XK_Linefeed, // 0x6D: KEY_LINEFEED Linefeed |
| 558 XK_Home, // 0x6E: KEY_HOME Home |
| 559 XK_Up, // 0x6F: KEY_UP Up |
| 560 XK_Page_Up, // 0x70: KEY_PAGEUP Page_Up |
| 561 XK_Left, // 0x71: KEY_LEFT Left |
| 562 XK_Right, // 0x72: KEY_RIGHT Right |
| 563 XK_End, // 0x73: KEY_END End |
| 564 XK_Down, // 0x74: KEY_DOWN Down |
| 565 XK_Page_Down, // 0x75: KEY_PAGEDOWN Page_Down |
| 566 XK_Insert, // 0x76: KEY_INSERT Insert |
| 567 XK_Delete, // 0x77: KEY_DELETE Delete |
| 568 0, // 0x78: KEY_MACRO |
| 569 XF86XK_AudioMute, // 0x79: KEY_MUTE XF86AudioMute |
| 570 XF86XK_AudioLowerVolume, // 0x7A: KEY_VOLUMEDOWN XF86AudioLowerVolume |
| 571 XF86XK_AudioRaiseVolume, // 0x7B: KEY_VOLUMEUP XF86AudioRaiseVolume |
| 572 XF86XK_PowerOff, // 0x7C: KEY_POWER XF86PowerOff |
| 573 XK_KP_Equal, // 0x7D: KEY_KPEQUAL KP_Equal |
| 574 XK_plusminus, // 0x7E: KEY_KPPLUSMINUS plusminus |
| 575 XK_Pause, // 0x7F: KEY_PAUSE Pause |
| 576 XF86XK_LaunchA, // 0x80: KEY_SCALE XF86LaunchA |
| 577 XK_KP_Decimal, // 0x81: KEY_KPCOMMA KP_Decimal |
| 578 XK_Hangul, // 0x82: KEY_HANGUEL Hangul |
| 579 XK_Hangul_Hanja, // 0x83: KEY_HANJA Hangul_Hanja |
| 580 XK_yen, // 0x84: KEY_YEN yen |
| 581 XK_Super_L, // 0x85: KEY_LEFTMETA Super_L |
| 582 XK_Super_R, // 0x86: KEY_RIGHTMETA Super_R |
| 583 XK_Menu, // 0x87: KEY_COMPOSE Menu |
525 }; | 584 }; |
526 | 585 |
527 if (hardware_code >= arraysize(kHardwareKeycodeMap)) { | 586 if (hardware_code >= arraysize(kHardwareKeycodeMap)) { |
528 // Checks for arrow keys. | 587 // Additional keycodes used by the Chrome OS top row special function keys. |
529 switch (hardware_code) { | 588 switch (hardware_code) { |
530 case 0x6f: | 589 case 0xA6: // KEY_BACK |
531 return XK_Up; | 590 return XF86XK_Back; |
532 case 0x71: | 591 case 0xA7: // KEY_FORWARD |
533 return XK_Left; | 592 return XF86XK_Forward; |
534 case 0x72: | 593 case 0xB5: // KEY_REFRESH |
535 return XK_Right; | 594 return XF86XK_Reload; |
536 case 0x74: | 595 case 0xD4: // KEY_DASHBOARD |
537 return XK_Down; | 596 return XF86XK_LaunchB; |
| 597 case 0xE8: // KEY_BRIGHTNESSDOWN |
| 598 return XF86XK_MonBrightnessDown; |
| 599 case 0xE9: // KEY_BRIGHTNESSUP |
| 600 return XF86XK_MonBrightnessUp; |
538 } | 601 } |
539 return 0; | 602 return 0; |
540 } | 603 } |
541 return kHardwareKeycodeMap[hardware_code]; | 604 return kHardwareKeycodeMap[hardware_code]; |
542 } | 605 } |
543 | 606 |
544 // TODO(jcampan): this method might be incomplete. | 607 // TODO(jcampan): this method might be incomplete. |
545 int XKeysymForWindowsKeyCode(KeyboardCode keycode, bool shift) { | 608 int XKeysymForWindowsKeyCode(KeyboardCode keycode, bool shift) { |
546 switch (keycode) { | 609 switch (keycode) { |
547 case VKEY_NUMPAD0: | 610 case VKEY_NUMPAD0: |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
804 case VKEY_KBD_BRIGHTNESS_UP: | 867 case VKEY_KBD_BRIGHTNESS_UP: |
805 return XF86XK_KbdBrightnessUp; | 868 return XF86XK_KbdBrightnessUp; |
806 | 869 |
807 default: | 870 default: |
808 LOG(WARNING) << "Unknown keycode:" << keycode; | 871 LOG(WARNING) << "Unknown keycode:" << keycode; |
809 return 0; | 872 return 0; |
810 } | 873 } |
811 } | 874 } |
812 | 875 |
813 } // namespace ui | 876 } // namespace ui |
OLD | NEW |