Add system tray menu with Show/Hide, Health status, and Quit

Build tray programmatically via TrayIconBuilder with menu items.
Show/Hide toggles main window visibility. Remove declarative
trayIcon config to avoid conflict with programmatic setup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jon Saad-Falcon
2026-02-28 17:45:44 +00:00
co-authored by Claude Opus 4.6
parent 00fc627e3e
commit 1c44f51ef5
2 changed files with 41 additions and 8 deletions
+41 -3
View File
@@ -1,5 +1,6 @@
use serde::Serialize;
use tauri::Manager;
use tauri::menu::{MenuBuilder, MenuItemBuilder};
use tauri::tray::TrayIconBuilder;
use tauri_plugin_autostart::MacosLauncher;
/// Fetch health status from the OpenJarvis API server.
@@ -185,8 +186,45 @@ pub fn run() {
}
}))
.setup(|app| {
// Set up system tray menu
let _tray = app.tray_by_id("main");
let show = MenuItemBuilder::with_id("show", "Show / Hide")
.build(app)?;
let health = MenuItemBuilder::with_id("health", "Health: checking...")
.enabled(false)
.build(app)?;
let quit = MenuItemBuilder::with_id("quit", "Quit OpenJarvis")
.build(app)?;
let menu = MenuBuilder::new(app)
.item(&show)
.separator()
.item(&health)
.separator()
.item(&quit)
.build()?;
let _tray = TrayIconBuilder::with_id("main")
.icon(app.default_window_icon().unwrap().clone())
.tooltip("OpenJarvis")
.menu(&menu)
.on_menu_event(move |app, event| {
match event.id().as_ref() {
"show" => {
if let Some(window) = app.get_webview_window("main") {
if window.is_visible().unwrap_or(false) {
let _ = window.hide();
} else {
let _ = window.show();
let _ = window.set_focus();
}
}
}
"quit" => {
app.exit(0);
}
_ => {}
}
})
.build(app)?;
Ok(())
})
-5
View File
@@ -23,11 +23,6 @@
"transparent": false
}
],
"trayIcon": {
"iconPath": "icons/icon.png",
"iconAsTemplate": true,
"tooltip": "OpenJarvis"
},
"security": {
"csp": "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; connect-src 'self' http://localhost:* ws://localhost:*; img-src 'self' data: blob:"
}