diff options
| author | akbash <akbash@herdr.dev> | 2026-09-08 17:51:59 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-09-08 17:51:59 +0300 |
| commit | 68c7b78ec237034cbb0e21c8666842ed7991641d (patch) | |
| tree | 3d5a63866fa785a3307959301f3022fa21bff5ed /src/client/shell/mouse.rs | |
| parent | ffa0892ef87d927eef78fe8068de4d90201fb20b (diff) | |
fix: collapse worktree groups with saved machines (#3781)
* fix: collapse worktree groups with saved machines
refs #3778
* fix: scope worktree collapse by machine
refs #3778
* fix: collapse machines without switching focus
refs #3778
---------
Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
Diffstat (limited to 'src/client/shell/mouse.rs')
| -rw-r--r-- | src/client/shell/mouse.rs | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/client/shell/mouse.rs b/src/client/shell/mouse.rs index cd4a6c16..cf04fb89 100644 --- a/src/client/shell/mouse.rs +++ b/src/client/shell/mouse.rs @@ -480,7 +480,11 @@ impl ClientShellState { .map(|hit| (Some(hit.workspace_id.clone()), hit.rect.y.saturating_sub(1))) .collect::<Vec<_>>(); let snapshot = self.snapshot.as_deref()?; - let entries = render::workspace_entries(snapshot, &self.collapsed_groups); + let empty_collapsed_groups = HashSet::new(); + let collapsed_groups = self + .collapsed_groups_for_endpoint(&self.active_endpoint_id) + .unwrap_or(&empty_collapsed_groups); + let entries = render::workspace_entries(snapshot, collapsed_groups); let last_hit = self .hits .workspaces @@ -1972,17 +1976,15 @@ impl ClientShellState { self.persist_chrome_preferences(outcome); return; } - for hit in &self.hits.workspaces { - if let Some((rect, key)) = &hit.group_toggle { - if super::contains(*rect, point) { - if !self.collapsed_groups.remove(key) { - self.collapsed_groups.insert(key.clone()); - } - outcome.repaint = true; - self.persist_chrome_preferences(outcome); - return; - } - } + let group_toggle = self.hits.workspaces.iter().find_map(|hit| { + let (rect, key) = hit.group_toggle.as_ref()?; + super::contains(*rect, point).then(|| (hit.endpoint_id.clone(), key.clone())) + }); + if let Some((endpoint_id, key)) = group_toggle { + self.toggle_collapsed_group(&endpoint_id, key); + outcome.repaint = true; + self.persist_chrome_preferences(outcome); + return; } let workspace_press = self .hits |
