11use std:: sync:: Mutex ;
2- use tauri:: { Manager , RunEvent , State } ;
2+ use tauri:: {
3+ menu:: { Menu , MenuItem } ,
4+ tray:: { MouseButton , MouseButtonState , TrayIconBuilder , TrayIconEvent } ,
5+ Manager , RunEvent , State , WindowEvent ,
6+ } ;
37use tauri_plugin_shell:: process:: CommandChild ;
48use tauri_plugin_shell:: ShellExt ;
59
@@ -32,6 +36,36 @@ pub fn run() {
3236 * state. child . lock ( ) . unwrap ( ) = Some ( child) ;
3337 }
3438
39+ let quit_i = MenuItem :: with_id ( app, "quit" , "Quit" , true , None :: < & str > ) ?;
40+ let menu = Menu :: with_items ( app, & [ & quit_i] ) ?;
41+
42+ let _tray = TrayIconBuilder :: new ( )
43+ . icon ( app. default_window_icon ( ) . unwrap ( ) . clone ( ) )
44+ . menu ( & menu)
45+ . show_menu_on_left_click ( false )
46+ . on_menu_event ( |app, event| match event. id . as_ref ( ) {
47+ "quit" => {
48+ app. exit ( 0 ) ;
49+ }
50+ _ => { }
51+ } )
52+ . on_tray_icon_event ( |tray, event| match event {
53+ TrayIconEvent :: Click {
54+ button : MouseButton :: Left ,
55+ button_state : MouseButtonState :: Up ,
56+ ..
57+ } => {
58+ let app = tray. app_handle ( ) ;
59+ if let Some ( window) = app. get_webview_window ( "main" ) {
60+ let _ = window. unminimize ( ) ;
61+ let _ = window. show ( ) ;
62+ let _ = window. set_focus ( ) ;
63+ }
64+ }
65+ _ => { }
66+ } )
67+ . build ( app) ?;
68+
3569 Ok ( ( ) )
3670 } ) ;
3771
@@ -41,12 +75,24 @@ pub fn run() {
4175
4276 app. run ( |app_handle, event| {
4377 if !cfg ! ( dev) {
44- if let RunEvent :: ExitRequested { .. } = event {
78+ if let RunEvent :: ExitRequested { .. } = & event {
4579 let state: State < AppState > = app_handle. state ( ) ;
4680 if let Some ( child) = state. child . lock ( ) . unwrap ( ) . take ( ) {
4781 child. kill ( ) . expect ( "Failed to kill sidecar" ) ;
4882 } ;
4983 }
5084 }
85+
86+ if let RunEvent :: WindowEvent {
87+ event : WindowEvent :: Resized ( _) ,
88+ ..
89+ } = & event
90+ {
91+ if let Some ( window) = app_handle. get_webview_window ( "main" ) {
92+ if let Ok ( true ) = window. is_minimized ( ) {
93+ let _ = window. hide ( ) ;
94+ }
95+ }
96+ }
5197 } ) ;
5298}
0 commit comments