Changeset 1877 in vbox for trunk/src/VBox
- Timestamp:
- Apr 3, 2007 12:11:46 PM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 20115
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp
r1473 r1877 129 129 static bool UseAbsoluteMouse(void); 130 130 static void ResetKeys(void); 131 static uint8_t Keyevent2Keycode(const SDL_KeyboardEvent *ev);132 131 static void ProcessKey(SDL_KeyboardEvent *ev); 133 132 static void InputGrabStart(void); … … 2586 2585 * @param ev SDL scancode 2587 2586 */ 2588 static uint 8_t Keyevent2KeycodeFallback(const SDL_KeyboardEvent *ev)2587 static uint16_t Keyevent2KeycodeFallback(const SDL_KeyboardEvent *ev) 2589 2588 { 2590 2589 const SDLKey sym = ev->keysym.sym; … … 2633 2632 case SDLK_RIGHTBRACKET: return 0x1b; 2634 2633 case SDLK_RETURN: return 0x1c; 2635 case SDLK_KP_ENTER: return 0x1c | 0x 80;2634 case SDLK_KP_ENTER: return 0x1c | 0x100; 2636 2635 case SDLK_LCTRL: return 0x1d; 2637 case SDLK_RCTRL: return 0x1d | 0x 80;2636 case SDLK_RCTRL: return 0x1d | 0x100; 2638 2637 case SDLK_a: return 0x1e; 2639 2638 case SDLK_s: return 0x1f; … … 2671 2670 case SDLK_LALT: return 0x38; 2672 2671 case SDLK_MODE: /* alt gr*/ 2673 case SDLK_RALT: return 0x38 | 0x 80;2672 case SDLK_RALT: return 0x38 | 0x100; 2674 2673 case SDLK_SPACE: return 0x39; 2675 2674 case SDLK_CAPSLOCK: return 0x3a; … … 2688 2687 case SDLK_SCROLLOCK: return 0x46; 2689 2688 case SDLK_KP7: return 0x47; 2690 case SDLK_HOME: return 0x47 | 0x 80;2689 case SDLK_HOME: return 0x47 | 0x100; 2691 2690 case SDLK_KP8: return 0x48; 2692 case SDLK_UP: return 0x48 | 0x 80;2691 case SDLK_UP: return 0x48 | 0x100; 2693 2692 case SDLK_KP9: return 0x49; 2694 case SDLK_PAGEUP: return 0x49 | 0x 80;2693 case SDLK_PAGEUP: return 0x49 | 0x100; 2695 2694 case SDLK_KP_MINUS: return 0x4a; 2696 2695 case SDLK_KP4: return 0x4b; 2697 case SDLK_LEFT: return 0x4b | 0x 80;2696 case SDLK_LEFT: return 0x4b | 0x100; 2698 2697 case SDLK_KP5: return 0x4c; 2699 2698 case SDLK_KP6: return 0x4d; 2700 case SDLK_RIGHT: return 0x4d | 0x 80;2699 case SDLK_RIGHT: return 0x4d | 0x100; 2701 2700 case SDLK_KP_PLUS: return 0x4e; 2702 2701 case SDLK_KP1: return 0x4f; 2703 case SDLK_END: return 0x4f | 0x 80;2702 case SDLK_END: return 0x4f | 0x100; 2704 2703 case SDLK_KP2: return 0x50; 2705 case SDLK_DOWN: return 0x50 | 0x 80;2704 case SDLK_DOWN: return 0x50 | 0x100; 2706 2705 case SDLK_KP3: return 0x51; 2707 case SDLK_PAGEDOWN: return 0x51 | 0x 80;2706 case SDLK_PAGEDOWN: return 0x51 | 0x100; 2708 2707 case SDLK_KP0: return 0x52; 2709 case SDLK_INSERT: return 0x52 | 0x 80;2708 case SDLK_INSERT: return 0x52 | 0x100; 2710 2709 case SDLK_KP_PERIOD: return 0x53; 2711 case SDLK_DELETE: return 0x53 | 0x 80;2710 case SDLK_DELETE: return 0x53 | 0x100; 2712 2711 case SDLK_SYSREQ: return 0x54; 2713 2712 case SDLK_F11: return 0x57; … … 2715 2714 case SDLK_F13: return 0x5b; 2716 2715 case SDLK_LMETA: 2717 case SDLK_LSUPER: return 0x5b | 0x 80;2716 case SDLK_LSUPER: return 0x5b | 0x100; 2718 2717 case SDLK_F14: return 0x5c; 2719 2718 case SDLK_RMETA: 2720 case SDLK_RSUPER: return 0x5c | 0x 80;2719 case SDLK_RSUPER: return 0x5c | 0x100; 2721 2720 case SDLK_F15: return 0x5d; 2722 case SDLK_MENU: return 0x5d | 0x 80;2721 case SDLK_MENU: return 0x5d | 0x100; 2723 2722 #if 0 2724 2723 case SDLK_CLEAR: return 0x; … … 2745 2744 * @param ev SDL scancode 2746 2745 */ 2747 static uint 8_t Keyevent2Keycode(const SDL_KeyboardEvent *ev)2746 static uint16_t Keyevent2Keycode(const SDL_KeyboardEvent *ev) 2748 2747 { 2749 int keycode;2750 2751 2748 // start with the scancode determined by SDL 2752 keycode = ev->keysym.scancode;2749 int keycode = ev->keysym.scancode; 2753 2750 2754 2751 #ifdef __LINUX__ 2755 2752 // workaround for SDL keyboard translation issues on Linux 2756 2753 // keycodes > 0x80 are sent as 0xe0 keycode 2757 static const uint 8_t x_keycode_to_pc_keycode[61] =2758 { 2759 0x c7,/* 97 Home */2760 0x c8,/* 98 Up */2761 0x c9,/* 99 PgUp */2762 0x cb,/* 100 Left */2763 0x4c, /* 101 KP-5 */2764 0x cd,/* 102 Right */2765 0x cf,/* 103 End */2766 0x d0,/* 104 Down */2767 0x d1,/* 105 PgDn */2768 0x d2,/* 106 Ins */2769 0x d3,/* 107 Del */2770 0x 9c,/* 108 Enter */2771 0x 9d,/* 109 Ctrl-R */2772 0x0, /* 110 Pause */2773 0x b7,/* 111 Print */2774 0x b5,/* 112 Divide */2775 0x b8,/* 113 Alt-R */2776 0x c6,/* 114 Break */2777 0x db,/* 115 Win Left */2778 0x dc,/* 116 Win Right */2779 0x dd,/* 117 Win Menu */2780 0x0, /* 118 */2781 0x0, /* 119 */2782 0x 70, /* 120 Hiragana_Katakana*/2783 0x 0, /* 121*/2784 0x 0, /* 122*/2785 0x 73, /* 123 backslash*/2786 0x0, /* 124 */2787 0x0, /* 125 */2788 0x0, /* 126 */2789 0x0, /* 127 */2790 0x0, /* 128 */2791 0x79, /* 129Henkan */2792 0x0, /* 130 */2793 0x7b, /* 131Muhenkan */2794 0x0, /* 132 */2795 0x7d, /* 133Yen */2796 0x 0, /* 134*/2797 0x0, /* 135 */2798 0x47, /* 136KP_7 */2799 0x48, /* 137KP_8 */2800 0x49, /* 138KP_9 */2801 0x4b, /* 139KP_4 */2802 0x4c, /* 140KP_5 */2803 0x4d, /* 141KP_6 */2804 0x4f, /* 142KP_1 */2805 0x50, /* 143KP_2 */2806 0x51, /* 144KP_3 */2807 0x52, /* 145KP_0 */2808 0x53, /* 146KP_. */2809 0x47, /* 147KP_HOME */2810 0x48, /* 148KP_UP */2811 0x49, /* 149KP_PgUp */2812 0x4b, /* 150KP_Left */2813 0x4c, /* 151KP_ */2814 0x4d, /* 152KP_Right */2815 0x4f, /* 153KP_End */2816 0x50, /* 154KP_Down */2817 0x51, /* 155KP_PgDn */2818 0x52, /* 156KP_Ins */2819 0x53, /* 157KP_Del */2754 static const uint16_t x_keycode_to_pc_keycode[61] = 2755 { 2756 0x47|0x100, /* 97 Home */ 2757 0x48|0x100, /* 98 Up */ 2758 0x49|0x100, /* 99 PgUp */ 2759 0x4b|0x100, /* 100 Left */ 2760 0x4c, /* 101 KP-5 */ 2761 0x4d|0x100, /* 102 Right */ 2762 0x4f|0x100, /* 103 End */ 2763 0x50|0x100, /* 104 Down */ 2764 0x51|0x100, /* 105 PgDn */ 2765 0x52|0x100, /* 106 Ins */ 2766 0x53|0x100, /* 107 Del */ 2767 0x1c|0x100, /* 108 Enter */ 2768 0x1d|0x100, /* 109 Ctrl-R */ 2769 0x0, /* 110 Pause */ 2770 0x37|0x100, /* 111 Print */ 2771 0x35|0x100, /* 112 Divide */ 2772 0x38|0x100, /* 113 Alt-R */ 2773 0x46|0x100, /* 114 Break */ 2774 0x5b|0x100, /* 115 Win Left */ 2775 0x5c|0x100, /* 116 Win Right */ 2776 0x5d|0x100, /* 117 Win Menu */ 2777 0x0, /* 118 */ 2778 0x0, /* 119 */ 2779 0x0, /* 120 */ 2780 0xf1, /* 121 Korean Hangul to Latin?? */ 2781 0xf2, /* 122 Korean Hangul to Hanja?? */ 2782 0x0, /* 123 */ 2783 0x0, /* 124 */ 2784 0x0, /* 125 */ 2785 0x0, /* 126 */ 2786 0x0, /* 127 */ 2787 0x0, /* 128 */ 2788 0x79, /* 129 Japanese Henkan */ 2789 0x0, /* 130 */ 2790 0x7b, /* 131 Japanese Muhenkan */ 2791 0x0, /* 132 */ 2792 0x7d, /* 133 Japanese Yen */ 2793 0x7e, /* 134 Brazilian keypad */ 2794 0x0, /* 135 */ 2795 0x47, /* 136 KP_7 */ 2796 0x48, /* 137 KP_8 */ 2797 0x49, /* 138 KP_9 */ 2798 0x4b, /* 139 KP_4 */ 2799 0x4c, /* 140 KP_5 */ 2800 0x4d, /* 141 KP_6 */ 2801 0x4f, /* 142 KP_1 */ 2802 0x50, /* 143 KP_2 */ 2803 0x51, /* 144 KP_3 */ 2804 0x52, /* 145 KP_0 */ 2805 0x53, /* 146 KP_. */ 2806 0x47, /* 147 KP_HOME */ 2807 0x48, /* 148 KP_UP */ 2808 0x49, /* 149 KP_PgUp */ 2809 0x4b, /* 150 KP_Left */ 2810 0x4c, /* 151 KP_ */ 2811 0x4d, /* 152 KP_Right */ 2812 0x4f, /* 153 KP_End */ 2813 0x50, /* 154 KP_Down */ 2814 0x51, /* 155 KP_PgDn */ 2815 0x52, /* 156 KP_Ins */ 2816 0x53, /* 157 KP_Del */ 2820 2817 }; 2821 2818 … … 2834 2831 keycode = x_keycode_to_pc_keycode[keycode - 97]; 2835 2832 } 2833 else if (keycode == 208) 2834 { 2835 // Japanese Hiragana to Katakana 2836 keycode = 0x70; 2837 } 2838 else if (keycode == 211) 2839 { 2840 // Japanese backslash/underscore and Brazilian backslash/question mark 2841 keycode = 0x73; 2842 } 2836 2843 else 2837 2844 { … … 2841 2848 #elif defined(__DARWIN__) 2842 2849 /* This is derived partially from SDL_QuartzKeys.h and partially from testing. */ 2843 static const uint 8_t s_aMacToSet1[] =2850 static const uint16_t s_aMacToSet1[] = 2844 2851 { 2845 2852 /* set-1 SDL_QuartzKeys.h */ … … 2898 2905 0x9c, /* QZ_IBOOK_ENTER 0x34 */ 2899 2906 0x01, /* QZ_ESCAPE 0x35 */ 2900 0x5c|0x 80,/* QZ_RMETA 0x36 */2901 0x5b|0x 80,/* QZ_LMETA 0x37 */2907 0x5c|0x100, /* QZ_RMETA 0x36 */ 2908 0x5b|0x100, /* QZ_LMETA 0x37 */ 2902 2909 0x2a, /* QZ_LSHIFT 0x38 */ 2903 2910 0x3a, /* QZ_CAPSLOCK 0x39 */ … … 2905 2912 0x1d, /* QZ_LCTRL 0x3B */ 2906 2913 0x36, /* QZ_RSHIFT 0x3C */ 2907 0x38|0x 80,/* QZ_RALT 0x3D */2908 0x1d|0x 80,/* QZ_RCTRL 0x3E */2914 0x38|0x100, /* QZ_RALT 0x3D */ 2915 0x1d|0x100, /* QZ_RCTRL 0x3E */ 2909 2916 0, /* */ 2910 2917 0, /* */ … … 2919 2926 0, /* */ 2920 2927 0, /* */ 2921 0x35|0x 80,/* QZ_KP_DIVIDE 0x4B */2922 0x1c|0x 80,/* QZ_KP_ENTER 0x4C */2928 0x35|0x100, /* QZ_KP_DIVIDE 0x4B */ 2929 0x1c|0x100, /* QZ_KP_ENTER 0x4C */ 2923 2930 0, /* */ 2924 2931 0x4a, /* QZ_KP_MINUS 0x4E */ … … 2949 2956 0x57, /* QZ_F11 0x67 */ 2950 2957 0, /* */ 2951 0x37|0x 80,/* QZ_PRINT / F13 0x69 */2958 0x37|0x100, /* QZ_PRINT / F13 0x69 */ 2952 2959 0x63, /* QZ_F16 0x6A */ 2953 2960 0x46, /* QZ_SCROLLOCK 0x6B */ 2954 2961 0, /* */ 2955 2962 0x44, /* QZ_F10 0x6D */ 2956 0x5d|0x 80,/* */2963 0x5d|0x100, /* */ 2957 2964 0x58, /* QZ_F12 0x6F */ 2958 2965 0, /* */ 2959 2966 0/* 0xe1,0x1d,0x45*/, /* QZ_PAUSE 0x71 */ 2960 0x52|0x 80,/* QZ_INSERT / HELP 0x72 */2961 0x47|0x 80,/* QZ_HOME 0x73 */2962 0x49|0x 80, /* QZ_PAGEUP 0x74 */2963 0x53|0x 80,/* QZ_DELETE 0x75 */2967 0x52|0x100, /* QZ_INSERT / HELP 0x72 */ 2968 0x47|0x100, /* QZ_HOME 0x73 */ 2969 0x49|0x100, /* QZ_PAGEUP 0x74 */ 2970 0x53|0x100, /* QZ_DELETE 0x75 */ 2964 2971 0x3e, /* QZ_F4 0x76 */ 2965 0x4f|0x 80,/* QZ_END 0x77 */2972 0x4f|0x100, /* QZ_END 0x77 */ 2966 2973 0x3c, /* QZ_F2 0x78 */ 2967 0x51|0x 80,/* QZ_PAGEDOWN 0x79 */2974 0x51|0x100, /* QZ_PAGEDOWN 0x79 */ 2968 2975 0x3b, /* QZ_F1 0x7A */ 2969 0x4b|0x 80,/* QZ_LEFT 0x7B */2970 0x4d|0x 80,/* QZ_RIGHT 0x7C */2971 0x50|0x 80,/* QZ_DOWN 0x7D */2972 0x48|0x 80,/* QZ_UP 0x7E */2973 0x5e|0x 80,/* QZ_POWER 0x7F */ /* have different break key! */2976 0x4b|0x100, /* QZ_LEFT 0x7B */ 2977 0x4d|0x100, /* QZ_RIGHT 0x7C */ 2978 0x50|0x100, /* QZ_DOWN 0x7D */ 2979 0x48|0x100, /* QZ_UP 0x7E */ 2980 0x5e|0x100, /* QZ_POWER 0x7F */ /* have different break key! */ 2974 2981 }; 2975 2982 … … 2982 2989 case SDLK_RSHIFT: keycode = 0x36; break; 2983 2990 case SDLK_LCTRL: keycode = 0x1d; break; 2984 case SDLK_RCTRL: keycode = 0x1d | 0x 80; break;2991 case SDLK_RCTRL: keycode = 0x1d | 0x100; break; 2985 2992 case SDLK_LALT: keycode = 0x38; break; 2986 2993 case SDLK_MODE: /* alt gr */ 2987 case SDLK_RALT: keycode = 0x38 | 0x 80; break;2994 case SDLK_RALT: keycode = 0x38 | 0x100; break; 2988 2995 case SDLK_RMETA: 2989 case SDLK_RSUPER: keycode = 0x5c | 0x 80; break;2996 case SDLK_RSUPER: keycode = 0x5c | 0x100; break; 2990 2997 case SDLK_LMETA: 2991 case SDLK_LSUPER: keycode = 0x5b | 0x 80; break;2998 case SDLK_LSUPER: keycode = 0x5b | 0x100; break; 2992 2999 /* Sssumes normal key. */ 2993 3000 default: keycode = s_aMacToSet1[keycode]; break; … … 3012 3019 #endif 3013 3020 3014 #endif 3021 #endif /* __DARWIN__ */ 3015 3022 return keycode; 3016 3023 } … … 3170 3177 } 3171 3178 3172 case 0x2a: /* Left Shift */3173 case 0x36: /* Right Shift */3174 case 0x1d: /* Left CTRL */3175 case 0x 9d: /* Right CTRL */3176 case 0x38: /* Left ALT */3177 case 0x b8: /* Right ALT */3179 case 0x2a: /* Left Shift */ 3180 case 0x36: /* Right Shift */ 3181 case 0x1d: /* Left CTRL */ 3182 case 0x1d|0x100: /* Right CTRL */ 3183 case 0x38: /* Left ALT */ 3184 case 0x38|0x100: /* Right ALT */ 3178 3185 { 3179 3186 if (ev->type == SDL_KEYUP) … … 3230 3237 * Now we send the event. Apply extended and release prefixes. 3231 3238 */ 3232 if (keycode & 0x 80)3239 if (keycode & 0x100) 3233 3240 gKeyboard->PutScancode(0xe0); 3234 3241 3235 gKeyboard->PutScancode(ev->type == SDL_KEYUP ? keycode| 0x803236 : keycode & 0x7f);3242 gKeyboard->PutScancode(ev->type == SDL_KEYUP ? (keycode & 0x7f) | 0x80 3243 : (keycode & 0x7f)); 3237 3244 } 3238 3245
Note:
See TracChangeset
for help on using the changeset viewer.