From ec576b12bcdee40a62cdf11403223b83ff7b3adc Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 6 Apr 2017 13:12:51 -0600 Subject: [PATCH] Remove PaneContainer.monitorActivePaneItem Call didChangeActiveItemOnPane directly from panes and when the active pane changes instead. --- spec/pane-container-spec.coffee | 21 ---------------- spec/workspace-spec.js | 1 - src/atom-environment.coffee | 1 - src/pane-container.js | 43 +++++++++------------------------ src/pane.coffee | 1 + src/workspace.js | 5 ---- 6 files changed, 13 insertions(+), 59 deletions(-) diff --git a/spec/pane-container-spec.coffee b/spec/pane-container-spec.coffee index 3f6c17169..7e84d6f96 100644 --- a/spec/pane-container-spec.coffee +++ b/spec/pane-container-spec.coffee @@ -25,7 +25,6 @@ describe "PaneContainer", -> serialize: -> deserializer: 'Item' containerA = new PaneContainer(params) - containerA.initialize() pane1A = containerA.getActivePane() pane1A.addItem(new Item) pane2A = pane1A.splitRight(items: [new Item]) @@ -36,7 +35,6 @@ describe "PaneContainer", -> expect(pane3A.focused).toBe true containerB = new PaneContainer(params) - containerB.initialize() containerB.deserialize(containerA.serialize(), atom.deserializers) [pane1B, pane2B, pane3B] = containerB.getPanes() expect(pane3B.focused).toBe true @@ -46,7 +44,6 @@ describe "PaneContainer", -> expect(containerA.getActivePane()).toBe pane3A containerB = new PaneContainer(params) - containerB.initialize() containerB.deserialize(containerA.serialize(), atom.deserializers) [pane1B, pane2B, pane3B] = containerB.getPanes() expect(containerB.getActivePane()).toBe pane3B @@ -56,7 +53,6 @@ describe "PaneContainer", -> state = containerA.serialize() state.activePaneId = -22 containerB = new PaneContainer(params) - containerB.initialize() containerB.deserialize(state, atom.deserializers) expect(containerB.getActivePane()).toBe containerB.getPanes()[0] @@ -68,7 +64,6 @@ describe "PaneContainer", -> it "leaves the empty panes intact", -> state = containerA.serialize() containerB = new PaneContainer(params) - containerB.initialize() containerB.deserialize(state, atom.deserializers) [leftPane, column] = containerB.getRoot().getChildren() [topPane, bottomPane] = column.getChildren() @@ -83,7 +78,6 @@ describe "PaneContainer", -> state = containerA.serialize() containerB = new PaneContainer(params) - containerB.initialize() containerB.deserialize(state, atom.deserializers) [leftPane, rightPane] = containerB.getRoot().getChildren() @@ -92,7 +86,6 @@ describe "PaneContainer", -> it "does not allow the root pane to be destroyed", -> container = new PaneContainer(params) - container.initialize() container.getRoot().destroy() expect(container.getRoot()).toBeDefined() expect(container.getRoot().isDestroyed()).toBe false @@ -102,7 +95,6 @@ describe "PaneContainer", -> beforeEach -> container = new PaneContainer(params) - container.initialize() pane1 = container.getRoot() it "returns the first pane if no pane has been made active", -> @@ -132,7 +124,6 @@ describe "PaneContainer", -> beforeEach -> container = new PaneContainer(params) - container.initialize() container.getRoot().addItems([new Object, new Object]) container.getRoot().splitRight(items: [new Object, new Object]) [pane1, pane2] = container.getPanes() @@ -153,7 +144,6 @@ describe "PaneContainer", -> 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() @@ -171,7 +161,6 @@ describe "PaneContainer", -> beforeEach -> container = new PaneContainer(root: new Pane(items: [new Object, new Object])) - container.initialize() container.getRoot().splitRight(items: [new Object, new Object]) [pane1, pane2] = container.getPanes() @@ -193,7 +182,6 @@ describe "PaneContainer", -> describe "::observePanes()", -> it "invokes observers with all current and future panes", -> container = new PaneContainer(params) - container.initialize() container.getRoot().splitRight() [pane1, pane2] = container.getPanes() @@ -208,7 +196,6 @@ describe "PaneContainer", -> describe "::observePaneItems()", -> it "invokes observers with all current and future pane items", -> container = new PaneContainer(params) - container.initialize() container.getRoot().addItems([new Object, new Object]) container.getRoot().splitRight(items: [new Object]) [pane1, pane2] = container.getPanes() @@ -229,7 +216,6 @@ describe "PaneContainer", -> getURI: -> 'test' container = new PaneContainer(params) - container.initialize() container.getRoot().splitRight() [pane1, pane2] = container.getPanes() pane1.addItem(new TestItem) @@ -250,7 +236,6 @@ describe "PaneContainer", -> describe "::onDidAddPane(callback)", -> it "invokes the given callback when panes are added", -> container = new PaneContainer(params) - container.initialize() events = [] container.onDidAddPane (event) -> expect(event.pane in container.getPanes()).toBe true @@ -270,7 +255,6 @@ describe "PaneContainer", -> isDestroyed: -> @_isDestroyed container = new PaneContainer(params) - container.initialize() events = [] container.onWillDestroyPane (event) -> itemsDestroyed = (item.isDestroyed() for item in event.pane.getItems()) @@ -287,7 +271,6 @@ describe "PaneContainer", -> describe "::onDidDestroyPane(callback)", -> it "invokes the given callback when panes are destroyed", -> container = new PaneContainer(params) - container.initialize() events = [] container.onDidDestroyPane (event) -> expect(event.pane in container.getPanes()).toBe false @@ -304,7 +287,6 @@ describe "PaneContainer", -> it "invokes the given callback when the container is destroyed", -> container = new PaneContainer(params) - container.initialize() events = [] container.onDidDestroyPane (event) -> expect(event.pane in container.getPanes()).toBe false @@ -321,7 +303,6 @@ describe "PaneContainer", -> describe "::onWillDestroyPaneItem() and ::onDidDestroyPaneItem", -> it "invokes the given callbacks when an item will be destroyed on any pane", -> container = new PaneContainer(params) - container.initialize() pane1 = container.getRoot() item1 = new Object item2 = new Object @@ -349,7 +330,6 @@ describe "PaneContainer", -> describe "::saveAll()", -> it "saves all modified pane items", -> container = new PaneContainer(params) - container.initialize() pane1 = container.getRoot() pane2 = pane1.splitRight() @@ -391,7 +371,6 @@ describe "PaneContainer", -> copy: -> new TestItem(@id) container = new PaneContainer(params) - container.initialize() pane1 = container.getRoot() item1 = new TestItem('1') pane2 = pane1.splitRight(items: [item1]) diff --git a/spec/workspace-spec.js b/spec/workspace-spec.js index fe15d56f2..b013ff47c 100644 --- a/spec/workspace-spec.js +++ b/spec/workspace-spec.js @@ -57,7 +57,6 @@ describe('Workspace', () => { assert: atom.assert.bind(atom), textEditorRegistry: atom.textEditors }) - atom.workspace.initialize() return atom.workspace.deserialize(workspaceState, atom.deserializers) } diff --git a/src/atom-environment.coffee b/src/atom-environment.coffee index f363ace9b..dc5c4519a 100644 --- a/src/atom-environment.coffee +++ b/src/atom-environment.coffee @@ -227,7 +227,6 @@ class AtomEnvironment extends Model @themes.initialize({@configDirPath, resourcePath, safeMode, devMode}) @commandInstaller.initialize(@getVersion()) - @workspace.initialize() @autoUpdater.initialize() @config.load() diff --git a/src/pane-container.js b/src/pane-container.js index e95cde37e..85267be4b 100644 --- a/src/pane-container.js +++ b/src/pane-container.js @@ -22,10 +22,6 @@ class PaneContainer { this.setActivePane(this.getRoot()) } - initialize () { - this.monitorActivePaneItem() - } - getLocation () { return this.location } getElement () { @@ -171,6 +167,7 @@ class PaneContainer { this.activePane = activePane this.emitter.emit('did-change-active-pane', this.activePane) + this.didChangeActiveItemOnPane(this.activePane, this.activePane.getActiveItem()) } this.emitter.emit('did-activate-pane', this.activePane) return this.activePane @@ -278,36 +275,20 @@ class PaneContainer { this.emitter.emit('did-destroy-pane', event) } + didChangeActiveItemOnPane (pane, activeItem) { + if (pane === this.getActivePane()) { + this.emitter.emit('did-change-active-pane-item', activeItem) + this.cancelStoppedChangingActivePaneItemTimeout() + this.stoppedChangingActivePaneItemTimeout = setTimeout(() => { + this.stoppedChangingActivePaneItemTimeout = null + this.emitter.emit('did-stop-changing-active-pane-item', activeItem) + }, STOPPED_CHANGING_ACTIVE_PANE_ITEM_DELAY) + } + } + cancelStoppedChangingActivePaneItemTimeout () { if (this.stoppedChangingActivePaneItemTimeout != null) { clearTimeout(this.stoppedChangingActivePaneItemTimeout) } } - - monitorActivePaneItem () { - let childSubscription = null - - this.subscriptions.add(this.observeActivePane(activePane => { - if (childSubscription != null) { - this.subscriptions.remove(childSubscription) - childSubscription.dispose() - } - - childSubscription = activePane.observeActiveItem(activeItem => { - this.emitter.emit('did-change-active-pane-item', activeItem) - this.cancelStoppedChangingActivePaneItemTimeout() - const stoppedChangingActivePaneItemCallback = () => { - this.stoppedChangingActivePaneItemTimeout = null - this.emitter.emit('did-stop-changing-active-pane-item', activeItem) - } - this.stoppedChangingActivePaneItemTimeout = - setTimeout( - stoppedChangingActivePaneItemCallback, - STOPPED_CHANGING_ACTIVE_PANE_ITEM_DELAY) - } - ) - - this.subscriptions.add(childSubscription) - })) - } } diff --git a/src/pane.coffee b/src/pane.coffee index 4adbccc4c..c7bc6a38e 100644 --- a/src/pane.coffee +++ b/src/pane.coffee @@ -340,6 +340,7 @@ class Pane @addItemToStack(activeItem) unless modifyStack is false @activeItem = activeItem @emitter.emit 'did-change-active-item', @activeItem + @container?.didChangeActiveItemOnPane(this, @activeItem) @activeItem # Build the itemStack after deserializing diff --git a/src/workspace.js b/src/workspace.js index f3a2b9623..90c9d93e4 100644 --- a/src/workspace.js +++ b/src/workspace.js @@ -90,10 +90,6 @@ module.exports = class Workspace extends Model { this.subscribeToEvents() } - initialize () { - this.paneContainer.initialize() - } - getElement () { if (!this.element) { this.element = new WorkspaceElement().initialize(this, { @@ -164,7 +160,6 @@ module.exports = class Workspace extends Model { this.destroyedItemURIs = [] this.element = null this.consumeServices(this.packageManager) - this.initialize() } subscribeToEvents () {