From 5ecbda0aacf21c9dea682e425ba508768cdc8bc5 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 12 Feb 2013 09:41:32 -0800 Subject: [PATCH] Restore closed tab at previous index --- spec/app/editor-spec.coffee | 24 +++++++++++++++++------- src/app/editor.coffee | 11 +++++++++-- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/spec/app/editor-spec.coffee b/spec/app/editor-spec.coffee index f70abe357..ecfe4934f 100644 --- a/spec/app/editor-spec.coffee +++ b/spec/app/editor-spec.coffee @@ -2673,13 +2673,23 @@ describe "Editor", -> expect(rightEditor.editSessions[1].getPath()).toBe txtPath describe "when editor:undo-close-session is triggered", -> - it "opens the closed session back up", -> + describe "when an edit session is opened back up after it is closed", -> + it "is removed from the undo stack and not reopened when the event is triggered", -> + rootView.open('sample.txt') + expect(editor.getPath()).toBe fixturesProject.resolve('sample.txt') + editor.trigger "core:close" + expect(editor.closedEditSessions.length).toBe 1 + rootView.open('sample.txt') + expect(editor.closedEditSessions.length).toBe 0 + editor.trigger 'editor:undo-close-session' + expect(editor.getPath()).toBe fixturesProject.resolve('sample.txt') + + it "opens the closed session back up at the previous index", -> rootView.open('sample.txt') - expect(editor.getPath()).toBe require.resolve('fixtures/sample.txt') - expect(editor.closedEditSessions.length).toBe 0 + editor.loadPreviousEditSession() + expect(editor.getPath()).toBe fixturesProject.resolve('sample.js') editor.trigger "core:close" - expect(editor.getPath()).toBe require.resolve('fixtures/sample.js') - expect(editor.closedEditSessions.length).toBe 1 + expect(editor.getPath()).toBe fixturesProject.resolve('sample.txt') editor.trigger 'editor:undo-close-session' - expect(editor.getPath()).toBe require.resolve('fixtures/sample.txt') - expect(editor.closedEditSessions.length).toBe 0 + expect(editor.getPath()).toBe fixturesProject.resolve('sample.js') + expect(editor.getActiveEditSessionIndex()).toBe 0 diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 7e7c253a1..d5de08a88 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -467,6 +467,8 @@ class Editor extends View pushEditSession: (editSession) -> index = @editSessions.length @editSessions.push(editSession) + @closedEditSessions = @closedEditSessions.filter ({path})-> + path isnt editSession.getPath() editSession.on 'destroyed', => @editSessionDestroyed(editSession) @trigger 'editor:edit-session-added', [editSession, index] index @@ -474,7 +476,12 @@ class Editor extends View getBuffer: -> @activeEditSession.buffer undoDestroySession: -> - @rootView().open(@closedEditSessions.pop(), true) unless @closedEditSessions.length == 0 + return unless @closedEditSessions.length > 0 + + {path, index} = @closedEditSessions.pop() + @rootView().open(path) + activeIndex = @getActiveEditSessionIndex() + @moveEditSessionToIndex(activeIndex, index) if index < activeIndex destroyActiveEditSession: -> @destroyEditSessionIndex(@getActiveEditSessionIndex()) @@ -485,7 +492,7 @@ class Editor extends View editSession = @editSessions[index] destroySession = => path = editSession.getPath() - @closedEditSessions.push(path) unless @closedEditSessions.indexOf(path) > -1 + @closedEditSessions.push({path, index}) editSession.destroy() callback?(index)