diff options
| author | 2024-10-04 11:34:14 -0700 | |
|---|---|---|
| committer | 2024-10-24 13:05:42 +0200 | |
| commit | 5ebd8ac83f6c173bd24de146bf582f049663a330 (patch) | |
| tree | dec1dff633b557837e4fef6197d5028fbfa24e17 /widget | |
| 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.
Diffstat (limited to 'widget')
| -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)); +            }          }      } | 
