autorepeat problem
Simon Bachmann
simonbachmann at bluewin.ch
Fri Nov 9 12:02:19 PST 2007
Hi everyone,
I know this has been discussed over and over on this list and other
places, but I could not find a comprehensive answer to my questions
anywhere.
Premise: I don't know much about how X works, actually I'd say nothing
at all...
I'm writing a little game (in Tcl/Tk) and the multiple release/press
events generated by the autorepeat functionality cause some problems,
since I need only the "true" keypresses/releases (the physical ones).
I'd prefer not to simply disable the autorepeat, because in case of a
crash it might happen that the autorepeat stays turned off.
One often mentioned solution is to compare the timestamp and/or serial
of two subsequent events. So, to check if a KeyPress event is a "true"
one, just compare it with the previous release. Pretty simple so far,
the problem is to check a keyRelease event, since here we have to wait
some time so an eventual related KeyPress can occur.
Quoting a Qt forum
(http://lists.trolltech.com/qt-interest/1998-10/msg00022.html):
"The general, you'll get a keypress VERY soon after the keyrelease when
the key is autorepeating (in terms of X events, the timestamp is
actually identical!)."
My questions here are
a) is the timestamp of a release/press event pair ALWAYS identical when
autorepeating? can one rely on that?
b) How long is "very soon"? In other words, how long one has to wait
after a release event before checking for a matching press event? Since
I plan to store the timestamp/serial of the last KeyPress/Release in a
variable, I suppose that if the delay is chosen too short, it might
happen that the comparison might happen between an autorepeat release
and press. Or are autorepeated release/press generated in a way that
this just can't happen?
To represent it graphically:
p-----r-p-----r-p-----r-p-----r
^
p = press event
r = release event
How long one has to wait after a release event to be _certain_ that the
comparison of timestamps does not happen at the point indicated with '^'?
Thanks in advance
Simon
More information about the xorg
mailing list