From f8a19b58c7c4b4ddac67bb95755462cf5f8aad9e Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Fri, 17 Jan 2020 14:58:15 +0100 Subject: [PATCH] Fix #88814 --- src/vs/workbench/browser/parts/views/views.ts | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/vs/workbench/browser/parts/views/views.ts b/src/vs/workbench/browser/parts/views/views.ts index ba567a47619..c186562b666 100644 --- a/src/vs/workbench/browser/parts/views/views.ts +++ b/src/vs/workbench/browser/parts/views/views.ts @@ -845,13 +845,7 @@ export class ViewDescriptorService extends Disposable implements IViewDescriptor } getViewDescriptors(container: ViewContainer): ViewDescriptorCollection { - let viewDescriptorCollectionItem = this.viewDescriptorCollections.get(container); - if (!viewDescriptorCollectionItem) { - // Create and register the collection if does not exist - this.onDidRegisterViewContainer(container); - viewDescriptorCollectionItem = this.viewDescriptorCollections.get(container); - } - return viewDescriptorCollectionItem!.viewDescriptorCollection; + return this.getOrRegisterViewDescriptorCollection(container); } moveViews(views: IViewDescriptor[], viewContainer: ViewContainer): void { @@ -942,18 +936,28 @@ export class ViewDescriptorService extends Disposable implements IViewDescriptor } private onDidRegisterViewContainer(viewContainer: ViewContainer): void { - const disposables = new DisposableStore(); - const viewDescriptorCollection = disposables.add(new ViewDescriptorCollection(this.contextKeyService)); + this.getOrRegisterViewDescriptorCollection(viewContainer); + } - this.onDidChangeActiveViews({ added: viewDescriptorCollection.activeViewDescriptors, removed: [] }); - viewDescriptorCollection.onDidChangeActiveViews(changed => this.onDidChangeActiveViews(changed), this, disposables); + private getOrRegisterViewDescriptorCollection(viewContainer: ViewContainer): ViewDescriptorCollection { + let viewDescriptorCollection = this.viewDescriptorCollections.get(viewContainer)?.viewDescriptorCollection; + + if (!viewDescriptorCollection) { + const disposables = new DisposableStore(); + viewDescriptorCollection = disposables.add(new ViewDescriptorCollection(this.contextKeyService)); - this.viewDescriptorCollections.set(viewContainer, { viewDescriptorCollection, disposable: disposables }); + this.onDidChangeActiveViews({ added: viewDescriptorCollection.activeViewDescriptors, removed: [] }); + viewDescriptorCollection.onDidChangeActiveViews(changed => this.onDidChangeActiveViews(changed), this, disposables); - const viewsToRegister = this.getViewsByContainer(viewContainer); - if (viewsToRegister.length) { - this.addViews(viewContainer, viewsToRegister); + this.viewDescriptorCollections.set(viewContainer, { viewDescriptorCollection, disposable: disposables }); + + const viewsToRegister = this.getViewsByContainer(viewContainer); + if (viewsToRegister.length) { + this.addViews(viewContainer, viewsToRegister); + } } + + return viewDescriptorCollection; } private onDidDeregisterViewContainer(viewContainer: ViewContainer): void { -- GitLab