From b5b8591a512de6c3790305a52a3f7b2e550dd94b Mon Sep 17 00:00:00 2001 From: Jess Lin Date: Mon, 17 Aug 2015 22:52:56 -0700 Subject: [PATCH] Destroy a TextEditor's Gutters when it is destroyed --- spec/gutter-container-spec.coffee | 10 ++++++++++ src/gutter-container.coffee | 7 ++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/spec/gutter-container-spec.coffee b/spec/gutter-container-spec.coffee index 03c9ebc10..e38367835 100644 --- a/spec/gutter-container-spec.coffee +++ b/spec/gutter-container-spec.coffee @@ -50,3 +50,13 @@ describe 'GutterContainer', -> otherGutterContainer = new GutterContainer fakeOtherTextEditor gutter = new Gutter 'gutter-name', otherGutterContainer expect(gutterContainer.removeGutter.bind(null, gutter)).toThrow() + + describe '::destroy', -> + it 'clears its array of gutters and destroys custom gutters', -> + newGutter = gutterContainer.addGutter {'test-gutter', priority: 1} + newGutterSpy = jasmine.createSpy() + newGutter.onDidDestroy(newGutterSpy) + + gutterContainer.destroy() + expect(newGutterSpy).toHaveBeenCalled() + expect(gutterContainer.getGutters()).toEqual [] diff --git a/src/gutter-container.coffee b/src/gutter-container.coffee index 1be52d519..4fa7c61fb 100644 --- a/src/gutter-container.coffee +++ b/src/gutter-container.coffee @@ -13,7 +13,12 @@ class GutterContainer @emitter = new Emitter destroy: -> - @gutters = null + # Create a copy, because `Gutter::destroy` removes the gutter from + # GutterContainer's @gutters. + guttersToDestroy = @gutters.slice(0) + for gutter in guttersToDestroy + gutter.destroy() if gutter.name isnt 'line-number' + @gutters = [] @emitter.dispose() # Creates and returns a {Gutter}.