[Vm-dev] [Cog/Spur Unix x86] Some keyUp events missing...

marcel.taeumel Marcel.Taeumel at hpi.de
Wed Nov 18 16:07:00 UTC 2015


Hi!

If you press two keys, you get two keyDown events. If you release them
simultaneously, you get only the second keyUp event.

I suspect the following code in sqUnixX11.c (line 3745 ff.) :

    case KeyRelease:
      noteEventState(evt->xkey);
      {
	KeySym symbolic;
	int keyCode, ucs4;
	if (XPending(stDisplay))
	  {
	    XEvent evt2;
	    XPeekEvent(stDisplay, &evt2);
	    if ((evt2.type == KeyPress) && (evt2.xkey.keycode == evt->xkey.keycode)
&& ((evt2.xkey.time - evt->xkey.time < 2)))
	      break;
	  }
	keyCode= x2sqKey(&evt->xkey, &symbolic);
	ucs4= xkeysym2ucs4(symbolic);
	if ((keyCode >= 0) || (ucs4 > 0))
	  recordKeyboardEvent(keyCode, EventKeyUp, modifierState, ucs4);
      }
      break;

There is that "XPending" check, which seems to swallow events. Looks like
hack. Not sure. There is no comment. :)

In our case, we hit both Arrow-Down and Arrow-Right, get two keyDown-events,
then release both, and get only keyUp for ArrowRight.

Who knows the CogVM unix sources? :)

Best,
Marcel



--
View this message in context: http://forum.world.st/Cog-Spur-Unix-x86-Some-keyUp-events-missing-tp4861720.html
Sent from the Squeak VM mailing list archive at Nabble.com.


More information about the Vm-dev mailing list