diff --git a/packages/dockview/src/api/gridviewPanelApi.ts b/packages/dockview/src/api/gridviewPanelApi.ts index 8523a0c4f..34495c64e 100644 --- a/packages/dockview/src/api/gridviewPanelApi.ts +++ b/packages/dockview/src/api/gridviewPanelApi.ts @@ -50,6 +50,12 @@ export class GridviewPanelApiImpl constructor(id: string) { super(id); + + this.addDisposables( + this._onDidConstraintsChangeInternal, + this._onDidConstraintsChange, + this._onDidSizeChange + ); } public setConstraints(value: GridConstraintChangeEvent) { diff --git a/packages/dockview/src/api/groupPanelApi.ts b/packages/dockview/src/api/groupPanelApi.ts index 83c91c84b..e23d20c48 100644 --- a/packages/dockview/src/api/groupPanelApi.ts +++ b/packages/dockview/src/api/groupPanelApi.ts @@ -63,6 +63,12 @@ export class DockviewPanelApiImpl constructor(private panel: IGroupPanel, group: GroupviewPanel | undefined) { super(panel.id); this._group = group; + + this.addDisposables( + this._onDidTitleChange, + this._titleChanged, + this._suppressClosableChanged + ); } public setTitle(title: string) { @@ -75,8 +81,4 @@ export class DockviewPanelApiImpl } return this.group.model.closePanel(this.panel); } - - public dispose() { - super.dispose(); - } } diff --git a/packages/dockview/src/api/panelApi.ts b/packages/dockview/src/api/panelApi.ts index 5609febe9..88e657531 100644 --- a/packages/dockview/src/api/panelApi.ts +++ b/packages/dockview/src/api/panelApi.ts @@ -126,6 +126,8 @@ export class PanelApiImpl extends CompositeDisposable implements PanelApi { this._onDidVisibilityChange, this._onDidActiveChange, this._onFocusEvent, + this._onActiveChange, + this._onVisibilityChange, this.onDidFocusChange((event) => { this._isFocused = event.isFocused; }), diff --git a/packages/dockview/src/api/paneviewPanelApi.ts b/packages/dockview/src/api/paneviewPanelApi.ts index 4391edf66..c90a70db4 100644 --- a/packages/dockview/src/api/paneviewPanelApi.ts +++ b/packages/dockview/src/api/paneviewPanelApi.ts @@ -37,6 +37,12 @@ export class PaneviewPanelApiImpl constructor(id: string) { super(id); + + this.addDisposables( + this._onDidExpansionChange, + this._onMouseEnter, + this._onMouseLeave + ); } setExpanded(isExpanded: boolean): void { diff --git a/packages/dockview/src/api/splitviewPanelApi.ts b/packages/dockview/src/api/splitviewPanelApi.ts index a90f71639..cfe3cd103 100644 --- a/packages/dockview/src/api/splitviewPanelApi.ts +++ b/packages/dockview/src/api/splitviewPanelApi.ts @@ -47,6 +47,12 @@ export class SplitviewPanelApiImpl constructor(id: string) { super(id); + + this.addDisposables( + this._onDidConstraintsChangeInternal, + this._onDidConstraintsChange, + this._onDidSizeChange + ); } setConstraints(value: PanelConstraintChangeEvent2) { @@ -56,10 +62,4 @@ export class SplitviewPanelApiImpl setSize(event: PanelSizeEvent) { this._onDidSizeChange.fire(event); } - - dispose() { - super.dispose(); - this._onDidConstraintsChange.dispose(); - this._onDidSizeChange.dispose(); - } } diff --git a/packages/dockview/src/dnd/abstractDragHandler.ts b/packages/dockview/src/dnd/abstractDragHandler.ts index a80bd74ba..d21c8ad7d 100644 --- a/packages/dockview/src/dnd/abstractDragHandler.ts +++ b/packages/dockview/src/dnd/abstractDragHandler.ts @@ -20,6 +20,7 @@ export abstract class DragHandler extends CompositeDisposable { private configure() { this.addDisposables( + this._onDragStart, addDisposableListener(this.el, 'dragstart', (event) => { this.iframes = [ ...getElementsByTagName('iframe'), diff --git a/packages/dockview/src/dnd/droptarget.ts b/packages/dockview/src/dnd/droptarget.ts index 059bde19d..fc3ff4bba 100644 --- a/packages/dockview/src/dnd/droptarget.ts +++ b/packages/dockview/src/dnd/droptarget.ts @@ -56,6 +56,7 @@ export class Droptarget extends CompositeDisposable { super(); this.addDisposables( + this._onDrop, new DragAndDropObserver(this.element, { onDragEnter: (e) => undefined, onDragOver: (e) => { @@ -177,7 +178,6 @@ export class Droptarget extends CompositeDisposable { } public dispose() { - this._onDrop.dispose(); this.removeDropTarget(); } diff --git a/packages/dockview/src/dockview/dockviewComponent.ts b/packages/dockview/src/dockview/dockviewComponent.ts index 34e0ab18b..eef18f9ce 100644 --- a/packages/dockview/src/dockview/dockviewComponent.ts +++ b/packages/dockview/src/dockview/dockviewComponent.ts @@ -186,6 +186,12 @@ export class DockviewComponent styles: options.styles, }); + this.addDisposables( + this._onTabInteractionEvent, + this._onTabContextMenu, + this._onDidDrop + ); + this._options = options; if (!this.options.components) { @@ -715,15 +721,6 @@ export class DockviewComponent return view; } - dispose(): void { - super.dispose(); - - this._onGridEvent.dispose(); - this._onDidDrop.dispose(); - this._onTabContextMenu.dispose(); - this._onTabInteractionEvent.dispose(); - } - private _addPanel(options: AddPanelOptions): IGroupPanel { const view = new DefaultGroupPanelView({ content: this.createContentComponent(options.id, options.component), diff --git a/packages/dockview/src/gridview/branchNode.ts b/packages/dockview/src/gridview/branchNode.ts index 159561a28..d915f90b3 100644 --- a/packages/dockview/src/gridview/branchNode.ts +++ b/packages/dockview/src/gridview/branchNode.ts @@ -155,6 +155,7 @@ export class BranchNode extends CompositeDisposable implements IView { } this.addDisposables( + this._onDidChange, this.splitview.onDidSashEnd(() => { this._onDidChange.fire(undefined); }) diff --git a/packages/dockview/src/gridview/gridviewPanel.ts b/packages/dockview/src/gridview/gridviewPanel.ts index 29474976b..8d49c8cd9 100644 --- a/packages/dockview/src/gridview/gridviewPanel.ts +++ b/packages/dockview/src/gridview/gridviewPanel.ts @@ -129,6 +129,7 @@ export abstract class GridviewPanel super(id, component, api); this.addDisposables( + this._onDidChange, this.api.onVisibilityChange((event) => { const { isVisible } = event; const { containerApi } = this._params as GridviewInitParameters; @@ -230,10 +231,6 @@ export abstract class GridviewPanel priority: this.priority, }; } - - dispose() { - super.dispose(); - } } export interface GridPanelViewState extends BasePanelViewState { diff --git a/packages/dockview/src/gridview/leafNode.ts b/packages/dockview/src/gridview/leafNode.ts index 7bed7c10b..5da71ad7f 100644 --- a/packages/dockview/src/gridview/leafNode.ts +++ b/packages/dockview/src/gridview/leafNode.ts @@ -128,6 +128,7 @@ export class LeafNode implements IView { } public dispose() { + this._onDidChange.dispose(); this._disposable.dispose(); } } diff --git a/packages/dockview/src/groupview/groupview.ts b/packages/dockview/src/groupview/groupview.ts index 77d01e861..14779da1a 100644 --- a/packages/dockview/src/groupview/groupview.ts +++ b/packages/dockview/src/groupview/groupview.ts @@ -397,7 +397,9 @@ export class Groupview extends CompositeDisposable implements IGroupview { if (this.panels.length > 0) { // take a copy since we will be edting the array as we iterate through const arrPanelCpy = [...this.panels]; - arrPanelCpy.map((p) => this.doClose(p)); + for (const panel of arrPanelCpy) { + this.doClose(panel); + } } else { this.accessor.removeGroup(this.parent); } diff --git a/packages/dockview/src/groupview/panel/content.ts b/packages/dockview/src/groupview/panel/content.ts index 35418628f..21dd13248 100644 --- a/packages/dockview/src/groupview/panel/content.ts +++ b/packages/dockview/src/groupview/panel/content.ts @@ -42,6 +42,8 @@ export class ContentContainer this._element.className = 'content-container'; this._element.tabIndex = -1; + this.addDisposables(this._onDidFocus, this._onDidBlur); + // for hosted containers // 1) register a drop target on the host // 2) register window dragStart events to disable pointer events diff --git a/packages/dockview/src/paneview/paneview.ts b/packages/dockview/src/paneview/paneview.ts index b04ed9643..8e09033c4 100644 --- a/packages/dockview/src/paneview/paneview.ts +++ b/packages/dockview/src/paneview/paneview.ts @@ -95,6 +95,7 @@ export class Paneview extends CompositeDisposable implements IDisposable { }); this.addDisposables( + this._onDidChange, this.splitview.onDidSashEnd(() => { this._onDidChange.fire(undefined); }), diff --git a/packages/dockview/src/paneview/paneviewComponent.ts b/packages/dockview/src/paneview/paneviewComponent.ts index f2aff1b94..642b8a730 100644 --- a/packages/dockview/src/paneview/paneviewComponent.ts +++ b/packages/dockview/src/paneview/paneviewComponent.ts @@ -185,6 +185,13 @@ export class PaneviewComponent ) { super(); + this.addDisposables( + this._onDidLayoutChange, + this._onDidDrop, + this._onDidAddView, + this._onDidRemoveView + ); + this._options = options; if (!options.components) { diff --git a/packages/dockview/src/react/dockview/reactContentPart.ts b/packages/dockview/src/react/dockview/reactContentPart.ts index aa6db0abd..b1a73699c 100644 --- a/packages/dockview/src/react/dockview/reactContentPart.ts +++ b/packages/dockview/src/react/dockview/reactContentPart.ts @@ -124,6 +124,8 @@ export class ReactPanelContentPart implements IContentRenderer { } public dispose() { + this._onDidFocus.dispose(); + this._onDidBlur.dispose(); this.part?.dispose(); // this.hostedContainer?.dispose(); this.actionsPart?.dispose(); diff --git a/packages/dockview/src/splitview/splitviewComponent.ts b/packages/dockview/src/splitview/splitviewComponent.ts index 96bf62041..fd3c34733 100644 --- a/packages/dockview/src/splitview/splitviewComponent.ts +++ b/packages/dockview/src/splitview/splitviewComponent.ts @@ -168,7 +168,12 @@ export class SplitviewComponent this.splitview = new Splitview(this.element, options); - this.addDisposables(this._disposable); + this.addDisposables( + this._disposable, + this._onDidAddView, + this._onDidRemoveView, + this._onDidLayoutChange + ); } updateOptions(options: Partial): void { diff --git a/packages/dockview/src/splitview/splitviewPanel.ts b/packages/dockview/src/splitview/splitviewPanel.ts index 60337a255..3b2a21886 100644 --- a/packages/dockview/src/splitview/splitviewPanel.ts +++ b/packages/dockview/src/splitview/splitviewPanel.ts @@ -82,6 +82,7 @@ export abstract class SplitviewPanel super(id, componentName, new SplitviewPanelApiImpl(id)); this.addDisposables( + this._onDidChange, this.api.onVisibilityChange((event) => { const { isVisible } = event; const { containerApi } = this