diff --git a/Cargo.lock b/Cargo.lock index 14d247645e..d2d0b70658 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10760,7 +10760,6 @@ dependencies = [ "project", "serde", "serde_json", - "terminal_view", "theme", "ui", "util", diff --git a/crates/assistant/src/assistant_panel.rs b/crates/assistant/src/assistant_panel.rs index 37360589ca..c7df8bc548 100644 --- a/crates/assistant/src/assistant_panel.rs +++ b/crates/assistant/src/assistant_panel.rs @@ -686,13 +686,11 @@ impl AssistantPanel { .focus_handle(cx) .contains_focused(cx) { - if let Some(terminal_view) = terminal_panel - .read(cx) - .pane() - .read(cx) - .active_item() - .and_then(|t| t.downcast::()) - { + if let Some(terminal_view) = terminal_panel.read(cx).pane().and_then(|pane| { + pane.read(cx) + .active_item() + .and_then(|t| t.downcast::()) + }) { return Some(InlineAssistTarget::Terminal(terminal_view)); } } diff --git a/crates/assistant/src/slash_command/term_command.rs b/crates/assistant/src/slash_command/term_command.rs index e3ee2f9ece..a9072a62dd 100644 --- a/crates/assistant/src/slash_command/term_command.rs +++ b/crates/assistant/src/slash_command/term_command.rs @@ -9,7 +9,7 @@ use gpui::{AppContext, Task, WeakView}; use language::{CodeLabel, LspAdapterDelegate}; use terminal_view::{terminal_panel::TerminalPanel, TerminalView}; use ui::prelude::*; -use workspace::Workspace; +use workspace::{dock::Panel, Workspace}; use super::create_label_for_command; @@ -65,13 +65,11 @@ impl SlashCommand for TermSlashCommand { let Some(terminal_panel) = workspace.read(cx).panel::(cx) else { return Task::ready(Err(anyhow::anyhow!("no terminal panel open"))); }; - let Some(active_terminal) = terminal_panel - .read(cx) - .pane() - .read(cx) - .active_item() - .and_then(|t| t.downcast::()) - else { + let Some(active_terminal) = terminal_panel.read(cx).pane().and_then(|pane| { + pane.read(cx) + .active_item() + .and_then(|t| t.downcast::()) + }) else { return Task::ready(Err(anyhow::anyhow!("no active terminal"))); }; diff --git a/crates/tab_switcher/Cargo.toml b/crates/tab_switcher/Cargo.toml index b36798fe8b..6534449917 100644 --- a/crates/tab_switcher/Cargo.toml +++ b/crates/tab_switcher/Cargo.toml @@ -18,7 +18,6 @@ gpui.workspace = true menu.workspace = true picker.workspace = true serde.workspace = true -terminal_view.workspace = true ui.workspace = true util.workspace = true workspace.workspace = true diff --git a/crates/tab_switcher/src/tab_switcher.rs b/crates/tab_switcher/src/tab_switcher.rs index bfbd1aae0d..9572a9ec37 100644 --- a/crates/tab_switcher/src/tab_switcher.rs +++ b/crates/tab_switcher/src/tab_switcher.rs @@ -57,16 +57,25 @@ impl TabSwitcher { } fn open(action: &Toggle, workspace: &mut Workspace, cx: &mut ViewContext) { - let terminal = workspace.panel::(cx); - let terminal_pane = terminal.and_then(|terminal| { - terminal - .focus_handle(cx) - .contains_focused(cx) - .then(|| terminal.read(cx).pane()) - }); - let weak_pane = terminal_pane - .unwrap_or_else(|| workspace.active_pane()) - .downgrade(); + let mut weak_pane = workspace.active_pane().downgrade(); + for dock in [ + workspace.left_dock(), + workspace.bottom_dock(), + workspace.right_dock(), + ] { + dock.update(cx, |this, cx| { + let Some(panel) = this + .active_panel() + .filter(|panel| panel.focus_handle(cx).contains_focused(cx)) + else { + return; + }; + if let Some(pane) = panel.pane(cx) { + weak_pane = pane.downgrade(); + } + }) + } + workspace.toggle_modal(cx, |cx| { let delegate = TabSwitcherDelegate::new(action, cx.view().downgrade(), weak_pane, cx); TabSwitcher::new(delegate, cx) diff --git a/crates/terminal_view/src/terminal_panel.rs b/crates/terminal_view/src/terminal_panel.rs index 6840e5caeb..2b9e68e75f 100644 --- a/crates/terminal_view/src/terminal_panel.rs +++ b/crates/terminal_view/src/terminal_panel.rs @@ -171,7 +171,7 @@ impl TerminalPanel { fn apply_tab_bar_buttons(&self, cx: &mut ViewContext) { let additional_buttons = self.additional_tab_bar_buttons.clone(); - self.pane().update(cx, |pane, cx| { + self.pane.update(cx, |pane, cx| { pane.set_render_tab_bar_buttons(cx, move |pane, cx| { h_flex() .gap_2() @@ -683,10 +683,6 @@ impl TerminalPanel { Some(()) } - pub fn pane(&self) -> &View { - &self.pane - } - fn has_no_terminals(&self, cx: &WindowContext) -> bool { self.pane.read(cx).items_len() == 0 && self.pending_terminals_to_add == 0 } @@ -849,6 +845,10 @@ impl Panel for TerminalPanel { fn toggle_action(&self) -> Box { Box::new(ToggleFocus) } + + fn pane(&self) -> Option> { + Some(self.pane.clone()) + } } #[derive(Serialize, Deserialize)]