|
@@ -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
|