feat(tray): hide window on close and refine tray UX; simplify icon handling

- Intercept CloseRequested to hide instead of exit (keep tray resident)
- Add 'Open Main' menu item; left-click shows menu; reduce tray click logs
- Use default app icon for tray for now; remove runtime PNG decoding
- Drop unused image dependency and tray resources entry
- Prepare path for future macOS template icon under icons/tray/macos
This commit is contained in:
Jason
2025-09-14 21:55:41 +08:00
parent 189a70280f
commit 711ad843ce
3 changed files with 9 additions and 5 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 572 KiB

View File

@@ -9,7 +9,7 @@ mod store;
use store::AppState; use store::AppState;
use tauri::{ use tauri::{
menu::{CheckMenuItem, Menu, MenuBuilder, MenuItem}, menu::{CheckMenuItem, Menu, MenuBuilder, MenuItem},
tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}, tray::{TrayIconBuilder, TrayIconEvent},
}; };
use tauri::{Emitter, Manager}; use tauri::{Emitter, Manager};
@@ -312,7 +312,8 @@ pub fn run() {
// 创建动态托盘菜单 // 创建动态托盘菜单
let menu = create_tray_menu(&app.handle(), &app_state)?; let menu = create_tray_menu(&app.handle(), &app_state)?;
let _tray = TrayIconBuilder::with_id("main") // 构建托盘
let mut tray_builder = TrayIconBuilder::with_id("main")
.on_tray_icon_event(|_tray, event| match event { .on_tray_icon_event(|_tray, event| match event {
// 左键点击已通过 show_menu_on_left_click(true) 打开菜单,这里不再额外处理 // 左键点击已通过 show_menu_on_left_click(true) 打开菜单,这里不再额外处理
TrayIconEvent::Click { .. } => {} TrayIconEvent::Click { .. } => {}
@@ -322,9 +323,12 @@ pub fn run() {
.on_menu_event(|app, event| { .on_menu_event(|app, event| {
handle_tray_menu_event(app, &event.id.0); handle_tray_menu_event(app, &event.id.0);
}) })
.icon(app.default_window_icon().unwrap().clone()) .show_menu_on_left_click(true);
.show_menu_on_left_click(true)
.build(app)?; // 统一使用应用默认图标;待托盘模板图标就绪后再启用
tray_builder = tray_builder.icon(app.default_window_icon().unwrap().clone());
let _tray = tray_builder.build(app)?;
// 将同一个实例注入到全局状态,避免重复创建导致的不一致 // 将同一个实例注入到全局状态,避免重复创建导致的不一致
app.manage(app_state); app.manage(app_state);
Ok(()) Ok(())