From ac0566ca885e05cdc4f8888628a4ac807bad0457 Mon Sep 17 00:00:00 2001 From: Wesley Moore Date: Mon, 17 Jun 2019 11:10:50 +1000 Subject: [PATCH] Make winit backend exit on Super-Q --- anvil/src/winit.rs | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/anvil/src/winit.rs b/anvil/src/winit.rs index c23972d..3be41e5 100644 --- a/anvil/src/winit.rs +++ b/anvil/src/winit.rs @@ -1,7 +1,10 @@ use std::{ cell::RefCell, rc::Rc, - sync::{atomic::AtomicBool, Arc, Mutex}, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, Mutex, + }, }; use smithay::{ @@ -134,7 +137,7 @@ pub fn run_winit(display: &mut Display, event_loop: &mut EventLoop<()>, log: Log info!(log, "Initialization completed, starting the main loop."); - loop { + while running.load(Ordering::SeqCst) { input.dispatch_new_events().unwrap(); // drawing logic @@ -178,11 +181,19 @@ pub fn run_winit(display: &mut Display, event_loop: &mut EventLoop<()>, log: Log } } - event_loop + if event_loop .dispatch(Some(::std::time::Duration::from_millis(16)), &mut ()) - .unwrap(); - display.flush_clients(); - - window_map.borrow_mut().refresh(); + .is_err() + { + running.store(false, Ordering::SeqCst); + } else { + display.flush_clients(); + window_map.borrow_mut().refresh(); + } } + + // Cleanup stuff + window_map.borrow_mut().clear(); + + Ok(()) }