On Sun, 2 Jan 2022 at 17:42, Carwyn Ellis <carwynel...@gmail.com> wrote: > > When switching between guest and host on a Mac using command-tab the > command key is sent to the guest which can trigger functionality in the > guest OS. Specifying left-command-key=off disables forwarding this key > to the guest. Defaults to enabled. > > Also updated the cocoa display documentation to reference the new > left-command-key option along with the existing show-cursor option. > > Signed-off-by: Carwyn Ellis <carwynel...@gmail.com>
Ccing the QAPI folks for review on the QAPI parts of this. -- PMM > --- > qapi/ui.json | 17 +++++++++++++++++ > qemu-options.hx | 12 ++++++++++++ > ui/cocoa.m | 8 +++++++- > 3 files changed, 36 insertions(+), 1 deletion(-) > > diff --git a/qapi/ui.json b/qapi/ui.json > index 2b4371da37..764480e145 100644 > --- a/qapi/ui.json > +++ b/qapi/ui.json > @@ -1107,6 +1107,22 @@ > 'data' : { '*grab-on-hover' : 'bool', > '*zoom-to-fit' : 'bool' } } > > +## > +# @DisplayCocoa: > +# > +# Cocoa display options. > +# > +# @left-command-key: Enable/disable forwarding of left command key to > +# guest. Allows command-tab window switching on the > +# host without sending this key to the guest when > +# "off". Defaults to "on" > +# > +# Since: 6.2.50 > +# > +## > +{ 'struct' : 'DisplayCocoa', > + 'data' : { '*left-command-key' : 'bool' } } > + > ## > # @DisplayEGLHeadless: > # > @@ -1254,6 +1270,7 @@ > 'discriminator' : 'type', > 'data' : { > 'gtk': { 'type': 'DisplayGTK', 'if': 'CONFIG_GTK' }, > + 'cocoa': { 'type': 'DisplayCocoa', 'if': 'CONFIG_COCOA' }, > 'curses': { 'type': 'DisplayCurses', 'if': 'CONFIG_CURSES' }, > 'egl-headless': { 'type': 'DisplayEGLHeadless', > 'if': { 'all': ['CONFIG_OPENGL', 'CONFIG_GBM'] } }, > diff --git a/qemu-options.hx b/qemu-options.hx > index fd1f8135fb..6fa9c38c83 100644 > --- a/qemu-options.hx > +++ b/qemu-options.hx > @@ -1912,6 +1912,9 @@ DEF("display", HAS_ARG, QEMU_OPTION_display, > #if defined(CONFIG_DBUS_DISPLAY) > "-display dbus[,addr=<dbusaddr>]\n" > " [,gl=on|core|es|off][,rendernode=<file>]\n" > +#endif > +#if defined(CONFIG_COCOA) > + "-display cocoa[,show-cursor=on|off][,left-command-key=on|off]\n" > #endif > "-display none\n" > " select display backend type\n" > @@ -1999,6 +2002,15 @@ SRST > ``charset=CP850`` for IBM CP850 encoding. The default is > ``CP437``. > > + ``cocoa`` > + Display video output in a Cocoa window. Mac only. This interface > + provides drop-down menus and other UI elements to configure and > + control the VM during runtime. Valid parameters are: > + > + ``show-cursor=on|off`` : Force showing the mouse cursor > + > + ``left-command-key=on|off`` : Disable forwarding left command key to > host > + > ``egl-headless[,rendernode=<file>]`` > Offload all OpenGL operations to a local DRI device. For any > graphical display, this display needs to be paired with either > diff --git a/ui/cocoa.m b/ui/cocoa.m > index 69745c483b..01045d6698 100644 > --- a/ui/cocoa.m > +++ b/ui/cocoa.m > @@ -95,6 +95,7 @@ static DisplayChangeListener dcl = { > }; > static int last_buttons; > static int cursor_hide = 1; > +static int left_command_key_enabled = 1; > > static int gArgc; > static char **gArgv; > @@ -834,7 +835,8 @@ QemuCocoaView *cocoaView; > /* Don't pass command key changes to guest unless mouse is > grabbed */ > case kVK_Command: > if (isMouseGrabbed && > - !!(modifiers & NSEventModifierFlagCommand)) { > + !!(modifiers & NSEventModifierFlagCommand) && > + left_command_key_enabled) { > [self toggleKey:Q_KEY_CODE_META_L]; > } > break; > @@ -2054,6 +2056,10 @@ static void cocoa_display_init(DisplayState *ds, > DisplayOptions *opts) > cursor_hide = 0; > } > > + if (opts->u.cocoa.has_left_command_key && > !opts->u.cocoa.left_command_key) { > + left_command_key_enabled = 0; > + } > + > // register vga output callbacks > register_displaychangelistener(&dcl);