Check if a Config message was handled before creating first tab

In `Application::subscription()`, `subscription::channel()` would
 create a dead terminal tab if it was called before
 `config_subscription()`.

 Then `subscription::channel()` would be triggered a second time
 creating a second terminal tab that works.

 This commit fixes this issue by only creating the first terminal
 tab after a `Message::Config{}` was handled, i.e. after
 `config_subscription()` was run.

Signed-off-by: Mohammad AlSaleh <CE.Mohammad.AlSaleh@gmail.com>
This commit is contained in:
Mohammad AlSaleh 2024-01-01 10:37:05 +03:00 committed by Jeremy Soller
parent 9ba9f0fb6e
commit 7b152bd218

View file

@ -184,6 +184,7 @@ pub struct App {
context_page: ContextPage,
term_event_tx_opt: Option<mpsc::Sender<(segmented_button::Entity, TermEvent)>>,
term_config: TermConfig,
config_subscribed: bool,
}
impl App {
@ -384,6 +385,7 @@ impl Application for App {
context_page: ContextPage::Settings,
term_config: flags.term_config,
term_event_tx_opt: None,
config_subscribed: false,
};
let command = app.update_title();
@ -405,6 +407,7 @@ impl Application for App {
self.config = config;
return self.update_config();
}
self.config_subscribed = true;
}
Message::Copy(entity_opt) => {
let entity = entity_opt.unwrap_or_else(|| self.tab_model.active());
@ -544,8 +547,9 @@ impl Application for App {
_ => {}
}
}
Message::TabNew => match &self.term_event_tx_opt {
Some(term_event_tx) => match self.themes.get(self.config.syntax_theme()) {
Message::TabNew => match (self.config_subscribed, &self.term_event_tx_opt) {
(false, _) => log::info!("must wait for config subscription before creating first tab"),
(true, Some(term_event_tx)) => match self.themes.get(self.config.syntax_theme()) {
Some(colors) => {
let entity = self
.tab_model
@ -572,7 +576,7 @@ impl Application for App {
//TODO: fall back to known good theme
}
},
None => {
(true, None) => {
log::warn!("tried to create new tab before having event channel");
}
},