[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
- Re: [Qemu-devel] [PATCH] ui/cocoa.m: prevent stuck command key when going into full screen mode,
Peter Maydell <=