From 55a7ef352d16f6fb238f8b74de3c2d488fb1b9c2 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 16 Mar 2015 14:54:49 -0700 Subject: [PATCH 01/11] Deprecate all TextEditor::on calls --- src/text-editor.coffee | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 229335c11..7db2aa810 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -512,6 +512,9 @@ class TextEditor extends Model when 'scroll-left-changed' deprecate("Use TextEditor::onDidChangeScrollLeft instead") + else + deprecate("TextEditor::on is deprecated. Use documented event subscription methods instead.") + EmitterMixin::on.apply(this, arguments) # Retrieves the current {TextBuffer}. From 7c15ec36a35318f1d5e8d09c8da7833636e66171 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 16 Mar 2015 14:56:40 -0700 Subject: [PATCH 02/11] Deprecate all Marker::on calls --- src/marker.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/marker.coffee b/src/marker.coffee index 98e3f0265..2224ca1c7 100644 --- a/src/marker.coffee +++ b/src/marker.coffee @@ -124,6 +124,8 @@ class Marker Grim.deprecate("Use Marker::onDidChange instead") when 'destroyed' Grim.deprecate("Use Marker::onDidDestroy instead") + else + Grim.deprecate("Marker::on is deprecated. Use documented event subscription methods instead.") EmitterMixin::on.apply(this, arguments) From 76df65b720dc280809a2eb3f4b0e4f9e871638f0 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 16 Mar 2015 14:57:12 -0700 Subject: [PATCH 03/11] Deprecate all Project::on calls --- src/project.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/project.coffee b/src/project.coffee index 69406dbda..b15f32615 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -121,6 +121,8 @@ class Project extends Model on: (eventName) -> if eventName is 'path-changed' Grim.deprecate("Use Project::onDidChangePaths instead") + else + Grim.deprecate("Project::on is deprecated. Use documented event subscription methods instead.") super ### From fd614572f168d08309b0f65a6338097ef6a387a1 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 16 Mar 2015 14:57:27 -0700 Subject: [PATCH 04/11] Deprecate all Selection::on calls --- src/selection.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/selection.coffee b/src/selection.coffee index c23d106fe..5b0fdae38 100644 --- a/src/selection.coffee +++ b/src/selection.coffee @@ -67,6 +67,8 @@ class Selection extends Model Grim.deprecate("Use Selection::onDidChangeRange instead. Call ::getScreenRange() yourself in your callback if you need the range.") when 'destroyed' Grim.deprecate("Use Selection::onDidDestroy instead.") + else + Grim.deprecate("Selection::on is deprecated. Use documented event subscription methods instead.") super From 03a59c570e30194c871100be36fed7c16a4e3cf0 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 16 Mar 2015 15:37:10 -0700 Subject: [PATCH 05/11] Subscribe to onDidDestroy when available --- src/pane.coffee | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pane.coffee b/src/pane.coffee index 5cdc3016a..1aee42715 100644 --- a/src/pane.coffee +++ b/src/pane.coffee @@ -1,6 +1,6 @@ {find, compact, extend, last} = require 'underscore-plus' {Model} = require 'theorist' -{Emitter} = require 'event-kit' +{CompositeDisposable, Emitter} = require 'event-kit' Serializable = require 'serializable' Grim = require 'grim' PaneAxis = require './pane-axis' @@ -34,6 +34,7 @@ class Pane extends Model super @emitter = new Emitter + @subscriptions = new CompositeDisposable @items = [] @addItems(compact(params?.items ? [])) @@ -340,6 +341,8 @@ class Pane extends Model addItem: (item, index=@getActiveItemIndex() + 1) -> return if item in @items + if typeof item.onDidDestroy is 'function' + @subscriptions.add item.onDidDestroy => @removeItem(item, true) if typeof item.on is 'function' @subscribe item, 'destroyed', => @removeItem(item, true) @@ -579,6 +582,7 @@ class Pane extends Model @container.activateNextPane() if @isActive() @emitter.emit 'did-destroy' @emitter.dispose() + @subscriptions.dispose() item.destroy?() for item in @items.slice() @container?.didDestroyPane(pane: this) From 2219abece186d26cf460b7d224342e1aa7db706e Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 16 Mar 2015 15:46:44 -0700 Subject: [PATCH 06/11] Don't use deprecated buffer events --- src/git-repository.coffee | 3 ++- src/project.coffee | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/git-repository.coffee b/src/git-repository.coffee index d523b562f..c4a9d34f5 100644 --- a/src/git-repository.coffee +++ b/src/git-repository.coffee @@ -96,7 +96,8 @@ class GitRepository @subscriptions.add new Disposable(-> window.removeEventListener 'focus', onWindowFocus) if @project? - @subscriptions.add @project.eachBuffer (buffer) => @subscribeToBuffer(buffer) + @project.getBuffers().forEach (buffer) => @subscribeToBuffer(buffer) + @subscriptions.add @project.onDidAddBuffer (buffer) => @subscribeToBuffer(buffer) # Public: Destroy this {GitRepository} object. # diff --git a/src/project.coffee b/src/project.coffee index b15f32615..a54d5edd1 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -118,6 +118,9 @@ class Project extends Model onDidChangePaths: (callback) -> @emitter.on 'did-change-paths', callback + onDidAddBuffer: (callback) -> + @emitter.on 'did-add-buffer', callback + on: (eventName) -> if eventName is 'path-changed' Grim.deprecate("Use Project::onDidChangePaths instead") @@ -436,6 +439,7 @@ class Project extends Model @buffers.splice(index, 0, buffer) @subscribeToBuffer(buffer) @emit 'buffer-created', buffer + @emitter.emit 'did-add-buffer', buffer buffer # Removes a {TextBuffer} association from the project. From 4d344c16b3ca26c7356bd98b30995716ad5a54fc Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 16 Mar 2015 15:50:13 -0700 Subject: [PATCH 07/11] Don't call on when onDidDestroy exists --- src/pane.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pane.coffee b/src/pane.coffee index 1aee42715..6a36bec2b 100644 --- a/src/pane.coffee +++ b/src/pane.coffee @@ -343,7 +343,7 @@ class Pane extends Model if typeof item.onDidDestroy is 'function' @subscriptions.add item.onDidDestroy => @removeItem(item, true) - if typeof item.on is 'function' + else if typeof item.on is 'function' @subscribe item, 'destroyed', => @removeItem(item, true) @items.splice(index, 0, item) From 84f7e6048e69bf605c8e0502b842b3f280a05e85 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 16 Mar 2015 16:22:02 -0700 Subject: [PATCH 08/11] :arrow_up: bracket-matcher@0.72 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cbce46ba8..e764aba90 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "autosave": "0.20.0", "background-tips": "0.23.0", "bookmarks": "0.35.0", - "bracket-matcher": "0.71.0", + "bracket-matcher": "0.72.0", "command-palette": "0.34.0", "deprecation-cop": "0.37.0", "dev-live-reload": "0.44.0", From 792a124668d64a27589929eb1914447308db1192 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 16 Mar 2015 16:25:45 -0700 Subject: [PATCH 09/11] Add onDidChangeIcon event subscription --- src/text-editor.coffee | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 7db2aa810..f731810ae 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -457,6 +457,10 @@ class TextEditor extends Model onDidChangeScrollLeft: (callback) -> @emitter.on 'did-change-scroll-left', callback + # TODO Remove once the tabs package no longer uses .on subscriptions + onDidChangeIcon: (callback) -> + @emitter.on 'did-change-icon', callback + on: (eventName) -> switch eventName when 'title-changed' From 0a1637184591688315b9c909c9e4759f43732fc6 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 16 Mar 2015 16:35:16 -0700 Subject: [PATCH 10/11] Dispose of destroyed listener on remove item --- src/pane.coffee | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/pane.coffee b/src/pane.coffee index 6a36bec2b..82f183e30 100644 --- a/src/pane.coffee +++ b/src/pane.coffee @@ -1,6 +1,6 @@ {find, compact, extend, last} = require 'underscore-plus' {Model} = require 'theorist' -{CompositeDisposable, Emitter} = require 'event-kit' +{Emitter} = require 'event-kit' Serializable = require 'serializable' Grim = require 'grim' PaneAxis = require './pane-axis' @@ -34,7 +34,7 @@ class Pane extends Model super @emitter = new Emitter - @subscriptions = new CompositeDisposable + @itemSubscriptions = new WeakMap @items = [] @addItems(compact(params?.items ? [])) @@ -342,7 +342,7 @@ class Pane extends Model return if item in @items if typeof item.onDidDestroy is 'function' - @subscriptions.add item.onDidDestroy => @removeItem(item, true) + @itemSubscriptions.set item, item.onDidDestroy => @removeItem(item, true) else if typeof item.on is 'function' @subscribe item, 'destroyed', => @removeItem(item, true) @@ -373,6 +373,9 @@ class Pane extends Model if typeof item.on is 'function' @unsubscribe item + @itemSubscriptions.get(item)?.dispose() + @itemSubscriptions.delete(item) + if item is @activeItem if @items.length is 1 @setActiveItem(undefined) @@ -582,8 +585,10 @@ class Pane extends Model @container.activateNextPane() if @isActive() @emitter.emit 'did-destroy' @emitter.dispose() - @subscriptions.dispose() - item.destroy?() for item in @items.slice() + for item in @items.slice() + @itemSubscriptions.get(item)?.dispose() + @itemSubscriptions.delete(item) + item.destroy?() @container?.didDestroyPane(pane: this) ### From 05bcebe583adb794cb148bdd44be80d8f359c5c8 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 16 Mar 2015 16:44:46 -0700 Subject: [PATCH 11/11] Add unsubscribe from item helper --- src/pane.coffee | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/pane.coffee b/src/pane.coffee index 82f183e30..0f19c40bf 100644 --- a/src/pane.coffee +++ b/src/pane.coffee @@ -250,6 +250,10 @@ class Pane extends Model getPanes: -> [this] + unsubscribeFromItem: (item) -> + @itemSubscriptions.get(item)?.dispose() + @itemSubscriptions.delete(item) + ### Section: Items ### @@ -372,9 +376,7 @@ class Pane extends Model if typeof item.on is 'function' @unsubscribe item - - @itemSubscriptions.get(item)?.dispose() - @itemSubscriptions.delete(item) + @unsubscribeFromItem(item) if item is @activeItem if @items.length is 1 @@ -585,10 +587,7 @@ class Pane extends Model @container.activateNextPane() if @isActive() @emitter.emit 'did-destroy' @emitter.dispose() - for item in @items.slice() - @itemSubscriptions.get(item)?.dispose() - @itemSubscriptions.delete(item) - item.destroy?() + item.destroy?() for item in @items.slice() @container?.didDestroyPane(pane: this) ###