/[qemu]/qemu/sdl.c
ViewVC logotype

Diff of /qemu/sdl.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.19 by bellard, Sun Nov 14 19:46:35 2004 UTC revision 1.20 by bellard, Sun Dec 12 16:56:30 2004 UTC
# Line 29  Line 29 
29  #include <signal.h>  #include <signal.h>
30  #endif  #endif
31    
 #if defined(__APPLE__)  
 #define CONFIG_SDL_GENERIC_KBD  
 #endif  
   
32  static SDL_Surface *screen;  static SDL_Surface *screen;
33  static int gui_grab; /* if true, all keyboard/mouse events are grabbed */  static int gui_grab; /* if true, all keyboard/mouse events are grabbed */
34  static int last_vm_running;  static int last_vm_running;
# Line 72  static void sdl_resize(DisplayState *ds, Line 68  static void sdl_resize(DisplayState *ds,
68      ds->height = h;      ds->height = h;
69  }  }
70    
71  #ifdef CONFIG_SDL_GENERIC_KBD  /* generic keyboard conversion */
72    
73  /* XXX: use keymap tables defined in the VNC patch because the  #include "sdl_keysym.h"
74     following code suppose you have a US keyboard. */  #include "keymaps.c"
75    
76  static const uint8_t scancodes[SDLK_LAST] = {  static kbd_layout_t *kbd_layout = NULL;
     [SDLK_ESCAPE]   = 0x01,  
     [SDLK_1]        = 0x02,  
     [SDLK_2]        = 0x03,  
     [SDLK_3]        = 0x04,  
     [SDLK_4]        = 0x05,  
     [SDLK_5]        = 0x06,  
     [SDLK_6]        = 0x07,  
     [SDLK_7]        = 0x08,  
     [SDLK_8]        = 0x09,  
     [SDLK_9]        = 0x0a,  
     [SDLK_0]        = 0x0b,  
     [SDLK_MINUS]    = 0x0c,  
     [SDLK_EQUALS]   = 0x0d,  
     [SDLK_BACKSPACE]        = 0x0e,  
     [SDLK_TAB]      = 0x0f,  
     [SDLK_q]        = 0x10,  
     [SDLK_w]        = 0x11,  
     [SDLK_e]        = 0x12,  
     [SDLK_r]        = 0x13,  
     [SDLK_t]        = 0x14,  
     [SDLK_y]        = 0x15,  
     [SDLK_u]        = 0x16,  
     [SDLK_i]        = 0x17,  
     [SDLK_o]        = 0x18,  
     [SDLK_p]        = 0x19,  
     [SDLK_LEFTBRACKET]      = 0x1a,  
     [SDLK_RIGHTBRACKET]     = 0x1b,  
     [SDLK_RETURN]   = 0x1c,  
     [SDLK_LCTRL]    = 0x1d,  
     [SDLK_a]        = 0x1e,  
     [SDLK_s]        = 0x1f,  
     [SDLK_d]        = 0x20,  
     [SDLK_f]        = 0x21,  
     [SDLK_g]        = 0x22,  
     [SDLK_h]        = 0x23,  
     [SDLK_j]        = 0x24,  
     [SDLK_k]        = 0x25,  
     [SDLK_l]        = 0x26,  
     [SDLK_SEMICOLON]        = 0x27,  
     [SDLK_QUOTE]    = 0x28,  
     [SDLK_BACKQUOTE]        = 0x29,  
     [SDLK_LSHIFT]   = 0x2a,  
     [SDLK_BACKSLASH]        = 0x2b,  
     [SDLK_z]        = 0x2c,  
     [SDLK_x]        = 0x2d,  
     [SDLK_c]        = 0x2e,  
     [SDLK_v]        = 0x2f,  
     [SDLK_b]        = 0x30,  
     [SDLK_n]        = 0x31,  
     [SDLK_m]        = 0x32,  
     [SDLK_COMMA]    = 0x33,  
     [SDLK_PERIOD]   = 0x34,  
     [SDLK_SLASH]    = 0x35,  
     [SDLK_KP_MULTIPLY]      = 0x37,  
     [SDLK_LALT]     = 0x38,  
     [SDLK_SPACE]    = 0x39,  
     [SDLK_CAPSLOCK] = 0x3a,  
     [SDLK_F1]       = 0x3b,  
     [SDLK_F2]       = 0x3c,  
     [SDLK_F3]       = 0x3d,  
     [SDLK_F4]       = 0x3e,  
     [SDLK_F5]       = 0x3f,  
     [SDLK_F6]       = 0x40,  
     [SDLK_F7]       = 0x41,  
     [SDLK_F8]       = 0x42,  
     [SDLK_F9]       = 0x43,  
     [SDLK_F10]      = 0x44,  
     [SDLK_NUMLOCK]  = 0x45,  
     [SDLK_SCROLLOCK]        = 0x46,  
     [SDLK_KP7]      = 0x47,  
     [SDLK_KP8]      = 0x48,  
     [SDLK_KP9]      = 0x49,  
     [SDLK_KP_MINUS] = 0x4a,  
     [SDLK_KP4]      = 0x4b,  
     [SDLK_KP5]      = 0x4c,  
     [SDLK_KP6]      = 0x4d,  
     [SDLK_KP_PLUS]  = 0x4e,  
     [SDLK_KP1]      = 0x4f,  
     [SDLK_KP2]      = 0x50,  
     [SDLK_KP3]      = 0x51,  
     [SDLK_KP0]      = 0x52,  
     [SDLK_KP_PERIOD]        = 0x53,  
     [SDLK_PRINT]    = 0x54,  
     [SDLK_LMETA]    = 0x56,  
   
     [SDLK_KP_ENTER]  = 0x9c,  
     [SDLK_KP_DIVIDE] = 0xb5,  
       
     [SDLK_UP]       = 0xc8,  
     [SDLK_DOWN]     = 0xd0,  
     [SDLK_RIGHT]    = 0xcd,  
     [SDLK_LEFT]     = 0xcb,  
     [SDLK_INSERT]   = 0xd2,  
     [SDLK_HOME]     = 0xc7,  
     [SDLK_END]      = 0xcf,  
     [SDLK_PAGEUP]   = 0xc9,  
     [SDLK_PAGEDOWN] = 0xd1,  
     [SDLK_DELETE]   = 0xd3,  
 };  
77    
78  static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev)  static uint8_t sdl_keyevent_to_keycode_generic(const SDL_KeyboardEvent *ev)
79  {  {
80      return scancodes[ev->keysym.sym];      int keysym;
81        /* workaround for X11+SDL bug with AltGR */
82        keysym = ev->keysym.sym;
83        if (keysym == 0 && ev->keysym.scancode == 113)
84            keysym = SDLK_MODE;
85        return keysym2scancode(kbd_layout, keysym);
86  }  }
87    
88  #elif defined(_WIN32)  /* specific keyboard conversions from scan codes */
89    
90    #if defined(_WIN32)
91    
92  static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev)  static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev)
93  {  {
# Line 305  static void sdl_process_key(SDL_Keyboard Line 209  static void sdl_process_key(SDL_Keyboard
209          return;          return;
210      }      }
211    
212      /* XXX: not portable, but avoids complicated mappings */      if (kbd_layout) {
213      keycode = sdl_keyevent_to_keycode(ev);          keycode = sdl_keyevent_to_keycode_generic(ev);
214        } else {
215            keycode = sdl_keyevent_to_keycode(ev);
216        }
217    
218      switch(keycode) {      switch(keycode) {
219      case 0x00:      case 0x00:
# Line 558  void sdl_display_init(DisplayState *ds, Line 465  void sdl_display_init(DisplayState *ds,
465  {  {
466      int flags;      int flags;
467    
468    #if defined(__APPLE__)
469        /* always use generic keymaps */
470        if (!keyboard_layout)
471            keyboard_layout = "en-us";
472    #endif
473        if(keyboard_layout) {
474            kbd_layout = init_keyboard_layout(keyboard_layout);
475            if (!kbd_layout)
476                exit(1);
477        }
478    
479      flags = SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE;      flags = SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE;
480      if (SDL_Init (flags)) {      if (SDL_Init (flags)) {
481          fprintf(stderr, "Could not initialize SDL - exiting\n");          fprintf(stderr, "Could not initialize SDL - exiting\n");

Legend:
Removed from v.1.19  
changed lines
  Added in v.1.20

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26