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. | |
446 static const unsigned int kHardwareKeycodeMap[] = { | 445 static const unsigned int kHardwareKeycodeMap[] = { |
447 // This table covers the core 105-key keyboard. | 446 0, // 0x00: |
448 0, // 0x00: | 447 0, // 0x01: |
449 0, // 0x01: | 448 0, // 0x02: |
450 0, // 0x02: | 449 0, // 0x03: |
451 0, // 0x03: | 450 0, // 0x04: |
452 0, // 0x04: | 451 0, // 0x05: |
453 0, // 0x05: | 452 0, // 0x06: |
454 0, // 0x06: | 453 0, // 0x07: |
455 0, // XKB evdev (XKB - 8) X KeySym | 454 0, // 0x08: |
456 0, // === =============== ====== | 455 XK_Escape, // 0x09: XK_Escape |
457 XK_Escape, // 0x09: KEY_ESC Escape | 456 XK_1, // 0x0A: XK_1 |
458 XK_1, // 0x0A: KEY_1 1 | 457 XK_2, // 0x0B: XK_2 |
459 XK_2, // 0x0B: KEY_2 2 | 458 XK_3, // 0x0C: XK_3 |
460 XK_3, // 0x0C: KEY_3 3 | 459 XK_4, // 0x0D: XK_4 |
461 XK_4, // 0x0D: KEY_4 4 | 460 XK_5, // 0x0E: XK_5 |
462 XK_5, // 0x0E: KEY_5 5 | 461 XK_6, // 0x0F: XK_6 |
463 XK_6, // 0x0F: KEY_6 6 | 462 XK_7, // 0x10: XK_7 |
464 XK_7, // 0x10: KEY_7 7 | 463 XK_8, // 0x11: XK_8 |
465 XK_8, // 0x11: KEY_8 8 | 464 XK_9, // 0x12: XK_9 |
466 XK_9, // 0x12: KEY_9 9 | 465 XK_0, // 0x13: XK_0 |
467 XK_0, // 0x13: KEY_0 0 | 466 XK_minus, // 0x14: XK_minus |
468 XK_minus, // 0x14: KEY_MINUS minus | 467 XK_equal, // 0x15: XK_equal |
469 XK_equal, // 0x15: KEY_EQUAL equal | 468 XK_BackSpace, // 0x16: XK_BackSpace |
470 XK_BackSpace, // 0x16: KEY_BACKSPACE BackSpace | 469 XK_Tab, // 0x17: XK_Tab |
471 XK_Tab, // 0x17: KEY_TAB Tab | 470 XK_q, // 0x18: XK_q |
472 XK_q, // 0x18: KEY_Q q | 471 XK_w, // 0x19: XK_w |
473 XK_w, // 0x19: KEY_W w | 472 XK_e, // 0x1A: XK_e |
474 XK_e, // 0x1A: KEY_E e | 473 XK_r, // 0x1B: XK_r |
475 XK_r, // 0x1B: KEY_R r | 474 XK_t, // 0x1C: XK_t |
476 XK_t, // 0x1C: KEY_T t | 475 XK_y, // 0x1D: XK_y |
477 XK_y, // 0x1D: KEY_Y y | 476 XK_u, // 0x1E: XK_u |
478 XK_u, // 0x1E: KEY_U u | 477 XK_i, // 0x1F: XK_i |
479 XK_i, // 0x1F: KEY_I i | 478 XK_o, // 0x20: XK_o |
480 XK_o, // 0x20: KEY_O o | 479 XK_p, // 0x21: XK_p |
481 XK_p, // 0x21: KEY_P p | 480 XK_bracketleft, // 0x22: XK_bracketleft |
482 XK_bracketleft, // 0x22: KEY_LEFTBRACE bracketleft | 481 XK_bracketright, // 0x23: XK_bracketright |
483 XK_bracketright, // 0x23: KEY_RIGHTBRACE bracketright | 482 XK_Return, // 0x24: XK_Return |
484 XK_Return, // 0x24: KEY_ENTER Return | 483 XK_Control_L, // 0x25: XK_Control_L |
485 XK_Control_L, // 0x25: KEY_LEFTCTRL Control_L | 484 XK_a, // 0x26: XK_a |
486 XK_a, // 0x26: KEY_A a | 485 XK_s, // 0x27: XK_s |
487 XK_s, // 0x27: KEY_S s | 486 XK_d, // 0x28: XK_d |
488 XK_d, // 0x28: KEY_D d | 487 XK_f, // 0x29: XK_f |
489 XK_f, // 0x29: KEY_F f | 488 XK_g, // 0x2A: XK_g |
490 XK_g, // 0x2A: KEY_G g | 489 XK_h, // 0x2B: XK_h |
491 XK_h, // 0x2B: KEY_H h | 490 XK_j, // 0x2C: XK_j |
492 XK_j, // 0x2C: KEY_J j | 491 XK_k, // 0x2D: XK_k |
493 XK_k, // 0x2D: KEY_K k | 492 XK_l, // 0x2E: XK_l |
494 XK_l, // 0x2E: KEY_L l | 493 XK_semicolon, // 0x2F: XK_semicolon |
495 XK_semicolon, // 0x2F: KEY_SEMICOLON semicolon | 494 XK_apostrophe, // 0x30: XK_apostrophe |
496 XK_apostrophe, // 0x30: KEY_APOSTROPHE apostrophe | 495 XK_grave, // 0x31: XK_grave |
497 XK_grave, // 0x31: KEY_GRAVE grave | 496 XK_Shift_L, // 0x32: XK_Shift_L |
498 XK_Shift_L, // 0x32: KEY_LEFTSHIFT Shift_L | 497 XK_backslash, // 0x33: XK_backslash |
499 XK_backslash, // 0x33: KEY_BACKSLASH backslash | 498 XK_z, // 0x34: XK_z |
500 XK_z, // 0x34: KEY_Z z | 499 XK_x, // 0x35: XK_x |
501 XK_x, // 0x35: KEY_X x | 500 XK_c, // 0x36: XK_c |
502 XK_c, // 0x36: KEY_C c | 501 XK_v, // 0x37: XK_v |
503 XK_v, // 0x37: KEY_V v | 502 XK_b, // 0x38: XK_b |
504 XK_b, // 0x38: KEY_B b | 503 XK_n, // 0x39: XK_n |
505 XK_n, // 0x39: KEY_N n | 504 XK_m, // 0x3A: XK_m |
506 XK_m, // 0x3A: KEY_M m | 505 XK_comma, // 0x3B: XK_comma |
507 XK_comma, // 0x3B: KEY_COMMA comma | 506 XK_period, // 0x3C: XK_period |
508 XK_period, // 0x3C: KEY_DOT period | 507 XK_slash, // 0x3D: XK_slash |
509 XK_slash, // 0x3D: KEY_SLASH slash | 508 XK_Shift_R, // 0x3E: XK_Shift_R |
510 XK_Shift_R, // 0x3E: KEY_RIGHTSHIFT Shift_R | 509 0, // 0x3F: XK_KP_Multiply |
511 0, // 0x3F: KEY_KPASTERISK KP_Multiply | 510 XK_Alt_L, // 0x40: XK_Alt_L |
512 XK_Alt_L, // 0x40: KEY_LEFTALT Alt_L | 511 XK_space, // 0x41: XK_space |
513 XK_space, // 0x41: KEY_SPACE space | 512 XK_Caps_Lock, // 0x42: XK_Caps_Lock |
514 XK_Caps_Lock, // 0x42: KEY_CAPSLOCK Caps_Lock | 513 XK_F1, // 0x43: XK_F1 |
515 XK_F1, // 0x43: KEY_F1 F1 | 514 XK_F2, // 0x44: XK_F2 |
516 XK_F2, // 0x44: KEY_F2 F2 | 515 XK_F3, // 0x45: XK_F3 |
517 XK_F3, // 0x45: KEY_F3 F3 | 516 XK_F4, // 0x46: XK_F4 |
518 XK_F4, // 0x46: KEY_F4 F4 | 517 XK_F5, // 0x47: XK_F5 |
519 XK_F5, // 0x47: KEY_F5 F5 | 518 XK_F6, // 0x48: XK_F6 |
520 XK_F6, // 0x48: KEY_F6 F6 | 519 XK_F7, // 0x49: XK_F7 |
521 XK_F7, // 0x49: KEY_F7 F7 | 520 XK_F8, // 0x4A: XK_F8 |
522 XK_F8, // 0x4A: KEY_F8 F8 | 521 XK_F9, // 0x4B: XK_F9 |
523 XK_F9, // 0x4B: KEY_F9 F9 | 522 XK_F10, // 0x4C: XK_F10 |
524 XK_F10, // 0x4C: KEY_F10 F10 | 523 XK_Num_Lock, // 0x4D: XK_Num_Lock |
525 XK_Num_Lock, // 0x4D: KEY_NUMLOCK Num_Lock | 524 XK_Scroll_Lock, // 0x4E: XK_Scroll_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 | |
584 }; | 525 }; |
585 | 526 |
586 if (hardware_code >= arraysize(kHardwareKeycodeMap)) { | 527 if (hardware_code >= arraysize(kHardwareKeycodeMap)) { |
587 // Additional keycodes used by the Chrome OS top row special function keys. | 528 // Checks for arrow keys. |
588 switch (hardware_code) { | 529 switch (hardware_code) { |
589 case 0xA6: // KEY_BACK | 530 case 0x6f: |
590 return XF86XK_Back; | 531 return XK_Up; |
591 case 0xA7: // KEY_FORWARD | 532 case 0x71: |
592 return XF86XK_Forward; | 533 return XK_Left; |
593 case 0xB5: // KEY_REFRESH | 534 case 0x72: |
594 return XF86XK_Reload; | 535 return XK_Right; |
595 case 0xD4: // KEY_DASHBOARD | 536 case 0x74: |
596 return XF86XK_LaunchB; | 537 return XK_Down; |
597 case 0xE8: // KEY_BRIGHTNESSDOWN | |
598 return XF86XK_MonBrightnessDown; | |
599 case 0xE9: // KEY_BRIGHTNESSUP | |
600 return XF86XK_MonBrightnessUp; | |
601 } | 538 } |
602 return 0; | 539 return 0; |
603 } | 540 } |
604 return kHardwareKeycodeMap[hardware_code]; | 541 return kHardwareKeycodeMap[hardware_code]; |
605 } | 542 } |
606 | 543 |
607 // TODO(jcampan): this method might be incomplete. | 544 // TODO(jcampan): this method might be incomplete. |
608 int XKeysymForWindowsKeyCode(KeyboardCode keycode, bool shift) { | 545 int XKeysymForWindowsKeyCode(KeyboardCode keycode, bool shift) { |
609 switch (keycode) { | 546 switch (keycode) { |
610 case VKEY_NUMPAD0: | 547 case VKEY_NUMPAD0: |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
867 case VKEY_KBD_BRIGHTNESS_UP: | 804 case VKEY_KBD_BRIGHTNESS_UP: |
868 return XF86XK_KbdBrightnessUp; | 805 return XF86XK_KbdBrightnessUp; |
869 | 806 |
870 default: | 807 default: |
871 LOG(WARNING) << "Unknown keycode:" << keycode; | 808 LOG(WARNING) << "Unknown keycode:" << keycode; |
872 return 0; | 809 return 0; |
873 } | 810 } |
874 } | 811 } |
875 | 812 |
876 } // namespace ui | 813 } // namespace ui |
OLD | NEW |