qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] ui/cocoa: Pass command key through to guest whe


From: Programmingkid
Subject: Re: [Qemu-devel] [PATCH] ui/cocoa: Pass command key through to guest when VM has mousegrab
Date: Tue, 10 Dec 2013 08:51:11 -0500

On Dec 8, 2013, at 12:30 PM, Peter Maydell wrote:

> The guest might want to be able to use the command key for its won
> purposes (as command if it is MacOS X, or for the Windows key if
> it is a PC guest, for instance). In line with other UI frontends,
> pass it through if the guest has mousegrab, and only use it for
> host UI menu accelerators if not grabbed.
> 
> Thanks to John Arbuckle for reporting this problem, helping
> us work through what the best solution would be and providing
> a patch which was the initial inspiration for this one.
> 
> Reported-by: John Arbuckle <address@hidden>
> Signed-off-by: Peter Maydell <address@hidden>
> ---
> John -- my apologies for having let this issue (and your patch
> http://patchwork.ozlabs.org/patch/267627/ ) lie around
> unaddressed/unreviewed for such a long time. I finally got
> some time to look at the problem, and I think this patch should
> fix the problem of Mac guests not getting the command key
> (and also of Windows guests not getting Windows keys, since
> they're the same scancode).
> 
> Tested with an x86/Linux guest and "showkeys" to confirm that
> when mousegrab is enabled the command keys are passed through.
> 
> ui/cocoa.m | 25 ++++++++++++++++++-------
> 1 file changed, 18 insertions(+), 7 deletions(-)
> 
> diff --git a/ui/cocoa.m b/ui/cocoa.m
> index be49179..d38cf22 100644
> --- a/ui/cocoa.m
> +++ b/ui/cocoa.m
> @@ -129,8 +129,8 @@ int keymap[] =
>     14, //  51      0x33    0x0e            BKSP    QZ_BACKSPACE
>     0,  //  52      0x34    Undefined
>     1,  //  53      0x35    0x01            ESC     QZ_ESCAPE
> -    0,  //  54      0x36                            QZ_RMETA
> -    0,  //  55      0x37                            QZ_LMETA
> +    220, // 54      0x36    0xdc    E0,5C   R GUI   QZ_RMETA
> +    219, // 55      0x37    0xdb    E0,5B   L GUI   QZ_LMETA
>     42, //  56      0x38    0x2a            L SHFT  QZ_LSHIFT
>     58, //  57      0x39    0x3a            CAPS    QZ_CAPSLOCK
>     56, //  58      0x3A    0x38            L ALT   QZ_LALT
> @@ -206,8 +206,6 @@ int keymap[] =
> 
> /* Aditional 104 Key XP-Keyboard Scancodes from 
> http://www.computer-engineering.org/ps2keyboard/scancodes1.html */
> /*
> -    219 //          0xdb            e0,5b   L GUI
> -    220 //          0xdc            e0,5c   R GUI
>     221 //          0xdd            e0,5d   APPS
>         //              E0,2A,E0,37         PRNT SCRN
>         //              E1,1D,45,E1,9D,C5   PAUSE
> @@ -494,6 +492,12 @@ QemuCocoaView *cocoaView;
>     switch ([event type]) {
>         case NSFlagsChanged:
>             keycode = cocoa_keycode_to_qemu([event keyCode]);
> +
> +            if ((keycode == 219 || keycode == 220) && !isMouseGrabed) {
> +              /* Don't pass command key changes to guest unless mouse is 
> grabbed */
> +              keycode = 0;
> +            }
> +
>             if (keycode) {
>                 if (keycode == 58 || keycode == 69) { // emulate caps lock 
> and num lock keydown and keyup
>                     kbd_put_keycode(keycode);
> @@ -517,15 +521,15 @@ QemuCocoaView *cocoaView;
>             }
>             break;
>         case NSKeyDown:
> +            keycode = cocoa_keycode_to_qemu([event keyCode]);
> 
> -            // forward command Key Combos
> -            if ([event modifierFlags] & NSCommandKeyMask) {
> +            // forward command key combos to the host UI unless the mouse is 
> grabbed
> +            if (!isMouseGrabed && ([event modifierFlags] & 
> NSCommandKeyMask)) {
>                 [NSApp sendEvent:event];
>                 return;
>             }
> 
>             // default
> -            keycode = cocoa_keycode_to_qemu([event keyCode]);
> 
>             // handle control + alt Key Combos (ctrl+alt is reserved for QEMU)
>             if (([event modifierFlags] & NSControlKeyMask) && ([event 
> modifierFlags] & NSAlternateKeyMask)) {
> @@ -581,6 +585,13 @@ QemuCocoaView *cocoaView;
>             break;
>         case NSKeyUp:
>             keycode = cocoa_keycode_to_qemu([event keyCode]);
> +
> +            // don't pass the guest a spurious key-up if we treated this
> +            // command-key combo as a host UI action
> +            if (!isMouseGrabed && ([event modifierFlags] & 
> NSCommandKeyMask)) {
> +                return;
> +            }
> +
>             if (qemu_console_is_graphic(NULL)) {
>                 if (keycode & 0x80)
>                     kbd_put_keycode(0xe0);
> -- 
> 1.7.11.4
> 

Sorry, but the person who is in charge of the cocoa.m file doesn't care about 
advancing it. He has other priorities. I've tried and given up on him. 




reply via email to

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