All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philippe.mathieu.daude@gmail.com>
To: qemu-devel@nongnu.org
Cc: "Christian Schoenebeck" <qemu_oss@crudebyte.com>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	"Cameron Esfahani" <dirty@apple.com>,
	"Roman Bolshakov" <r.bolshakov@yadro.com>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	"Akihiko Odaki" <akihiko.odaki@gmail.com>,
	"Carwyn Ellis" <carwynellis@gmail.com>
Subject: [PULL 17/21] ui/cocoa: add option to disable left-command forwarding to guest
Date: Tue, 15 Mar 2022 13:53:46 +0100	[thread overview]
Message-ID: <20220315125350.82452-18-philippe.mathieu.daude@gmail.com> (raw)
In-Reply-To: <20220315125350.82452-1-philippe.mathieu.daude@gmail.com>

From: Carwyn Ellis <carwynellis@gmail.com>

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>
Reviewed-by: Akihiko Odaki <akihiko.odaki@gmail.com>
[PMD: Set QAPI structure @since tag to 7.0]
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 qapi/ui.json    | 18 ++++++++++++++++++
 qemu-options.hx | 12 ++++++++++++
 ui/cocoa.m      |  8 +++++++-
 3 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/qapi/ui.json b/qapi/ui.json
index 4a13f883a3..4dea35a819 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -1260,6 +1260,23 @@
 { 'struct'  : 'DisplayCurses',
   'data'    : { '*charset'       : 'str' } }
 
+##
+# @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: 7.0
+##
+{ 'struct': 'DisplayCocoa',
+  'data': {
+      '*left-command-key': 'bool'
+  } }
+
 ##
 # @DisplayType:
 #
@@ -1338,6 +1355,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 5ce0ada75e..f464b2fe27 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1922,6 +1922,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"
@@ -2009,6 +2012,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 a66ba3d7b6..1aa51c42dc 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;
@@ -853,7 +854,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;
@@ -2002,6 +2004,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



  parent reply	other threads:[~2022-03-15 13:23 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-15 12:53 [PULL 00/21] Darwin patches for 2022-03-15 Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 01/21] configure: Allow passing extra Objective C compiler flags Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 02/21] tests/fp/berkeley-testfloat-3: Ignore ignored #pragma directives Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 03/21] hvf: Use standard CR0 and CR4 register definitions Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 04/21] hvf: Make hvf_get_segments() / hvf_put_segments() local Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 05/21] hvf: Remove deprecated hv_vcpu_flush() calls Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 06/21] block/file-posix: Remove a deprecation warning on macOS 12 Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 07/21] audio/coreaudio: " Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 08/21] audio/dbus: Fix building with modules on macOS Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 09/21] audio: Log context for audio bug Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 10/21] coreaudio: Always return 0 in handle_voice_change Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 11/21] audio: Rename coreaudio extension to use Objective-C compiler Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 12/21] osdep: Avoid using Clang-specific __builtin_available() Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 13/21] meson: Resolve the entitlement.sh script once for good Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 14/21] meson: Log QEMU_CXXFLAGS content in summary Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 15/21] configure: Pass filtered QEMU_OBJCFLAGS to meson Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 16/21] ui/cocoa: Constify qkeycode translation arrays Philippe Mathieu-Daudé
2022-03-15 12:53 ` Philippe Mathieu-Daudé [this message]
2022-03-15 12:53 ` [PULL 18/21] ui/cocoa: release mouse when user switches away from QEMU window Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 19/21] ui/cocoa: capture all keys and combos when mouse is grabbed Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 20/21] ui/cocoa: add option to swap Option and Command Philippe Mathieu-Daudé
2022-03-15 12:53 ` [PULL 21/21] MAINTAINERS: Volunteer to maintain Darwin-based hosts support Philippe Mathieu-Daudé
2022-03-15 23:07 ` [PULL 00/21] Darwin patches for 2022-03-15 Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220315125350.82452-18-philippe.mathieu.daude@gmail.com \
    --to=philippe.mathieu.daude@gmail.com \
    --cc=akihiko.odaki@gmail.com \
    --cc=carwynellis@gmail.com \
    --cc=dirty@apple.com \
    --cc=f4bug@amsat.org \
    --cc=kraxel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu_oss@crudebyte.com \
    --cc=r.bolshakov@yadro.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.