* [PATCH 0/2] ui/cocoa: Add option to disable left command and hide cursor on click @ 2022-01-02 17:41 Carwyn Ellis 2022-01-02 17:41 ` [PATCH 1/2] ui/cocoa: add option to disable left-command forwarding to guest Carwyn Ellis 2022-01-02 17:41 ` [PATCH 2/2] ui/cocoa: release mouse when user switches away from QEMU window Carwyn Ellis 0 siblings, 2 replies; 8+ messages in thread From: Carwyn Ellis @ 2022-01-02 17:41 UTC (permalink / raw) To: qemu-devel; +Cc: qemu-trivial, peter.maydell, Carwyn Ellis Supersedes earlier submissions and splits the patch into two separate patches covering - addition of left-command-key option to disable forwarding this key to the guest - fix for persistent mouse cursor when switching from and back to the QEMU window Having made the switch to an M1 Mac I needed to switch from VMware back to QEMU in order to run some intel guests. This patch addresses a couple of niggles with the cocoa UI, namely: - Using command-tab to switch between the guest OS and MacOS sends the command keypress to the guest which can be annoying e.g. on a windows guest this may trigger the start menu - Switching between the guest and MacOS sometimes leaves the MacOS mouse cursor visible with no way to hide it without switching windows again I've made the following changes - Added a new cocoa display option left-command-key which can be used to disable the left command key in the guest. Default is on. - Added a call to ungrabMouse in the applicationWillResignActive method which frees the mouse and unhides the cursor when switching away from the QEMU window. When switching back the user must left-click in to grab the mouse and hide the cursor again. After testing several different approaches this was the only way I could find to reliably hide the cursor every time the user returns to QEMU after switching to another app on the host machine. - Updated the command line docs to reference the show-cursor option which is also respected by the cocoa UI code. Carwyn Ellis (2): ui/cocoa: add option to disable left-command forwarding to guest ui/cocoa: release mouse when user switches away from QEMU window qapi/ui.json | 17 +++++++++++++++++ qemu-options.hx | 12 ++++++++++++ ui/cocoa.m | 10 +++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) -- 2.34.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/2] ui/cocoa: add option to disable left-command forwarding to guest 2022-01-02 17:41 [PATCH 0/2] ui/cocoa: Add option to disable left command and hide cursor on click Carwyn Ellis @ 2022-01-02 17:41 ` Carwyn Ellis 2022-02-18 18:33 ` Akihiko Odaki 2022-02-18 18:55 ` Peter Maydell 2022-01-02 17:41 ` [PATCH 2/2] ui/cocoa: release mouse when user switches away from QEMU window Carwyn Ellis 1 sibling, 2 replies; 8+ messages in thread From: Carwyn Ellis @ 2022-01-02 17:41 UTC (permalink / raw) To: qemu-devel; +Cc: qemu-trivial, peter.maydell, Carwyn Ellis 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 <carwynellis@gmail.com> --- 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); -- 2.34.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] ui/cocoa: add option to disable left-command forwarding to guest 2022-01-02 17:41 ` [PATCH 1/2] ui/cocoa: add option to disable left-command forwarding to guest Carwyn Ellis @ 2022-02-18 18:33 ` Akihiko Odaki 2022-02-18 18:55 ` Peter Maydell 1 sibling, 0 replies; 8+ messages in thread From: Akihiko Odaki @ 2022-02-18 18:33 UTC (permalink / raw) To: Carwyn Ellis, qemu-devel; +Cc: qemu-trivial, peter.maydell Reviewed-by: Akihiko Odaki <akihiko.odaki@gmail.com> 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 <carwynellis@gmail.com> > --- > 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); > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] ui/cocoa: add option to disable left-command forwarding to guest 2022-01-02 17:41 ` [PATCH 1/2] ui/cocoa: add option to disable left-command forwarding to guest Carwyn Ellis 2022-02-18 18:33 ` Akihiko Odaki @ 2022-02-18 18:55 ` Peter Maydell 2022-02-18 20:21 ` Philippe Mathieu-Daudé via 1 sibling, 1 reply; 8+ messages in thread From: Peter Maydell @ 2022-02-18 18:55 UTC (permalink / raw) To: Carwyn Ellis; +Cc: qemu-trivial, Michael Roth, qemu-devel, Markus Armbruster On Sun, 2 Jan 2022 at 17:42, Carwyn Ellis <carwynellis@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 <carwynellis@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); ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] ui/cocoa: add option to disable left-command forwarding to guest 2022-02-18 18:55 ` Peter Maydell @ 2022-02-18 20:21 ` Philippe Mathieu-Daudé via 2022-03-11 12:46 ` Markus Armbruster 0 siblings, 1 reply; 8+ messages in thread From: Philippe Mathieu-Daudé via @ 2022-02-18 20:21 UTC (permalink / raw) To: Peter Maydell, Carwyn Ellis Cc: qemu-trivial, Michael Roth, qemu-devel, Markus Armbruster On 18/2/22 19:55, Peter Maydell wrote: > On Sun, 2 Jan 2022 at 17:42, Carwyn Ellis <carwynellis@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 <carwynellis@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 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=<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); > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] ui/cocoa: add option to disable left-command forwarding to guest 2022-02-18 20:21 ` Philippe Mathieu-Daudé via @ 2022-03-11 12:46 ` Markus Armbruster 0 siblings, 0 replies; 8+ messages in thread From: Markus Armbruster @ 2022-03-11 12:46 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: qemu-trivial, Peter Maydell, qemu-devel, Michael Roth, Carwyn Ellis Philippe Mathieu-Daudé <f4bug@amsat.org> writes: > On 18/2/22 19:55, Peter Maydell wrote: >> On Sun, 2 Jan 2022 at 17:42, Carwyn Ellis <carwynellis@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 <carwynellis@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 > > 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=<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 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? [...] ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/2] ui/cocoa: release mouse when user switches away from QEMU window 2022-01-02 17:41 [PATCH 0/2] ui/cocoa: Add option to disable left command and hide cursor on click Carwyn Ellis 2022-01-02 17:41 ` [PATCH 1/2] ui/cocoa: add option to disable left-command forwarding to guest Carwyn Ellis @ 2022-01-02 17:41 ` Carwyn Ellis 2022-02-18 18:33 ` Akihiko Odaki 1 sibling, 1 reply; 8+ messages in thread From: Carwyn Ellis @ 2022-01-02 17:41 UTC (permalink / raw) To: qemu-devel; +Cc: qemu-trivial, peter.maydell, Carwyn Ellis This resolves an issue where using command-tab to switch between QEMU and other windows on the host can leave the mouse pointer visible. By releasing the mouse when the user switches away, the user must left click on the QEMU window when switching back in order to hide the pointer and return control to the guest. This appraoch ensures that the calls to NSCursor hide and unhide are always balanced and thus work correctly when invoked. Signed-off-by: Carwyn Ellis <carwynellis@gmail.com> --- ui/cocoa.m | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ui/cocoa.m b/ui/cocoa.m index 01045d6698..3f7af4a8fa 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -1243,6 +1243,7 @@ QemuCocoaView *cocoaView; - (void) applicationWillResignActive: (NSNotification *)aNotification { COCOA_DEBUG("QemuCocoaAppController: applicationWillResignActive\n"); + [cocoaView ungrabMouse]; [cocoaView raiseAllKeys]; } @@ -2052,6 +2053,7 @@ static void cocoa_display_init(DisplayState *ds, DisplayOptions *opts) [(QemuCocoaAppController *)[[NSApplication sharedApplication] delegate] toggleFullScreen: nil]; }); } + if (opts->has_show_cursor && opts->show_cursor) { cursor_hide = 0; } -- 2.34.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] ui/cocoa: release mouse when user switches away from QEMU window 2022-01-02 17:41 ` [PATCH 2/2] ui/cocoa: release mouse when user switches away from QEMU window Carwyn Ellis @ 2022-02-18 18:33 ` Akihiko Odaki 0 siblings, 0 replies; 8+ messages in thread From: Akihiko Odaki @ 2022-02-18 18:33 UTC (permalink / raw) To: Carwyn Ellis, qemu-devel; +Cc: qemu-trivial, peter.maydell Reviewed-by: Akihiko Odaki <akihiko.odaki@gmail.com> On 2022/01/03 2:41, Carwyn Ellis wrote: > This resolves an issue where using command-tab to switch between QEMU > and other windows on the host can leave the mouse pointer visible. > > By releasing the mouse when the user switches away, the user must left > click on the QEMU window when switching back in order to hide the > pointer and return control to the guest. > > This appraoch ensures that the calls to NSCursor hide and unhide are > always balanced and thus work correctly when invoked. > > Signed-off-by: Carwyn Ellis <carwynellis@gmail.com> > --- > ui/cocoa.m | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/ui/cocoa.m b/ui/cocoa.m > index 01045d6698..3f7af4a8fa 100644 > --- a/ui/cocoa.m > +++ b/ui/cocoa.m > @@ -1243,6 +1243,7 @@ QemuCocoaView *cocoaView; > - (void) applicationWillResignActive: (NSNotification *)aNotification > { > COCOA_DEBUG("QemuCocoaAppController: applicationWillResignActive\n"); > + [cocoaView ungrabMouse]; > [cocoaView raiseAllKeys]; > } > > @@ -2052,6 +2053,7 @@ static void cocoa_display_init(DisplayState *ds, DisplayOptions *opts) > [(QemuCocoaAppController *)[[NSApplication sharedApplication] delegate] toggleFullScreen: nil]; > }); > } > + > if (opts->has_show_cursor && opts->show_cursor) { > cursor_hide = 0; > } ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-03-11 12:51 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-01-02 17:41 [PATCH 0/2] ui/cocoa: Add option to disable left command and hide cursor on click Carwyn Ellis 2022-01-02 17:41 ` [PATCH 1/2] ui/cocoa: add option to disable left-command forwarding to guest Carwyn Ellis 2022-02-18 18:33 ` Akihiko Odaki 2022-02-18 18:55 ` Peter Maydell 2022-02-18 20:21 ` Philippe Mathieu-Daudé via 2022-03-11 12:46 ` Markus Armbruster 2022-01-02 17:41 ` [PATCH 2/2] ui/cocoa: release mouse when user switches away from QEMU window Carwyn Ellis 2022-02-18 18:33 ` Akihiko Odaki
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).