[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2] ui/cocoa.m: prevent stuck key situation
From: |
Programmingkid |
Subject: |
Re: [Qemu-devel] [PATCH v2] ui/cocoa.m: prevent stuck key situation |
Date: |
Wed, 23 Sep 2015 20:44:08 -0400 |
On Sep 23, 2015, at 8:34 PM, Peter Maydell wrote:
> On 23 September 2015 at 17:17, Programmingkid <address@hidden> wrote:
>> When the user puts QEMU in the background while holding
>> down a key, QEMU will not receive the keyup event when
>> the user lets go of the key. When the user goes back to
>> QEMU, QEMU will think the key is still down causing
>> stuck key symptoms. This patch fixes this problem by
>> releasing all down keys when QEMU goes into the
>> background.
>>
>> Signed-off-by: John Arbuckle <address@hidden>
>>
>> ---
>> Removed the modifiers_state global variable.
>> Added a raiseAllKeys method.
>>
>> ui/cocoa.m | 26 ++++++++++++++++++++++++++
>> 1 files changed, 26 insertions(+), 0 deletions(-)
>>
>> diff --git a/ui/cocoa.m b/ui/cocoa.m
>> index 334e6f6..4d15553 100644
>> --- a/ui/cocoa.m
>> +++ b/ui/cocoa.m
>> @@ -304,6 +304,7 @@ static void handleAnyDeviceErrors(Error * err)
>> - (float) cdx;
>> - (float) cdy;
>> - (QEMUScreen) gscreen;
>> +- (void) raiseAllKeys;
>> @end
>>
>> QemuCocoaView *cocoaView;
>> @@ -798,6 +799,23 @@ QemuCocoaView *cocoaView;
>> - (float) cdx {return cdx;}
>> - (float) cdy {return cdy;}
>> - (QEMUScreen) gscreen {return screen;}
>> +
>> +/*
>> + * Makes the target think all down keys are being released.
>> + * This prevents a stuck key problem.
>
> ", since we will not see key up events for those keys after we
> have lost focus."
If that is all the changes that are required, I wouldn't mind if you just
added it to the patch.
>
>> + */
>> +- (void) raiseAllKeys
>> +{
>> + int index;
>> + const int max_index = 220; /* This is the highest value key */
>
> No, you need to use ARRAY_SIZE.
I did use it, it didn't work. The command key would still stay down.
This is because the command key has a value of 220. The keymap
array size is only 126. I know it is confusing. I was thinking of using
cocoa_keycode_to_qemu() to translate the index to the qemu (pc xt)
values, but that would be expensive in terms of cpu usage.
>
>> +
>> + for (index = 0; index <= max_index; index++) {
>> + if (modifiers_state[index]) {
>> + modifiers_state[index] = 0;
>> + qemu_input_event_send_key_number(dcl->con, index, false);
>> + }
>> + }
>
> -- PMM