@@ -12,6 +12,7 @@ mod menu;
1212
1313#[ cfg( target_os = "linux" ) ]
1414use std:: path:: PathBuf ;
15+ use std:: sync:: atomic:: { AtomicBool , Ordering } ;
1516
1617use serde:: { Deserialize , Serialize } ;
1718use tauri:: {
@@ -42,6 +43,20 @@ async fn menu_toggle(window: tauri::Window) {
4243}
4344
4445fn main ( ) {
46+ let tray_menu1 = SystemTrayMenu :: new ( )
47+ . add_item ( CustomMenuItem :: new ( "toggle" , "Toggle" ) )
48+ . add_item ( CustomMenuItem :: new ( "new" , "New window" ) )
49+ . add_item ( CustomMenuItem :: new ( "icon_1" , "Tray Icon 1" ) )
50+ . add_item ( CustomMenuItem :: new ( "icon_2" , "Tray Icon 2" ) )
51+ . add_item ( CustomMenuItem :: new ( "switch_menu" , "Switch Menu" ) )
52+ . add_item ( CustomMenuItem :: new ( "exit_app" , "Quit" ) ) ;
53+ let tray_menu2 = SystemTrayMenu :: new ( )
54+ . add_item ( CustomMenuItem :: new ( "toggle" , "Toggle" ) )
55+ . add_item ( CustomMenuItem :: new ( "new" , "New window" ) )
56+ . add_item ( CustomMenuItem :: new ( "switch_menu" , "Switch Menu" ) )
57+ . add_item ( CustomMenuItem :: new ( "exit_app" , "Quit" ) ) ;
58+ let is_menu1 = AtomicBool :: new ( true ) ;
59+
4560 #[ allow( unused_mut) ]
4661 let mut app = tauri:: Builder :: default ( )
4762 . on_page_load ( |window, _| {
@@ -79,17 +94,8 @@ fn main() {
7994 . on_menu_event ( |event| {
8095 println ! ( "{:?}" , event. menu_item_id( ) ) ;
8196 } )
82- . system_tray (
83- SystemTray :: new ( ) . with_menu (
84- SystemTrayMenu :: new ( )
85- . add_item ( CustomMenuItem :: new ( "toggle" , "Toggle" ) )
86- . add_item ( CustomMenuItem :: new ( "new" , "New window" ) )
87- . add_item ( CustomMenuItem :: new ( "icon_1" , "Tray Icon 1" ) )
88- . add_item ( CustomMenuItem :: new ( "icon_2" , "Tray Icon 2" ) )
89- . add_item ( CustomMenuItem :: new ( "exit_app" , "Quit" ) ) ,
90- ) ,
91- )
92- . on_system_tray_event ( |app, event| match event {
97+ . system_tray ( SystemTray :: new ( ) . with_menu ( tray_menu1. clone ( ) ) )
98+ . on_system_tray_event ( move |app, event| match event {
9399 SystemTrayEvent :: LeftClick {
94100 position : _,
95101 size : _,
@@ -176,6 +182,18 @@ fn main() {
176182 include_bytes ! ( "../../../.icons/icon.ico" ) . to_vec ( ) ,
177183 ) )
178184 . unwrap ( ) ,
185+ "switch_menu" => {
186+ let flag = is_menu1. load ( Ordering :: Relaxed ) ;
187+ app
188+ . tray_handle ( )
189+ . set_menu ( if flag {
190+ tray_menu2. clone ( )
191+ } else {
192+ tray_menu1. clone ( )
193+ } )
194+ . unwrap ( ) ;
195+ is_menu1. store ( !flag, Ordering :: Relaxed ) ;
196+ }
179197 _ => { }
180198 }
181199 }
0 commit comments