diff options
author | 2024-10-04 11:34:14 -0700 | |
---|---|---|
committer | 2024-10-24 13:05:42 +0200 | |
commit | 5ebd8ac83f6c173bd24de146bf582f049663a330 (patch) | |
tree | dec1dff633b557837e4fef6197d5028fbfa24e17 | |
parent | 9ac3318357d636cde22ae34f7b2cdeddd3f55cdb (diff) | |
download | iced-5ebd8ac83f6c173bd24de146bf582f049663a330.tar.gz iced-5ebd8ac83f6c173bd24de146bf582f049663a330.tar.bz2 iced-5ebd8ac83f6c173bd24de146bf582f049663a330.zip |
Keep `Pane` associated to state / layout after swap
State continuity is dependent on keeping a node associated
to it's original `Pane` id. When splitting -> swapping
nodes, we need to assign it back to the original `Pane`
to enforce continuity.
-rw-r--r-- | widget/src/pane_grid/state.rs | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/widget/src/pane_grid/state.rs b/widget/src/pane_grid/state.rs index e1934930..b7aef67d 100644 --- a/widget/src/pane_grid/state.rs +++ b/widget/src/pane_grid/state.rs @@ -228,8 +228,15 @@ impl<T> State<T> { ) { if let Some((state, _)) = self.close(pane) { if let Some((new_pane, _)) = self.split(axis, target, state) { + // Ensure new node corresponds to original `Pane` for state continuity + self.swap(pane, new_pane); + let _ = self + .panes + .remove(&new_pane) + .and_then(|state| self.panes.insert(pane, state)); + if swap { - self.swap(target, new_pane); + self.swap(target, pane); } } } @@ -262,7 +269,16 @@ impl<T> State<T> { swap: bool, ) { if let Some((state, _)) = self.close(pane) { - let _ = self.split_node(axis, None, state, swap); + if let Some((new_pane, _)) = + self.split_node(axis, None, state, swap) + { + // Ensure new node corresponds to original `Pane` for state continuity + self.swap(pane, new_pane); + let _ = self + .panes + .remove(&new_pane) + .and_then(|state| self.panes.insert(pane, state)); + } } } |