diff --git a/src/main.rs b/src/main.rs index 194b4d8..f671b71 100644 --- a/src/main.rs +++ b/src/main.rs @@ -636,6 +636,9 @@ impl App { fn update_focus(&self) -> Task { if self.find { widget::text_input::focus(self.find_search_id.clone()) + } else if self.core.window.show_context { + // TODO focus the context page? + Task::none() } else if let Some(terminal_id) = self.terminal_ids.get(&self.pane_model.focused()).cloned() { widget::text_input::focus(terminal_id) @@ -2656,9 +2659,13 @@ impl Application for App { Message::ToggleContextPage(context_page) => { if self.context_page == context_page { self.core.window.show_context = !self.core.window.show_context; + self.pane_model.update_terminal_focus(); + + return self.update_focus(); } else { self.context_page = context_page; self.core.window.show_context = true; + self.pane_model.unfocus_all_terminals(); } // Extra work to do to prepare context pages @@ -2716,7 +2723,9 @@ impl Application for App { } }, Message::WindowFocused => { - self.pane_model.update_terminal_focus(); + if !self.core.window.show_context { + self.pane_model.update_terminal_focus(); + } return self.update_focus(); } Message::WindowUnfocused => { @@ -2829,6 +2838,7 @@ impl Application for App { if let Some(terminal) = tab_model.data::>(entity) { let mut terminal_box = terminal_box(terminal) .id(terminal_id) + .disabled(self.core.window.show_context) .on_context_menu(move |menu_state| Message::TabContextMenu(pane, menu_state)) .on_middle_click(move || Message::MiddleClick(pane, Some(entity_middle_click))) .on_open_hyperlink(Some(Box::new(Message::LaunchUrl))) diff --git a/src/terminal_box.rs b/src/terminal_box.rs index f27749e..965121a 100644 --- a/src/terminal_box.rs +++ b/src/terminal_box.rs @@ -66,6 +66,7 @@ pub struct TerminalBox<'a, Message> { on_window_unfocused: Option Message + 'a>>, key_binds: HashMap, sharp_corners: bool, + disabled: bool, } impl<'a, Message> TerminalBox<'a, Message> @@ -91,6 +92,7 @@ where on_window_focused: None, on_window_unfocused: None, sharp_corners: false, + disabled: false, } } @@ -169,6 +171,11 @@ where self.on_window_unfocused = Some(Box::new(on_window_unfocused)); self } + + pub fn disabled(mut self, disabled: bool) -> Self { + self.disabled = disabled; + self + } } pub fn terminal_box(terminal: &Mutex) -> TerminalBox<'_, Message> @@ -337,7 +344,7 @@ where // Render default background { let meta = &terminal.metadata_set[terminal.default_attrs().metadata]; - let background_color = shade(meta.bg, state.is_focused); + let background_color = shade(meta.bg, state.is_focused && !self.disabled); renderer.fill_quad( Quad { @@ -737,6 +744,9 @@ where shell: &mut Shell<'_, Message>, _viewport: &Rectangle, ) -> Status { + if self.disabled { + return Status::Ignored; + } let state = tree.state.downcast_mut::(); let scrollbar_rect = state.scrollbar_rect.get(); let mut terminal = self.terminal.lock().unwrap();