diff --git a/src/config.rs b/src/config.rs index 452989f..8d356a9 100644 --- a/src/config.rs +++ b/src/config.rs @@ -160,14 +160,18 @@ impl ConfigFile { }; let default_config = (&*globals::CONFIG_NAME.read().unwrap()).to_string(); - let config_name = - if (map.len() > 1 || !map.contains_key(&default_config)) && map.len() != 0 { - ConfigPicker::new(map.keys().map(|a| a.to_owned()).collect()) - .selected() - .unwrap_or(default_config) - } else { - default_config - }; + let config_name = if (map.len() > 1 || !map.contains_key(&default_config)) + && map.len() != 0 + { + let picked = ConfigPicker::new(map.keys().map(|a| a.to_owned()).collect()).selected; + let picked = picked.borrow(); + match &*picked { + Some(v) => v.to_owned(), + None => std::process::exit(0), + } + } else { + default_config + }; if let Some(config) = map.get(&config_name) { *globals::CONFIG_NAME.write().unwrap() = config_name; diff --git a/src/config_picker.rs b/src/config_picker.rs index 446536c..3c99b5f 100644 --- a/src/config_picker.rs +++ b/src/config_picker.rs @@ -12,6 +12,8 @@ along with Post Maker. If not, see */ +use std::{cell::RefCell, rc::Rc}; + use crate::globals; use fltk::{ app, @@ -26,9 +28,9 @@ use fltk::{ pub(crate) struct ConfigPicker { pub(crate) win: Window, + pub(crate) selected: Rc>>, pub(crate) browse: Browser, pub(crate) apply_btn: Button, - pub(crate) configs: Vec, } impl ConfigPicker { @@ -72,9 +74,9 @@ impl ConfigPicker { let mut config_picker = Self { win, + selected: Rc::new(RefCell::new(browse.selected_text())), browse, apply_btn, - configs, }; config_picker.event(); @@ -90,14 +92,16 @@ impl ConfigPicker { self.apply_btn.set_callback(move |_| { win.hide(); }); - } - pub(crate) fn selected(&self) -> Option { - let idx = self.browse.value(); - if idx == 0 { - None - } else { - self.configs.get(idx as usize - 1).map(|a| a.to_owned()) - } + let selected = Rc::clone(&self.selected); + self.browse.set_callback(move |f| { + *selected.borrow_mut() = f.selected_text(); + }); + + let selected = Rc::clone(&self.selected); + self.win.set_callback(move |f| { + *selected.borrow_mut() = None; + f.hide(); + }); } }