On Mon, Sep 20, 2010 at 08:44:18PM -0700, Wolf Tivy wrote:
> [..]
> 
> So does anyone know how to change the mode or something so that we can
> get the paired events instead of just 'keypress'?  I know this is
> possible somewhere because that's how SDL does it.

You want the KeyRelease event.  Note that, by default, X11 will generate
spurious repeat KeyPress events.  Years ago I read the relevant SDL code
(which maintains a vector of which keys are currently down) to see if it
had a nice way of handling these events.  It turns out it just had
a heuristic for detecting them and ignoring them; iirc, the synthetic repeat
events look like a KeyRelease followed by a KeyPress, where the only
difference between the two events is the type (i.e. Release then Press), 
and the time, which is off by one.  These are pushed onto the X event
queue simultaneously, so a reliable test is, when encountering
KeyRelease, also call XPeekEvent to see if the follow-up KeyPress
exists.  In this case, the KeyRelease/KeyPress pair can be interpreted
as a repeat event, and ignored.

This is rather grotesque, and I suggest you look at SDL code to see if
there's maybe some shinier way to do it in the newer versions.  (I would
be happy to hear that I am out of date--I used this 5 years ago.)

Reply via email to