qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] ui/cocoa.m: prevent stuck command key when goin


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH] ui/cocoa.m: prevent stuck command key when going into full screen mode
Date: Sun, 1 Jul 2018 20:30:45 +0100

On 19 June 2018 at 02:58, John Arbuckle <address@hidden> wrote:
> When the user pushes Command-F in QEMU while the mouse is ungrabbed, QEMU
> goes into full screen mode. When the user finally releases the command key,
> it is sent to the guest as an event.

What is "it" here? This sentences implies that "it" is the key-release
event for the command key, but the following sentence suggests it's
the key-press event.

>The makes the guest operating system
> think the command key is down when it is really up. To prevent this situation
> from happening, we simply drop the first command key event after the user has
> gone into full screen mode using Command-F.
>
> Signed-off-by: John Arbuckle <address@hidden>
> ---
>  ui/cocoa.m | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/ui/cocoa.m b/ui/cocoa.m
> index 2991ed4..024aba2 100644
> --- a/ui/cocoa.m
> +++ b/ui/cocoa.m
> @@ -287,6 +287,7 @@ static void handleAnyDeviceErrors(Error * err)
>      BOOL isFullscreen;
>      BOOL isAbsoluteEnabled;
>      BOOL isMouseDeassociated;
> +    BOOL prevent_stuck_command_key;
>  }
>  - (void) switchSurface:(DisplaySurface *)surface;
>  - (void) grabMouse;
> @@ -330,7 +331,7 @@ QemuCocoaView *cocoaView;
>          screen.bitsPerPixel = 32;
>          screen.width = frameRect.size.width;
>          screen.height = frameRect.size.height;
> -
> +        prevent_stuck_command_key = NO;
>      }
>      return self;
>  }
> @@ -552,6 +553,14 @@ QemuCocoaView *cocoaView;
>  }
>
>  - (void) toggleModifier: (int)keycode {
> +
> +    /* Prevents the command key from being sent to the guest */
> +    if ((keycode == Q_KEY_CODE_META_L || keycode == Q_KEY_CODE_META_R) &&
> +        prevent_stuck_command_key == YES) {
> +        prevent_stuck_command_key = NO;
> +        return;
> +    }
> +
>      // Toggle the stored state.
>      modifiers_state[keycode] = !modifiers_state[keycode];
>      // Send a keyup or keydown depending on the state.
> @@ -691,6 +700,13 @@ QemuCocoaView *cocoaView;
>
>              // forward command key combos to the host UI unless the mouse is 
> grabbed
>              if (!isMouseGrabbed && ([event modifierFlags] & 
> NSEventModifierFlagCommand)) {
> +                /*
> +                 * Prevent the command key from being stuck down in the guest
> +                 * when using Command-F for full screen mode
> +                 */
> +                if (keycode == Q_KEY_CODE_F) {
> +                    prevent_stuck_command_key = YES;
> +                }
>                  [NSApp sendEvent:event];
>                  return;
>              }
> --
> 2.7.2

I can sort of see why this might work, but the flow of what's
going wrong isn't clear from your commit message, and the
change looks really inelegant.

thanks
-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]