From b893f4916457020fe74e43f82d4e67af00b3c8b4 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Tue, 13 Sep 2016 14:49:31 -0700 Subject: [PATCH] Fix various issues when the terminal was not open on launch Fixes #11969 --- .../parts/terminal/electron-browser/media/terminal.css | 1 + .../parts/terminal/electron-browser/terminalInstance.ts | 8 +++++++- .../parts/terminal/electron-browser/terminalPanel.ts | 2 ++ .../parts/terminal/electron-browser/terminalService.ts | 3 +-- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/vs/workbench/parts/terminal/electron-browser/media/terminal.css b/src/vs/workbench/parts/terminal/electron-browser/media/terminal.css index 132831e836b..35c4f0f5188 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/media/terminal.css +++ b/src/vs/workbench/parts/terminal/electron-browser/media/terminal.css @@ -22,6 +22,7 @@ display: flex; padding: 0 20px; flex-grow: 1; + width: 100%; } .monaco-workbench .panel.integrated-terminal .terminal-wrapper { diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts index e703cdaaeab..56365a184f0 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts @@ -38,6 +38,7 @@ export class TerminalInstance implements ITerminalInstance { public get onTitleChanged(): Event { return this._onTitleChanged.event; } private isExiting: boolean = false; + private isVisible: boolean = false; private toDispose: lifecycle.IDisposable[] = []; private skipTerminalKeybindings: Keybinding[] = []; private process: cp.ChildProcess; @@ -74,6 +75,7 @@ export class TerminalInstance implements ITerminalInstance { throw new Error('The terminal instance has already been attached to a container'); } + this.container = container; this.wrapperElement = document.createElement('div'); DOM.addClass(this.wrapperElement, 'terminal-wrapper'); this.xtermElement = document.createElement('div'); @@ -139,6 +141,7 @@ export class TerminalInstance implements ITerminalInstance { this.container.appendChild(this.wrapperElement); this.layout(new Dimension(this.container.offsetWidth, this.container.offsetHeight)); + this.setVisible(this.isVisible); } public copySelection(): void { @@ -195,7 +198,10 @@ export class TerminalInstance implements ITerminalInstance { } public setVisible(visible: boolean): void { - DOM.toggleClass(this.wrapperElement, 'active', visible); + this.isVisible = visible; + if (this.wrapperElement) { + DOM.toggleClass(this.wrapperElement, 'active', visible); + } } public scrollDown(): void { diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts index 5a6b61185ad..333101d492d 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts @@ -72,6 +72,8 @@ export class TerminalPanel extends Panel { this.updateTheme(); this.updateConfig(); + // Force another layout (first is setContainers) since config has changed + this.layout(new Dimension(this.terminalContainer.offsetWidth, this.terminalContainer.offsetHeight)); return TPromise.as(void 0); } diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalService.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalService.ts index fcfc0a8f8a0..5c91bb1ff06 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalService.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalService.ts @@ -143,11 +143,11 @@ export class TerminalService implements ITerminalService { } public setContainers(panelContainer: Builder, terminalContainer: HTMLElement): void { + this._configHelper.panelContainer = panelContainer; this.terminalContainer = terminalContainer; this._terminalInstances.forEach(terminalInstance => { terminalInstance.attachToElement(this.terminalContainer); }); - this._configHelper.panelContainer = panelContainer; } public showPanel(focus?: boolean): TPromise { @@ -155,7 +155,6 @@ export class TerminalService implements ITerminalService { let panel = this.panelService.getActivePanel(); if (!panel || panel.getId() !== TERMINAL_PANEL_ID) { return this.panelService.openPanel(TERMINAL_PANEL_ID, focus).then(() => { - panel = this.panelService.getActivePanel(); if (focus) { this.getActiveInstance().focus(true); }