Make IOCompositor only respond to the first Quit event.

This avoids huge mpsc_queue build-ups from the flood of Quit events
coming from glutin.

Fixes #5234.
This commit is contained in:
Nicholas Nethercote 2015-03-16 19:29:38 -07:00
parent 1092ca1019
commit 2b10f6e7ea

View file

@ -128,6 +128,9 @@ pub struct IOCompositor<Window: WindowMethods> {
/// Pending scroll events.
pending_scroll_events: Vec<ScrollEvent>,
/// Has a Quit event been seen?
has_seen_quit_event: bool,
}
pub struct ScrollEvent {
@ -217,6 +220,7 @@ impl<Window: WindowMethods> IOCompositor<Window> {
fragment_point: None,
outstanding_paint_msgs: 0,
last_composite_time: 0,
has_seen_quit_event: false,
}
}
@ -787,6 +791,8 @@ impl<Window: WindowMethods> IOCompositor<Window> {
}
WindowEvent::Quit => {
if !self.has_seen_quit_event {
self.has_seen_quit_event = true;
debug!("shutting down the constellation for WindowEvent::Quit");
let ConstellationChan(ref chan) = self.constellation_chan;
chan.send(ConstellationMsg::Exit).unwrap();
@ -794,6 +800,7 @@ impl<Window: WindowMethods> IOCompositor<Window> {
}
}
}
}
fn on_resize_window_event(&mut self, new_size: TypedSize2D<DevicePixel, u32>) {
debug!("compositor resizing to {:?}", new_size.to_untyped());