Commit 00524e0
feat(sidebar): group bulk actions, empty-area quick menu, sort (#40)
* feat(groups): bulk actions in group right-click menu
Adds Remote control all, Sleep all, Start all, and Close all entries to
both the group-strip tab and the inline group-header context menus.
Items enable/disable based on live vs dormant member counts.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* feat(sidebar): empty-area quick menu, bulk actions, sort sessions
Sidebar right-click on empty space (header, session list, group strip,
empty terminal grid) now shows a shared quick menu with:
- New session / New group
- Bulk actions submenu — Wake all dormant, Sleep all, Close all
- Group display mode toggle (None / FilterStrip / InlineHeaders)
- Expand / collapse all group sections
- Session row icons mode (OnHover / Always / Hidden)
- Show git branch / worktree clusters toggles
- All settings…
The legacy + group footer button is removed; group creation flows
through "New group…" in the same menu.
New sort button in the SESSIONS header (left of +). Opens a
direction-aware menu: Name, Folder, Last active, Git ▸ (Branch, Dirty,
Repo). Re-clicking the active field flips direction; switching fields
picks the field's natural starting direction. Direction glyph lives in
the MenuItem icon slot so it column-aligns. Sessions without live git
info sink to the bottom of git-based orderings.
ShellSession gains a LastActivityAt timestamp updated when a session
becomes the active one, persisted via the existing state.json path.
SessionManager.SortSessions exposes a one-shot Sort(Comparison).
Visual polish: vertical filter strip now has a hairline divider
between All/Ungrouped and the user groups; Ungrouped glyph changed
from "∅" to "□" so it reads as the hollow companion to the "▦" All
glyph.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* fix(sort): backfill LastActivityAt from CreatedAt for legacy sessions
LastActivityAt was initialized to DateTime.UtcNow, which fires when
System.Text.Json deserializes a pre-PR state.json that doesn't carry
the key — every legacy session loaded as "active right now" and sorted
to the top of "Sort by Last active" in load order rather than reflecting
real activity.
Initialize to default (DateTime.MinValue) as a sentinel; SessionManager.
LoadFromState then backfills from CreatedAt for any session that comes
back from disk without the field. SessionManager.CreateSession sets it
explicitly on the new-session path so new sessions still get a real
timestamp.
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: Allan Thraen <allan@codeart.dk>1 parent 7f3f813 commit 00524e0
4 files changed
Lines changed: 480 additions & 34 deletions
File tree
- src/CodeShellManager
- Models
- Services
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
250 | 250 | | |
251 | 251 | | |
252 | 252 | | |
253 | | - | |
254 | | - | |
| 253 | + | |
| 254 | + | |
255 | 255 | | |
256 | 256 | | |
257 | 257 | | |
258 | 258 | | |
| 259 | + | |
259 | 260 | | |
260 | 261 | | |
261 | 262 | | |
262 | | - | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
263 | 269 | | |
264 | 270 | | |
265 | 271 | | |
266 | 272 | | |
267 | 273 | | |
268 | 274 | | |
269 | 275 | | |
270 | | - | |
| 276 | + | |
271 | 277 | | |
272 | 278 | | |
273 | 279 | | |
| |||
0 commit comments