New devel to-do item (release all pressed keyboard keys on focus loss)

John_Tobey@notes.intdata.com John_Tobey@notes.intdata.com
Wed Dec 5 14:09:00 GMT 2001



> > I suppose for this the solution would be to make winSendKeyEvent
> > do nothing if
> > its fDown already matches the array element

> Nah, you can't do that because we sometimes call winSendKeyEvent multiple
> times from winwndproc/winWindowProc()/WM_KEYDOWN if the key has a repeat
> count.

But I can do it when both are *false*.  This goes over my earlier patch:

--- winkeybd.c~     Tue Dec  4 16:42:28 2001
+++ winkeybd.c Wed Dec  5 16:39:49 2001
@@ -439,7 +439,12 @@
 winSendKeyEvent (DWORD dwKey, Bool fDown)
 {
   xEvent           xCurrentEvent;
-
+
+  /* Ignore ups without a preceding down.  This happens when a keystroke
+     causes X to gain focus.  */
+  if (!fDown && !g_fKeyStates[dwKey])
+    return;
+
   ZeroMemory (&xCurrentEvent, sizeof (xCurrentEvent));

   xCurrentEvent.u.u.type = fDown ? KeyPress : KeyRelease;

> I'm kinda confused here.  You need to add an ErrorF () to WM_KEYDOWN and
> WM_KEYUP to see if the doubled key message is being sent again immediately
> after we regain focus.

Here is my XWin.log:

keydown #16 at 22939
keyup #16 at   23250
keydown #17 at 23320
keyup #17 at   23570
keydown #18 at 23680
keyup #18 at   23981
keydown #19 at 24091
keyup #19 at   24412
keydown #16 at 24452
keyup #16 at   24752
keydown #17 at 24792
Simulating release of key #17!
killfocus at   24862
setfocus at    32363
keyup #45 at   32483
killfocus at   42017

And here is my xterm after the setfocus at 32363 ms:

$ qwerqww

'w' is key #17.  The only thing that could be happening is that xterm is
outsmarting itself by doing something with its own killfocus.  My preference is
to let xterm users deal.  We're used to it. :-)

> > I doubt
> > whether I can figure it out completely without a major time investment.

> This is your baby now, and you're making good progress.  Don't be
> discouraged.  These things take time to work out correctly.

Without your help, I would probably lose patience.

-John




More information about the Cygwin-xfree mailing list