diff options
author | Dustin Kirkland <kirkland@canonical.com> | 2009-09-17 15:48:04 -0500 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-10-06 14:36:09 -0500 |
commit | 0ca9f8a42d64571d3310ea25a63588d77efd58c3 (patch) | |
tree | cd2f18ba56b3f3dbb5ceb68e0cf9accc812e71f8 | |
parent | a6af8e5f96d4815c13e58af106bb9b8535f799a4 (diff) |
offer right-ctrl as a grab option
Add support for -ctrl-grab to use the right-ctrl button to grab/release
the mouse in SDL.
The multi-button ctrl-alt and ctrl-alt-shift grab buttons present an
accessibility problem to users who cannot press more than one button
at a time.
https://bugs.edge.launchpad.net/ubuntu/+source/qemu-kvm/+bug/237635
Signed-off-by: Dustin Kirkland <kirkland@canonical.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r-- | qemu-options.hx | 10 | ||||
-rw-r--r-- | sdl.c | 18 | ||||
-rw-r--r-- | sysemu.h | 1 | ||||
-rw-r--r-- | vl.c | 4 |
4 files changed, 26 insertions, 7 deletions
diff --git a/qemu-options.hx b/qemu-options.hx index f21e9f9da2..3dd76b34bf 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -478,6 +478,16 @@ Use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt). ETEXI #ifdef CONFIG_SDL +DEF("ctrl-grab", 0, QEMU_OPTION_ctrl_grab, + "-ctrl-grab use Right-Ctrl to grab mouse (instead of Ctrl-Alt)\n") +#endif +STEXI +@item -ctrl-grab + +Use Right-Ctrl to grab mouse (instead of Ctrl-Alt). +ETEXI + +#ifdef CONFIG_SDL DEF("no-quit", 0, QEMU_OPTION_no_quit, "-no-quit disable SDL window close capability\n") #endif @@ -414,10 +414,12 @@ static void sdl_update_caption(void) if (!vm_running) status = " [Stopped]"; else if (gui_grab) { - if (!alt_grab) - status = " - Press Ctrl-Alt to exit grab"; - else + if (alt_grab) status = " - Press Ctrl-Alt-Shift to exit grab"; + else if (ctrl_grab) + status = " - Press Right-Ctrl to exit grab"; + else + status = " - Press Ctrl-Alt to exit grab"; } if (qemu_name) { @@ -557,12 +559,14 @@ static void sdl_refresh(DisplayState *ds) case SDL_KEYDOWN: case SDL_KEYUP: if (ev->type == SDL_KEYDOWN) { - if (!alt_grab) { - mod_state = (SDL_GetModState() & gui_grab_code) == - gui_grab_code; - } else { + if (alt_grab) { mod_state = (SDL_GetModState() & (gui_grab_code | KMOD_LSHIFT)) == (gui_grab_code | KMOD_LSHIFT); + } else if (ctrl_grab) { + mod_state = (SDL_GetModState() & KMOD_RCTRL) == KMOD_RCTRL; + } else { + mod_state = (SDL_GetModState() & gui_grab_code) == + gui_grab_code; } gui_key_modifier_pressed = mod_state; if (gui_key_modifier_pressed) { @@ -126,6 +126,7 @@ extern const char *keyboard_layout; extern int win2k_install_hack; extern int rtc_td_hack; extern int alt_grab; +extern int ctrl_grab; extern int usb_enabled; extern int smp_cpus; extern int max_cpus; @@ -247,6 +247,7 @@ int old_param = 0; #endif const char *qemu_name; int alt_grab = 0; +int ctrl_grab = 0; #if defined(TARGET_SPARC) || defined(TARGET_PPC) unsigned int nb_prom_envs = 0; const char *prom_envs[MAX_PROM_ENVS]; @@ -5310,6 +5311,9 @@ int main(int argc, char **argv, char **envp) case QEMU_OPTION_alt_grab: alt_grab = 1; break; + case QEMU_OPTION_ctrl_grab: + ctrl_grab = 1; + break; case QEMU_OPTION_no_quit: no_quit = 1; break; |