|  | @@ -8,18 +8,25 @@ mod util;
 | 
	
		
			
				|  |  |  mod widget;
 | 
	
		
			
				|  |  |  mod x11;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -use chan;
 | 
	
		
			
				|  |  | -use chan_signal;
 | 
	
		
			
				|  |  | +use simple_signal;
 | 
	
		
			
				|  |  | +use simple_signal::Signal;
 | 
	
		
			
				|  |  |  use config::Config;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +use std::sync::mpsc;
 | 
	
		
			
				|  |  |  use std::thread;
 | 
	
		
			
				|  |  |  use std::time;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  pub const SIZE: u16 = 20;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -pub fn ui_main(signal: chan::Receiver<chan_signal::Signal>, cfg: &Config) -> i32 {
 | 
	
		
			
				|  |  | +pub fn ui_main(cfg: &Config) -> i32 {
 | 
	
		
			
				|  |  |      if let Some(conn) = x11::Connection::new() {
 | 
	
		
			
				|  |  | -        let (tx, rx) = chan::sync(10);
 | 
	
		
			
				|  |  | +        let (tx, rx) = mpsc::channel();
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            let tx = tx.clone();
 | 
	
		
			
				|  |  | +            simple_signal::set_handler(&[Signal::Int, Signal::Term], move |_signals| {
 | 
	
		
			
				|  |  | +                tx.send(widget::WidgetMessage::Quit).expect("Failed to send quit");
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              let tx = tx.clone();
 | 
	
		
			
				|  |  |              let conn = conn.clone_connection();
 | 
	
	
		
			
				|  | @@ -28,7 +35,7 @@ pub fn ui_main(signal: chan::Receiver<chan_signal::Signal>, cfg: &Config) -> i32
 | 
	
		
			
				|  |  |                      match conn.wait_for_event() {
 | 
	
		
			
				|  |  |                          Some(event) => {
 | 
	
		
			
				|  |  |                              let message = widget::WidgetMessage::XcbEvent(event);
 | 
	
		
			
				|  |  | -                            tx.send(message);
 | 
	
		
			
				|  |  | +                            tx.send(message).expect("Failed to send xcb event");
 | 
	
		
			
				|  |  |                          },
 | 
	
		
			
				|  |  |                          None => { break; }
 | 
	
		
			
				|  |  |                      }
 | 
	
	
		
			
				|  | @@ -53,24 +60,18 @@ pub fn ui_main(signal: chan::Receiver<chan_signal::Signal>, cfg: &Config) -> i32
 | 
	
		
			
				|  |  |              let tx = tx.clone();
 | 
	
		
			
				|  |  |              thread::spawn(move || {
 | 
	
		
			
				|  |  |                  loop {
 | 
	
		
			
				|  |  | -                    tx.send(widget::WidgetMessage::Update);
 | 
	
		
			
				|  |  | +                    tx.send(widget::WidgetMessage::Update).expect("Failed to send update");
 | 
	
		
			
				|  |  |                      thread::sleep(time::Duration::from_secs(1));
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              });
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          loop {
 | 
	
		
			
				|  |  | -            chan_select!(
 | 
	
		
			
				|  |  | -                rx.recv() -> event => {
 | 
	
		
			
				|  |  | -                    if panel.handle_event(event.unwrap()) {
 | 
	
		
			
				|  |  | -                        println!("Exiting");
 | 
	
		
			
				|  |  | -                        break;
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                },
 | 
	
		
			
				|  |  | -                signal.recv() => {
 | 
	
		
			
				|  |  | -                    panel.finish();
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            );
 | 
	
		
			
				|  |  | +            let event = rx.recv();
 | 
	
		
			
				|  |  | +            if panel.handle_event(event.unwrap()) {
 | 
	
		
			
				|  |  | +                println!("Exiting");
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      0
 |