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", 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/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) diff --git a/src/pane.coffee b/src/pane.coffee index 5cdc3016a..0f19c40bf 100644 --- a/src/pane.coffee +++ b/src/pane.coffee @@ -34,6 +34,7 @@ class Pane extends Model super @emitter = new Emitter + @itemSubscriptions = new WeakMap @items = [] @addItems(compact(params?.items ? [])) @@ -249,6 +250,10 @@ class Pane extends Model getPanes: -> [this] + unsubscribeFromItem: (item) -> + @itemSubscriptions.get(item)?.dispose() + @itemSubscriptions.delete(item) + ### Section: Items ### @@ -340,7 +345,9 @@ class Pane extends Model addItem: (item, index=@getActiveItemIndex() + 1) -> return if item in @items - if typeof item.on is 'function' + if typeof item.onDidDestroy is 'function' + @itemSubscriptions.set item, item.onDidDestroy => @removeItem(item, true) + else if typeof item.on is 'function' @subscribe item, 'destroyed', => @removeItem(item, true) @items.splice(index, 0, item) @@ -369,6 +376,7 @@ class Pane extends Model if typeof item.on is 'function' @unsubscribe item + @unsubscribeFromItem(item) if item is @activeItem if @items.length is 1 diff --git a/src/project.coffee b/src/project.coffee index 69406dbda..a54d5edd1 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -118,9 +118,14 @@ 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") + else + Grim.deprecate("Project::on is deprecated. Use documented event subscription methods instead.") super ### @@ -434,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. 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 diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 229335c11..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' @@ -512,6 +516,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}.