From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38133) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zerqa-0000yb-30 for qemu-devel@nongnu.org; Wed, 23 Sep 2015 17:45:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZerqW-0007g1-Pv for qemu-devel@nongnu.org; Wed, 23 Sep 2015 17:45:03 -0400 Received: from mail-qg0-x230.google.com ([2607:f8b0:400d:c04::230]:34818) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZerqW-0007fv-I8 for qemu-devel@nongnu.org; Wed, 23 Sep 2015 17:45:00 -0400 Received: by qgt47 with SMTP id 47so30737315qgt.2 for ; Wed, 23 Sep 2015 14:45:00 -0700 (PDT) Mime-Version: 1.0 (Apple Message framework v1084) Content-Type: text/plain; charset=us-ascii From: Programmingkid In-Reply-To: Date: Wed, 23 Sep 2015 17:44:57 -0400 Content-Transfer-Encoding: quoted-printable Message-Id: References: <4D622DB1-AB63-4FDE-8B40-30FE9897E510@gmail.com> Subject: Re: [Qemu-devel] [PATCH] ui/cocoa.m: prevent stuck key situation List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: qemu-devel qemu-devel On Sep 23, 2015, at 2:04 PM, Peter Maydell wrote: > On 18 September 2015 at 14:46, Programmingkid = 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 keys when QEMU goes = into the >> background. >=20 > Looks like maybe you're not wrapping lines early enough in your > commit messages, resulting in this ugly effect when they're > quoted. It's best to not have lines longer than 75 chars or so. Sorry, will make the lines shorter in the future. >=20 >> Signed-off-by: John Arbuckle >>=20 >> --- >> ui/cocoa.m | 17 ++++++++++++++++- >> 1 files changed, 16 insertions(+), 1 deletions(-) >>=20 >> diff --git a/ui/cocoa.m b/ui/cocoa.m >> index 334e6f6..d07b22d 100644 >> --- a/ui/cocoa.m >> +++ b/ui/cocoa.m >> @@ -69,6 +69,7 @@ char **gArgv; >> bool stretch_video; >> NSTextField *pauseLabel; >> NSArray * supportedImageFileTypes; >> +int modifiers_state[256]; >=20 > Rather than making this global, could we have the = applicationWillResignActive > method call a new raiseAllKeys method on the NSView? We could do that, but isn't this more of an app controller function? >>=20 >>=20 >>=20 >> // keymap conversion >> int keymap[] =3D >> @@ -274,7 +275,6 @@ static void handleAnyDeviceErrors(Error * err) >> NSWindow *fullScreenWindow; >> float cx,cy,cw,ch,cdx,cdy; >> CGDataProviderRef dataProviderRef; >> - int modifiers_state[256]; >> BOOL isMouseGrabbed; >> BOOL isFullscreen; >> BOOL isAbsoluteEnabled; >> @@ -933,6 +933,21 @@ QemuCocoaView *cocoaView; >> return YES; >> } >>=20 >>=20 >>=20 >> +/* Called when QEMU goes into the background */ >> +- (void) applicationWillResignActive: (NSNotification = *)aNotification >> +{ >> + COCOA_DEBUG("QemuCocoaAppController: = applicationWillResignActive\n"); >> + int keycode, index; >> + const int max_index =3D 126; /* This is the size of the keymap = array */ >=20 > Hardcoding array sizes is never a good idea. We have an ARRAY_SIZE > macro which automatically gets it right. Didn't know about this macro. Will use it in the next patch. >=20 >=20 >> + >> + /* Release all the keys to prevent a stuck key situation */ >> + for(index =3D 0; index <=3D max_index; index++) { >> + keycode =3D keymap[index]; >> + modifiers_state[keycode] =3D 0; >> + qemu_input_event_send_key_number(dcl->con, keycode, false); >> + } >=20 > This will send key-up events even for keys which are already up. > Instead you can just send events for only the keys which are down > (and avoid the lookup in keymap[] too): >=20 >=20 > for (i =3D 0; i < ARRAY_SIZE(modifiers_state); i++) { > if (modifiers_state[i])) { > modifiers_state[i] =3D 0; > qemu_input_event_send_key_number(dcl->con, i, false); > } > } Sounds good. Will use it.=