diff --git a/src/vs/code/electron-main/window.ts b/src/vs/code/electron-main/window.ts index 81ed8304020..7f2bfa5f182 100644 --- a/src/vs/code/electron-main/window.ts +++ b/src/vs/code/electron-main/window.ts @@ -16,7 +16,7 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur import { parseArgs } from 'vs/platform/environment/node/argv'; import product from 'vs/platform/node/product'; import { IWindowSettings, MenuBarVisibility, IWindowConfiguration, ReadyState, IRunActionInWindowRequest, getTitleBarStyle } from 'vs/platform/windows/common/windows'; -import { IDisposable, dispose } from 'vs/base/common/lifecycle'; +import { Disposable } from 'vs/base/common/lifecycle'; import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; import { ICodeWindow, IWindowState, WindowMode } from 'vs/platform/windows/electron-main/windows'; import { IWorkspaceIdentifier, IWorkspacesMainService } from 'vs/platform/workspaces/common/workspaces'; @@ -52,7 +52,7 @@ interface ITouchBarSegment extends Electron.SegmentedControlSegment { id: string; } -export class CodeWindow implements ICodeWindow { +export class CodeWindow extends Disposable implements ICodeWindow { private static readonly MIN_WIDTH = 200; private static readonly MIN_HEIGHT = 120; @@ -67,7 +67,6 @@ export class CodeWindow implements ICodeWindow { private _readyState: ReadyState; private windowState: IWindowState; private currentMenuBarVisibility: MenuBarVisibility; - private toDispose: IDisposable[]; private representedFilename: string; private whenReadyCallbacks: TValueCallback[]; @@ -88,11 +87,12 @@ export class CodeWindow implements ICodeWindow { @IWorkspacesMainService private workspacesMainService: IWorkspacesMainService, @IBackupMainService private backupMainService: IBackupMainService ) { + super(); + this.touchBarGroups = []; this._lastFocusTime = -1; this._readyState = ReadyState.NONE; this.whenReadyCallbacks = []; - this.toDispose = []; // create browser window this.createBrowserWindow(config); @@ -399,10 +399,10 @@ export class CodeWindow implements ICodeWindow { }); // Handle configuration changes - this.toDispose.push(this.configurationService.onDidChangeConfiguration(e => this.onConfigurationUpdated())); + this._register(this.configurationService.onDidChangeConfiguration(e => this.onConfigurationUpdated())); // Handle Workspace events - this.toDispose.push(this.workspacesMainService.onUntitledWorkspaceDeleted(e => this.onUntitledWorkspaceDeleted(e))); + this._register(this.workspacesMainService.onUntitledWorkspaceDeleted(e => this.onUntitledWorkspaceDeleted(e))); // TODO@Ben workaround for https://github.com/Microsoft/vscode/issues/13612 // It looks like smooth scrolling disappears as soon as the window is minimized @@ -1036,12 +1036,12 @@ export class CodeWindow implements ICodeWindow { } dispose(): void { + super.dispose(); + if (this.showTimeoutHandle) { clearTimeout(this.showTimeoutHandle); } - this.toDispose = dispose(this.toDispose); - this._win = null; // Important to dereference the window object to allow for GC } }