From 6bd87024213e2fb27eb769a1cb6d079bf119bc9e Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 4 Sep 2014 13:28:19 -0600 Subject: [PATCH] Deprecate DisplayBufferMarker::on --- spec/display-buffer-spec.coffee | 6 +++--- src/display-buffer-marker.coffee | 30 ++++++++++++++++++++++++++++-- src/display-buffer.coffee | 22 +++++++++++----------- 3 files changed, 42 insertions(+), 16 deletions(-) diff --git a/spec/display-buffer-spec.coffee b/spec/display-buffer-spec.coffee index ca5048433..acdaa1136 100644 --- a/spec/display-buffer-spec.coffee +++ b/spec/display-buffer-spec.coffee @@ -998,16 +998,16 @@ describe "DisplayBuffer", -> expect(marker.isValid()).toBeFalsy() expect(displayBuffer.getMarker(marker.id)).toBeUndefined() - it "emits 'destroyed' events when markers are destroyed", -> + it "notifies ::onDidDestroy observers when markers are destroyed", -> destroyedHandler = jasmine.createSpy("destroyedHandler") marker = displayBuffer.markScreenRange([[5, 4], [5, 10]]) - marker.on 'destroyed', destroyedHandler + marker.onDidDestroy destroyedHandler marker.destroy() expect(destroyedHandler).toHaveBeenCalled() destroyedHandler.reset() marker2 = displayBuffer.markScreenRange([[5, 4], [5, 10]]) - marker2.on 'destroyed', destroyedHandler + marker2.onDidDestroy destroyedHandler buffer.getMarker(marker2.id).destroy() expect(destroyedHandler).toHaveBeenCalled() diff --git a/src/display-buffer-marker.coffee b/src/display-buffer-marker.coffee index 6d7b97e6f..8300cac23 100644 --- a/src/display-buffer-marker.coffee +++ b/src/display-buffer-marker.coffee @@ -3,6 +3,7 @@ _ = require 'underscore-plus' {Subscriber} = require 'emissary' EmitterMixin = require('emissary').Emitter {Emitter} = require 'event-kit' +Grim = require 'grim' module.exports = class DisplayBufferMarker @@ -15,6 +16,7 @@ class DisplayBufferMarker oldTailBufferPosition: null oldTailScreenPosition: null wasValid: true + deferredChangeEvents: null constructor: ({@bufferMarker, @displayBuffer}) -> @emitter = new Emitter @@ -34,6 +36,15 @@ class DisplayBufferMarker onDidDestroy: (callback) -> @emitter.on 'did-destroy', callback + on: (eventName) -> + switch eventName + when 'changed' + Grim.deprecate("Use DisplayBufferMarker::onDidChange instead") + when 'destroyed' + Grim.deprecate("Use DisplayBufferMarker::onDidDestroy instead") + + EmitterMixin::on.apply(this, arguments) + copy: (attributes) -> @displayBuffer.getMarker(@bufferMarker.copy(attributes).id) @@ -234,11 +245,26 @@ class DisplayBufferMarker textChanged, isValid } - @emit 'changed', changeEvent - @emitter.emit 'did-change', changeEvent + + if @deferredChangeEvents? + @deferredChangeEvents.push(changeEvent) + else + @emit 'changed', changeEvent + @emitter.emit 'did-change', changeEvent @oldHeadBufferPosition = newHeadBufferPosition @oldHeadScreenPosition = newHeadScreenPosition @oldTailBufferPosition = newTailBufferPosition @oldTailScreenPosition = newTailScreenPosition @wasValid = isValid + + pauseChangeEvents: -> + @deferredChangeEvents = [] + + resumeChangeEvents: -> + if deferredChangeEvents = @deferredChangeEvents + @deferredChangeEvents = null + + for event in deferredChangeEvents + @emit 'changed', event + @emitter.emit 'did-change', event diff --git a/src/display-buffer.coffee b/src/display-buffer.coffee index 91950c6f6..456aea179 100644 --- a/src/display-buffer.coffee +++ b/src/display-buffer.coffee @@ -106,10 +106,10 @@ class DisplayBuffer extends Model emitChanged: (eventProperties, refreshMarkers=true) -> if refreshMarkers - @pauseMarkerObservers() + @pauseMarkerChangeEvents() @refreshMarkerScreenPositions() @emit 'changed', eventProperties - @resumeMarkerObservers() + @resumeMarkerChangeEvents() updateWrappedScreenLines: -> start = 0 @@ -788,10 +788,10 @@ class DisplayBuffer extends Model decorateMarker: (marker, decorationParams) -> marker = @getMarker(marker.id) - @decorationMarkerDestroyedSubscriptions[marker.id] ?= @subscribe marker, 'destroyed', => + @decorationMarkerDestroyedSubscriptions[marker.id] ?= @subscribe marker.onDidDestroy => @removeAllDecorationsForMarker(marker) - @decorationMarkerChangedSubscriptions[marker.id] ?= @subscribe marker, 'changed', (event) => + @decorationMarkerChangedSubscriptions[marker.id] ?= @subscribe marker.onDidChange (event) => decorations = @decorationsByMarkerId[marker.id] # Why check existence? Markers may get destroyed or decorations removed @@ -825,8 +825,8 @@ class DisplayBuffer extends Model @removedAllMarkerDecorations(marker) removedAllMarkerDecorations: (marker) -> - @decorationMarkerChangedSubscriptions[marker.id].off() - @decorationMarkerDestroyedSubscriptions[marker.id].off() + @decorationMarkerChangedSubscriptions[marker.id].dispose() + @decorationMarkerDestroyedSubscriptions[marker.id].dispose() delete @decorationsByMarkerId[marker.id] delete @decorationMarkerChangedSubscriptions[marker.id] @@ -977,11 +977,11 @@ class DisplayBuffer extends Model getFoldMarkerAttributes: (attributes={}) -> _.extend(attributes, class: 'fold', displayBufferId: @id) - pauseMarkerObservers: -> - marker.pauseEvents() for marker in @getMarkers() + pauseMarkerChangeEvents: -> + marker.pauseChangeEvents() for marker in @getMarkers() - resumeMarkerObservers: -> - marker.resumeEvents() for marker in @getMarkers() + resumeMarkerChangeEvents: -> + marker.resumeChangeEvents() for marker in @getMarkers() @emit 'markers-updated' refreshMarkerScreenPositions: -> @@ -1024,7 +1024,7 @@ class DisplayBuffer extends Model bufferDelta: bufferDelta if options.delayChangeEvent - @pauseMarkerObservers() + @pauseMarkerChangeEvents() @pendingChangeEvent = changeEvent else @emitChanged(changeEvent, options.refreshMarkers)