diff --git a/spec/display-buffer-spec.coffee b/spec/display-buffer-spec.coffee index 1fbbbe873..34b75f54f 100644 --- a/spec/display-buffer-spec.coffee +++ b/spec/display-buffer-spec.coffee @@ -1037,6 +1037,19 @@ describe "DisplayBuffer", -> expect(start.top).toBe 5 * 20 expect(start.left).toBe (4 * 10) + (6 * 11) + describe 'when there are multiple DisplayBuffers for a buffer', -> + describe 'when a marker is created', -> + it 'the second display buffer will not emit a marker-created event when the marker has been deleted in the first marker-created event', -> + displayBuffer2 = new DisplayBuffer({buffer, tabLength}) + displayBuffer.on 'marker-created', markerCreated1 = jasmine.createSpy().andCallFake (marker) -> + marker.destroy() + displayBuffer2.on 'marker-created', markerCreated2 = jasmine.createSpy() + + displayBuffer.markBufferRange([[0, 0], [1, 5]], {}) + + expect(markerCreated1).toHaveBeenCalled() + expect(markerCreated2).not.toHaveBeenCalled() + describe "decorations", -> [marker, decoration, decorationParams] = [] beforeEach -> diff --git a/src/display-buffer.coffee b/src/display-buffer.coffee index 76f83e713..0b7121acc 100644 --- a/src/display-buffer.coffee +++ b/src/display-buffer.coffee @@ -1097,7 +1097,10 @@ class DisplayBuffer extends Model handleBufferMarkerCreated: (marker) => @createFoldForMarker(marker) if marker.matchesAttributes(@getFoldMarkerAttributes()) - @emit 'marker-created', @getMarker(marker.id) + if displayBufferMarker = @getMarker(marker.id) + # The marker might have been removed in some other handler called before + # this one. Only emit when the marker still exists. + @emit 'marker-created', displayBufferMarker createFoldForMarker: (marker) -> @decorateMarker(marker, type: 'gutter', class: 'folded')