virtual console support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1022 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
2571929a77
commit
457831f4bc
76
sdl.c
76
sdl.c
@ -65,6 +65,8 @@ static void sdl_resize(DisplayState *ds, int w, int h)
|
||||
ds->data = screen->pixels;
|
||||
ds->linesize = screen->pitch;
|
||||
ds->depth = screen->format->BitsPerPixel;
|
||||
ds->width = w;
|
||||
ds->height = h;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SDL_GENERIC_KBD
|
||||
@ -408,7 +410,9 @@ static void sdl_refresh(DisplayState *ds)
|
||||
sdl_update_caption();
|
||||
}
|
||||
|
||||
vga_update_display();
|
||||
if (is_active_console(vga_console))
|
||||
vga_update_display();
|
||||
|
||||
while (SDL_PollEvent(ev)) {
|
||||
switch (ev->type) {
|
||||
case SDL_VIDEOEXPOSE:
|
||||
@ -420,19 +424,68 @@ static void sdl_refresh(DisplayState *ds)
|
||||
mod_state = (SDL_GetModState() & (KMOD_LSHIFT | KMOD_LCTRL)) ==
|
||||
(KMOD_LSHIFT | KMOD_LCTRL);
|
||||
gui_key_modifier_pressed = mod_state;
|
||||
if (gui_key_modifier_pressed &&
|
||||
ev->key.keysym.sym == SDLK_f) {
|
||||
gui_keysym = ev->key.keysym.sym;
|
||||
if (gui_key_modifier_pressed) {
|
||||
switch(ev->key.keysym.sym) {
|
||||
case SDLK_f:
|
||||
toggle_full_screen(ds);
|
||||
gui_keysym = 1;
|
||||
break;
|
||||
case SDLK_F1 ... SDLK_F12:
|
||||
console_select(ev->key.keysym.sym - SDLK_F1);
|
||||
if (is_active_console(vga_console)) {
|
||||
/* tell the vga console to redisplay itself */
|
||||
vga_invalidate_display();
|
||||
} else {
|
||||
/* display grab if going to a text console */
|
||||
if (gui_grab)
|
||||
sdl_grab_end();
|
||||
}
|
||||
gui_keysym = 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!is_active_console(vga_console)) {
|
||||
int keysym;
|
||||
keysym = 0;
|
||||
if (ev->key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) {
|
||||
switch(ev->key.keysym.sym) {
|
||||
case SDLK_UP: keysym = QEMU_KEY_CTRL_UP; break;
|
||||
case SDLK_DOWN: keysym = QEMU_KEY_CTRL_DOWN; break;
|
||||
case SDLK_LEFT: keysym = QEMU_KEY_CTRL_LEFT; break;
|
||||
case SDLK_RIGHT: keysym = QEMU_KEY_CTRL_RIGHT; break;
|
||||
case SDLK_HOME: keysym = QEMU_KEY_CTRL_HOME; break;
|
||||
case SDLK_END: keysym = QEMU_KEY_CTRL_END; break;
|
||||
case SDLK_PAGEUP: keysym = QEMU_KEY_CTRL_PAGEUP; break;
|
||||
case SDLK_PAGEDOWN: keysym = QEMU_KEY_CTRL_PAGEDOWN; break;
|
||||
default: break;
|
||||
}
|
||||
} else {
|
||||
switch(ev->key.keysym.sym) {
|
||||
case SDLK_UP: keysym = QEMU_KEY_UP; break;
|
||||
case SDLK_DOWN: keysym = QEMU_KEY_DOWN; break;
|
||||
case SDLK_LEFT: keysym = QEMU_KEY_LEFT; break;
|
||||
case SDLK_RIGHT: keysym = QEMU_KEY_RIGHT; break;
|
||||
case SDLK_HOME: keysym = QEMU_KEY_HOME; break;
|
||||
case SDLK_END: keysym = QEMU_KEY_END; break;
|
||||
case SDLK_PAGEUP: keysym = QEMU_KEY_PAGEUP; break;
|
||||
case SDLK_PAGEDOWN: keysym = QEMU_KEY_PAGEDOWN; break;
|
||||
case SDLK_BACKSPACE: keysym = QEMU_KEY_BACKSPACE; break; case SDLK_DELETE: keysym = QEMU_KEY_DELETE; break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
if (keysym) {
|
||||
kbd_put_keysym(keysym);
|
||||
} else if (ev->key.keysym.unicode != 0) {
|
||||
kbd_put_keysym(ev->key.keysym.unicode);
|
||||
}
|
||||
}
|
||||
} else if (ev->type == SDL_KEYUP) {
|
||||
mod_state = (SDL_GetModState() & (KMOD_LSHIFT | KMOD_LCTRL));
|
||||
if (!mod_state) {
|
||||
if (gui_key_modifier_pressed) {
|
||||
switch(gui_keysym) {
|
||||
case SDLK_f:
|
||||
toggle_full_screen(ds);
|
||||
break;
|
||||
case 0:
|
||||
if (gui_keysym == 0) {
|
||||
/* exit/enter grab if pressing Ctrl-Shift */
|
||||
if (!gui_grab)
|
||||
sdl_grab_start();
|
||||
@ -445,7 +498,8 @@ static void sdl_refresh(DisplayState *ds)
|
||||
}
|
||||
}
|
||||
}
|
||||
sdl_process_key(&ev->key);
|
||||
if (is_active_console(vga_console))
|
||||
sdl_process_key(&ev->key);
|
||||
break;
|
||||
case SDL_QUIT:
|
||||
qemu_system_shutdown_request();
|
||||
@ -495,7 +549,6 @@ void sdl_display_init(DisplayState *ds)
|
||||
fprintf(stderr, "Could not initialize SDL - exiting\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#ifndef _WIN32
|
||||
/* NOTE: we still want Ctrl-C to work, so we undo the SDL redirections */
|
||||
signal(SIGINT, SIG_DFL);
|
||||
@ -509,6 +562,7 @@ void sdl_display_init(DisplayState *ds)
|
||||
sdl_resize(ds, 640, 400);
|
||||
sdl_update_caption();
|
||||
SDL_EnableKeyRepeat(250, 50);
|
||||
SDL_EnableUNICODE(1);
|
||||
gui_grab = 0;
|
||||
|
||||
atexit(sdl_cleanup);
|
||||
|
Loading…
Reference in New Issue
Block a user