use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
use std::thread;
use crossbeam_channel::{Receiver, Sender};
use signal_hook::iterator::Signals;
use backend::InputRequest;
use event::Event;
#[cfg(unix)]
pub fn start_resize_thread(
signals: Signals, resize_sender: Sender<Option<Event>>,
resize_requests: Receiver<InputRequest>, resize_running: Arc<AtomicBool>,
needs_resize: Option<Arc<AtomicBool>>,
) {
thread::spawn(move || {
while resize_running.load(Ordering::Relaxed) {
if signals.wait().count() > 0 {
if let Some(ref needs_resize) = needs_resize {
needs_resize.store(true, Ordering::Relaxed);
}
resize_sender.send(Some(Event::WindowResize));
while let Some(InputRequest::Peek) = resize_requests.recv() {
resize_sender.send(None);
}
}
}
});
}