Mercurial > sdl-ios-xcode
comparison src/video/x11/SDL_x11keyboard.c @ 2296:0869721b488f
Fixed some typos in SDL_x11keyboard.c
author | Bob Pendleton <bob@pendleton.com> |
---|---|
date | Wed, 09 Jan 2008 23:40:56 +0000 |
parents | dbc6d1893869 |
children | 9f712d1e77f2 |
comparison
equal
deleted
inserted
replaced
2295:dbc6d1893869 | 2296:0869721b488f |
---|---|
27 | 27 |
28 #include <X11/keysym.h> | 28 #include <X11/keysym.h> |
29 | 29 |
30 #include "imKStoUCS.h" | 30 #include "imKStoUCS.h" |
31 | 31 |
32 /* Used for two purposes: - by X11_GetLayoutKey(), with physical = | 32 /* |
33 false, to convert a KeySym to the corresponding layout key code | 33 KeyCode-to-SDLKey translation tables for various X servers. Which |
34 (SDLK_ ones and some character ones - most character KeySyms are | 34 one to use is decided in X11_InitKeyboard(). |
35 handled by X11_KeySymToUcs4() after this function returns | |
36 SDLK_UNKNOWN for them). - by X11_InitKeyboard(), with physical = | |
37 true, to build a makeshift translation table based on the KeySyms | |
38 when none of the predefined KeyCode- to-SDLKey tables fits. This | |
39 is *not* correct anywhere but on a US layout, since the | |
40 translation table deals with physical key codes, while the X11 | |
41 KeySym corresponds to our concept of a layout key code, but it's | |
42 better than nothing. | |
43 */ | |
44 | |
45 /* KeyCode-to-SDLKey translation tables for various X servers. Which one to use | |
46 is decided in X11_InitKeyboard(). | |
47 */ | 35 */ |
48 | 36 |
49 static SDLKey macKeyCodeToSDLK[]; | 37 static SDLKey macKeyCodeToSDLK[]; |
50 static SDLKey xorgLinuxKeyCodeToSDLK[]; | 38 static SDLKey xorgLinuxKeyCodeToSDLK[]; |
51 | 39 |
60 /* These are just Mac virtual key codes + 8 (see SDL/src/video/cocoa/ | 48 /* These are just Mac virtual key codes + 8 (see SDL/src/video/cocoa/ |
61 SDL_cocoakeys.h for more info). Observed to work with Apple X11 on | 49 SDL_cocoakeys.h for more info). Observed to work with Apple X11 on |
62 Mac OS X 10.4. May also work on older Linux distributions on Mac | 50 Mac OS X 10.4. May also work on older Linux distributions on Mac |
63 hardware. | 51 hardware. |
64 */ | 52 */ |
65 static SDLKey macKeyCodeToSDLK[] = { | 53 |
54 #define KeyCodeTableSize (258) | |
55 static SDLKey macKeyCodeToSDLK[KeyCodeTableSize] = | |
56 { | |
66 /* 0 */ SDLK_UNKNOWN, | 57 /* 0 */ SDLK_UNKNOWN, |
67 /* 1 */ SDLK_UNKNOWN, | 58 /* 1 */ SDLK_UNKNOWN, |
68 /* 2 */ SDLK_UNKNOWN, | 59 /* 2 */ SDLK_UNKNOWN, |
69 /* 3 */ SDLK_UNKNOWN, | 60 /* 3 */ SDLK_UNKNOWN, |
70 /* 4 */ SDLK_UNKNOWN, | 61 /* 4 */ SDLK_UNKNOWN, |
323 | 314 |
324 /* Found mostly by experimentation with X.org on Linux (Fedora Core 4 and | 315 /* Found mostly by experimentation with X.org on Linux (Fedora Core 4 and |
325 Ubuntu Dapper) on PC and PPC Mac hardware, some parts (especially about | 316 Ubuntu Dapper) on PC and PPC Mac hardware, some parts (especially about |
326 the "multimedia"/"internet" keys) from various sources on the web. | 317 the "multimedia"/"internet" keys) from various sources on the web. |
327 */ | 318 */ |
328 static SDLKey xorgLinuxKeyCodeToSDLK[] = { | 319 static SDLKey xorgLinuxKeyCodeToSDLK[KeyCodeTableSize] = |
320 { | |
329 /* 0 */ SDLK_UNKNOWN, | 321 /* 0 */ SDLK_UNKNOWN, |
330 /* 1 */ SDLK_UNKNOWN, | 322 /* 1 */ SDLK_UNKNOWN, |
331 /* 2 */ SDLK_UNKNOWN, | 323 /* 2 */ SDLK_UNKNOWN, |
332 /* 3 */ SDLK_UNKNOWN, | 324 /* 3 */ SDLK_UNKNOWN, |
333 /* 4 */ SDLK_UNKNOWN, | 325 /* 4 */ SDLK_UNKNOWN, |
582 /* 253 */ SDLK_UNKNOWN, | 574 /* 253 */ SDLK_UNKNOWN, |
583 /* 254 */ SDLK_UNKNOWN, | 575 /* 254 */ SDLK_UNKNOWN, |
584 /* 255 */ SDLK_UNKNOWN | 576 /* 255 */ SDLK_UNKNOWN |
585 }; | 577 }; |
586 | 578 |
587 /* *INDENT-ON* */ | |
588 | |
589 /*---------------------------------------------------------------------------*/ | 579 /*---------------------------------------------------------------------------*/ |
590 | 580 |
591 /* Used by X11_KeySymToSDLKey(). This is a hybrid of a KeySym-to-layout-key | 581 /* Used by X11_KeySymToSDLKey(). This is a hybrid of a KeySym-to-layout-key |
592 mapping (needed in X11_GetLayoutKey()) and a fallback KeySym-to-physical-key | 582 mapping (needed in X11_GetLayoutKey()) and a fallback KeySym-to-physical-key |
593 mapping under the assumption of a US keyboard layout (needed in | 583 mapping under the assumption of a US keyboard layout (needed in |
607 /* SDL_KEY_LAYOUT_SPECIAL_BIT cannot possibly occur in an SDLK_ constant, so we may repurpose that bit for our own use. */ | 597 /* SDL_KEY_LAYOUT_SPECIAL_BIT cannot possibly occur in an SDLK_ constant, so we may repurpose that bit for our own use. */ |
608 static struct | 598 static struct |
609 { | 599 { |
610 KeySym sym; | 600 KeySym sym; |
611 SDLKey key; | 601 SDLKey key; |
612 } keySymToSDLKey[] = { | 602 } keySymToSDLKey[KeyCodeTableSize] = |
603 { | |
613 /* 0x00xx */ | 604 /* 0x00xx */ |
614 { | 605 {XK_space, SDLK_SPACE}, |
615 XK_space, SDLK_SPACE}, { | 606 {XK_apostrophe, SDLK_APOSTROPHE | X11_KEY_PHYSICAL_ONLY_BIT}, |
616 XK_apostrophe, SDLK_APOSTROPHE | X11_KEY_PHYSICAL_ONLY_BIT}, { | 607 {XK_comma, SDLK_COMMA | X11_KEY_PHYSICAL_ONLY_BIT}, |
617 XK_comma, SDLK_COMMA | X11_KEY_PHYSICAL_ONLY_BIT}, { | 608 {XK_minus, SDLK_HYPHENMINUS | X11_KEY_PHYSICAL_ONLY_BIT}, |
618 XK_minus, SDLK_HYPHENMINUS | X11_KEY_PHYSICAL_ONLY_BIT}, { | 609 {XK_period, SDLK_PERIOD | X11_KEY_PHYSICAL_ONLY_BIT}, |
619 XK_period, SDLK_PERIOD | X11_KEY_PHYSICAL_ONLY_BIT}, { | 610 {XK_slash, SDLK_SLASH | X11_KEY_PHYSICAL_ONLY_BIT}, |
620 XK_slash, SDLK_SLASH | X11_KEY_PHYSICAL_ONLY_BIT}, { | 611 {XK_0, SDLK_0 | X11_KEY_PHYSICAL_ONLY_BIT}, |
621 XK_0, SDLK_0 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 612 {XK_1, SDLK_1 | X11_KEY_PHYSICAL_ONLY_BIT}, |
622 XK_1, SDLK_1 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 613 {XK_2, SDLK_2 | X11_KEY_PHYSICAL_ONLY_BIT}, |
623 XK_2, SDLK_2 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 614 {XK_3, SDLK_3 | X11_KEY_PHYSICAL_ONLY_BIT}, |
624 XK_3, SDLK_3 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 615 {XK_4, SDLK_4 | X11_KEY_PHYSICAL_ONLY_BIT}, |
625 XK_4, SDLK_4 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 616 {XK_5, SDLK_5 | X11_KEY_PHYSICAL_ONLY_BIT}, |
626 XK_5, SDLK_5 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 617 {XK_6, SDLK_6 | X11_KEY_PHYSICAL_ONLY_BIT}, |
627 XK_6, SDLK_6 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 618 {XK_7, SDLK_7 | X11_KEY_PHYSICAL_ONLY_BIT}, |
628 XK_7, SDLK_7 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 619 {XK_8, SDLK_8 | X11_KEY_PHYSICAL_ONLY_BIT}, |
629 XK_8, SDLK_8 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 620 {XK_9, SDLK_9 | X11_KEY_PHYSICAL_ONLY_BIT}, |
630 XK_9, SDLK_9 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 621 {XK_semicolon, SDLK_SEMICOLON | X11_KEY_PHYSICAL_ONLY_BIT}, |
631 XK_semicolon, SDLK_SEMICOLON | X11_KEY_PHYSICAL_ONLY_BIT}, { | 622 {XK_less, SDLK_NONUSBACKSLASH | X11_KEY_PHYSICAL_ONLY_BIT}, |
632 XK_less, SDLK_NONUSBACKSLASH | X11_KEY_PHYSICAL_ONLY_BIT}, { | 623 {XK_equal, SDLK_EQUALS | X11_KEY_PHYSICAL_ONLY_BIT}, |
633 XK_equal, SDLK_EQUALS | X11_KEY_PHYSICAL_ONLY_BIT}, { | 624 {XK_bracketleft, SDLK_LEFTBRACKET | X11_KEY_PHYSICAL_ONLY_BIT}, |
634 XK_bracketleft, SDLK_LEFTBRACKET | X11_KEY_PHYSICAL_ONLY_BIT}, { | 625 {XK_backslash, SDLK_BACKSLASH | X11_KEY_PHYSICAL_ONLY_BIT}, |
635 XK_backslash, SDLK_BACKSLASH | X11_KEY_PHYSICAL_ONLY_BIT}, { | 626 {XK_bracketright, SDLK_RIGHTBRACKET | X11_KEY_PHYSICAL_ONLY_BIT}, |
636 XK_bracketright, SDLK_RIGHTBRACKET | X11_KEY_PHYSICAL_ONLY_BIT}, { | 627 {XK_grave, SDLK_GRAVE | X11_KEY_PHYSICAL_ONLY_BIT}, |
637 XK_grave, SDLK_GRAVE | X11_KEY_PHYSICAL_ONLY_BIT}, { | 628 {XK_a, SDLK_A | X11_KEY_PHYSICAL_ONLY_BIT}, |
638 XK_a, SDLK_A | X11_KEY_PHYSICAL_ONLY_BIT}, { | 629 {XK_b, SDLK_B | X11_KEY_PHYSICAL_ONLY_BIT}, |
639 XK_b, SDLK_B | X11_KEY_PHYSICAL_ONLY_BIT}, { | 630 {XK_c, SDLK_C | X11_KEY_PHYSICAL_ONLY_BIT}, |
640 XK_c, SDLK_C | X11_KEY_PHYSICAL_ONLY_BIT}, { | 631 {XK_d, SDLK_D | X11_KEY_PHYSICAL_ONLY_BIT}, |
641 XK_d, SDLK_D | X11_KEY_PHYSICAL_ONLY_BIT}, { | 632 {XK_e, SDLK_E | X11_KEY_PHYSICAL_ONLY_BIT}, |
642 XK_e, SDLK_E | X11_KEY_PHYSICAL_ONLY_BIT}, { | 633 {XK_f, SDLK_F | X11_KEY_PHYSICAL_ONLY_BIT}, |
643 XK_f, SDLK_F | X11_KEY_PHYSICAL_ONLY_BIT}, { | 634 {XK_g, SDLK_G | X11_KEY_PHYSICAL_ONLY_BIT}, |
644 XK_g, SDLK_G | X11_KEY_PHYSICAL_ONLY_BIT}, { | 635 {XK_h, SDLK_H | X11_KEY_PHYSICAL_ONLY_BIT}, |
645 XK_h, SDLK_H | X11_KEY_PHYSICAL_ONLY_BIT}, { | 636 {XK_i, SDLK_I | X11_KEY_PHYSICAL_ONLY_BIT}, |
646 XK_i, SDLK_I | X11_KEY_PHYSICAL_ONLY_BIT}, { | 637 {XK_j, SDLK_J | X11_KEY_PHYSICAL_ONLY_BIT}, |
647 XK_j, SDLK_J | X11_KEY_PHYSICAL_ONLY_BIT}, { | 638 {XK_k, SDLK_K | X11_KEY_PHYSICAL_ONLY_BIT}, |
648 XK_k, SDLK_K | X11_KEY_PHYSICAL_ONLY_BIT}, { | 639 {XK_l, SDLK_L | X11_KEY_PHYSICAL_ONLY_BIT}, |
649 XK_l, SDLK_L | X11_KEY_PHYSICAL_ONLY_BIT}, { | 640 {XK_m, SDLK_M | X11_KEY_PHYSICAL_ONLY_BIT}, |
650 XK_m, SDLK_M | X11_KEY_PHYSICAL_ONLY_BIT}, { | 641 {XK_n, SDLK_N | X11_KEY_PHYSICAL_ONLY_BIT}, |
651 XK_n, SDLK_N | X11_KEY_PHYSICAL_ONLY_BIT}, { | 642 {XK_o, SDLK_O | X11_KEY_PHYSICAL_ONLY_BIT}, |
652 XK_o, SDLK_O | X11_KEY_PHYSICAL_ONLY_BIT}, { | 643 {XK_p, SDLK_P | X11_KEY_PHYSICAL_ONLY_BIT}, |
653 XK_p, SDLK_P | X11_KEY_PHYSICAL_ONLY_BIT}, { | 644 {XK_q, SDLK_Q | X11_KEY_PHYSICAL_ONLY_BIT}, |
654 XK_q, SDLK_Q | X11_KEY_PHYSICAL_ONLY_BIT}, { | 645 {XK_r, SDLK_R | X11_KEY_PHYSICAL_ONLY_BIT}, |
655 XK_r, SDLK_R | X11_KEY_PHYSICAL_ONLY_BIT}, { | 646 {XK_s, SDLK_S | X11_KEY_PHYSICAL_ONLY_BIT}, |
656 XK_s, SDLK_S | X11_KEY_PHYSICAL_ONLY_BIT}, { | 647 {XK_t, SDLK_T | X11_KEY_PHYSICAL_ONLY_BIT}, |
657 XK_t, SDLK_T | X11_KEY_PHYSICAL_ONLY_BIT}, { | 648 {XK_u, SDLK_U | X11_KEY_PHYSICAL_ONLY_BIT}, |
658 XK_u, SDLK_U | X11_KEY_PHYSICAL_ONLY_BIT}, { | 649 {XK_v, SDLK_V | X11_KEY_PHYSICAL_ONLY_BIT}, |
659 XK_v, SDLK_V | X11_KEY_PHYSICAL_ONLY_BIT}, { | 650 {XK_w, SDLK_W | X11_KEY_PHYSICAL_ONLY_BIT}, |
660 XK_w, SDLK_W | X11_KEY_PHYSICAL_ONLY_BIT}, { | 651 {XK_x, SDLK_X | X11_KEY_PHYSICAL_ONLY_BIT}, |
661 XK_x, SDLK_X | X11_KEY_PHYSICAL_ONLY_BIT}, { | 652 {XK_y, SDLK_Y | X11_KEY_PHYSICAL_ONLY_BIT}, |
662 XK_y, SDLK_Y | X11_KEY_PHYSICAL_ONLY_BIT}, { | 653 {XK_z, SDLK_Z | X11_KEY_PHYSICAL_ONLY_BIT}, |
663 XK_z, SDLK_Z | X11_KEY_PHYSICAL_ONLY_BIT}, { | 654 {XK_section, SDLK_NONUSBACKSLASH | X11_KEY_PHYSICAL_ONLY_BIT}, |
664 XK_section, SDLK_NONUSBACKSLASH | X11_KEY_PHYSICAL_ONLY_BIT}, | |
665 /* 0xFExx */ | 655 /* 0xFExx */ |
666 { | 656 {XK_ISO_Level3_Shift, SDLK_RALT}, |
667 XK_ISO_Level3_Shift, SDLK_RALT}, { | 657 {XK_dead_grave, '`'}, |
668 XK_dead_grave, '`'}, { | 658 {XK_dead_acute, 0xB4}, |
669 XK_dead_acute, 0xB4}, { | 659 {XK_dead_circumflex, '^'}, |
670 XK_dead_circumflex, '^'}, { | 660 {XK_dead_tilde, '~'}, |
671 XK_dead_tilde, '~'}, { | 661 {XK_dead_macron, 0xAF}, |
672 XK_dead_macron, 0xAF}, { | 662 {XK_dead_breve, 0x2D8}, |
673 XK_dead_breve, 0x2D8}, { | 663 {XK_dead_abovedot, 0x2D9}, |
674 XK_dead_abovedot, 0x2D9}, { | 664 {XK_dead_diaeresis, 0xA8}, |
675 XK_dead_diaeresis, 0xA8}, { | 665 {XK_dead_abovering, 0x2DA}, |
676 XK_dead_abovering, 0x2DA}, { | 666 {XK_dead_doubleacute, 0x2DD}, |
677 XK_dead_doubleacute, 0x2DD}, { | 667 {XK_dead_caron, 0x2C7}, |
678 XK_dead_caron, 0x2C7}, { | 668 {XK_dead_cedilla, 0xB8}, |
679 XK_dead_cedilla, 0xB8}, { | 669 {XK_dead_ogonek, 0x2DB}, |
680 XK_dead_ogonek, 0x2DB}, { | 670 {XK_dead_iota, 0x3B9}, |
681 XK_dead_iota, 0x3B9}, { | 671 {XK_dead_voiced_sound, 0x309B}, |
682 XK_dead_voiced_sound, 0x309B}, { | 672 {XK_dead_semivoiced_sound, 0x309C}, |
683 XK_dead_semivoiced_sound, 0x309C}, { | 673 {XK_dead_belowdot, 0xB7}, /* that's actually MIDDLE DOT, |
684 XK_dead_belowdot, 0xB7}, /* that's actually MIDDLE DOT, but I haven't found a non-combining DOT BELOW */ | 674 but I haven't found a |
685 /* XK_dead_hook, XK_dead_horn: I haven't found non-combining HOOK and HORN characters */ | 675 non-combining DOT BELOW |
686 /* 0xFFxx */ | 676 XK_dead_hook, XK_dead_horn: I |
687 { | 677 haven't found non-combining |
688 XK_BackSpace, SDLK_BACKSPACE}, { | 678 HOOK and HORN characters */ |
689 XK_Tab, SDLK_TAB}, { | 679 /* 0xFFxx */ |
690 XK_Return, SDLK_RETURN}, { | 680 {XK_BackSpace, SDLK_BACKSPACE}, |
691 XK_Pause, SDLK_PAUSE}, { | 681 {XK_Tab, SDLK_TAB}, |
692 XK_Scroll_Lock, SDLK_SCROLLLOCK}, { | 682 {XK_Return, SDLK_RETURN}, |
693 XK_Escape, SDLK_ESCAPE}, { | 683 {XK_Pause, SDLK_PAUSE}, |
694 XK_Home, SDLK_HOME}, { | 684 {XK_Scroll_Lock, SDLK_SCROLLLOCK}, |
695 XK_Left, SDLK_LEFT}, { | 685 {XK_Escape, SDLK_ESCAPE}, |
696 XK_Up, SDLK_UP}, { | 686 {XK_Home, SDLK_HOME}, |
697 XK_Right, SDLK_RIGHT}, { | 687 {XK_Left, SDLK_LEFT}, |
698 XK_Down, SDLK_DOWN}, { | 688 {XK_Up, SDLK_UP}, |
699 XK_Page_Up, SDLK_PAGEUP}, { | 689 {XK_Right, SDLK_RIGHT}, |
700 XK_Page_Down, SDLK_PAGEDOWN}, { | 690 {XK_Down, SDLK_DOWN}, |
701 XK_End, SDLK_END}, { | 691 {XK_Page_Up, SDLK_PAGEUP}, |
702 XK_Print, SDLK_PRINTSCREEN}, { | 692 {XK_Page_Down, SDLK_PAGEDOWN}, |
703 XK_Insert, SDLK_INSERT}, { | 693 {XK_End, SDLK_END}, |
704 XK_Menu, SDLK_APPLICATION}, { | 694 {XK_Print, SDLK_PRINTSCREEN}, |
705 XK_Break, SDLK_PAUSE}, { | 695 {XK_Insert, SDLK_INSERT}, |
706 XK_Mode_switch, SDLK_MODE}, { | 696 {XK_Menu, SDLK_APPLICATION}, |
707 XK_Num_Lock, SDLK_KP_NUMLOCKCLEAR}, { | 697 {XK_Break, SDLK_PAUSE}, |
708 XK_KP_Enter, SDLK_KP_ENTER}, { | 698 {XK_Mode_switch, SDLK_MODE}, |
709 XK_KP_Home, SDLK_KP_7 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 699 {XK_Num_Lock, SDLK_KP_NUMLOCKCLEAR}, |
710 XK_KP_Left, SDLK_KP_4 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 700 {XK_KP_Enter, SDLK_KP_ENTER}, |
711 XK_KP_Up, SDLK_KP_8 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 701 {XK_KP_Home, SDLK_KP_7 | X11_KEY_PHYSICAL_ONLY_BIT}, |
712 XK_KP_Right, SDLK_KP_6 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 702 {XK_KP_Left, SDLK_KP_4 | X11_KEY_PHYSICAL_ONLY_BIT}, |
713 XK_KP_Down, SDLK_KP_2 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 703 {XK_KP_Up, SDLK_KP_8 | X11_KEY_PHYSICAL_ONLY_BIT}, |
714 XK_KP_Page_Up, SDLK_KP_9 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 704 {XK_KP_Right, SDLK_KP_6 | X11_KEY_PHYSICAL_ONLY_BIT}, |
715 XK_KP_Page_Down, SDLK_KP_3 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 705 {XK_KP_Down, SDLK_KP_2 | X11_KEY_PHYSICAL_ONLY_BIT}, |
716 XK_KP_End, SDLK_KP_1 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 706 {XK_KP_Page_Up, SDLK_KP_9 | X11_KEY_PHYSICAL_ONLY_BIT}, |
717 XK_KP_Begin, SDLK_KP_5 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 707 {XK_KP_Page_Down, SDLK_KP_3 | X11_KEY_PHYSICAL_ONLY_BIT}, |
718 XK_KP_Insert, SDLK_KP_0 | X11_KEY_PHYSICAL_ONLY_BIT}, { | 708 {XK_KP_End, SDLK_KP_1 | X11_KEY_PHYSICAL_ONLY_BIT}, |
719 XK_KP_Delete, SDLK_KP_PERIOD | X11_KEY_PHYSICAL_ONLY_BIT}, { | 709 {XK_KP_Begin, SDLK_KP_5 | X11_KEY_PHYSICAL_ONLY_BIT}, |
720 XK_KP_Multiply, '*'}, { | 710 {XK_KP_Insert, SDLK_KP_0 | X11_KEY_PHYSICAL_ONLY_BIT}, |
721 XK_KP_Multiply, SDLK_KP_MULTIPLY}, { | 711 {XK_KP_Delete, SDLK_KP_PERIOD | X11_KEY_PHYSICAL_ONLY_BIT}, |
722 XK_KP_Add, '+'}, { | 712 {XK_KP_Multiply, '*'}, |
723 XK_KP_Add, SDLK_KP_PLUS}, { | 713 {XK_KP_Multiply, SDLK_KP_MULTIPLY}, |
724 XK_KP_Separator, '.'}, { | 714 {XK_KP_Add, '+'}, |
725 XK_KP_Separator, SDLK_KP_PERIOD}, { | 715 {XK_KP_Add, SDLK_KP_PLUS}, |
726 XK_KP_Subtract, '-'}, { | 716 {XK_KP_Separator, '.'}, |
727 XK_KP_Subtract, SDLK_KP_MINUS}, { | 717 {XK_KP_Separator, SDLK_KP_PERIOD}, |
728 XK_KP_Decimal, '.'}, { | 718 {XK_KP_Subtract, '-'}, |
729 XK_KP_Decimal, SDLK_KP_PERIOD}, { | 719 {XK_KP_Subtract, SDLK_KP_MINUS}, |
730 XK_KP_Divide, '/'}, { | 720 {XK_KP_Decimal, '.'}, |
731 XK_KP_Divide, SDLK_KP_DIVIDE}, { | 721 {XK_KP_Decimal, SDLK_KP_PERIOD}, |
732 XK_KP_0, '0'}, { | 722 {XK_KP_Divide, '/'}, |
733 XK_KP_0, SDLK_KP_0}, { | 723 {XK_KP_Divide, SDLK_KP_DIVIDE}, |
734 XK_KP_1, '1'}, { | 724 {XK_KP_0, '0'}, |
735 XK_KP_1, SDLK_KP_1}, { | 725 {XK_KP_0, SDLK_KP_0}, |
736 XK_KP_2, '2'}, { | 726 {XK_KP_1, '1'}, |
737 XK_KP_2, SDLK_KP_2}, { | 727 {XK_KP_1, SDLK_KP_1}, |
738 XK_KP_3, '3'}, { | 728 {XK_KP_2, '2'}, |
739 XK_KP_3, SDLK_KP_3}, { | 729 {XK_KP_2, SDLK_KP_2}, |
740 XK_KP_4, '4'}, { | 730 {XK_KP_3, '3'}, |
741 XK_KP_4, SDLK_KP_4}, { | 731 {XK_KP_3, SDLK_KP_3}, |
742 XK_KP_5, '5'}, { | 732 {XK_KP_4, '4'}, |
743 XK_KP_5, SDLK_KP_5}, { | 733 {XK_KP_4, SDLK_KP_4}, |
744 XK_KP_6, '6'}, { | 734 {XK_KP_5, '5'}, |
745 XK_KP_6, SDLK_KP_6}, { | 735 {XK_KP_5, SDLK_KP_5}, |
746 XK_KP_7, '7'}, { | 736 {XK_KP_6, '6'}, |
747 XK_KP_7, SDLK_KP_7}, { | 737 {XK_KP_6, SDLK_KP_6}, |
748 XK_KP_8, '8'}, { | 738 {XK_KP_7, '7'}, |
749 XK_KP_8, SDLK_KP_8}, { | 739 {XK_KP_7, SDLK_KP_7}, |
750 XK_KP_9, '9'}, { | 740 {XK_KP_8, '8'}, |
751 XK_KP_9, SDLK_KP_9}, { | 741 {XK_KP_8, SDLK_KP_8}, |
752 XK_KP_Equal, '='}, { | 742 {XK_KP_9, '9'}, |
753 XK_KP_Equal, SDLK_KP_EQUALS}, { | 743 {XK_KP_9, SDLK_KP_9}, |
754 XK_F1, SDLK_F1}, { | 744 {XK_KP_Equal, '='}, |
755 XK_F2, SDLK_F2}, { | 745 {XK_KP_Equal, SDLK_KP_EQUALS}, |
756 XK_F3, SDLK_F3}, { | 746 {XK_F1, SDLK_F1}, |
757 XK_F4, SDLK_F4}, { | 747 {XK_F2, SDLK_F2}, |
758 XK_F5, SDLK_F5}, { | 748 {XK_F3, SDLK_F3}, |
759 XK_F6, SDLK_F6}, { | 749 {XK_F4, SDLK_F4}, |
760 XK_F7, SDLK_F7}, { | 750 {XK_F5, SDLK_F5}, |
761 XK_F8, SDLK_F8}, { | 751 {XK_F6, SDLK_F6}, |
762 XK_F9, SDLK_F9}, { | 752 {XK_F7, SDLK_F7}, |
763 XK_F10, SDLK_F10}, { | 753 {XK_F8, SDLK_F8}, |
764 XK_F11, SDLK_F11}, { | 754 {XK_F9, SDLK_F9}, |
765 XK_F12, SDLK_F12}, { | 755 {XK_F10, SDLK_F10}, |
766 XK_F13, SDLK_F13}, { | 756 {XK_F11, SDLK_F11}, |
767 XK_F14, SDLK_F14}, { | 757 {XK_F12, SDLK_F12}, |
768 XK_F15, SDLK_F15}, { | 758 {XK_F13, SDLK_F13}, |
769 XK_F16, SDLK_F16}, { | 759 {XK_F14, SDLK_F14}, |
770 XK_F17, SDLK_F17}, { | 760 {XK_F15, SDLK_F15}, |
771 XK_F18, SDLK_F18}, { | 761 {XK_F16, SDLK_F16}, |
772 XK_F19, SDLK_F19}, { | 762 {XK_F17, SDLK_F17}, |
773 XK_F20, SDLK_F20}, { | 763 {XK_F18, SDLK_F18}, |
774 XK_F21, SDLK_F21}, { | 764 {XK_F19, SDLK_F19}, |
775 XK_F22, SDLK_F22}, { | 765 {XK_F20, SDLK_F20}, |
776 XK_F23, SDLK_F23}, { | 766 {XK_F21, SDLK_F21}, |
777 XK_F24, SDLK_F24}, { | 767 {XK_F22, SDLK_F22}, |
778 XK_Shift_L, SDLK_LSHIFT}, { | 768 {XK_F23, SDLK_F23}, |
779 XK_Shift_R, SDLK_RSHIFT}, { | 769 {XK_F24, SDLK_F24}, |
780 XK_Control_L, SDLK_LCTRL}, { | 770 {XK_Shift_L, SDLK_LSHIFT}, |
781 XK_Control_R, SDLK_RCTRL}, { | 771 {XK_Shift_R, SDLK_RSHIFT}, |
782 XK_Caps_Lock, SDLK_CAPSLOCK}, { | 772 {XK_Control_L, SDLK_LCTRL}, |
783 XK_Shift_Lock, SDLK_CAPSLOCK}, { | 773 {XK_Control_R, SDLK_RCTRL}, |
784 XK_Meta_L, SDLK_LMETA}, { | 774 {XK_Caps_Lock, SDLK_CAPSLOCK}, |
785 XK_Meta_R, SDLK_RMETA}, { | 775 {XK_Shift_Lock, SDLK_CAPSLOCK}, |
786 XK_Alt_L, SDLK_LALT}, { | 776 {XK_Meta_L, SDLK_LMETA}, |
787 XK_Alt_R, SDLK_RALT}, { | 777 {XK_Meta_R, SDLK_RMETA}, |
788 XK_Super_L, SDLK_LMETA}, { | 778 {XK_Alt_L, SDLK_LALT}, |
789 XK_Super_R, SDLK_RMETA}, { | 779 {XK_Alt_R, SDLK_RALT}, |
790 XK_Hyper_L, SDLK_LMETA}, { | 780 {XK_Super_L, SDLK_LMETA}, |
791 XK_Hyper_R, SDLK_RMETA}, { | 781 {XK_Super_R, SDLK_RMETA}, |
792 XK_Delete, SDLK_DELETE}, { | 782 {XK_Hyper_L, SDLK_LMETA}, |
793 0x1000003, SDLK_KP_ENTER} /* keyboard enter on Mac OS X */ | 783 {XK_Hyper_R, SDLK_RMETA}, |
784 {XK_Delete, SDLK_DELETE}, | |
785 {0x1000003, SDLK_KP_ENTER} /* keyboard enter on Mac OS X */ | |
794 }; | 786 }; |
787 | |
788 /* *INDENT-ON* */ | |
789 | |
790 /* | |
791 Used for two purposes: - by X11_GetLayoutKey(), with physical = | |
792 false, to convert a KeySym to the corresponding layout key code | |
793 (SDLK_ ones and some character ones - most character KeySyms are | |
794 handled by X11_KeySymToUcs4() after this function returns | |
795 SDLK_UNKNOWN for them). - by X11_InitKeyboard(), with physical = | |
796 true, to build a makeshift translation table based on the KeySyms | |
797 when none of the predefined KeyCode- to-SDLKey tables fits. This | |
798 is *not* correct anywhere but on a US layout, since the | |
799 translation table deals with physical key codes, while the X11 | |
800 KeySym corresponds to our concept of a layout key code, but it's | |
801 better than nothing. | |
802 */ | |
795 | 803 |
796 static SDLKey | 804 static SDLKey |
797 X11_KeySymToSDLKey(KeySym sym, SDL_bool physical) | 805 X11_KeySymToSDLKey(KeySym sym, SDL_bool physical) |
798 { | 806 { |
799 /* Do a binary search for sym in the keySymToSDLKey table */ | 807 /* Do a binary search for sym in the keySymToSDLKey table */ |
848 please adjust). Using XKeysymToKeycode on these KeySyms | 856 please adjust). Using XKeysymToKeycode on these KeySyms |
849 creates a "fingerprint" of the X server's key-to-KeyCode | 857 creates a "fingerprint" of the X server's key-to-KeyCode |
850 mapping which is then matched against all our predefined | 858 mapping which is then matched against all our predefined |
851 KeyCodeToSDLK tables to find the right one (if any). | 859 KeyCodeToSDLK tables to find the right one (if any). |
852 */ | 860 */ |
861 | |
862 /* *INDENT-ON* */ | |
853 struct | 863 struct |
854 { | 864 { |
855 KeySym sym; | 865 KeySym sym; |
856 SDLKey key; | 866 SDLKey key; |
857 } fingerprint[] = { | 867 } fingerprint[] = { |
859 XK_Tab, SDLK_TAB}, { | 869 XK_Tab, SDLK_TAB}, { |
860 XK_Return, SDLK_RETURN}, { | 870 XK_Return, SDLK_RETURN}, { |
861 XK_Escape, SDLK_ESCAPE}, { | 871 XK_Escape, SDLK_ESCAPE}, { |
862 XK_space, SDLK_SPACE} | 872 XK_space, SDLK_SPACE} |
863 }; | 873 }; |
874 /* *INDENT-OFF* */ | |
864 | 875 |
865 SDL_zero(keyboard); | 876 SDL_zero(keyboard); |
866 data->keyboard = SDL_AddKeyboard(&keyboard, -1); | 877 data->keyboard = SDL_AddKeyboard(&keyboard, -1); |
867 | 878 |
868 /* Determine which X11 KeyCode to SDL physical key code table to use */ | 879 /* Determine which X11 KeyCode to SDL physical key code table to use */ |
973 break; /* just to avoid a compiler warning */ | 984 break; /* just to avoid a compiler warning */ |
974 } | 985 } |
975 | 986 |
976 /* Look up physicalKey to get an X11 KeyCode - linear search isn't | 987 /* Look up physicalKey to get an X11 KeyCode - linear search isn't |
977 terribly efficient, this might have to be optimized. */ | 988 terribly efficient, this might have to be optimized. */ |
978 while ((code < SDL_arraysize(xorgLinuxKeyCodeToSDLK) && physicalKey) | 989 while ((code < SDL_arraysize(xorgLinuxKeyCodeToSDLK)) && |
979 != data->keyCodeToSDLKTable[code]) { | 990 (physicalKey != data->keyCodeToSDLKTable[code])) { |
980 code++; | 991 code++; |
981 } | 992 } |
982 | 993 |
983 if (code == SDL_arraysize(xorgLinuxKeyCodeToSDLK)) { | 994 if (code == SDL_arraysize(xorgLinuxKeyCodeToSDLK)) { |
984 return physicalKey; | 995 return physicalKey; |