Open exactly one terminal on workspace::NewTerminal
action (#10721)
Fixes https://github.com/zed-industries/zed/issues/4567 Release Notes: - Fixed multiple terminals being opened on `workspace::NewTerminal` calls ([4567](https://github.com/zed-industries/zed/issues/4567))
This commit is contained in:
parent
bb97432e9a
commit
d5c5394693
1 changed files with 15 additions and 1 deletions
|
@ -433,9 +433,18 @@ impl TerminalPanel {
|
||||||
_: &workspace::NewTerminal,
|
_: &workspace::NewTerminal,
|
||||||
cx: &mut ViewContext<Workspace>,
|
cx: &mut ViewContext<Workspace>,
|
||||||
) {
|
) {
|
||||||
|
let has_no_terminals = workspace
|
||||||
|
.panel::<Self>(cx)
|
||||||
|
.map(|terminal_panel| terminal_panel.update(cx, |panel, cx| panel.has_no_terminals(cx)))
|
||||||
|
.unwrap_or(true);
|
||||||
let Some(this) = workspace.focus_panel::<Self>(cx) else {
|
let Some(this) = workspace.focus_panel::<Self>(cx) else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
if has_no_terminals {
|
||||||
|
// `set_active` on focus, will already add a new terminal
|
||||||
|
// into an empty terminal pane, no need to add another one
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.update(cx, |this, cx| this.add_terminal(None, None, cx))
|
this.update(cx, |this, cx| this.add_terminal(None, None, cx))
|
||||||
}
|
}
|
||||||
|
@ -598,9 +607,14 @@ impl TerminalPanel {
|
||||||
|
|
||||||
Some(())
|
Some(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn pane(&self) -> &View<Pane> {
|
pub fn pane(&self) -> &View<Pane> {
|
||||||
&self.pane
|
&self.pane
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn has_no_terminals(&mut self, cx: &mut ViewContext<'_, Self>) -> bool {
|
||||||
|
self.pane.read(cx).items_len() == 0 && self.pending_terminals_to_add == 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn wait_for_terminals_tasks(
|
async fn wait_for_terminals_tasks(
|
||||||
|
@ -713,7 +727,7 @@ impl Panel for TerminalPanel {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_active(&mut self, active: bool, cx: &mut ViewContext<Self>) {
|
fn set_active(&mut self, active: bool, cx: &mut ViewContext<Self>) {
|
||||||
if active && self.pane.read(cx).items_len() == 0 && self.pending_terminals_to_add == 0 {
|
if active && self.has_no_terminals(cx) {
|
||||||
self.add_terminal(None, None, cx)
|
self.add_terminal(None, None, cx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue