Repository navigation
v0.7.0 — Dual-View Session Picker + Startup Focus Return
What's New
✨ Dual-View Session Picker: Recent / Project
The "Open from Session" panel now has a segmented control toggle at the top:
- ⏱ Recent — flat list sorted by time (existing behaviour, refined)
- 📁 Project — sessions grouped by project directory in a collapsible accordion
By Project View
- Sessions clustered by
directoryfield, ranked by most recent activity (max(time_updated)) - Top 5 project paths shown as collapsible groups; remaining sessions merged into a single 📦 Other group
- Each group header shows: chevron ▼/▶ + 📁 basename + active status dot +
N sessions · time - Top 1 group auto-expanded on open; click any header to toggle
- Session cards inside groups are simplified (title + time only — path is in the header)
- Other group cards include the project basename since paths differ
- View mode preference persisted to
settings.json
Bug Fixes in Session Panel
- Chevron rendering: drawn as painted triangle via
egui::Shape::convex_polygoninstead of Unicode glyph (avoids tofu/missing-glyph boxes) - Missing sessions: DB query limit raised from 10 → 50 for better clustering coverage (Recent view still displays top 20)
- Empty titles: now show "Untitled session" instead of blank card rows
✨ Startup Focus Return
When the widget launches, the window manager (Mutter/GNOME Shell) steals keyboard focus and assigns it to the widget window. This is now fixed:
- Before the widget window is mapped, the currently active window is captured via
_NET_ACTIVE_WINDOWX11 property - For 500ms after launch, each frame checks if focus has been stolen to the widget
- Once detected, focus is immediately restored to the previous window via
XSetInputFocus+_NET_ACTIVE_WINDOWClientMessage
Your terminal/editor keeps focus — the widget stays visually present but never interrupts your typing.
📦 Install
dpkg -i opencode-traffic-light_0.7.0_amd64.debRequires: libx11-6, libxcb1, libxi6, libxext6, libxdo3, libgtk-3-0, libappindicator3-1