diff --git a/src/vs/base/browser/ui/contextview/contextview.ts b/src/vs/base/browser/ui/contextview/contextview.ts index ce822b10a45..03e10dd9ebd 100644 --- a/src/vs/base/browser/ui/contextview/contextview.ts +++ b/src/vs/base/browser/ui/contextview/contextview.ts @@ -128,6 +128,7 @@ export class ContextView { public setContainer(container: HTMLElement): void { if (this.$container) { + this.$container.getHTMLElement().removeChild(this.$view.getHTMLElement()); this.$container.off(ContextView.BUBBLE_UP_EVENTS); this.$container.off(ContextView.BUBBLE_DOWN_EVENTS, true); this.$container = null; diff --git a/src/vs/editor/browser/widget/diffEditorWidget.ts b/src/vs/editor/browser/widget/diffEditorWidget.ts index 97a88a711a1..3851dd9703a 100644 --- a/src/vs/editor/browser/widget/diffEditorWidget.ts +++ b/src/vs/editor/browser/widget/diffEditorWidget.ts @@ -209,7 +209,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this._editorWorkerService = editorWorkerService; this._codeEditorService = codeEditorService; - this._contextKeyService = contextKeyService.createScoped(domElement); + this._contextKeyService = this._register(contextKeyService.createScoped(domElement)); this._contextKeyService.createKey('isInDiffEditor', true); this._themeService = themeService; this._notificationService = notificationService; @@ -313,14 +313,14 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this._setStrategy(new DiffEdtorWidgetInline(this._createDataSource(), this._enableSplitViewResizing)); } - this._codeEditorService.addDiffEditor(this); - this._register(themeService.onThemeChange(t => { if (this._strategy && this._strategy.applyColors(t)) { this._updateDecorationsRunner.schedule(); } this._containerDomElement.className = DiffEditorWidget._getClassName(this._themeService.getTheme(), this._renderSideBySide); })); + + this._codeEditorService.addDiffEditor(this); } public get ignoreTrimWhitespace(): boolean { @@ -465,20 +465,37 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE public dispose(): void { this._codeEditorService.removeDiffEditor(this); + if (this._beginUpdateDecorationsTimeout !== -1) { + window.clearTimeout(this._beginUpdateDecorationsTimeout); + this._beginUpdateDecorationsTimeout = -1; + } + window.clearInterval(this._measureDomElementToken); this._cleanViewZonesAndDecorations(); + this._overviewDomElement.removeChild(this._originalOverviewRuler.getDomNode()); this._originalOverviewRuler.dispose(); + this._overviewDomElement.removeChild(this._modifiedOverviewRuler.getDomNode()); this._modifiedOverviewRuler.dispose(); + this._overviewDomElement.removeChild(this._overviewViewportDomElement.domNode); + this._containerDomElement.removeChild(this._overviewDomElement); + this._containerDomElement.removeChild(this._originalDomNode); this.originalEditor.dispose(); + + this._containerDomElement.removeChild(this._modifiedDomNode); this.modifiedEditor.dispose(); this._strategy.dispose(); + this._containerDomElement.removeChild(this._reviewPane.domNode.domNode); + this._containerDomElement.removeChild(this._reviewPane.shadow.domNode); + this._containerDomElement.removeChild(this._reviewPane.actionBarContainer.domNode); this._reviewPane.dispose(); + this._domElement.removeChild(this._containerDomElement); + this._onDidDispose.fire(); super.dispose(); diff --git a/src/vs/editor/contrib/parameterHints/parameterHintsWidget.ts b/src/vs/editor/contrib/parameterHints/parameterHintsWidget.ts index 4392d12f485..9a3289dcf77 100644 --- a/src/vs/editor/contrib/parameterHints/parameterHintsWidget.ts +++ b/src/vs/editor/contrib/parameterHints/parameterHintsWidget.ts @@ -498,6 +498,7 @@ export class ParameterHintsWidget implements IContentWidget, IDisposable { dispose(): void { this.disposables = dispose(this.disposables); + this.model.dispose(); this.model = null; } }