| 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 |