Fix x11 poll_events to drain queue

It was only processing a single event per call. The docs say

> Fetches all the events that are pending, calls the callback function
> for each of them, and returns.

which suggests that was incorrect.
This commit is contained in:
Joe Wilm 2017-05-09 09:20:35 -07:00
parent 8f9f2352cf
commit c92ac695af

View file

@ -111,16 +111,22 @@ impl EventsLoop {
let xlib = &self.display.xlib;
let mut xev = unsafe { mem::uninitialized() };
unsafe {
// Ensure XNextEvent won't block
let count = (xlib.XPending)(self.display.display);
if count == 0 {
return;
loop {
// Get next event
unsafe {
// Ensure XNextEvent won't block
let count = (xlib.XPending)(self.display.display);
if count == 0 {
break;
}
(xlib.XNextEvent)(self.display.display, &mut xev);
}
self.process_event(&mut xev, &mut callback);
if self.interrupted.load(::std::sync::atomic::Ordering::Relaxed) {
break;
}
(xlib.XNextEvent)(self.display.display, &mut xev);
}
self.process_event(&mut xev, &mut callback);
}
pub fn run_forever<F>(&self, mut callback: F)