diff --git a/spec/dock-spec.js b/spec/dock-spec.js new file mode 100644 index 000000000..1cebe5379 --- /dev/null +++ b/spec/dock-spec.js @@ -0,0 +1,15 @@ +describe('Dock', () => { + describe('when a pane in a dock is activated', () => { + it('opens the dock', () => { + const item = { + getDefaultLocation() { return 'left' } + } + + atom.workspace.open(item, {activatePane: false}) + expect(atom.workspace.getLeftDock().isOpen()).toBe(false) + + atom.workspace.getLeftDock().getPanes()[0].activate() + expect(atom.workspace.getLeftDock().isOpen()).toBe(true) + }) + }) +}) \ No newline at end of file diff --git a/spec/pane-container-spec.coffee b/spec/pane-container-spec.coffee index 153ef2bda..3f6c17169 100644 --- a/spec/pane-container-spec.coffee +++ b/spec/pane-container-spec.coffee @@ -150,6 +150,22 @@ describe "PaneContainer", -> pane2.activate() expect(observed).toEqual [pane1.itemAtIndex(0), pane2.itemAtIndex(0)] + describe "::onDidActivatePane", -> + it "invokes observers when a pane is activated (even if it was already active)", -> + container = new PaneContainer(params) + container.initialize() + container.getRoot().splitRight() + [pane1, pane2] = container.getPanes() + + activatedPanes = [] + container.onDidActivatePane (pane) -> activatedPanes.push(pane) + + pane1.activate() + pane1.activate() + pane2.activate() + pane2.activate() + expect(activatedPanes).toEqual([pane1, pane1, pane2, pane2]) + describe "::onDidStopChangingActivePaneItem()", -> [container, pane1, pane2, observed] = [] diff --git a/src/dock.js b/src/dock.js index c04bbcb50..550525795 100644 --- a/src/dock.js +++ b/src/dock.js @@ -48,9 +48,7 @@ module.exports = class Dock { } this.subscriptions = new CompositeDisposable( - this.paneContainer.observePanes(pane => { - pane.onDidAddItem(this.handleDidAddPaneItem.bind(this)) - }), + this.paneContainer.onDidActivatePane(() => this.activate()), this.paneContainer.observePanes(pane => { pane.onDidRemoveItem(this.handleDidRemovePaneItem.bind(this)) }) @@ -201,11 +199,6 @@ module.exports = class Dock { }) } - handleDidAddPaneItem () { - // Show the dock if you drop an item into it. - this.setState({open: true}) - } - handleDidRemovePaneItem () { // Hide the dock if you remove the last item. if (this.paneContainer.getPaneItems().length === 0) { diff --git a/src/pane-container.coffee b/src/pane-container.coffee index 54d1d6cbe..ca768d88a 100644 --- a/src/pane-container.coffee +++ b/src/pane-container.coffee @@ -68,6 +68,9 @@ class PaneContainer extends Model onDidChangeActivePane: (fn) -> @emitter.on 'did-change-active-pane', fn + onDidActivatePane: (fn) -> + @emitter.on 'did-activate-pane', fn + observeActivePane: (fn) -> fn(@getActivePane()) @onDidChangeActivePane(fn) @@ -127,6 +130,7 @@ class PaneContainer extends Model @activePane = activePane @emitter.emit 'did-change-active-pane', @activePane + @emitter.emit 'did-activate-pane', @activePane @activePane getActivePaneItem: -> diff --git a/src/workspace.js b/src/workspace.js index 1c3cf2042..6efce9948 100644 --- a/src/workspace.js +++ b/src/workspace.js @@ -752,10 +752,6 @@ module.exports = class Workspace extends Model { if (options.activatePane !== false) { pane.activate() - if (!container) { - container = this.getPaneContainers().find(container => container.getPanes().includes(pane)) - } - container.activate() } let initialColumn = 0