summaryrefslogtreecommitdiffstats
path: root/widget
diff options
context:
space:
mode:
authorLibravatar Cory Forsstrom <cforsstrom18@gmail.com>2024-10-04 11:34:14 -0700
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-10-24 13:05:42 +0200
commit5ebd8ac83f6c173bd24de146bf582f049663a330 (patch)
treedec1dff633b557837e4fef6197d5028fbfa24e17 /widget
parent9ac3318357d636cde22ae34f7b2cdeddd3f55cdb (diff)
downloadiced-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.
Diffstat (limited to 'widget')
-rw-r--r--widget/src/pane_grid/state.rs20
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));
+ }
}
}