Re: [PATCH 1/2] ui/cocoa: add option to disable left-command forwarding to guest
Philippe Mathieu-Daudé writes: > On 18/2/22 19:55, Peter Maydell wrote: >> On Sun, 2 Jan 2022 at 17:42, Carwyn Ellis 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 >> 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 > > Not a QAPI folk, but LGTM using 7.0 here instead of 6.2.50 (this the > number of the *released* QEMU version which contains this new type). Yes. >>> +# >>> +## >>> +{ '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=]\n" >>> " [,gl=on|core|es|off][,rendernode=]\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=]`` >>> Offload all OpenGL operations to a local DRI device. For any >>> graphical display, this display needs to be paired with either In the QAPI schema, @full-screen, @window-close and @show-cursor are common to all display types. Here, @full-screen is only documented with gtk, @window-close with gtk and sdl, @show-cursor with gtk, sdl and now cocoa. What's going on here? [...]
Re: [PATCH 1/2] ui/cocoa: add option to disable left-command forwarding to guest
On 18/2/22 19:55, Peter Maydell wrote: On Sun, 2 Jan 2022 at 17:42, Carwyn Ellis 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 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 Not a QAPI folk, but LGTM using 7.0 here instead of 6.2.50 (this the number of the *released* QEMU version which contains this new type). +# +## +{ '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=]\n" " [,gl=on|core|es|off][,rendernode=]\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=]`` 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();
Re: [PATCH 1/2] ui/cocoa: add option to disable left-command forwarding to guest
On Sun, 2 Jan 2022 at 17:42, Carwyn Ellis 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 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=]\n" > " [,gl=on|core|es|off][,rendernode=]\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=]`` > 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();
Re: [PATCH 1/2] ui/cocoa: add option to disable left-command forwarding to guest
Reviewed-by: Akihiko Odaki On 2022/01/03 2:41, Carwyn Ellis 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 --- 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=]\n" " [,gl=on|core|es|off][,rendernode=]\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=]`` 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();
[PATCH 1/2] ui/cocoa: add option to disable left-command forwarding to guest
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 --- 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=]\n" " [,gl=on|core|es|off][,rendernode=]\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=]`` 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(); -- 2.34.1