From 5926943418785e693c956c0f1f93fdee47dc6f40 Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Tue, 10 Jul 2018 18:17:47 +0200 Subject: [PATCH] list: disposeElement --- src/vs/base/browser/ui/list/list.ts | 2 +- src/vs/base/browser/ui/list/listPaging.ts | 4 ++++ src/vs/base/browser/ui/list/listWidget.ts | 12 ++++++++++++ .../base/browser/ui/selectBox/selectBoxCustom.ts | 4 ++++ src/vs/base/browser/ui/tree/tree.ts | 12 ++++++------ src/vs/base/browser/ui/tree/treeModel.ts | 4 ++-- .../base/test/browser/ui/list/listView.test.ts | 1 + src/vs/editor/contrib/suggest/suggestWidget.ts | 3 +++ .../parts/notifications/notificationsViewer.ts | 4 ++++ .../browser/parts/quickinput/quickInputList.ts | 4 ++++ .../parts/debug/browser/breakpointsView.ts | 16 ++++++++++++++++ .../electron-browser/extensionsList.ts | 4 ++++ .../electron-browser/runtimeExtensionsEditor.ts | 2 ++ .../electron-browser/views/openEditorsView.ts | 8 ++++++++ .../preferences/browser/keybindingsEditor.ts | 5 +++++ .../parts/scm/electron-browser/scmViewlet.ts | 12 ++++++++++++ 16 files changed, 88 insertions(+), 9 deletions(-) diff --git a/src/vs/base/browser/ui/list/list.ts b/src/vs/base/browser/ui/list/list.ts index 0042f563078..150758f8ae7 100644 --- a/src/vs/base/browser/ui/list/list.ts +++ b/src/vs/base/browser/ui/list/list.ts @@ -14,7 +14,7 @@ export interface IRenderer { templateId: string; renderTemplate(container: HTMLElement): TTemplateData; renderElement(element: TElement, index: number, templateData: TTemplateData): void; - disposeElement?(element: TElement, index: number, templateData: TTemplateData): void; + disposeElement(element: TElement, index: number, templateData: TTemplateData): void; disposeTemplate(templateData: TTemplateData): void; } diff --git a/src/vs/base/browser/ui/list/listPaging.ts b/src/vs/base/browser/ui/list/listPaging.ts index 53ea8be6a37..e5735d6c299 100644 --- a/src/vs/base/browser/ui/list/listPaging.ts +++ b/src/vs/base/browser/ui/list/listPaging.ts @@ -50,6 +50,10 @@ class PagedRenderer implements IRenderer this.renderer.renderElement(entry, index, data.data)); } + disposeElement(): void { + // noop + } + disposeTemplate(data: ITemplateData): void { data.disposable.dispose(); data.disposable = null; diff --git a/src/vs/base/browser/ui/list/listWidget.ts b/src/vs/base/browser/ui/list/listWidget.ts index acdcb44f5d8..58c81edc992 100644 --- a/src/vs/base/browser/ui/list/listWidget.ts +++ b/src/vs/base/browser/ui/list/listWidget.ts @@ -68,6 +68,10 @@ class TraitRenderer implements IRenderer this.trait.renderIndex(index, templateData); } + disposeElement(): void { + // noop + } + splice(start: number, deleteCount: number, insertCount: number): void { const rendered: IRenderedContainer[] = []; @@ -807,6 +811,14 @@ class PipelineRenderer implements IRenderer { } } + disposeElement(element: T, index: number, templateData: any[]): void { + let i = 0; + + for (const renderer of this.renderers) { + renderer.disposeElement(element, index, templateData[i++]); + } + } + disposeTemplate(templateData: any[]): void { let i = 0; diff --git a/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts b/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts index fa9bcedd7e3..8185d43aa04 100644 --- a/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts +++ b/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts @@ -67,6 +67,10 @@ class SelectListRenderer implements IRenderer implements IDelegate> { interface ITreeListTemplateData { twistie: HTMLElement; - elementDisposable: IDisposable; templateData: T; } @@ -92,14 +91,11 @@ class TreeRenderer implements IRenderer, ITreeLis const contents = append(el, $('.tl-contents')); const templateData = this.renderer.renderTemplate(contents); - return { twistie, elementDisposable: Disposable.None, templateData }; + return { twistie, templateData }; } renderElement(node: ITreeNode, index: number, templateData: ITreeListTemplateData): void { - templateData.elementDisposable.dispose(); - this.renderedNodes.set(node, templateData); - templateData.elementDisposable = toDisposable(() => this.renderedNodes.delete(node)); templateData.twistie.style.width = `${10 + node.depth * 10}px`; renderTwistie(node, templateData.twistie); @@ -107,6 +103,10 @@ class TreeRenderer implements IRenderer, ITreeLis this.renderer.renderElement(node.element, index, templateData.templateData); } + disposeElement(node: ITreeNode): void { + this.renderedNodes.delete(node); + } + disposeTemplate(templateData: ITreeListTemplateData): void { this.renderer.disposeTemplate(templateData.templateData); } diff --git a/src/vs/base/browser/ui/tree/treeModel.ts b/src/vs/base/browser/ui/tree/treeModel.ts index 34b1add5386..153a413f094 100644 --- a/src/vs/base/browser/ui/tree/treeModel.ts +++ b/src/vs/base/browser/ui/tree/treeModel.ts @@ -165,6 +165,8 @@ export class TreeModel { node.collapsed = collapsed; if (visible) { + this._onDidChangeCollapseState.fire(node); + let visibleCountDiff: number; if (collapsed) { @@ -185,8 +187,6 @@ export class TreeModel { mutableNode.visibleCount += visibleCountDiff; mutableNode = mutableNode.parent; } - - this._onDidChangeCollapseState.fire(node); } return true; diff --git a/src/vs/base/test/browser/ui/list/listView.test.ts b/src/vs/base/test/browser/ui/list/listView.test.ts index 5f4a644c99a..9abc4a41a73 100644 --- a/src/vs/base/test/browser/ui/list/listView.test.ts +++ b/src/vs/base/test/browser/ui/list/listView.test.ts @@ -25,6 +25,7 @@ suite('ListView', function () { templateId: 'template', renderTemplate() { templatesCount++; }, renderElement() { }, + disposeElement() { }, disposeTemplate() { templatesCount--; } }; diff --git a/src/vs/editor/contrib/suggest/suggestWidget.ts b/src/vs/editor/contrib/suggest/suggestWidget.ts index e46dd9613e1..5df91f673f5 100644 --- a/src/vs/editor/contrib/suggest/suggestWidget.ts +++ b/src/vs/editor/contrib/suggest/suggestWidget.ts @@ -173,7 +173,10 @@ class Renderer implements IRenderer { data.readMore.onmousedown = null; data.readMore.onclick = null; } + } + disposeElement(): void { + // noop } disposeTemplate(templateData: ISuggestionTemplateData): void { diff --git a/src/vs/workbench/browser/parts/notifications/notificationsViewer.ts b/src/vs/workbench/browser/parts/notifications/notificationsViewer.ts index 2ecb5ec8da0..8179d53863d 100644 --- a/src/vs/workbench/browser/parts/notifications/notificationsViewer.ts +++ b/src/vs/workbench/browser/parts/notifications/notificationsViewer.ts @@ -278,6 +278,10 @@ export class NotificationRenderer implements IRenderer { }); } + disposeElement(): void { + // noop + } + private updateRecommendationStatus(extension: IExtension, data: ITemplateData) { const extRecommendations = this.extensionTipsService.getAllRecommendationsWithReason(); let ariaLabel = extension.displayName + '. '; diff --git a/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.ts b/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.ts index ed9c80d3b1a..643a04aa602 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor.ts @@ -369,6 +369,8 @@ export class RuntimeExtensionsEditor extends BaseEditor { } }, + disposeElement: () => null, + disposeTemplate: (data: IRuntimeExtensionTemplateData): void => { data.disposables = dispose(data.disposables); } diff --git a/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.ts b/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.ts index e1b08ea5801..da4cf28b5f0 100644 --- a/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.ts +++ b/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.ts @@ -594,6 +594,10 @@ class EditorGroupRenderer implements IRenderer { renderElement(entry: IListEntry, index: number, template: any): void { } + disposeElement(): void { + } + disposeTemplate(template: any): void { } } @@ -704,6 +707,8 @@ class KeybindingItemRenderer implements IRenderer { template.elementDisposable = combinedDisposable(disposables); } + disposeElement(): void { + // noop + } + disposeTemplate(template: ResourceTemplate): void { template.elementDisposable.dispose(); template.dispose(); -- GitLab