From 4026e6ca5c3dcbaa4f259e41659168227629243a Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 9 Jan 2014 16:09:22 -0700 Subject: [PATCH] Properly serialize pane focus state --- spec/pane-container-model-spec.coffee | 16 ++++++++++++++++ src/pane-axis-model.coffee | 5 +++-- src/pane-container-model.coffee | 3 ++- src/pane-model.coffee | 3 ++- 4 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 spec/pane-container-model-spec.coffee diff --git a/spec/pane-container-model-spec.coffee b/spec/pane-container-model-spec.coffee new file mode 100644 index 000000000..9379a2c8d --- /dev/null +++ b/spec/pane-container-model-spec.coffee @@ -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 diff --git a/src/pane-axis-model.coffee b/src/pane-axis-model.coffee index 064ad95b8..a4495f417 100644 --- a/src/pane-axis-model.coffee +++ b/src/pane-axis-model.coffee @@ -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: -> diff --git a/src/pane-container-model.coffee b/src/pane-container-model.coffee index 10ab34292..7d704a41c 100644 --- a/src/pane-container-model.coffee +++ b/src/pane-container-model.coffee @@ -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) -> diff --git a/src/pane-model.coffee b/src/pane-model.coffee index 881fc2f48..60a768b56 100644 --- a/src/pane-model.coffee +++ b/src/pane-model.coffee @@ -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]