Skip to content

[Feat] Hybrid tray panel with site actions and service controls - #178

Open
jmsobe wants to merge 3 commits into
forjedio:mainfrom
jmsobe:feat/tray-panel
Open

[Feat] Hybrid tray panel with site actions and service controls#178
jmsobe wants to merge 3 commits into
forjedio:mainfrom
jmsobe:feat/tray-panel

Conversation

@jmsobe

@jmsobe jmsobe commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

#

What does this PR do?

Adds a hybrid menu-bar experience inspired by local-dev tools, with a quick-access Vue tray panel on left-click, while right-click keeps the full native dropdown menu. The goal is everyday site and service control without opening the main dashboard.

Screenshots

Attach these when opening the PR (files are in tray-panel-screenshots/):

Sites + Services — filter bar, favorites/recent grouping, per-site actions, PHP service row tray-panel-sites.png
Activity + menu-bar dot — recent mail, alerts, health dot on the tray icon tray-panel-activity.png

02-app-menu 01-app-menu

Tray panel (#/tray-panel, window label tray-panel)

Frameless popup shown under the menu-bar icon (left-aligned with the icon when it fits; shifts left at screen edges).

Header

  • YERD wordmark (matches main app chrome)
  • Stop daemon / Restart daemon when the daemon is up (Start daemon when down), with confirmation modals matching Overview
  • Minimize (hide panel) and Open Dashboard (expand main window)

Sites

  • Search field with placeholder Filter by domain… (same wording as the main Sites view)
  • Command-palette-style suggestions grouped Favorites → Recent → Sites (traySiteAutocomplete.ts)
  • Favorites and recent list persisted in gui-settings.json (tray_favorites, tray_recent)
  • Per-site inline actions: Favorite, Open in browser, Open in IDE
  • menu: Terminal, Reveal folder, Restart PHP pool (same pattern as SiteCard.vue)
  • Keyboard: ↑/↓ to move, Enter to open highlighted site, Esc to hide

Services

  • Collapsible section;
    Activity
  • Collapsible feed: tray health alerts (Doctor links) + last few captured emails
  • Open Inspect / Dumps… shortcut

Lifecycle

  • Own lightweight status poll (4 s), paused while the panel is hidden (same discipline as usePoll)
  • tray-panel-opened event refocuses the filter input on each show

Menu-bar icon

  • Refreshed rounded squircle with Y cutout (icons/tray-mac.svg), rasterised at build time (build.rs, 22 pt @4x = 88 px) for Retina menu bars
  • Health status dot at the bottom-right of the icon:
    • Green — healthy
    • Amber — degraded (CA trust, ports, enabled-but-stopped services, …)
    • Red — daemon unreachable or critical failure (tray_health::derive_health, mirrored in trayHealth.ts)
  • macOS Auto variant: Y is painted for the current menu-bar appearance; the dot stays full colour (non-template icon)

Preferred IDE (Settings → General)

  • Preferred IDE select: Automatic or a detected editor (VS Code, PhpStorm, Zed, …)
  • ide.rs: cross-platform catalog + install detection; macOS open -a, Linux CLI on PATH
  • open_site_in_ide Tauri command opens the site folder in the chosen app
  • Tray panel Open in IDE uses the same preference

Native tray menu (right-click)

Unchanged role: full dropdown when the panel is not enough.

  • Status header with health glyphs, daemon lifecycle, PHP default, updates, mail count
  • Service rows (Proxy + every PHP pool + every managed instance — tray_health::service_rows)
  • Mail, Dumps, Open Logs, Doctor, Quit
  • Jump to site… opens the Vue panel (important on Linux AppIndicator where left-clicks may not arrive)

Rust-side tray poll (6 s) diffs a snapshot and rebuilds menu/icon only on meaningful change. TRANSITION / MENU_LOCK still guard daemon start/stop/restart.


Linux tray fallback

If AppIndicator registration fails, the GUI sets tray_unavailable in settings and keeps the tray panel as an always-available surface (documented in docs/developer/gui.md).


New / touched modules

Area Files
Tray panel host tray_panel.rs — show/hide/toggle, monitor-aware positioning from click rect
Tray health tray_health.rs + lib/trayHealth.ts
Site autocomplete lib/traySiteAutocomplete.ts
IDE launch ide.rs, commands.rs, GeneralView.vue
Vue panel TrayPanelView.vue, router.ts, App.vue
Tray icon / menu tray.rs, build.rs, icons/tray-mac.svg
Settings persistence autostart.rs — tray favorites/recent, preferred IDE
Docs docs/developer/gui.md

IPC to the daemon is unchanged except additive GUI settings fields (no wire break).

Related issues

N/A — UX improvement / feature proposal.

Type of change

  • Bug fix
  • New feature
  • Refactor / internal change
  • Documentation
  • Build / CI / tooling

Platforms tested

  • macOS (tray panel, positioning, daemon controls, IDE open, health dot, native menu)
  • Linux (tray fallback path documented; needs AppIndicator / smoke pass)

Checklist

  • cargo fmt --all --check passes
  • cargo clippy -p yerd-gui --all-targets -- -D warnings is clean
  • cargo test for touched tray modules passes (tray, tray_panel, tray_health — 22 tests)
  • Pure logic covered by unit tests (trayHealth, traySiteAutocomplete, serviceActions, Rust layout/health helpers)
  • Docs updated (docs/developer/gui.md)
  • Frontend: npm run test (28 tray-related) + npm run typecheck + npm run build in apps/yerd-gui

Test plan

  • Left-click tray icon: panel opens under icon, filter focused, Esc hides
  • Type in filter: sites narrow; favorites/recent groups appear when set
  • Per-site: browser, IDE, terminal, reveal, PHP pool restart
  • Services: start/stop/restart on a running engine (e.g. Redis)
  • Stop / Restart daemon from panel header; Start when daemon down
  • Menu-bar icon dot: green when healthy, amber/red when degraded or down
  • Right-click: native menu still works; Jump to site opens panel
  • Settings → Preferred IDE persists and affects tray Open in IDE
  • Linux: tray unavailable → fallback panel behaviour (if testable)

Out of scope / follow-ups

  • User-facing guide page (docs/guide/desktop-app.md) — could add a tray section in a follow-up
  • Linux CI smoke for AppIndicator / Wayland
  • Dark-mode change repainting tray Auto icon without a daemon state change (pre-existing poller limitation)

Summary by CodeRabbit

  • New Features
    • Added a frameless tray popup for “Jump to site…” with favorites and recent sites, plus quick actions (open, open in IDE, open in terminal, reveal folder, restart PHP/power services) and an Activity feed for alerts.
    • Added health indicators across the tray/proxy/PHP/managed services and enhanced health-aware service controls.
    • Added “Preferred IDE” selection in settings, with support for opening files in the chosen IDE.
  • Bug Fixes
    • Improved tray fallback behavior when native tray registration isn’t available.
    • Closing auxiliary windows now hides them instead of terminating the app.
  • Documentation
    • Updated GUI/tray architecture documentation.

Left-click opens a frameless Vue tray panel with site filter, favorites/recent,
per-site actions, collapsible services and activity, and daemon Stop/Restart.
Right-click keeps the native menu. Adds preferred IDE setting, menu-bar health
dot, icon-aware panel positioning, and build-time tray icon rasterisation.
@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 8e6916ec-fdf7-4614-9c3f-9e505ceaf416

📥 Commits

Reviewing files that changed from the base of the PR and between e1b55f1 and d075c12.

📒 Files selected for processing (9)
  • apps/yerd-gui/src-tauri/build.rs
  • apps/yerd-gui/src-tauri/src/commands.rs
  • apps/yerd-gui/src-tauri/src/ide.rs
  • apps/yerd-gui/src-tauri/src/tray.rs
  • apps/yerd-gui/src-tauri/src/tray_health.rs
  • apps/yerd-gui/src-tauri/src/tray_panel.rs
  • apps/yerd-gui/src/lib/serviceActions.ts
  • apps/yerd-gui/src/lib/traySiteAutocomplete.ts
  • apps/yerd-gui/src/views/TrayPanelView.vue
🚧 Files skipped from review as they are similar to previous changes (8)
  • apps/yerd-gui/src/lib/serviceActions.ts
  • apps/yerd-gui/src/views/TrayPanelView.vue
  • apps/yerd-gui/src-tauri/src/ide.rs
  • apps/yerd-gui/src/lib/traySiteAutocomplete.ts
  • apps/yerd-gui/src-tauri/src/commands.rs
  • apps/yerd-gui/src-tauri/src/tray_health.rs
  • apps/yerd-gui/src-tauri/src/tray_panel.rs
  • apps/yerd-gui/src-tauri/src/tray.rs

📝 Walkthrough

Walkthrough

The GUI adds a hybrid tray experience with a dedicated Vue panel, health-aware native tray menus and icons, persisted site and IDE preferences, OS-specific terminal/IDE launching, service controls, autocomplete, alerts, and updated window lifecycle handling.

Changes

Hybrid tray GUI

Layer / File(s) Summary
Host preferences and OS launch flows
apps/yerd-gui/src-tauri/build.rs, apps/yerd-gui/src-tauri/src/{autostart,commands,ide}.rs, apps/yerd-gui/src/ipc/*, apps/yerd-gui/src/views/GeneralView.vue
Build-time macOS tray rasterization, persisted tray and IDE preferences, IDE discovery, terminal launching, and corresponding IPC and settings UI are added.
Native tray health and actions
apps/yerd-gui/src-tauri/src/{tray,tray_health}.rs
Native tray state now derives service health, renders health-colored icon dots, builds hybrid menus, and dispatches site, log, daemon, PHP, and service actions.
Tray panel window and positioning
apps/yerd-gui/src-tauri/{capabilities,tauri.conf.json}, apps/yerd-gui/src-tauri/src/{main,tray_panel}.rs, apps/yerd-gui/src/{App.vue,router.ts}
A dedicated tray-panel window is configured and wired with visibility, focus, fallback, anchor positioning, and auxiliary-window lifecycle behavior.
Frontend tray features
apps/yerd-gui/src/views/TrayPanelView.vue, apps/yerd-gui/src/lib/{trayHealth,traySiteAutocomplete}.*
The tray panel adds visibility-aware polling, site autocomplete, favorites and recents, health alerts, service controls, activity items, keyboard navigation, and confirmation dialogs.
Shared service rules and GUI documentation
apps/yerd-gui/src/lib/serviceActions.*, apps/yerd-gui/src/views/{AboutView,ServicesView}.vue, docs/developer/gui.md
Service eligibility predicates are centralized and tested, service views use the shared predicates, log opening responds to tray events, and documentation describes the four-window hybrid tray architecture.

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant NativeTray
  participant TrayPanel
  participant TauriBridge
  participant Daemon
  User->>NativeTray: Left-click tray icon
  NativeTray->>TrayPanel: Toggle and focus tray-panel window
  TrayPanel->>TauriBridge: Request status, sites, preferences, and mail
  TauriBridge->>Daemon: Fetch GUI data
  Daemon-->>TauriBridge: Return status and content
  TauriBridge-->>TrayPanel: Update panel state
  User->>TrayPanel: Open site or control service
  TrayPanel->>TauriBridge: Invoke terminal, IDE, or service command
Loading

Possibly related PRs

  • forjedio/yerd#13: Both changes extend auxiliary-window detection and lifecycle handling in App.vue.
  • forjedio/yerd#43: Both changes modify macOS main-window reveal behavior in main.rs.
  • forjedio/yerd#96: Both changes modify the macOS/Linux tray icon rendering pipeline.

Suggested reviewers: richardanderson

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: a hybrid tray panel with site actions and service controls.
Description check ✅ Passed The description matches the template and includes the required sections, with substantial implementation, testing, and platform details.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (2)
apps/yerd-gui/src-tauri/src/tray_panel.rs (1)

206-207: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Add a short doc line to public API items.

These Tauri commands are exported as public API items but lack documentation. As per coding guidelines, public API items must have a short doc line.

  • apps/yerd-gui/src-tauri/src/tray_panel.rs#L206-L207: document toggle_tray_panel_cmd.
  • apps/yerd-gui/src-tauri/src/tray_panel.rs#L211-L212: document hide_tray_panel_cmd.
  • apps/yerd-gui/src-tauri/src/tray_panel.rs#L216-L217: document tray_fallback_active.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/yerd-gui/src-tauri/src/tray_panel.rs` around lines 206 - 207, Add
concise Rust doc comments for the public Tauri APIs toggle_tray_panel_cmd,
hide_tray_panel_cmd, and tray_fallback_active in
apps/yerd-gui/src-tauri/src/tray_panel.rs at lines 206-207, 211-212, and 216-217
respectively, with each comment briefly describing the item's behavior.

Source: Coding guidelines

apps/yerd-gui/src-tauri/src/tray.rs (1)

322-322: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Comment-style guideline violations (em dashes and inline function-body comments). As per coding guidelines: "Do not add inline comments inside function bodies... except for // SAFETY: justifications and short protocol byte labels" and "Do not use em dashes in comments; use a hyphen, comma, or colon instead."

  • apps/yerd-gui/src-tauri/src/tray.rs#L322: inline comment inside apply body and uses an em dash — remove/hoist the comment and replace .
  • apps/yerd-gui/src-tauri/src/tray.rs#L354-L355: inline comment inside tray_icon body and uses an em dash — remove/hoist and replace .
  • apps/yerd-gui/src-tauri/src/tray.rs#L208: inline comment inside build_tray body — remove or hoist to the item doc.
  • apps/yerd-gui/src-tauri/src/tray.rs#L178-L179: em dash in the doc comment — replace with a comma/hyphen.
  • apps/yerd-gui/src-tauri/src/tray.rs#L430: em dash in the doc comment — replace with a hyphen.
  • apps/yerd-gui/src-tauri/src/ide.rs#L190-L191: inline comment inside open_path_in_ide body and uses an em dash — remove and replace .
  • apps/yerd-gui/src-tauri/src/ide.rs#L206: inline comment inside open_with_id body — remove or hoist.
  • apps/yerd-gui/src-tauri/src/ide.rs#L232: inline comment inside open_with_id body — remove or hoist.
  • apps/yerd-gui/src-tauri/src/tray_health.rs#L143: em dash in the doc comment — replace with a hyphen.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/yerd-gui/src-tauri/src/tray.rs` at line 322, Remove or hoist inline body
comments from build_tray, apply, tray_icon, open_path_in_ide, and open_with_id,
preserving only permitted SAFETY or protocol-label comments. Replace all em
dashes in apps/yerd-gui/src-tauri/src/tray.rs lines 178-179, 322, 354-355, and
430, apps/yerd-gui/src-tauri/src/ide.rs lines 190-191, and
apps/yerd-gui/src-tauri/src/tray_health.rs line 143 with approved punctuation;
the comments at tray.rs:208 and ide.rs:206,232 require removal or hoisting only.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/yerd-gui/src-tauri/build.rs`:
- Around line 1-6: Remove the crate-level allow attribute and update main plus
render_tray_mac_icon to return Result<(), Box<dyn std::error::Error>>. Refactor
render_tray_mac_icon to propagate environment, file, SVG parsing, pixmap
allocation, and PNG-writing failures with ?, replacing unwrap_or_else/expect
usage while preserving tray icon generation. Have main propagate both
render_tray_mac_icon and tauri_build::build errors without panicking.

In `@apps/yerd-gui/src-tauri/src/commands.rs`:
- Around line 1207-1218: Update the xterm branch in the candidate command-launch
loop to invoke an explicit shell with `-c`, rather than passing the `cd ... &&
exec $SHELL` string directly to xterm. Quote or otherwise safely encode `dir_s`
so paths containing spaces or shell metacharacters work correctly, while
preserving the existing non-xterm argument handling and fallback behavior.
- Around line 1167-1193: Update open_terminal_impl’s macOS AppleScript
construction to escape directory content before interpolating it into the
AppleScript string literal, handling backslashes and double quotes safely.
Preserve the existing quoted form of shell fragment and terminal-opening
behavior while preventing paths from breaking out of the AppleScript string.

In `@apps/yerd-gui/src/lib/traySiteAutocomplete.ts`:
- Line 70: Remove the inline explanatory comments inside
buildTraySiteSuggestions and siteMatches. Move their guidance into the
respective function doc comments if useful, or remove it when the code is
sufficiently clear; make no other behavioral changes.

In `@apps/yerd-gui/src/views/TrayPanelView.vue`:
- Line 5: Replace the em dash in the comment near
apps/yerd-gui/src/views/TrayPanelView.vue line 5 with a hyphen, comma, or colon.
Apply the same comment-only punctuation change near
apps/yerd-gui/src/lib/serviceActions.ts line 12, preserving the existing
meaning.

---

Nitpick comments:
In `@apps/yerd-gui/src-tauri/src/tray_panel.rs`:
- Around line 206-207: Add concise Rust doc comments for the public Tauri APIs
toggle_tray_panel_cmd, hide_tray_panel_cmd, and tray_fallback_active in
apps/yerd-gui/src-tauri/src/tray_panel.rs at lines 206-207, 211-212, and 216-217
respectively, with each comment briefly describing the item's behavior.

In `@apps/yerd-gui/src-tauri/src/tray.rs`:
- Line 322: Remove or hoist inline body comments from build_tray, apply,
tray_icon, open_path_in_ide, and open_with_id, preserving only permitted SAFETY
or protocol-label comments. Replace all em dashes in
apps/yerd-gui/src-tauri/src/tray.rs lines 178-179, 322, 354-355, and 430,
apps/yerd-gui/src-tauri/src/ide.rs lines 190-191, and
apps/yerd-gui/src-tauri/src/tray_health.rs line 143 with approved punctuation;
the comments at tray.rs:208 and ide.rs:206,232 require removal or hoisting only.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: cc953249-84e9-4d88-8287-1a6786168285

📥 Commits

Reviewing files that changed from the base of the PR and between 5ef1e44 and e9fb98b.

⛔ Files ignored due to path filters (4)
  • Cargo.lock is excluded by !**/*.lock
  • apps/yerd-gui/src-tauri/icons/menu/stethoscope.png is excluded by !**/*.png
  • apps/yerd-gui/src-tauri/icons/tray-mac.png is excluded by !**/*.png
  • apps/yerd-gui/src-tauri/icons/tray-mac.svg is excluded by !**/*.svg
📒 Files selected for processing (26)
  • apps/yerd-gui/src-tauri/Cargo.toml
  • apps/yerd-gui/src-tauri/build.rs
  • apps/yerd-gui/src-tauri/capabilities/default.json
  • apps/yerd-gui/src-tauri/src/autostart.rs
  • apps/yerd-gui/src-tauri/src/commands.rs
  • apps/yerd-gui/src-tauri/src/ide.rs
  • apps/yerd-gui/src-tauri/src/main.rs
  • apps/yerd-gui/src-tauri/src/tray.rs
  • apps/yerd-gui/src-tauri/src/tray_health.rs
  • apps/yerd-gui/src-tauri/src/tray_panel.rs
  • apps/yerd-gui/src-tauri/tauri.conf.json
  • apps/yerd-gui/src/App.vue
  • apps/yerd-gui/src/ipc/client.ts
  • apps/yerd-gui/src/ipc/types.ts
  • apps/yerd-gui/src/lib/serviceActions.test.ts
  • apps/yerd-gui/src/lib/serviceActions.ts
  • apps/yerd-gui/src/lib/trayHealth.test.ts
  • apps/yerd-gui/src/lib/trayHealth.ts
  • apps/yerd-gui/src/lib/traySiteAutocomplete.test.ts
  • apps/yerd-gui/src/lib/traySiteAutocomplete.ts
  • apps/yerd-gui/src/router.ts
  • apps/yerd-gui/src/views/AboutView.vue
  • apps/yerd-gui/src/views/GeneralView.vue
  • apps/yerd-gui/src/views/ServicesView.vue
  • apps/yerd-gui/src/views/TrayPanelView.vue
  • docs/developer/gui.md

Comment thread apps/yerd-gui/src-tauri/build.rs
Comment thread apps/yerd-gui/src-tauri/src/commands.rs
Comment thread apps/yerd-gui/src-tauri/src/commands.rs
Comment thread apps/yerd-gui/src/lib/traySiteAutocomplete.ts Outdated
/**
* Frameless tray popup: site autocomplete + per-site actions + service controls.
* Standalone window (label `tray-panel`); owns its own lightweight poll (4s,
* paused while hidden — same discipline as `usePoll`).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Em dashes in comments (repeated). Shared root cause: comments use where the guideline requires a hyphen, comma, or colon.

  • apps/yerd-gui/src/views/TrayPanelView.vue#L5-L5: replace the em dash in "paused while hidden — same discipline" with a hyphen/comma/colon.
  • apps/yerd-gui/src/lib/serviceActions.ts#L12-L12: replace the em dash in "per-site instance — matches ServicesView" with a hyphen/comma/colon.

As per coding guidelines: "Do not use em dashes in comments; use a hyphen, comma, or colon instead."

📍 Affects 2 files
  • apps/yerd-gui/src/views/TrayPanelView.vue#L5-L5 (this comment)
  • apps/yerd-gui/src/lib/serviceActions.ts#L12-L12
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/yerd-gui/src/views/TrayPanelView.vue` at line 5, Replace the em dash in
the comment near apps/yerd-gui/src/views/TrayPanelView.vue line 5 with a hyphen,
comma, or colon. Apply the same comment-only punctuation change near
apps/yerd-gui/src/lib/serviceActions.ts line 12, preserving the existing
meaning.

Source: Coding guidelines

jmsobe added 2 commits July 20, 2026 12:56
Tray panel and native Services block now list Postgres, Redis, and other
installed managed services alongside running PHP pools.
Fix Linux clippy errors in open_terminal_impl, escape paths for macOS
AppleScript and xterm shell launch, refactor build.rs to propagate errors,
and apply comment/style cleanups from review.
@RichardAnderson

Copy link
Copy Markdown
Contributor

Great feature!

I'm going to leave this active for awhile, while I get Windows support plumbed up, and we can reevaluate this on Linux, Mac and Windows then - the key aim is to ensure feature parity between the versions, my concern is that when I tried this approach before, getting it "right" on Linux was a royal pain the backside - so this will need extensive testing across a lot of different distros.

I also found this approach on Wayland based setups rendered the "dropdown" as a full tile, instead of a location-ed dropdown, so we'd need to consider this downside as well unless we can solve it (I was not able to before, but did not spend long on it before reverting to the more standard dropdown).

@jmsobe

jmsobe commented Jul 20, 2026

Copy link
Copy Markdown
Contributor Author

Understood, using it right now on my local build. It's saving me a boatload of time, esp. the favorites item. When I am working on a few applications at once I can easily jump around between projects. Really appreciative of this application BTW. Great work on getting this launched.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants