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;