From 461aaa83b0383f51376e4dd0b2ea38f93f6fafae Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Thu, 11 Apr 2013 08:53:01 -0700 Subject: [PATCH] Unsubscribe correctly from buffers in packages Previously namespaces were used to off() when a buffer was unsubscribed from which affected other views in the same package also listening to the current buffer. Now event namespaces are no longer used and instead off() is called with the callbacks originally registered for the given event name. --- .../git-diff/lib/git-diff-view.coffee | 22 ++++++++++-------- .../spell-check/lib/spell-check-view.coffee | 23 +++++++++---------- .../status-bar/lib/status-bar-view.coffee | 22 ++++++++++++------ 3 files changed, 39 insertions(+), 28 deletions(-) diff --git a/src/packages/git-diff/lib/git-diff-view.coffee b/src/packages/git-diff/lib/git-diff-view.coffee index 1172e0c95..f4fe50089 100644 --- a/src/packages/git-diff/lib/git-diff-view.coffee +++ b/src/packages/git-diff/lib/git-diff-view.coffee @@ -10,8 +10,8 @@ class GitDiffView @gutter = @editor.gutter @diffs = {} - @subscribe @editor, 'editor:path-changed', => @subscribeToBuffer() - @subscribe @editor, 'editor:display-updated', => @renderDiffs() + @subscribe @editor, 'editor:path-changed', @subscribeToBuffer + @subscribe @editor, 'editor:display-updated', @renderDiffs @subscribe git, 'statuses-changed', => @diffs = {} @scheduleUpdate() @@ -23,22 +23,26 @@ class GitDiffView beforeRemove: -> @unsubscribe() + @unsubscribeFromBuffer() - subscribeToBuffer: -> + unsubscribeFromBuffer: -> if @buffer? @removeDiffs() delete @diffs[@buffer.getPath()] if @buffer.destroyed - @buffer.off '.git-diff' + @buffer.off 'contents-modified', @updateDiffs @buffer = null + subscribeToBuffer: => + @unsubscribeFromBuffer() + if @buffer = @editor.getBuffer() @scheduleUpdate() unless @diffs[@buffer.getPath()]? - @buffer.on 'contents-modified.git-diff', => @updateDiffs() + @buffer.on 'contents-modified', @updateDiffs scheduleUpdate: -> - _.nextTick => @updateDiffs() + _.nextTick(@updateDiffs) - updateDiffs: -> + updateDiffs: => @generateDiffs() @renderDiffs() @@ -46,12 +50,12 @@ class GitDiffView if path = @buffer.getPath() @diffs[path] = git?.getLineDiffs(path, @buffer.getText()) - removeDiffs: -> + removeDiffs: => if @gutter.hasGitLineDiffs @gutter.find('.line-number').removeClass('git-line-added git-line-modified git-line-removed') @gutter.hasGitLineDiffs = false - renderDiffs: -> + renderDiffs: => return unless @gutter.isVisible() @removeDiffs() diff --git a/src/packages/spell-check/lib/spell-check-view.coffee b/src/packages/spell-check/lib/spell-check-view.coffee index 3f5bba2d6..40f856802 100644 --- a/src/packages/spell-check/lib/spell-check-view.coffee +++ b/src/packages/spell-check/lib/spell-check-view.coffee @@ -11,27 +11,30 @@ class SpellCheckView extends View views: [] initialize: (@editor) -> - @subscribe @editor, 'editor:path-changed', => @subscribeToBuffer() - @subscribe @editor, 'editor:grammar-changed', => @subscribeToBuffer() - @observeConfig 'editor.fontSize', => @subscribeToBuffer() - @observeConfig 'spell-check.grammars', => @subscribeToBuffer() + @subscribe @editor, 'editor:path-changed', @subscribeToBuffer + @subscribe @editor, 'editor:grammar-changed', @subscribeToBuffer + @observeConfig 'editor.fontSize', @subscribeToBuffer + @observeConfig 'spell-check.grammars', @subscribeToBuffer @subscribeToBuffer() + beforeRemove: -> + @unsubscribeFromBuffer() + unsubscribeFromBuffer: -> @destroyViews() @task?.abort() if @buffer? - @buffer.off '.spell-check' + @buffer.off 'contents-modified', @updateMisspellings @buffer = null - subscribeToBuffer: -> + subscribeToBuffer: => @unsubscribeFromBuffer() if @spellCheckCurrentGrammar() @buffer = @editor.getBuffer() - @buffer.on 'contents-modified.spell-check', => @updateMisspellings() + @buffer.on 'contents-modified', @updateMisspellings @updateMisspellings() spellCheckCurrentGrammar: -> @@ -49,11 +52,7 @@ class SpellCheckView extends View @views.push(view) @append(view) - updateMisspellings: -> - unless @editor.activeEditSession? - @unsubscribeFromBuffer() - return - + updateMisspellings: => @task?.abort() callback = (misspellings) => diff --git a/src/packages/status-bar/lib/status-bar-view.coffee b/src/packages/status-bar/lib/status-bar-view.coffee index 7a2f95a8a..50897f1e7 100644 --- a/src/packages/status-bar/lib/status-bar-view.coffee +++ b/src/packages/status-bar/lib/status-bar-view.coffee @@ -35,23 +35,31 @@ class StatusBarView extends View if git? @subscribe git, 'status-changed', (path, status) => @updateStatusBar() if path is @getActiveItemPath() - @subscribe git, 'statuses-changed', => - @updateStatusBar() + @subscribe git, 'statuses-changed', @updateStatusBar @subscribeToBuffer() + beforeRemove: -> + @unsubscribeFromBuffer() + getActiveItemPath: -> @pane.activeItem?.getPath?() + unsubscribeFromBuffer: -> + if @buffer? + @buffer.off 'modified-status-changed', @updateBufferHasModifiedText + @buffer.off 'saved', @updateStatusBar + @buffer = null + subscribeToBuffer: -> - @buffer?.off '.status-bar' + @unsubscribeFromBuffer() if @buffer = @pane.activeItem.getBuffer?() - @buffer.on 'modified-status-changed.status-bar', (isModified) => @updateBufferHasModifiedText(isModified) - @buffer.on 'saved.status-bar', => @updateStatusBar() + @buffer.on 'modified-status-changed', @updateBufferHasModifiedText + @buffer.on 'saved', @updateStatusBar @updateStatusBar() - updateStatusBar: -> + updateStatusBar: => @updateGrammarText() @updateBranchText() @updateBufferHasModifiedText(@buffer?.isModified()) @@ -65,7 +73,7 @@ class StatusBarView extends View else @grammarName.text(grammar.name).show() - updateBufferHasModifiedText: (isModified)-> + updateBufferHasModifiedText: (isModified) => if isModified @bufferModified.text('*') unless @isModified @isModified = true