aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qemu-options.hx6
-rw-r--r--softmmu/vl.c15
2 files changed, 17 insertions, 4 deletions
diff --git a/qemu-options.hx b/qemu-options.hx
index 4a9ee722c9..124ed51ede 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1834,7 +1834,7 @@ DEF("display", HAS_ARG, QEMU_OPTION_display,
#endif
#if defined(CONFIG_SDL)
"-display sdl[,alt_grab=on|off][,ctrl_grab=on|off][,gl=on|core|es|off]\n"
- " [,show-cursor=on|off][,window-close=on|off]\n"
+ " [,grab-mod=<mod>][,show-cursor=on|off][,window-close=on|off]\n"
#endif
#if defined(CONFIG_GTK)
"-display gtk[,full-screen=on|off][,gl=on|off][,grab-on-hover=on|off]\n"
@@ -1880,6 +1880,10 @@ SRST
window; see the SDL documentation for other possibilities).
Valid parameters are:
+ ``grab-mod=<mods>`` : Used to select the modifier keys for toggling
+ the mouse grabbing in conjunction with the "g" key. `<mods>` can be
+ either `lshift-lctrl-lalt` or `rctrl`.
+
``alt_grab=on|off`` : Use Control+Alt+Shift-g to toggle mouse grabbing
``ctrl_grab=on|off`` : Use Right-Control-g to toggle mouse grabbing
diff --git a/softmmu/vl.c b/softmmu/vl.c
index ea05bb39c5..2176e3c5ae 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -1017,15 +1017,24 @@ static void parse_display(const char *p)
* parse_display_qapi() due to some options not in
* DisplayOptions, specifically:
* - ctrl_grab + alt_grab
- * Not clear yet what happens to them long-term. Should
- * replaced by something better or deprecated and dropped.
+ * They can't be moved into the QAPI since they use underscores,
+ * thus they will get replaced by "grab-mod" in the long term
*/
#if defined(CONFIG_SDL)
dpy.type = DISPLAY_TYPE_SDL;
while (*opts) {
const char *nextopt;
- if (strstart(opts, ",alt_grab=", &nextopt)) {
+ if (strstart(opts, ",grab-mod=", &nextopt)) {
+ opts = nextopt;
+ if (strstart(opts, "lshift-lctrl-lalt", &nextopt)) {
+ alt_grab = 1;
+ } else if (strstart(opts, "rctrl", &nextopt)) {
+ ctrl_grab = 1;
+ } else {
+ goto invalid_sdl_args;
+ }
+ } else if (strstart(opts, ",alt_grab=", &nextopt)) {
opts = nextopt;
if (strstart(opts, "on", &nextopt)) {
alt_grab = 1;