diff --git a/src/main.rs b/src/main.rs index 4f13fe6..a0a2128 100644 --- a/src/main.rs +++ b/src/main.rs @@ -665,7 +665,7 @@ pub struct App { color_scheme_expanded: Option<(ColorSchemeKind, Option)>, color_scheme_renaming: Option<(ColorSchemeKind, ColorSchemeId, String)>, color_scheme_rename_id: widget::Id, - rename_tab: Option<(segmented_button::Entity, String)>, + rename_tab: Option<(pane_grid::Pane, segmented_button::Entity, String)>, rename_tab_id: widget::Id, layout_load_pending: Option, ssh_hosts: Vec, @@ -3591,26 +3591,28 @@ impl Application for App { return self.update(Message::TabRenameOpen(Some(entity))); } Message::TabRenameOpen(entity_opt) => { - if let Some(tab_model) = self.pane_model.active() { + let pane = self.pane_model.focused(); + if let Some(tab_model) = self.pane_model.panes.get(pane) { let entity = entity_opt.unwrap_or_else(|| tab_model.active()); let initial = tab_model .text(entity) .map(|s| s.to_string()) .unwrap_or_default(); - self.rename_tab = Some((entity, initial)); + self.rename_tab = Some((pane, entity, initial)); self.pane_model.unfocus_all_terminals(); return self.update_focus(); } } Message::TabRenameInput(value) => { - if let Some((_, buffer)) = self.rename_tab.as_mut() { + if let Some((_, _, buffer)) = self.rename_tab.as_mut() { *buffer = value; } } Message::TabRenameCommit => { - if let Some((entity, value)) = self.rename_tab.take() { + if let Some((pane, entity, value)) = self.rename_tab.take() { let trimmed = value.trim().to_string(); - if let Some(tab_model) = self.pane_model.active_mut() { + let mut renamed = false; + if let Some(tab_model) = self.pane_model.panes.get_mut(pane) { if trimmed.is_empty() { if let Some(terminal) = tab_model.data::>(entity) { terminal.lock().unwrap().tab_title_override = None; @@ -3622,25 +3624,37 @@ impl Application for App { } tab_model.text_set(entity, trimmed); } + renamed = true; + } + if renamed { + self.pane_model.set_focus(pane); } - self.pane_model.update_terminal_focus(); return self.update_title(None); } } Message::TabRenameCancel => { - self.rename_tab = None; + if let Some((pane, _, _)) = self.rename_tab.take() + && self.pane_model.panes.get(pane).is_some() + { + self.pane_model.set_focus(pane); + return self.update_title(None); + } self.pane_model.update_terminal_focus(); } Message::TabRenameResetToDefault => { - if let Some((entity, _)) = self.rename_tab.take() - && let Some(tab_model) = self.pane_model.active_mut() - { - if let Some(terminal) = tab_model.data::>(entity) { - terminal.lock().unwrap().tab_title_override = None; + if let Some((pane, entity, _)) = self.rename_tab.take() { + let mut reset = false; + if let Some(tab_model) = self.pane_model.panes.get_mut(pane) { + if let Some(terminal) = tab_model.data::>(entity) { + terminal.lock().unwrap().tab_title_override = None; + } + tab_model.text_set(entity, fl!("new-terminal")); + reset = true; + } + if reset { + self.pane_model.set_focus(pane); + return self.update_title(None); } - tab_model.text_set(entity, fl!("new-terminal")); - self.pane_model.update_terminal_focus(); - return self.update_title(None); } self.pane_model.update_terminal_focus(); } @@ -3712,7 +3726,7 @@ impl Application for App { tab_title_override.unwrap_or_else(|| fl!("new-terminal")), ); } - return self.update_title(Some(pane)); + return self.update_title(None); } TermEvent::TextAreaSizeRequest(f) => { if let Some(tab_model) = self.pane_model.panes.get(pane) @@ -3736,7 +3750,7 @@ impl Application for App { tab_model.text_set(entity, title); } } - return self.update_title(Some(pane)); + return self.update_title(None); } TermEvent::MouseCursorDirty => { if let Some(tab_model) = self.pane_model.panes.get(pane) @@ -4011,7 +4025,7 @@ impl Application for App { ); } - if let Some((_, buffer)) = self.rename_tab.as_ref() { + if let Some((_, _, buffer)) = self.rename_tab.as_ref() { let input = widget::text_input(fl!("tab-name-placeholder"), buffer) .id(self.rename_tab_id.clone()) .on_input(Message::TabRenameInput) @@ -4132,6 +4146,7 @@ impl Application for App { .button_spacing(space_xxs) .on_activate(Message::TabActivate) .on_close(|entity| Message::TabClose(Some(entity))) + .on_double_click(move |entity| Message::TabRenameOpenForPane(pane, entity)) .on_context(move |entity| Message::TabRenameOpenForPane(pane, entity)), ) .class(style::Container::Custom(Box::new(|theme| {