Properly serialize pane focus state

This commit is contained in:
Nathan Sobo
2014-01-09 16:09:22 -07:00
parent 964abd3141
commit 4026e6ca5c
4 changed files with 23 additions and 4 deletions

View File

@@ -0,0 +1,16 @@
PaneContainerModel = require '../src/pane-container-model'
PaneModel = require '../src/pane-model'
describe "PaneContainerModel", ->
describe "serialization", ->
it "preserves the focused pane across serialization", ->
pane1A = new PaneModel
containerA = new PaneContainerModel(root: pane1A)
pane2A = pane1A.splitRight()
pane3A = pane2A.splitDown()
expect(pane3A.focused).toBe true
containerB = containerA.testSerialization()
[pane1A, pane2A, pane3A] = containerB.getPanes()
expect(pane3A.focusContext).toBe containerB.focusContext
expect(pane3A.focused).toBe true

View File

@@ -16,7 +16,7 @@ class PaneAxisModel extends Model
@property 'focusContext'
constructor: ({@orientation, children}) ->
constructor: ({@focusContext, @orientation, children}) ->
@children = Sequence.fromArray(children ? [])
@subscribe @$focusContext, (focusContext) =>
@@ -33,7 +33,8 @@ class PaneAxisModel extends Model
@when @children.$length.becomesLessThan(1), 'destroy'
deserializeParams: (params) ->
params.children = params.children.map (childState) -> atom.deserializers.deserialize(childState)
{focusContext} = params
params.children = params.children.map (childState) -> atom.deserializers.deserialize(childState, {focusContext})
params
serializeParams: ->

View File

@@ -20,7 +20,8 @@ class PaneContainerModel extends Model
root.focusContext = @focusContext
deserializeParams: (params) ->
params.root = atom.deserializers.deserialize(params.root)
params.focusContext ?= new FocusContext
params.root = atom.deserializers.deserialize(params.root, focusContext: params.focusContext)
params
serializeParams: (params) ->

View File

@@ -13,12 +13,13 @@ class PaneModel extends Model
Focusable.includeInto(this)
@properties
items: -> []
activeItem: null
constructor: (params) ->
super
@focus() if params?.focused
@items = Sequence.fromArray(params?.items ? [])
@activeItem ?= @items[0]