diff --git a/spec/pane-container-spec.coffee b/spec/pane-container-spec.coffee index b32868d8e..58e159279 100644 --- a/spec/pane-container-spec.coffee +++ b/spec/pane-container-spec.coffee @@ -21,7 +21,7 @@ describe "PaneContainer", -> it "preserves the focused pane across serialization", -> expect(pane3A.focused).toBe true - containerB = containerA.testSerialization() + containerB = PaneContainer.deserialize(containerA.serialize()) [pane1B, pane2B, pane3B] = containerB.getPanes() expect(pane3B.focused).toBe true @@ -29,7 +29,7 @@ describe "PaneContainer", -> pane3A.activate() expect(containerA.getActivePane()).toBe pane3A - containerB = containerA.testSerialization() + containerB = PaneContainer.deserialize(containerA.serialize()) [pane1B, pane2B, pane3B] = containerB.getPanes() expect(containerB.getActivePane()).toBe pane3B diff --git a/src/pane-container.coffee b/src/pane-container.coffee index 603be6ced..9fbf14519 100644 --- a/src/pane-container.coffee +++ b/src/pane-container.coffee @@ -1,6 +1,5 @@ {find, flatten} = require 'underscore-plus' {Emitter, CompositeDisposable} = require 'event-kit' -Serializable = require 'serializable' Gutter = require './gutter' Model = require './model' Pane = require './pane' @@ -9,12 +8,19 @@ ItemRegistry = require './item-registry' module.exports = class PaneContainer extends Model atom.deserializers.add(this) - Serializable.includeInto(this) @version: 1 root: null + @deserialize: (state) -> + container = Object.create(@prototype) # allows us to pass a self reference to our child before invoking constructor + state.root = atom.deserializers.deserialize(state.root, {container}) + state.destroyEmptyPanes = atom.config.get('core.destroyEmptyPanes') + state.activePane = find state.root.getPanes(), (pane) -> pane.id is state.activePaneId + @call(container, state) # run constructor + container + constructor: (params) -> super @@ -33,13 +39,9 @@ class PaneContainer extends Model @monitorActivePaneItem() @monitorPaneItems() - deserializeParams: (params) -> - params.root = atom.deserializers.deserialize(params.root, container: this) - params.destroyEmptyPanes = atom.config.get('core.destroyEmptyPanes') - params.activePane = find params.root.getPanes(), (pane) -> pane.id is params.activePaneId - params - - serializeParams: (params) -> + serialize: (params) -> + deserializer: 'PaneContainer' + version: @constructor.version root: @root?.serialize() activePaneId: @activePane.id