Commit 3780e197e4e32f0e6341bdc9a1943d0842b48ec6
1 parent
731345e1
Add alternate grab key, by Michael Mohr.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2990 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
27 additions
and
5 deletions
sdl.c
... | ... | @@ -223,8 +223,12 @@ static void sdl_update_caption(void) |
223 | 223 | |
224 | 224 | if (!vm_running) |
225 | 225 | status = " [Stopped]"; |
226 | - else if (gui_grab) | |
227 | - status = " - Press Ctrl-Alt to exit grab"; | |
226 | + else if (gui_grab) { | |
227 | + if (!alt_grab) | |
228 | + status = " - Press Ctrl-Alt to exit grab"; | |
229 | + else | |
230 | + status = " - Press Ctrl-Alt-Shift to exit grab"; | |
231 | + } | |
228 | 232 | |
229 | 233 | if (qemu_name) |
230 | 234 | snprintf(buf, sizeof(buf), "QEMU (%s)%s", qemu_name, status); |
... | ... | @@ -357,8 +361,13 @@ static void sdl_refresh(DisplayState *ds) |
357 | 361 | case SDL_KEYDOWN: |
358 | 362 | case SDL_KEYUP: |
359 | 363 | if (ev->type == SDL_KEYDOWN) { |
360 | - mod_state = (SDL_GetModState() & gui_grab_code) == | |
361 | - gui_grab_code; | |
364 | + if (!alt_grab) { | |
365 | + mod_state = (SDL_GetModState() & gui_grab_code) == | |
366 | + gui_grab_code; | |
367 | + } else { | |
368 | + mod_state = (SDL_GetModState() & (gui_grab_code | KMOD_LSHIFT)) == | |
369 | + (gui_grab_code | KMOD_LSHIFT); | |
370 | + } | |
362 | 371 | gui_key_modifier_pressed = mod_state; |
363 | 372 | if (gui_key_modifier_pressed) { |
364 | 373 | int keycode; |
... | ... | @@ -419,7 +428,12 @@ static void sdl_refresh(DisplayState *ds) |
419 | 428 | } |
420 | 429 | } |
421 | 430 | } else if (ev->type == SDL_KEYUP) { |
422 | - mod_state = (ev->key.keysym.mod & gui_grab_code); | |
431 | + if (!alt_grab) { | |
432 | + mod_state = (ev->key.keysym.mod & gui_grab_code); | |
433 | + } else { | |
434 | + mod_state = (ev->key.keysym.mod & | |
435 | + (gui_grab_code | KMOD_LSHIFT)); | |
436 | + } | |
423 | 437 | if (!mod_state) { |
424 | 438 | if (gui_key_modifier_pressed) { |
425 | 439 | gui_key_modifier_pressed = 0; | ... | ... |
vl.c
... | ... | @@ -196,6 +196,7 @@ int nb_option_roms; |
196 | 196 | int semihosting_enabled = 0; |
197 | 197 | int autostart = 1; |
198 | 198 | const char *qemu_name; |
199 | +int alt_grab = 0; | |
199 | 200 | #ifdef TARGET_SPARC |
200 | 201 | unsigned int nb_prom_envs = 0; |
201 | 202 | const char *prom_envs[MAX_PROM_ENVS]; |
... | ... | @@ -6553,6 +6554,7 @@ void help(void) |
6553 | 6554 | "-snapshot write to temporary files instead of disk image files\n" |
6554 | 6555 | #ifdef CONFIG_SDL |
6555 | 6556 | "-no-frame open SDL window without a frame and window decorations\n" |
6557 | + "-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)\n" | |
6556 | 6558 | "-no-quit disable SDL window close capability\n" |
6557 | 6559 | #endif |
6558 | 6560 | #ifdef TARGET_I386 |
... | ... | @@ -6736,6 +6738,7 @@ enum { |
6736 | 6738 | QEMU_OPTION_loadvm, |
6737 | 6739 | QEMU_OPTION_full_screen, |
6738 | 6740 | QEMU_OPTION_no_frame, |
6741 | + QEMU_OPTION_alt_grab, | |
6739 | 6742 | QEMU_OPTION_no_quit, |
6740 | 6743 | QEMU_OPTION_pidfile, |
6741 | 6744 | QEMU_OPTION_no_kqemu, |
... | ... | @@ -6829,6 +6832,7 @@ const QEMUOption qemu_options[] = { |
6829 | 6832 | { "full-screen", 0, QEMU_OPTION_full_screen }, |
6830 | 6833 | #ifdef CONFIG_SDL |
6831 | 6834 | { "no-frame", 0, QEMU_OPTION_no_frame }, |
6835 | + { "alt-grab", 0, QEMU_OPTION_alt_grab }, | |
6832 | 6836 | { "no-quit", 0, QEMU_OPTION_no_quit }, |
6833 | 6837 | #endif |
6834 | 6838 | { "pidfile", HAS_ARG, QEMU_OPTION_pidfile }, |
... | ... | @@ -7544,6 +7548,9 @@ int main(int argc, char **argv) |
7544 | 7548 | case QEMU_OPTION_no_frame: |
7545 | 7549 | no_frame = 1; |
7546 | 7550 | break; |
7551 | + case QEMU_OPTION_alt_grab: | |
7552 | + alt_grab = 1; | |
7553 | + break; | |
7547 | 7554 | case QEMU_OPTION_no_quit: |
7548 | 7555 | no_quit = 1; |
7549 | 7556 | break; | ... | ... |
vl.h