fix: rerender hidden terminal when visible

This commit is contained in:
Tony Brix
2020-09-11 00:42:18 -05:00
parent c112990d8f
commit 9513c231c9
2 changed files with 17 additions and 1 deletions
+9 -1
View File
@@ -24,6 +24,7 @@ export class RenderService extends Disposable implements IRenderService {
private _renderDebouncer: RenderDebouncer;
private _screenDprMonitor: ScreenDprMonitor;
private _charSizeService: ICharSizeService;
private _isPaused: boolean = false;
private _needsFullRefresh: boolean = false;
@@ -67,7 +68,9 @@ export class RenderService extends Disposable implements IRenderService {
this.register(bufferService.onResize(e => this._fullRefresh()));
this.register(optionsService.onOptionChange(() => this._renderer.onOptionsChanged()));
this.register(charSizeService.onCharSizeChange(() => this.onCharSizeChanged()));
this._charSizeService = charSizeService;
this.register(this._charSizeService.onCharSizeChange(() => this.onCharSizeChanged()));
// No need to register this as renderer is explicitly disposed in RenderService.dispose
this._renderer.onRequestRedraw(e => this.refreshRows(e.start, e.end, true));
@@ -91,6 +94,11 @@ export class RenderService extends Disposable implements IRenderService {
this.refreshRows(0, this._rowCount - 1);
this._needsFullRefresh = false;
}
// Terminal was hidden on open
if (!this._isPaused && !this._charSizeService.hasValidSize) {
this._charSizeService.measure();
}
}
public refreshRows(start: number, end: number, isRedrawOnly: boolean = false): void {
+8
View File
@@ -572,6 +572,14 @@ describe('API Integration Tests', function(): void {
assert.equal(await page.evaluate(`window.term._core._isDisposed`), true);
});
it('render when visible after hidden', async () => {
await page.evaluate(`document.querySelector('#terminal-container').style.display='none'`);
await page.evaluate(`window.term = new Terminal()`);
await page.evaluate(`window.term.open(document.querySelector('#terminal-container'))`);
await page.evaluate(`document.querySelector('#terminal-container').style.display=''`);
await pollFor(page, `window.term._core._renderService.dimensions.actualCellWidth > 0`, true);
});
describe('registerLinkProvider', () => {
it('should fire provideLinks when hovering cells', async () => {
await openTerminal(page, { rendererType: 'dom' });