Darwin patch
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@982 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									d549f7d98f
								
							
						
					
					
						commit
						e58d12ed5b
					
				
							
								
								
									
										162
									
								
								sdl.c
									
									
									
									
									
								
							
							
						
						
									
										162
									
								
								sdl.c
									
									
									
									
									
								
							@ -29,6 +29,10 @@
 | 
				
			|||||||
#include <signal.h>
 | 
					#include <signal.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
 | 
					#define CONFIG_SDL_GENERIC_KBD
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static SDL_Surface *screen;
 | 
					static SDL_Surface *screen;
 | 
				
			||||||
static int gui_grab; /* if true, all keyboard/mouse events are grabbed */
 | 
					static int gui_grab; /* if true, all keyboard/mouse events are grabbed */
 | 
				
			||||||
static int last_vm_running;
 | 
					static int last_vm_running;
 | 
				
			||||||
@ -63,6 +67,126 @@ static void sdl_resize(DisplayState *ds, int w, int h)
 | 
				
			|||||||
    ds->depth = screen->format->BitsPerPixel;
 | 
					    ds->depth = screen->format->BitsPerPixel;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_SDL_GENERIC_KBD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* XXX: use keymap tables defined in the VNC patch because the
 | 
				
			||||||
 | 
					   following code suppose you have a US keyboard. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const uint8_t scancodes[SDLK_LAST] = {
 | 
				
			||||||
 | 
					    [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,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return scancodes[ev->keysym.sym];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#elif defined(_WIN32)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return ev->keysym.scancode;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const uint8_t x_keycode_to_pc_keycode[61] = {
 | 
					static const uint8_t x_keycode_to_pc_keycode[61] = {
 | 
				
			||||||
   0xc7,      /*  97  Home   */
 | 
					   0xc7,      /*  97  Home   */
 | 
				
			||||||
   0xc8,      /*  98  Up     */
 | 
					   0xc8,      /*  98  Up     */
 | 
				
			||||||
@ -127,6 +251,27 @@ static const uint8_t x_keycode_to_pc_keycode[61] = {
 | 
				
			|||||||
   0x53,         /* 157 KP_Del */
 | 
					   0x53,         /* 157 KP_Del */
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int keycode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    keycode = ev->keysym.scancode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (keycode < 9) {
 | 
				
			||||||
 | 
					        keycode = 0;
 | 
				
			||||||
 | 
					    } else if (keycode < 97) {
 | 
				
			||||||
 | 
					        keycode -= 8; /* just an offset */
 | 
				
			||||||
 | 
					    } else if (keycode < 158) {
 | 
				
			||||||
 | 
					        /* use conversion table */
 | 
				
			||||||
 | 
					        keycode = x_keycode_to_pc_keycode[keycode - 97];
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        keycode = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return keycode;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void sdl_process_key(SDL_KeyboardEvent *ev)
 | 
					static void sdl_process_key(SDL_KeyboardEvent *ev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int keycode, v, i;
 | 
					    int keycode, v, i;
 | 
				
			||||||
@ -144,22 +289,7 @@ static void sdl_process_key(SDL_KeyboardEvent *ev)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* XXX: not portable, but avoids complicated mappings */
 | 
					    /* XXX: not portable, but avoids complicated mappings */
 | 
				
			||||||
    keycode = ev->keysym.scancode;
 | 
					    keycode = sdl_keyevent_to_keycode(ev);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    /* XXX: windows version may not work: 0xe0/0xe1 should be trapped
 | 
					 | 
				
			||||||
       ? */
 | 
					 | 
				
			||||||
#ifndef _WIN32
 | 
					 | 
				
			||||||
    if (keycode < 9) {
 | 
					 | 
				
			||||||
        keycode = 0;
 | 
					 | 
				
			||||||
    } else if (keycode < 97) {
 | 
					 | 
				
			||||||
        keycode -= 8; /* just an offset */
 | 
					 | 
				
			||||||
    } else if (keycode < 158) {
 | 
					 | 
				
			||||||
        /* use conversion table */
 | 
					 | 
				
			||||||
        keycode = x_keycode_to_pc_keycode[keycode - 97];
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
        keycode = 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch(keycode) {
 | 
					    switch(keycode) {
 | 
				
			||||||
    case 0x00:
 | 
					    case 0x00:
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user