Preserve tree view focus state on refresh

This commit is contained in:
Nathan Sobo
2012-05-07 13:46:18 -06:00
parent 683a260a54
commit 64c65ea0fc
2 changed files with 19 additions and 0 deletions

View File

@@ -60,6 +60,19 @@ describe "TreeView", ->
expect(newTreeView.selectedEntry()).toMatchSelector(".file:contains(sample.js)")
expect(newTreeView.find(".directory:contains(zed)")).toHaveClass("expanded")
it "restores the focus state of the tree view", ->
treeView.attachToDom()
treeView.focus()
expect(treeView).toMatchSelector ':focus'
newRootView = RootView.deserialize(rootView.serialize())
rootView.remove()
newRootView.attachToDom()
newRootView.activateExtension(TreeView)
newTreeView = newRootView.find(".tree-view").view()
expect(newTreeView).toMatchSelector ':focus'
describe "when a directory's disclosure arrow is clicked", ->
it "expands / collapses the associated directory", ->
subdir = treeView.root.find('.entries > li:contains(dir/)').view()

View File

@@ -30,9 +30,11 @@ class TreeView extends View
treeView = new TreeView(rootView)
treeView.root.deserializeEntryExpansionStates(state.directoryExpansionStates)
treeView.selectEntryForPath(state.selectedPath)
treeView.focusAfterAttach = state.hasFocus
treeView
root: null
focusAfterAttach: false
initialize: (@rootView) ->
@on 'click', '.entry', (e) =>
@@ -54,9 +56,13 @@ class TreeView extends View
@on 'tree-view:unfocus', => @rootView.activeEditor()?.focus()
@rootView.on 'tree-view:focus', => this.focus()
afterAttach: (onDom) ->
@focus() if @focusAfterAttach
serialize: ->
directoryExpansionStates: @root.serializeEntryExpansionStates()
selectedPath: @selectedEntry()?.getPath()
hasFocus: @is(':focus')
deactivate: ->
@root.unwatchEntries()