@@ -26,11 +26,16 @@ use tao::{
2626use  wry:: WebViewBuilderExtUnix ; 
2727use  wry:: { http:: Request ,  WebViewBuilder } ; 
2828
29+ enum  UserEvent  { 
30+     MenuEvent ( muda:: MenuEvent ) , 
31+ } 
32+ 
2933fn  main ( )  -> wry:: Result < ( ) >  { 
30-     let  mut  event_loop_builder = EventLoopBuilder :: new ( ) ; 
34+     let  mut  event_loop_builder = EventLoopBuilder :: < UserEvent > :: with_user_event ( ) ; 
3135
3236    let  menu_bar = Menu :: new ( ) ; 
3337
38+     // setup accelerator handler on Windows 
3439    #[ cfg( target_os = "windows" ) ]  
3540    { 
3641        let  menu_bar = menu_bar. clone ( ) ; 
@@ -46,6 +51,12 @@ fn main() -> wry::Result<()> {
4651
4752    let  event_loop = event_loop_builder. build ( ) ; 
4853
54+     // set a menu event handler that wakes up the event loop 
55+     let  proxy = event_loop. create_proxy ( ) ; 
56+     muda:: MenuEvent :: set_event_handler ( Some ( move  |event| { 
57+         proxy. send_event ( UserEvent :: MenuEvent ( event) ) ; 
58+     } ) ) ; 
59+ 
4960    let  window = WindowBuilder :: new ( ) 
5061        . with_title ( "Window 1" ) 
5162        . build ( & event_loop) 
@@ -281,24 +292,19 @@ fn main() -> wry::Result<()> {
281292    event_loop. run ( move  |event,  _,  control_flow| { 
282293        * control_flow = ControlFlow :: Wait ; 
283294
284-         if  let  Event :: WindowEvent  { 
285-             event :  WindowEvent :: CloseRequested , 
286-             ..
287-         }  = event
288-         { 
289-             * control_flow = ControlFlow :: Exit ; 
290-         } 
295+         match  event { 
296+             Event :: WindowEvent  { 
297+                 event :  WindowEvent :: CloseRequested , 
298+                 ..
299+             }  => * control_flow = ControlFlow :: Exit , 
291300
292-         if  let  Ok ( event)  = menu_channel. try_recv ( )  { 
293-             if  event. id  == custom_i_1. id ( )  { 
294-                 custom_i_1
295-                     . set_accelerator ( Some ( Accelerator :: new ( Some ( Modifiers :: SHIFT ) ,  Code :: KeyF ) ) ) 
296-                     . unwrap ( ) ; 
297-                 file_m
298-                     . insert ( & MenuItem :: new ( "New Menu Item" ,  true ,  None ) ,  2 ) 
299-                     . unwrap ( ) ; 
301+             Event :: UserEvent ( UserEvent :: MenuEvent ( event) )  => { 
302+                 if  event. id  == custom_i_1. id ( )  { 
303+                     file_m. insert ( & MenuItem :: new ( "New Menu Item" ,  true ,  None ) ,  2 ) ; 
304+                 } 
305+                 println ! ( "{event:?}" ) ; 
300306            } 
301-             println ! ( "{event:?}" ) ; 
307+             _ =>  { } 
302308        } 
303309    } ) 
304310} 
0 commit comments