From b4de6e87e4832d85a6dfaf370dcd229d23a198b8 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Thu, 12 Oct 2017 00:14:43 -0700 Subject: [PATCH] Relayout terminals when they are set to visible This fixes an issue where background terminals were created while not visible. This caused the internal charMeasure object to have 0 width and height so nothing would render. Fixes #34554 --- .../parts/terminal/electron-browser/terminalInstance.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts index 4ba392d7be8..da798434930 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts @@ -511,6 +511,14 @@ export class TerminalInstance implements ITerminalInstance { // background since scrollTop changes take no effect but the terminal's position does // change since the number of visible rows decreases. this._xterm.emit('scroll', this._xterm.buffer.ydisp); + // Force a layout when the instance becomes invisible. This is particularly important + // for ensuring that terminals that are created in the background by an extension will + // correctly get correct character measurements in order to render to the screen (see + // #34554). + const computedStyle = window.getComputedStyle(this._container); + const width = parseInt(computedStyle.getPropertyValue('width').replace('px', ''), 10); + const height = parseInt(computedStyle.getPropertyValue('height').replace('px', ''), 10); + this.layout(new Dimension(width, height)); } } -- GitLab