@@ -12,7 +12,10 @@ pub use crate::runtime::{
1212
1313use tauri_macros:: default_runtime;
1414
15- use std:: { collections:: HashMap , sync:: Arc } ;
15+ use std:: {
16+ collections:: HashMap ,
17+ sync:: { Arc , Mutex } ,
18+ } ;
1619
1720pub ( crate ) fn get_menu_ids ( map : & mut HashMap < MenuHash , MenuId > , menu : & SystemTrayMenu ) {
1821 for item in & menu. items {
@@ -80,7 +83,7 @@ pub enum SystemTrayEvent {
8083#[ default_runtime( crate :: Wry , wry) ]
8184#[ derive( Debug ) ]
8285pub struct SystemTrayHandle < R : Runtime > {
83- pub ( crate ) ids : Arc < HashMap < MenuHash , MenuId > > ,
86+ pub ( crate ) ids : Arc < Mutex < HashMap < MenuHash , MenuId > > > ,
8487 pub ( crate ) inner : R :: TrayHandler ,
8588}
8689
@@ -113,7 +116,7 @@ impl<R: Runtime> Clone for SystemTrayMenuItemHandle<R> {
113116impl < R : Runtime > SystemTrayHandle < R > {
114117 /// Gets a handle to the menu item that has the specified `id`.
115118 pub fn get_item ( & self , id : MenuIdRef < ' _ > ) -> SystemTrayMenuItemHandle < R > {
116- for ( raw, item_id) in self . ids . iter ( ) {
119+ for ( raw, item_id) in self . ids . lock ( ) . unwrap ( ) . iter ( ) {
117120 if item_id == id {
118121 return SystemTrayMenuItemHandle {
119122 id : * raw,
@@ -131,7 +134,11 @@ impl<R: Runtime> SystemTrayHandle<R> {
131134
132135 /// Updates the tray menu.
133136 pub fn set_menu ( & self , menu : SystemTrayMenu ) -> crate :: Result < ( ) > {
134- self . inner . set_menu ( menu) . map_err ( Into :: into)
137+ let mut ids = HashMap :: new ( ) ;
138+ get_menu_ids ( & mut ids, & menu) ;
139+ self . inner . set_menu ( menu) ?;
140+ * self . ids . lock ( ) . unwrap ( ) = ids;
141+ Ok ( ( ) )
135142 }
136143
137144 /// Support [macOS tray icon template](https://developer.apple.com/documentation/appkit/nsimage/1520017-template?language=objc) to adjust automatically based on taskbar color.
0 commit comments