* [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
* [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 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 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
* 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
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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.