diff options
author | Kunal Mohan <kunalmohan99@gmail.com> | 2021-05-13 18:37:59 +0530 |
---|---|---|
committer | Kunal Mohan <kunalmohan99@gmail.com> | 2021-05-15 22:18:29 +0530 |
commit | 050d846b5e41851d4ff5e8a4bbd7f24c72754507 (patch) | |
tree | ce50f8ab9e6e514e8503b2a52a37f0b640af236a /src | |
parent | 07ca0cbb11bbc0491e134c863cd8a6133c2a9cf1 (diff) |
clean and exit on window close
Diffstat (limited to 'src')
-rw-r--r-- | src/client/mod.rs | 27 | ||||
-rw-r--r-- | src/common/os_input_output.rs | 11 | ||||
-rw-r--r-- | src/main.rs | 8 | ||||
-rw-r--r-- | src/tests/fakes.rs | 4 |
4 files changed, 27 insertions, 23 deletions
diff --git a/src/client/mod.rs b/src/client/mod.rs index 2fada5929..862c13ccf 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -132,15 +132,26 @@ pub fn start_client(mut os_input: Box<dyn ClientOsApi>, opts: CliArgs, config: C .name("signal_listener".to_string()) .spawn({ let os_input = os_input.clone(); + let send_client_instructions = send_client_instructions.clone(); move || { - os_input.receive_sigwinch(Box::new({ - let os_api = os_input.clone(); - move || { - os_api.send_to_server(ClientToServerMsg::TerminalResize( - os_api.get_terminal_size_using_fd(0), - )); - } - })); + os_input.handle_signals( + Box::new({ + let os_api = os_input.clone(); + move || { + os_api.send_to_server(ClientToServerMsg::TerminalResize( + os_api.get_terminal_size_using_fd(0), + )); + } + }), + Box::new({ + let send_client_instructions = send_client_instructions.clone(); + move || { + send_client_instructions + .send(ClientInstruction::Exit) + .unwrap() + } + }), + ); } }) .unwrap(); diff --git a/src/common/os_input_output.rs b/src/common/os_input_output.rs index 5e7b3ce22..adde6fdff 100644 --- a/src/common/os_input_output.rs +++ b/src/common/os_input_output.rs @@ -314,7 +314,7 @@ pub trait ClientOsApi: Send + Sync { /// Receives a message on client-side IPC channel // This should be called from the client-side router thread only. fn recv_from_server(&self) -> (ServerToClientMsg, ErrorContext); - fn receive_sigwinch(&self, cb: Box<dyn Fn()>); + fn handle_signals(&self, sigwinch_cb: Box<dyn Fn()>, quit_cb: Box<dyn Fn()>); /// Establish a connection with the server socket. fn connect_to_server(&self, path: &Path); } @@ -362,14 +362,15 @@ impl ClientOsApi for ClientOsInputOutput { .unwrap() .recv() } - fn receive_sigwinch(&self, cb: Box<dyn Fn()>) { - let mut signals = Signals::new(&[SIGWINCH, SIGTERM, SIGINT, SIGQUIT]).unwrap(); + fn handle_signals(&self, sigwinch_cb: Box<dyn Fn()>, quit_cb: Box<dyn Fn()>) { + let mut signals = Signals::new(&[SIGWINCH, SIGTERM, SIGINT, SIGQUIT, SIGHUP]).unwrap(); for signal in signals.forever() { match signal { SIGWINCH => { - cb(); + sigwinch_cb(); } - SIGTERM | SIGINT | SIGQUIT => { + SIGTERM | SIGINT | SIGQUIT | SIGHUP => { + quit_cb(); break; } _ => unreachable!(), diff --git a/src/main.rs b/src/main.rs index 2430d84a7..49e42ffbf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -24,13 +24,6 @@ use std::convert::TryFrom; pub fn main() { let opts = CliArgs::from_args(); - let config = match Config::try_from(&opts) { - Ok(config) => config, - Err(e) => { - eprintln!("There was an error in the config file:\n{}", e); - std::process::exit(1); - } - }; if let Some(crate::cli::ConfigCli::Setup(setup)) = opts.option.clone() { Setup::from_cli(&setup, opts).expect("Failed to print to stdout"); @@ -43,7 +36,6 @@ pub fn main() { std::process::exit(1); } }; - let config_options = Options::from_cli(&config.options, opts.option.clone()); atomic_create_dir(&*ZELLIJ_TMP_DIR).unwrap(); atomic_create_dir(&*ZELLIJ_TMP_LOG_DIR).unwrap(); if let Some(path) = opts.server { diff --git a/src/tests/fakes.rs b/src/tests/fakes.rs index 62375914f..98ec694a7 100644 --- a/src/tests/fakes.rs +++ b/src/tests/fakes.rs @@ -204,7 +204,7 @@ impl ClientOsApi for FakeInputOutput { .recv() .unwrap() } - fn receive_sigwinch(&self, cb: Box<dyn Fn()>) { + fn handle_signals(&self, sigwinch_cb: Box<dyn Fn()>, _quit_cb: Box<dyn Fn()>) { if self.sigwinch_event.is_some() { let (lock, cvar) = &*self.should_trigger_sigwinch; { @@ -213,7 +213,7 @@ impl ClientOsApi for FakeInputOutput { should_trigger_sigwinch = cvar.wait(should_trigger_sigwinch).unwrap(); } } - cb(); + sigwinch_cb(); } } fn connect_to_server(&self, _path: &std::path::Path) {} |