@@ -13,7 +13,7 @@ import { IAction } from 'vs/base/common/actions';
13
13
import { RunOnceScheduler } from 'vs/base/common/async' ;
14
14
import { Emitter , Event } from 'vs/base/common/event' ;
15
15
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' ;
17
17
import { assertIsDefined } from 'vs/base/common/types' ;
18
18
import 'vs/css!./media/paneviewlet' ;
19
19
import * as nls from 'vs/nls' ;
@@ -324,7 +324,6 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
324
324
private readonly visibleViewsCountFromCache : number | undefined ;
325
325
private readonly visibleViewsStorageId : string ;
326
326
protected readonly viewContainerModel : IViewContainerModel ;
327
- private viewDisposables : IDisposable [ ] = [ ] ;
328
327
329
328
private readonly _onTitleAreaUpdate : Emitter < void > = this . _register ( new Emitter < void > ( ) ) ;
330
329
readonly onTitleAreaUpdate : Event < void > = this . _onTitleAreaUpdate . event ;
@@ -394,7 +393,6 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
394
393
this . viewContainer = container ;
395
394
this . visibleViewsStorageId = `${ id } .numberOfVisibleViews` ;
396
395
this . visibleViewsCountFromCache = this . storageService . getNumber ( this . visibleViewsStorageId , StorageScope . WORKSPACE , undefined ) ;
397
- this . _register ( toDisposable ( ( ) => this . viewDisposables = dispose ( this . viewDisposables ) ) ) ;
398
396
this . viewContainerModel = this . viewDescriptorService . getViewContainerModel ( container ) ;
399
397
}
400
398
@@ -657,11 +655,11 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
657
655
return optimalWidth + additionalMargin ;
658
656
}
659
657
660
- addPanes ( panes : { pane : ViewPane ; size : number ; index ?: number } [ ] ) : void {
658
+ addPanes ( panes : { pane : ViewPane ; size : number ; index ?: number ; disposable : IDisposable } [ ] ) : void {
661
659
const wasMerged = this . isViewMergedWithContainer ( ) ;
662
660
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 ) ;
665
663
}
666
664
667
665
this . updateViewHeaders ( ) ;
@@ -773,7 +771,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
773
771
}
774
772
775
773
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 } [ ] = [ ] ;
777
775
778
776
for ( const { viewDescriptor, collapsed, index, size } of added ) {
779
777
const pane = this . createView ( viewDescriptor ,
@@ -795,8 +793,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
795
793
this . viewContainerModel . setCollapsed ( viewDescriptor . id , collapsed ) ;
796
794
} ) ;
797
795
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 ) } ) ;
800
797
}
801
798
802
799
this . addPanes ( panesToAdd ) ;
@@ -814,14 +811,18 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
814
811
removed = removed . sort ( ( a , b ) => b . index - a . index ) ;
815
812
const panesToRemove : ViewPane [ ] = [ ] ;
816
813
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
+ }
820
818
}
821
- this . removePanes ( panesToRemove ) ;
822
819
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
+ }
825
826
}
826
827
}
827
828
@@ -833,7 +834,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
833
834
}
834
835
}
835
836
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 {
837
838
const onDidFocus = pane . onDidFocus ( ( ) => {
838
839
this . _onDidFocusView . fire ( pane ) ;
839
840
this . lastFocusedPane = pane ;
@@ -862,6 +863,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
862
863
} ) ;
863
864
864
865
const store = new DisposableStore ( ) ;
866
+ store . add ( disposable ) ;
865
867
store . add ( combinedDisposable ( pane , onDidFocus , onDidBlur , onDidChangeTitleArea , onDidChange , onDidChangeVisibility ) ) ;
866
868
const paneItem : IViewPaneItem = { pane, disposable : store } ;
867
869
0 commit comments