diff --git a/kitty/layout/base.py b/kitty/layout/base.py index acb30de4b..ed4b65562 100644 --- a/kitty/layout/base.py +++ b/kitty/layout/base.py @@ -445,9 +445,7 @@ def serialize(self, all_windows: WindowList) -> dict[str, Any]: ans = self.layout_state() ans['opts'] = self.layout_opts.serialized() ans['class'] = self.__class__.__name__ - ans['all_windows'] = aw = all_windows.serialize_state() - for wg in aw['window_groups']: - wg['window_ids'] = tuple(w['id'] for w in aw.pop('windows')) + ans['all_windows'] = all_windows.serialize_layout_state() return ans def unserialize( diff --git a/kitty/window_list.py b/kitty/window_list.py index 6c01829ca..0fba377c1 100644 --- a/kitty/window_list.py +++ b/kitty/window_list.py @@ -96,7 +96,13 @@ def remove_window(self, window: WindowType) -> None: def serialize_state(self) -> dict[str, Any]: return { 'id': self.id, - 'windows': [w.serialize_state() for w in self.windows] + 'windows': tuple(w.serialize_state() for w in self.windows), + } + + def serialize_layout_state(self) -> dict[str, Any]: + return { + 'id': self.id, + 'window_ids': tuple(w.id for w in self.windows), } def unserialize_layout_state(self, window_ids: Sequence[int]) -> None: @@ -185,6 +191,13 @@ def serialize_state(self) -> dict[str, Any]: 'window_groups': [g.serialize_state() for g in self.groups] } + def serialize_layout_state(self) -> dict[str, Any]: + return { + 'active_group_idx': self.active_group_idx, + 'active_group_history': list(self.active_group_history), + 'window_groups': [g.serialize_layout_state() for g in self.groups] + } + def unserialize_layout_state(self, state: dict[str, Any], window_id_map: dict[int, int]) -> dict[int, int] | None: if set(window_id_map.values()) != set(self.id_map): # some window in this collection does not correspond to a