Skip to content

Commit 2dc420d

Browse files
committed
Create terminal when toggled without contents
Fixes microsoft#236517
1 parent 78cd951 commit 2dc420d

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

src/vs/workbench/contrib/terminal/browser/terminalView.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ export class TerminalViewPane extends ViewPane {
5757
private _terminalTabbedView?: TerminalTabbedView;
5858
get terminalTabbedView(): TerminalTabbedView | undefined { return this._terminalTabbedView; }
5959
private _isInitialized: boolean = false;
60+
/**
61+
* Tracks an active promise of terminal creation requested by this component. This helps prevent
62+
* double creation for example when toggling a terminal's visibility and focusing it.
63+
*/
64+
private _isTerminalBeingCreated: boolean = false;
6065
private readonly _newDropdown: MutableDisposable<DropdownWithPrimaryActionViewItem> = this._register(new MutableDisposable());
6166
private readonly _dropdownMenu: IMenu;
6267
private readonly _singleTabMenu: IMenu;
@@ -164,7 +169,8 @@ export class TerminalViewPane extends ViewPane {
164169
if (!wasInitialized) {
165170
switch (hideOnStartup) {
166171
case 'never':
167-
this._terminalService.createTerminal({ location: TerminalLocation.Panel });
172+
this._isTerminalBeingCreated = true;
173+
this._terminalService.createTerminal({ location: TerminalLocation.Panel }).finally(() => this._isTerminalBeingCreated = false);
168174
break;
169175
case 'whenEmpty':
170176
if (this._terminalService.restoredGroupCount === 0) {
@@ -175,7 +181,10 @@ export class TerminalViewPane extends ViewPane {
175181
return;
176182
}
177183

178-
this._terminalService.createTerminal({ location: TerminalLocation.Panel });
184+
if (!this._isTerminalBeingCreated) {
185+
this._isTerminalBeingCreated = true;
186+
this._terminalService.createTerminal({ location: TerminalLocation.Panel }).finally(() => this._isTerminalBeingCreated = false);
187+
}
179188
}
180189
}
181190

@@ -320,6 +329,10 @@ export class TerminalViewPane extends ViewPane {
320329
override focus() {
321330
super.focus();
322331
if (this._terminalService.connectionState === TerminalConnectionState.Connected) {
332+
if (this._terminalGroupService.instances.length === 0 && !this._isTerminalBeingCreated) {
333+
this._isTerminalBeingCreated = true;
334+
this._terminalService.createTerminal({ location: TerminalLocation.Panel }).finally(() => this._isTerminalBeingCreated = false);
335+
}
323336
this._terminalGroupService.showPanel(true);
324337
return;
325338
}

0 commit comments

Comments
 (0)