@@ -24,9 +24,10 @@ async fn run_sidecar(app: tauri::AppHandle) -> Result<String, String> {
2424 start_sidecar ( app) . await
2525}
2626
27+ use tauri:: menu:: { Menu , MenuItem } ;
28+ use tauri:: tray:: { MouseButton , MouseButtonState , TrayIconBuilder , TrayIconEvent } ;
29+ use tauri:: { Emitter , Manager } ;
2730use tauri_plugin_autostart:: MacosLauncher ;
28- use tauri_plugin_autostart:: ManagerExt ;
29- use tauri_plugin_shell:: process:: CommandEvent ;
3031use tauri_plugin_shell:: ShellExt ;
3132
3233#[ cfg_attr( mobile, tauri:: mobile_entry_point) ]
@@ -43,6 +44,7 @@ pub fn run() {
4344 ) )
4445 . plugin ( tauri_plugin_shell:: init ( ) )
4546 . plugin ( tauri_plugin_opener:: init ( ) )
47+ . plugin ( tauri_plugin_http:: init ( ) )
4648 . setup ( |app| {
4749 // 在应用启动时自动启动sidecar
4850 let app_handle = app. handle ( ) . clone ( ) ;
@@ -52,6 +54,46 @@ pub fn run() {
5254 Err ( e) => eprintln ! ( "启动sidecar失败: {}" , e) ,
5355 }
5456 } ) ;
57+
58+ // 创建系统托盘
59+ let show_item = MenuItem :: with_id ( app, "show" , "显示窗口" , true , None :: < & str > ) ?;
60+ let quit_item = MenuItem :: with_id ( app, "quit" , "退出" , true , None :: < & str > ) ?;
61+ let menu = Menu :: with_items ( app, & [ & show_item, & quit_item] ) ?;
62+
63+ let _tray = TrayIconBuilder :: new ( )
64+ . icon ( app. default_window_icon ( ) . unwrap ( ) . clone ( ) )
65+ . menu ( & menu)
66+ . show_menu_on_left_click ( false )
67+ . on_menu_event ( |app, event| match event. id . as_ref ( ) {
68+ "show" => {
69+ if let Some ( window) = app. get_webview_window ( "main" ) {
70+ let _ = window. show ( ) ;
71+ let _ = window. unminimize ( ) ;
72+ let _ = window. set_focus ( ) ;
73+ }
74+ }
75+ "quit" => {
76+ let _ = app. emit ( "tray-quit-requested" , ( ) ) ;
77+ }
78+ _ => { }
79+ } )
80+ . on_tray_icon_event ( |tray, event| {
81+ if let TrayIconEvent :: Click {
82+ button : MouseButton :: Left ,
83+ button_state : MouseButtonState :: Up ,
84+ ..
85+ } = event
86+ {
87+ let app = tray. app_handle ( ) ;
88+ if let Some ( window) = app. get_webview_window ( "main" ) {
89+ let _ = window. show ( ) ;
90+ let _ = window. unminimize ( ) ;
91+ let _ = window. set_focus ( ) ;
92+ }
93+ }
94+ } )
95+ . build ( app) ?;
96+
5597 Ok ( ( ) )
5698 } )
5799 . invoke_handler ( tauri:: generate_handler![ greet, run_sidecar] )
0 commit comments