Destroy editSession by calling a method on the project instead of triggering a destroy event that the project listens to.

This commit is contained in:
Corey Johnson
2012-06-29 11:21:14 -07:00
parent 2ff1cc9baf
commit 98393a653e
2 changed files with 11 additions and 7 deletions

View File

@@ -30,7 +30,7 @@ class EditSession
softTabs: true
softWrap: false
constructor: ({@buffer, @tabText, @autoIndent, @softTabs, @softWrap}) ->
constructor: ({@project, @buffer, @tabText, @autoIndent, @softTabs, @softWrap}) ->
@id = @constructor.idCounter++
@softTabs ?= true
@displayBuffer = new DisplayBuffer(@buffer, { @tabText })
@@ -54,7 +54,7 @@ class EditSession
@buffer.off ".edit-session-#{@id}"
@displayBuffer.off ".edit-session-#{@id}"
@displayBuffer.destroy()
@trigger "destroy"
@project.removeEditSession(this)
serialize: ->
buffer: @buffer.getPath()

View File

@@ -83,21 +83,25 @@ class Project
buffer = @buildBuffer()
editSession = new EditSession
project: this
buffer: buffer
tabText: @getTabText()
autoIndent: @getAutoIndent()
softTabs: @getSoftTabs()
softWrap: @getSoftWrap()
editSession.on 'destroy', =>
@editSessions = _.without(@editSessions, editSession)
bufferIsOrphaned = not _.find @editSessions, (e) -> e.buffer == editSession.buffer
editSession.buffer.destroy() if bufferIsOrphaned
@editSessions.push editSession
@trigger 'new-edit-session', editSession
editSession
removeEditSession: (editSession) ->
_.remove(@editSessions, editSession)
@destroyBufferIfOrphaned(editSession.buffer)
destroyBufferIfOrphaned: (buffer) ->
unless _.find(@editSessions, (editSession) -> editSession.buffer == buffer)
buffer.destroy()
buildBuffer: (filePath) ->
buffer = new Buffer(filePath)
@trigger 'new-buffer', buffer