From 4893dbd53d7d0ef0f7d992a59277f61b581095c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Moreno?= Date: Wed, 1 Jul 2020 16:26:10 +0200 Subject: [PATCH] fixes #101146 --- src/vs/workbench/contrib/scm/browser/scmViewPane.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts index 624922ae34d..93ca0473d3d 100644 --- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts @@ -855,6 +855,7 @@ class ViewModel { private visibilityDisposables = new DisposableStore(); private scrollTop: number | undefined; private firstVisible = true; + private repositoryCollapseStates: Map | undefined; private disposables = new DisposableStore(); constructor( @@ -950,6 +951,7 @@ class ViewModel { this.visibilityDisposables = new DisposableStore(); this.repositories.onDidSplice(this.onDidSpliceRepositories, this, this.visibilityDisposables); this.onDidSpliceRepositories({ start: 0, deleteCount: 0, toInsert: this.repositories.elements }); + this.repositoryCollapseStates = undefined; if (typeof this.scrollTop === 'number') { this.tree.scrollTop = this.scrollTop; @@ -959,6 +961,14 @@ class ViewModel { this.editorService.onDidActiveEditorChange(this.onDidActiveEditorChange, this, this.visibilityDisposables); this.onDidActiveEditorChange(); } else { + if (this.items.length > 1) { + this.repositoryCollapseStates = new Map(); + + for (const item of this.items) { + this.repositoryCollapseStates.set(item.element, this.tree.isCollapsed(item.element)); + } + } + this.visibilityDisposables.dispose(); this.onDidSpliceRepositories({ start: 0, deleteCount: this.items.length, toInsert: [] }); this.scrollTop = this.tree.scrollTop; @@ -988,7 +998,8 @@ class ViewModel { children.push(...item.groupItems.map(i => this.render(i))); } - return { element: item.element, children, incompressible: true, collapsible: hasSomeChanges }; + const collapsed = this.repositoryCollapseStates?.get(item.element) ?? false; + return { element: item.element, children, incompressible: true, collapsed, collapsible: hasSomeChanges }; } else { const children = this.mode === ViewModelMode.List ? Iterable.map(item.resources, element => ({ element, incompressible: true })) -- GitLab