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: Programmingkid
Subject: Re: [Qemu-devel] [PATCH] ui/cocoa.m: prevent stuck command key when going into full screen mode
Date: Sun, 1 Jul 2018 18:08:13 -0400

On Jul 1, 2018, at 3:30 PM, Peter Maydell wrote:

> 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.

It is the key release event for the command key. 

>> 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.

What would be a more suitable solution to this problem? I realize using a flag 
to indicate this situation isn't the prettiest, but it does get the job done. 




reply via email to

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