Skip to content

Commit eb24c3f

Browse files
authored
1 parent aed5f4d commit eb24c3f

File tree

2 files changed

+19
-17
lines changed

2 files changed

+19
-17
lines changed

src/vs/workbench/browser/parts/views/viewPaneContainer.ts

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { IAction } from 'vs/base/common/actions';
1313
import { RunOnceScheduler } from 'vs/base/common/async';
1414
import { Emitter, Event } from 'vs/base/common/event';
1515
import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes';
16-
import { combinedDisposable, DisposableStore, dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
16+
import { combinedDisposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
1717
import { assertIsDefined } from 'vs/base/common/types';
1818
import 'vs/css!./media/paneviewlet';
1919
import * as nls from 'vs/nls';
@@ -324,7 +324,6 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
324324
private readonly visibleViewsCountFromCache: number | undefined;
325325
private readonly visibleViewsStorageId: string;
326326
protected readonly viewContainerModel: IViewContainerModel;
327-
private viewDisposables: IDisposable[] = [];
328327

329328
private readonly _onTitleAreaUpdate: Emitter<void> = this._register(new Emitter<void>());
330329
readonly onTitleAreaUpdate: Event<void> = this._onTitleAreaUpdate.event;
@@ -394,7 +393,6 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
394393
this.viewContainer = container;
395394
this.visibleViewsStorageId = `${id}.numberOfVisibleViews`;
396395
this.visibleViewsCountFromCache = this.storageService.getNumber(this.visibleViewsStorageId, StorageScope.WORKSPACE, undefined);
397-
this._register(toDisposable(() => this.viewDisposables = dispose(this.viewDisposables)));
398396
this.viewContainerModel = this.viewDescriptorService.getViewContainerModel(container);
399397
}
400398

@@ -657,11 +655,11 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
657655
return optimalWidth + additionalMargin;
658656
}
659657

660-
addPanes(panes: { pane: ViewPane; size: number; index?: number }[]): void {
658+
addPanes(panes: { pane: ViewPane; size: number; index?: number; disposable: IDisposable }[]): void {
661659
const wasMerged = this.isViewMergedWithContainer();
662660

663-
for (const { pane: pane, size, index } of panes) {
664-
this.addPane(pane, size, index);
661+
for (const { pane: pane, size, index, disposable } of panes) {
662+
this.addPane(pane, size, disposable, index);
665663
}
666664

667665
this.updateViewHeaders();
@@ -773,7 +771,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
773771
}
774772

775773
protected onDidAddViewDescriptors(added: IAddedViewDescriptorRef[]): ViewPane[] {
776-
const panesToAdd: { pane: ViewPane; size: number; index: number }[] = [];
774+
const panesToAdd: { pane: ViewPane; size: number; index: number; disposable: IDisposable }[] = [];
777775

778776
for (const { viewDescriptor, collapsed, index, size } of added) {
779777
const pane = this.createView(viewDescriptor,
@@ -795,8 +793,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
795793
this.viewContainerModel.setCollapsed(viewDescriptor.id, collapsed);
796794
});
797795

798-
this.viewDisposables.splice(index, 0, combinedDisposable(contextMenuDisposable, collapseDisposable));
799-
panesToAdd.push({ pane, size: size || pane.minimumSize, index });
796+
panesToAdd.push({ pane, size: size || pane.minimumSize, index, disposable: combinedDisposable(contextMenuDisposable, collapseDisposable) });
800797
}
801798

802799
this.addPanes(panesToAdd);
@@ -814,14 +811,18 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
814811
removed = removed.sort((a, b) => b.index - a.index);
815812
const panesToRemove: ViewPane[] = [];
816813
for (const { index } of removed) {
817-
const [disposable] = this.viewDisposables.splice(index, 1);
818-
disposable.dispose();
819-
panesToRemove.push(this.panes[index]);
814+
const paneItem = this.paneItems[index];
815+
if (paneItem) {
816+
panesToRemove.push(this.paneItems[index].pane);
817+
}
820818
}
821-
this.removePanes(panesToRemove);
822819

823-
for (const pane of panesToRemove) {
824-
pane.setVisible(false);
820+
if (panesToRemove.length) {
821+
this.removePanes(panesToRemove);
822+
823+
for (const pane of panesToRemove) {
824+
pane.setVisible(false);
825+
}
825826
}
826827
}
827828

@@ -833,7 +834,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
833834
}
834835
}
835836

836-
private addPane(pane: ViewPane, size: number, index = this.paneItems.length - 1): void {
837+
private addPane(pane: ViewPane, size: number, disposable: IDisposable, index = this.paneItems.length - 1): void {
837838
const onDidFocus = pane.onDidFocus(() => {
838839
this._onDidFocusView.fire(pane);
839840
this.lastFocusedPane = pane;
@@ -862,6 +863,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
862863
});
863864

864865
const store = new DisposableStore();
866+
store.add(disposable);
865867
store.add(combinedDisposable(pane, onDidFocus, onDidBlur, onDidChangeTitleArea, onDidChange, onDidChangeVisibility));
866868
const paneItem: IViewPaneItem = { pane, disposable: store };
867869

src/vs/workbench/contrib/debug/browser/debugViewlet.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ export class DebugViewPaneContainer extends ViewPaneContainer {
133133
}
134134
}
135135

136-
override addPanes(panes: { pane: ViewPane; size: number; index?: number }[]): void {
136+
override addPanes(panes: { pane: ViewPane; size: number; index?: number; disposable: IDisposable }[]): void {
137137
super.addPanes(panes);
138138

139139
for (const { pane: pane } of panes) {

0 commit comments

Comments
 (0)