On Tuesday 10 December 2002 3:26 pm, Lars Gullik Bjønnes wrote: > What we do not want is cursors, auto-repeat chars that just continue > to go after the key has been released. so we use xsync for this. > The problem is to know when to run this xsync, we want to loose as few > xevents as possible. > | So adjacent Release and Press events have the same time stamp. Next > | step? > this means that you are autorepeating.
Ok. I'm getting there. You want code like this: handler() { static Time time_released; static unsigned int last_key_pressed; static unsigned int last_state_pressed; switch (event) { case FL_KEYPRESS: { if (!ev) break; XKeyEvent * xke = reinterpret_cast<XKeyEvent *>(ev); if (xke->time - time_released < 25 // should perhaps be tunable && xke->state == last_state_pressed && xke->keycode == last_key_pressed) { // purge events if (XEventsQueued(fl_get_display(), QueuedAlready) > 0) waitForX(true); break; } // Go on to handle the key press and dispatch it to workAreaKeyPress ... break; } case FL_KEYRELEASE: if (!ev) break; time_released = ev->xkey.time; last_key_pressed = ev->xkey.keycode; last_state_pressed = ev->xkey.state; break; } } Am I there? Angus