@@ -164,7 +164,10 @@ macro_rules! window_getter {
164164 } } ;
165165}
166166
167- fn send_user_message < T : UserEvent > ( context : & Context < T > , message : Message < T > ) -> Result < ( ) > {
167+ pub ( crate ) fn send_user_message < T : UserEvent > (
168+ context : & Context < T > ,
169+ message : Message < T > ,
170+ ) -> Result < ( ) > {
168171 if current_thread ( ) . id ( ) == context. main_thread_id {
169172 handle_user_message (
170173 & context. main_thread . window_target ,
@@ -1126,7 +1129,7 @@ pub enum TrayMessage {
11261129 #[ cfg( target_os = "macos" ) ]
11271130 UpdateTitle ( String ) ,
11281131 Create ( SystemTray , Sender < Result < ( ) > > ) ,
1129- Destroy ,
1132+ Destroy ( Sender < Result < ( ) > > ) ,
11301133}
11311134
11321135pub type CreateWebviewClosure < T > = Box <
@@ -1789,6 +1792,7 @@ impl<T: UserEvent> RuntimeHandle<T> for WryHandle<T> {
17891792 ) ?;
17901793 rx. recv ( ) . unwrap ( ) ?;
17911794 Ok ( SystemTrayHandle {
1795+ context : self . context . clone ( ) ,
17921796 id,
17931797 proxy : self . context . proxy . clone ( ) ,
17941798 } )
@@ -1993,6 +1997,7 @@ impl<T: UserEvent> Runtime<T> for Wry<T> {
19931997 ) ;
19941998
19951999 Ok ( SystemTrayHandle {
2000+ context : self . context . clone ( ) ,
19962001 id,
19972002 proxy : self . event_loop . create_proxy ( ) ,
19982003 } )
@@ -2580,10 +2585,11 @@ fn handle_user_message<T: UserEvent>(
25802585 TrayMessage :: Create ( _tray, _tx) => {
25812586 // already handled
25822587 }
2583- TrayMessage :: Destroy => {
2588+ TrayMessage :: Destroy ( tx ) => {
25842589 * tray_context. tray . lock ( ) . unwrap ( ) = None ;
25852590 tray_context. listeners . lock ( ) . unwrap ( ) . clear ( ) ;
25862591 tray_context. items . lock ( ) . unwrap ( ) . clear ( ) ;
2592+ tx. send ( Ok ( ( ) ) ) . unwrap ( ) ;
25872593 }
25882594 }
25892595 }
@@ -2712,14 +2718,13 @@ fn handle_event_loop<T: UserEvent>(
27122718 items. contains_key ( & menu_id. 0 )
27132719 } ;
27142720 if has_menu {
2715- listeners. replace ( tray_context. listeners . clone ( ) ) ;
2721+ listeners. replace ( tray_context. listeners . lock ( ) . unwrap ( ) . clone ( ) ) ;
27162722 tray_id = * id;
27172723 break ;
27182724 }
27192725 }
27202726 drop ( trays) ;
27212727 if let Some ( listeners) = listeners {
2722- let listeners = listeners. lock ( ) . unwrap ( ) ;
27232728 let handlers = listeners. iter ( ) ;
27242729 for handler in handlers {
27252730 handler ( & event) ;
0 commit comments