Skip to content

feat(app): system tray adapter with Open / Quit menu (#1422)#1425

Merged
shm11C3 merged 1 commit into
developfrom
feat/1422-tray-adapter
Apr 30, 2026
Merged

feat(app): system tray adapter with Open / Quit menu (#1422)#1425
shm11C3 merged 1 commit into
developfrom
feat/1422-tray-adapter

Conversation

@shm11C3

@shm11C3 shm11C3 commented Apr 30, 2026

Copy link
Copy Markdown
Owner

Closes #1422. Part of #1275 (umbrella).

Summary

Add a minimal adapters::tray::TrayAdapter with Open / Quit menu items and a left-click that restores the main window. Calls lifecycle::request_quit (shipped in #1420 as Phase 5 of #1402) to drive the lifecycle state machine to Stopped on quit.

The tray is registered unconditionally on app startup. The visibility policy — always-on vs gated by a persisted setting — is owned by sibling issue #1423 and lives outside this adapter.

Background

This implementation reuses the work originally drafted as Phase 6 (#1409) of the Core/App split Epic (#1402). The Epic's acceptance criteria require no user-visible regression, so the tray (a user-visible UX surface) was rescoped out of #1402 into the standalone feature issue #1422 under the #1275 umbrella. The implementation kept here drops the HARDVIZ_CLOSE_TO_BACKGROUND env-var gate that the Phase 6 draft used to stay invisible — visibility is no longer this issue's concern.

The original Phase 6 PR #1421 was closed without merging; this PR replaces it.

Scope

  • src-tauri/src/adapters/tray.rsTrayAdapter::setup(app) builds a two-item menu, attaches it to TrayIconBuilder, wires on_menu_event and on_tray_icon_event. The handle is held in the adapter so dropping the value removes the icon.
  • src-tauri/src/workers/mod.rsWorkersState gains a tray: Mutex<Option<TrayAdapter>> slot keeping the icon alive for the process lifetime.
  • src-tauri/src/lib.rs — registers the tray inside setup. On failure (typically a Linux desktop without an indicator implementation) we log and continue without a tray; the close-to-tray fallback that prevents users from being stranded ships with feat: close-to-tray setting + first-run dialog #1423.
  • src-tauri/Cargo.toml — enable the tray-icon feature on tauri = "2.10.3".

Platform notes

  • Windows / macOS: left-click restores; right-click opens the menu. show_menu_on_left_click(false) overrides the macOS default of popping the menu on left-click so the click event reaches our handler.
  • Linux: tray support depends on the desktop environment. AppIndicator-based environments (GNOME with the AppIndicator extension, KDE) typically forward all clicks to the menu and never raise a raw click event, so the left-click-restores path may be silently inactive — Open through the menu still works. Environments without an indicator implementation may fail to register the tray at all; the setup error is logged and the app continues without a tray rather than aborting.

Out of scope (per #1422)

Test plan

  • cargo tauri-fmt -- --check
  • cargo tauri-lint
  • cargo test --workspace --lib --bins -- --test-threads=1 (hwviz-core 153 + hardware_visualizer 140)
  • npm run lint
  • npm run test
  • Manual macOS: tray appears on launch; right-click shows Open / Quit; left-click restores the window after window.hide(); Quit flushes the archive (final summary written) and exits.
  • Manual Windows: same as macOS plus left-click + right-click distinction works.
  • Manual Linux (KDE / GNOME w/ AppIndicator): tray appears; menu items work; left-click-restore behavior documented as "may be inactive depending on indicator backend".

Summary by CodeRabbit

Release Notes

  • New Features
    • Added system tray support with a menu containing Open and Quit options.
    • Left-clicking the tray icon restores and focuses the main application window.
    • System tray provides an alternative interface for app interaction and shutdown.

Closes #1422.

Add `src-tauri/src/adapters/tray.rs` so users have a way back to the
main window once the close-to-tray setting (#1423) ships. This issue
delivers the bare entry-point — `Open` and `Quit` menu items plus a
left-click that restores the main window — and stays policy-free:
the tray is registered unconditionally on startup, and any decision
about *when* it should be visible is owned by #1423.

Layout
- `src-tauri/src/adapters/tray.rs` — `TrayAdapter::setup(app)` builds
  a two-item `tauri::menu::Menu`, attaches it to `TrayIconBuilder`,
  and wires `on_menu_event` / `on_tray_icon_event`. The handle is
  held in the adapter so dropping the value removes the icon.
- `src-tauri/src/workers/mod.rs` — `WorkersState` gains a
  `tray: Mutex<Option<TrayAdapter>>` slot keeping the icon alive for
  the process lifetime.
- `src-tauri/src/lib.rs` — registers the tray inside `setup`. On
  failure (typically a Linux desktop without an indicator
  implementation) we log and continue without a tray; the
  close-to-tray fallback that prevents users from being stranded
  ships with #1423.
- `src-tauri/Cargo.toml` — enable the `tray-icon` feature on
  `tauri = "2.10.3"`.

Background
This is the work originally drafted as Phase 6 (#1409) of the
Core/App split Epic (#1402). The Epic's acceptance criteria require
no user-visible regression, so the tray (a user-visible UX surface)
was rescoped out into a standalone feature issue under the #1275
umbrella. The implementation kept here drops the
`HARDVIZ_CLOSE_TO_BACKGROUND` env-var gate that the Phase 6 draft
used to stay invisible — visibility is no longer this issue's
concern.

Platform notes
- Windows / macOS: left-click restores; right-click opens the menu.
  `show_menu_on_left_click(false)` overrides the macOS default of
  popping the menu on left-click so the click event reaches our
  handler.
- Linux: tray support depends on the desktop environment.
  AppIndicator-based environments (GNOME with the AppIndicator
  extension, KDE) typically forward all clicks to the menu and
  never raise a raw click event, so the left-click-restores path
  may be silently inactive — `Open` through the menu still works.
  Environments without an indicator implementation may fail to
  register the tray at all; the setup error is logged and the app
  continues without a tray rather than aborting.

Out of scope (per #1422)
- Live metric values in the tray (#1401).
- Pause / Resume entries (#1424).
- Visibility policy / persisted close-to-tray setting (#1423).
- Custom icons / theming.
Copilot AI review requested due to automatic review settings April 30, 2026 04:21
@coderabbitai

coderabbitai Bot commented Apr 30, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This pull request introduces a system tray adapter for the Tauri application. It enables the tray-icon capability, creates a new adapters::tray module with a TrayAdapter struct, registers it during app startup with graceful error handling, and persists it in shared state for the app's lifetime. The tray provides Open and Quit menu items, plus left-click restoration of the main window.

Changes

Cohort / File(s) Summary
Dependency Configuration
src-tauri/Cargo.toml
Enabled Tauri tray-icon capability in the crate's feature set to support system tray functionality.
Tray Adapter Module
src-tauri/src/adapters/tray.rs, src-tauri/src/adapters/mod.rs
New TrayAdapter with menu (Open, Quit) and left-click restore handlers for the main window; open restores the window with warnings on failure, quit triggers lifecycle shutdown; module exported from adapters namespace.
App Startup Integration
src-tauri/src/lib.rs
Unconditional tray adapter setup during app initialization; errors are logged as warnings and do not block further startup, ensuring graceful fallback if tray is unavailable.
Shared State Persistence
src-tauri/src/workers/mod.rs
Added tray: Mutex<Option<TrayAdapter>> field to WorkersState to retain the adapter handle for the process lifetime instead of being dropped after setup.

Sequence Diagram

sequenceDiagram
    participant App as App Startup
    participant TraySetup as TrayAdapter::setup
    participant OS as OS Tray System
    participant State as WorkersState
    participant MenuHandler as Menu Event Handler
    participant Window as Main Window
    participant Lifecycle as lifecycle::request_quit

    App->>TraySetup: initialize tray on startup
    TraySetup->>OS: register tray icon with menu (Open, Quit)
    OS-->>TraySetup: tray registered
    TraySetup->>MenuHandler: wire Open handler
    TraySetup->>MenuHandler: wire Quit handler
    TraySetup->>OS: set left-click to restore window
    TraySetup-->>App: TrayAdapter instance
    App->>State: store TrayAdapter in Mutex<Option>

    par User Interaction
        OS->>MenuHandler: user clicks "Open" menu item
        MenuHandler->>Window: restore main window (show, unminimize, focus)
    and
        OS->>MenuHandler: user clicks "Quit" menu item
        MenuHandler->>Lifecycle: request_quit() async task
        Lifecycle-->>App: shutdown signal
    and
        OS->>MenuHandler: user left-clicks tray icon
        MenuHandler->>Window: restore main window
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related issues

Poem

🐰 A tray icon, oh what delight!
No more hidden windows out of sight.
Click to restore, quit to say goodbye,
This rabbit's menu helps the app fly high! 🍃

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately and concisely summarizes the main change: adding a system tray adapter with Open/Quit menu functionality, which is the primary focus of this PR.
Description check ✅ Passed The description comprehensively covers objectives, scope, implementation details, platform notes, and test status, though formal checklist items and manual testing completion are not fully marked.
Linked Issues check ✅ Passed The PR implementation meets all coding-related requirements from #1422: tray adapter with Open/Quit menu, left-click restore, platform support, graceful fallback, and lifecycle integration via request_quit from #1420.
Out of Scope Changes check ✅ Passed All code changes directly support the tray adapter feature and stay within scope; no unrelated modifications to other system components or out-of-scope features are present.
Docstring Coverage ✅ Passed Docstring coverage is 83.33% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/1422-tray-adapter

Review rate limit: 4/5 reviews remaining, refill in 12 minutes.

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

@github-actions github-actions Bot added rust Pull requests that update Rust code configuration feature labels Apr 30, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds an App-side Tauri system tray adapter to support background-mode UX under the #1275 umbrella, providing a minimal entry point to restore the window and to quit cleanly via the Phase 5 lifecycle state machine.

Changes:

  • Introduces adapters::tray::TrayAdapter with Open / Quit menu items and left-click restore behavior.
  • Keeps the tray icon alive for the process lifetime by storing it in WorkersState.
  • Registers the tray during Tauri setup, logging and continuing if tray registration fails (notably on some Linux environments).

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated no comments.

Show a summary per file
File Description
src-tauri/src/adapters/tray.rs New tray adapter wiring menu + click handlers to restore window and request quit.
src-tauri/src/adapters/mod.rs Exposes the new tray adapter module.
src-tauri/src/workers/mod.rs Persists the tray handle in app state so the icon isn’t dropped after setup.
src-tauri/src/lib.rs Registers the tray at startup and logs non-fatal setup failures.
src-tauri/Cargo.toml Enables Tauri’s tray-icon feature to compile tray support.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
src-tauri/src/adapters/tray.rs (1)

80-106: ⚡ Quick win

Extract event-routing helpers and add inline tests for them.

handle_menu_event and click filtering are good candidates for pure helper extraction so they can be unit-tested without UI plumbing (e.g., menu-id → action, click-event → restore decision).

As per coding guidelines: "Place tests in inline #[cfg(test)] mod tests { ... } at the bottom of each Rust file. Prefer testing pure functions and extract platform-dependent logic into pure helpers where practical."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src-tauri/src/adapters/tray.rs` around lines 80 - 106, Extract pure helpers
so menu routing and click filtering can be unit-tested: create a small pure
function (e.g., route_menu_action(id: &str) -> MenuAction enum or Result) that
maps MENU_OPEN_ID -> Open, MENU_QUIT_ID -> Quit, others -> Unhandled, then
refactor handle_menu_event to call route_menu_action and dispatch to
restore_main_window or spawn_quit based on the returned action; similarly add
is_restore_click(event: &TrayIconEvent) -> bool that returns true only when
event matches TrayIconEvent::Click with MouseButton::Left and
MouseButtonState::Up and use it inside handle_tray_event to decide calling
restore_main_window; finally add #[cfg(test)] mod tests at the bottom of the
file with unit tests for route_menu_action (cover open, quit, unknown) and
is_restore_click (cover matching click and non-matching variants).
src-tauri/src/workers/mod.rs (1)

13-17: ⚡ Quick win

Drop tray state in terminate_all to keep teardown complete.

Now that tray lifetime is owned by WorkersState, it should also be explicitly released during shutdown alongside other workers.

Suggested diff
   let monitor = self.monitor.lock().unwrap().take();
   let window_adapter = self.window_adapter.lock().unwrap().take();
   let hw_archive = self.hw_archive.lock().unwrap().take();
+  let _tray = self.tray.lock().unwrap().take();
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src-tauri/src/workers/mod.rs` around lines 13 - 17, WorkersState currently
owns the tray (pub tray: Mutex<Option<TrayAdapter>>) but terminate_all doesn't
drop it, so modify the terminate_all method to explicitly release the tray by
locking WorkersState::tray, calling take() (or replace with None) to drop the
TrayAdapter and thus remove the OS icon, and handle/ignore PoisonError as
appropriate; do this alongside other worker shutdown steps in terminate_all so
teardown is complete.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@src-tauri/src/adapters/tray.rs`:
- Around line 80-106: Extract pure helpers so menu routing and click filtering
can be unit-tested: create a small pure function (e.g., route_menu_action(id:
&str) -> MenuAction enum or Result) that maps MENU_OPEN_ID -> Open, MENU_QUIT_ID
-> Quit, others -> Unhandled, then refactor handle_menu_event to call
route_menu_action and dispatch to restore_main_window or spawn_quit based on the
returned action; similarly add is_restore_click(event: &TrayIconEvent) -> bool
that returns true only when event matches TrayIconEvent::Click with
MouseButton::Left and MouseButtonState::Up and use it inside handle_tray_event
to decide calling restore_main_window; finally add #[cfg(test)] mod tests at the
bottom of the file with unit tests for route_menu_action (cover open, quit,
unknown) and is_restore_click (cover matching click and non-matching variants).

In `@src-tauri/src/workers/mod.rs`:
- Around line 13-17: WorkersState currently owns the tray (pub tray:
Mutex<Option<TrayAdapter>>) but terminate_all doesn't drop it, so modify the
terminate_all method to explicitly release the tray by locking
WorkersState::tray, calling take() (or replace with None) to drop the
TrayAdapter and thus remove the OS icon, and handle/ignore PoisonError as
appropriate; do this alongside other worker shutdown steps in terminate_all so
teardown is complete.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: 22388d69-e913-40a4-beb1-47e0635e6dfc

📥 Commits

Reviewing files that changed from the base of the PR and between 70cc71e and 63c8c32.

📒 Files selected for processing (5)
  • src-tauri/Cargo.toml
  • src-tauri/src/adapters/mod.rs
  • src-tauri/src/adapters/tray.rs
  • src-tauri/src/lib.rs
  • src-tauri/src/workers/mod.rs

@shm11C3 shm11C3 enabled auto-merge (squash) April 30, 2026 04:25
@github-actions

Copy link
Copy Markdown
Contributor

Rust Backend Coverage Report

Coverage Details
Filename                                                   Regions    Missed Regions     Cover   Functions  Missed Functions  Executed       Lines      Missed Lines     Cover    Branches   Missed Branches     Cover
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
core/src/collector/history.rs                                  710               154    78.31%          47                15    68.09%         373                89    76.14%           0                 0         -
core/src/collector/sampling.rs                                 445               178    60.00%          45                20    55.56%         283               117    58.66%           0                 0         -
core/src/collector/system_monitor.rs                            72                72     0.00%           4                 4     0.00%          39                39     0.00%           0                 0         -
core/src/enums/hardware.rs                                      14                14     0.00%           2                 2     0.00%          12                12     0.00%           0                 0         -
core/src/event_bus.rs                                          167                 3    98.20%          19                 1    94.74%         108                 3    97.22%           0                 0         -
core/src/infrastructure/database/db.rs                          28                28     0.00%           4                 4     0.00%          22                22     0.00%           0                 0         -
core/src/infrastructure/database/gpu_archive.rs                 51                51     0.00%           4                 4     0.00%          18                18     0.00%           0                 0         -
core/src/infrastructure/database/hardware_archive.rs            41                41     0.00%           4                 4     0.00%          18                18     0.00%           0                 0         -
core/src/infrastructure/database/process_stats.rs               41                41     0.00%           4                 4     0.00%          27                27     0.00%           0                 0         -
core/src/infrastructure/providers/linux/dmidecode.rs           229                15    93.45%          16                 3    81.25%         319                14    95.61%           0                 0         -
core/src/infrastructure/providers/linux/drm_sys.rs             205               156    23.90%          21                14    33.33%         126                93    26.19%           0                 0         -
core/src/infrastructure/providers/linux/hwmon.rs               119                94    21.01%           8                 6    25.00%          68                56    17.65%           0                 0         -
core/src/infrastructure/providers/linux/kernel.rs              165                22    86.67%          19                 2    89.47%         161                 8    95.03%           0                 0         -
core/src/infrastructure/providers/linux/lspci.rs                83                20    75.90%           8                 2    75.00%          50                11    78.00%           0                 0         -
core/src/infrastructure/providers/linux/net_sys.rs             171               171     0.00%          13                13     0.00%          93                93     0.00%           0                 0         -
core/src/infrastructure/providers/linux/procfs.rs              261                24    90.80%          25                 3    88.00%         222                19    91.44%           0                 0         -
core/src/infrastructure/providers/sysinfo_provider.rs           54                54     0.00%           2                 2     0.00%          45                45     0.00%           0                 0         -
core/src/monitoring/state.rs                                   230                 0   100.00%          28                 0   100.00%         155                 0   100.00%           0                 0         -
core/src/persistence/archive.rs                                897               151    83.17%          61                 8    86.89%         581                89    84.68%           0                 0         -
core/src/persistence/preflight.rs                              297                 5    98.32%          27                 0   100.00%         190                 6    96.84%           0                 0         -
core/src/platform/factory.rs                                    18                18     0.00%           4                 4     0.00%          15                15     0.00%           0                 0         -
core/src/platform/linux/cache.rs                                53                53     0.00%           4                 4     0.00%          38                38     0.00%           0                 0         -
core/src/platform/linux/gpu.rs                                 137               137     0.00%          14                14     0.00%          98                98     0.00%           0                 0         -
core/src/platform/linux/memory.rs                               43                43     0.00%           6                 6     0.00%          41                41     0.00%           0                 0         -
core/src/platform/linux/mod.rs                                  33                33     0.00%          11                11     0.00%          69                69     0.00%           0                 0         -
core/src/platform/linux/network.rs                               4                 4     0.00%           1                 1     0.00%           4                 4     0.00%           0                 0         -
core/src/settings/hardware_archive.rs                           36                 0   100.00%           4                 0   100.00%          26                 0   100.00%           0                 0         -
core/src/settings/mod.rs                                       328                37    88.72%          26                 8    69.23%         168                19    88.69%           0                 0         -
core/src/utils/formatter.rs                                    195                 8    95.90%          16                 0   100.00%         160                12    92.50%           0                 0         -
core/src/utils/ip.rs                                            65                 0   100.00%           5                 0   100.00%          33                 0   100.00%           0                 0         -
core/src/utils/rounding.rs                                      68                 0   100.00%           7                 0   100.00%          41                 0   100.00%           0                 0         -
src-tauri/src/_tests/commands/background_image_test.rs          39                 0   100.00%           6                 0   100.00%          21                 0   100.00%           0                 0         -
src-tauri/src/_tests/commands/settings_test.rs                 219                 0   100.00%          18                 0   100.00%         162                 0   100.00%           0                 0         -
src-tauri/src/adapters/tray.rs                                  91                91     0.00%           7                 7     0.00%          60                60     0.00%           0                 0         -
src-tauri/src/adapters/window.rs                               254                69    72.83%          21                 8    61.90%         195                47    75.90%           0                 0         -
src-tauri/src/app/startup.rs                                   188                87    53.72%          10                 3    70.00%         114                58    49.12%           0                 0         -
src-tauri/src/commands/background_image.rs                      22                 7    68.18%          11                 5    54.55%          19                 7    63.16%           0                 0         -
src-tauri/src/commands/hardware.rs                              62                62     0.00%          20                20     0.00%          68                68     0.00%           0                 0         -
src-tauri/src/commands/settings.rs                             578               578     0.00%         102               102     0.00%         497               497     0.00%           0                 0         -
src-tauri/src/commands/system.rs                                12                12     0.00%           6                 6     0.00%          10                10     0.00%           0                 0         -
src-tauri/src/commands/ui.rs                                    17                17     0.00%           2                 2     0.00%          13                13     0.00%           0                 0         -
src-tauri/src/commands/updater.rs                               97                97     0.00%          15                15     0.00%          66                66     0.00%           0                 0         -
src-tauri/src/enums/error.rs                                   115                10    91.30%           9                 1    88.89%          99                10    89.90%           0                 0         -
src-tauri/src/enums/hardware.rs                                194                 7    96.39%          16                 1    93.75%         120                 6    95.00%           0                 0         -
src-tauri/src/enums/settings.rs                                425                16    96.24%          26                 2    92.31%         289                10    96.54%           0                 0         -
src-tauri/src/infrastructure/database/migration.rs              66                 1    98.48%          10                 0   100.00%          86                 0   100.00%           0                 0         -
src-tauri/src/lib.rs                                           200               200     0.00%           5                 5     0.00%         119               119     0.00%           0                 0         -
src-tauri/src/lifecycle.rs                                      94                45    52.13%          11                 7    36.36%          57                34    40.35%           0                 0         -
src-tauri/src/main.rs                                            3                 3     0.00%           1                 1     0.00%           3                 3     0.00%           0                 0         -
src-tauri/src/models/hardware.rs                               375                83    77.87%          31                12    61.29%         275               100    63.64%           0                 0         -
src-tauri/src/models/hardware_archive.rs                         8                 0   100.00%           2                 0   100.00%          10                 0   100.00%           0                 0         -
src-tauri/src/models/settings.rs                               283                 0   100.00%          16                 0   100.00%         246                 0   100.00%           0                 0         -
src-tauri/src/services/background_image_service.rs             165                96    41.82%          16                10    37.50%          93                59    36.56%           0                 0         -
src-tauri/src/services/gpu_service.rs                           56                56     0.00%          11                11     0.00%          43                43     0.00%           0                 0         -
src-tauri/src/services/hardware_service.rs                      85                85     0.00%           4                 4     0.00%          51                51     0.00%           0                 0         -
src-tauri/src/services/language_service.rs                     101                 0   100.00%          18                 0   100.00%          57                 0   100.00%           0                 0         -
src-tauri/src/services/memory_service.rs                        12                12     0.00%           3                 3     0.00%           7                 7     0.00%           0                 0         -
src-tauri/src/services/motherboard_service.rs                   12                12     0.00%           3                 3     0.00%           7                 7     0.00%           0                 0         -
src-tauri/src/services/network_service.rs                       14                14     0.00%           1                 1     0.00%           8                 8     0.00%           0                 0         -
src-tauri/src/services/settings_service.rs                     321               143    55.45%          31                13    58.06%         269               130    51.67%           0                 0         -
src-tauri/src/services/system_service.rs                        22                22     0.00%           2                 2     0.00%          12                12     0.00%           0                 0         -
src-tauri/src/services/ui_service.rs                            45                45     0.00%           8                 8     0.00%          36                36     0.00%           0                 0         -
src-tauri/src/utils/color.rs                                    66                 1    98.48%           4                 0   100.00%          26                 0   100.00%           0                 0         -
src-tauri/src/utils/file.rs                                    224                 5    97.77%          14                 0   100.00%         144                 4    97.22%           0                 0         -
src-tauri/src/utils/formatter.rs                                55                 0   100.00%           5                 0   100.00%          39                 0   100.00%           0                 0         -
src-tauri/src/utils/logger.rs                                   71                71     0.00%           1                 1     0.00%          38                38     0.00%           0                 0         -
src-tauri/src/utils/tauri.rs                                   138                 0   100.00%          17                 0   100.00%          82                 0   100.00%           0                 0         -
src-tauri/src/workers/mod.rs                                    32                32     0.00%           2                 2     0.00%          20                20     0.00%           0                 0         -
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TOTAL                                                        10021              3606    64.02%         944               414    56.14%        7064              2598    63.22%           0                 0         -

@shm11C3 shm11C3 merged commit 9336963 into develop Apr 30, 2026
31 checks passed
@shm11C3 shm11C3 deleted the feat/1422-tray-adapter branch April 30, 2026 04:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

configuration feature rust Pull requests that update Rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(app): system tray adapter — Open / Quit menu skeleton

2 participants