diff --git a/spec/pane-container-spec.coffee b/spec/pane-container-spec.coffee index 94b396fbf..be57f2228 100644 --- a/spec/pane-container-spec.coffee +++ b/spec/pane-container-spec.coffee @@ -161,6 +161,21 @@ describe "PaneContainer", -> expect(events).toEqual [{pane: pane2}, {pane: pane3}] + describe "::onDidDestroyPane(callback)", -> + it "invokes the given callback when panes are destroyed", -> + container = new PaneContainer + events = [] + container.onDidDestroyPane (event) -> events.push(event) + + pane1 = container.getActivePane() + pane2 = pane1.splitRight() + pane3 = pane2.splitDown() + + pane2.destroy() + pane3.destroy() + + expect(events).toEqual [{pane: pane2}, {pane: pane3}] + describe "::onWillDestroyPaneItem() and ::onDidDestroyPaneItem", -> it "invokes the given callbacks when an item will be destroyed on any pane", -> container = new PaneContainer diff --git a/src/pane-container.coffee b/src/pane-container.coffee index e67d6995e..6588d88e5 100644 --- a/src/pane-container.coffee +++ b/src/pane-container.coffee @@ -79,6 +79,9 @@ class PaneContainer extends Model fn(pane) for pane in @getPanes() @onDidAddPane ({pane}) -> fn(pane) + onDidDestroyPane: (fn) -> + @emitter.on 'did-destroy-pane', fn + onDidChangeActivePane: (fn) -> @emitter.on 'did-change-active-pane', fn @@ -193,6 +196,9 @@ class PaneContainer extends Model didAddPane: (event) -> @emitter.emit 'did-add-pane', event + didDestroyPane: (event) -> + @emitter.emit 'did-destroy-pane', event + # Called by Model superclass when destroyed destroyed: -> pane.destroy() for pane in @getPanes() diff --git a/src/pane.coffee b/src/pane.coffee index 08ab328ea..defbc43fd 100644 --- a/src/pane.coffee +++ b/src/pane.coffee @@ -534,6 +534,7 @@ class Pane extends Model @emitter.emit 'did-destroy' @emitter.dispose() item.destroy?() for item in @items.slice() + @container.didDestroyPane(pane: this) ### Section: Splitting diff --git a/src/workspace.coffee b/src/workspace.coffee index da827ff82..9a71bc269 100644 --- a/src/workspace.coffee +++ b/src/workspace.coffee @@ -233,6 +233,16 @@ class Workspace extends Model # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe. onDidAddPane: (callback) -> @paneContainer.onDidAddPane(callback) + # Extended: Invoke the given callback when a pane is destroyed in the + # workspace. + # + # * `callback` {Function} to be called panes are destroyed. + # * `event` {Object} with the following keys: + # * `pane` The destroyed pane. + # + # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe. + onDidDestroyPane: (callback) -> @paneContainer.onDidDestroyPane(callback) + # Extended: Invoke the given callback with all current and future panes in the # workspace. #