mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-25 06:41:31 +11:00
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:
parent
8f9f2352cf
commit
c92ac695af
|
@ -111,16 +111,22 @@ impl EventsLoop {
|
||||||
let xlib = &self.display.xlib;
|
let xlib = &self.display.xlib;
|
||||||
|
|
||||||
let mut xev = unsafe { mem::uninitialized() };
|
let mut xev = unsafe { mem::uninitialized() };
|
||||||
unsafe {
|
loop {
|
||||||
// Ensure XNextEvent won't block
|
// Get next event
|
||||||
let count = (xlib.XPending)(self.display.display);
|
unsafe {
|
||||||
if count == 0 {
|
// Ensure XNextEvent won't block
|
||||||
return;
|
let count = (xlib.XPending)(self.display.display);
|
||||||
}
|
if count == 0 {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
(xlib.XNextEvent)(self.display.display, &mut xev);
|
(xlib.XNextEvent)(self.display.display, &mut xev);
|
||||||
|
}
|
||||||
|
self.process_event(&mut xev, &mut callback);
|
||||||
|
if self.interrupted.load(::std::sync::atomic::Ordering::Relaxed) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
self.process_event(&mut xev, &mut callback);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_forever<F>(&self, mut callback: F)
|
pub fn run_forever<F>(&self, mut callback: F)
|
||||||
|
|
Loading…
Reference in a new issue