@@ -1224,6 +1224,10 @@ pub struct Builder<R: Runtime> {
12241224 #[ cfg( desktop) ]
12251225 menu : Option < Box < dyn FnOnce ( & AppHandle < R > ) -> crate :: Result < Menu < R > > + Send > > ,
12261226
1227+ /// Menu event listeners for any menu event.
1228+ #[ cfg( desktop) ]
1229+ menu_event_listeners : Vec < GlobalMenuEventListener < AppHandle < R > > > ,
1230+
12271231 /// Enable macOS default menu creation.
12281232 #[ allow( unused) ]
12291233 enable_macos_default_menu : bool ,
@@ -1293,6 +1297,8 @@ impl<R: Runtime> Builder<R> {
12931297 state : StateManager :: new ( ) ,
12941298 #[ cfg( desktop) ]
12951299 menu : None ,
1300+ #[ cfg( desktop) ]
1301+ menu_event_listeners : Vec :: new ( ) ,
12961302 enable_macos_default_menu : true ,
12971303 window_event_listeners : Vec :: new ( ) ,
12981304 webview_event_listeners : Vec :: new ( ) ,
@@ -1615,6 +1621,29 @@ tauri::Builder::default()
16151621 self
16161622 }
16171623
1624+ /// Registers an event handler for any menu event.
1625+ ///
1626+ /// # Examples
1627+ /// ```
1628+ /// use tauri::menu::*;
1629+ ///
1630+ /// tauri::Builder::default()
1631+ /// .on_menu_event(|app, event| {
1632+ /// if event.id() == "quit" {
1633+ /// app.exit(0);
1634+ /// }
1635+ /// });
1636+ /// ```
1637+ #[ must_use]
1638+ #[ cfg( desktop) ]
1639+ pub fn on_menu_event < F : Fn ( & AppHandle < R > , MenuEvent ) + Send + Sync + ' static > (
1640+ mut self ,
1641+ f : F ,
1642+ ) -> Self {
1643+ self . menu_event_listeners . push ( Box :: new ( f) ) ;
1644+ self
1645+ }
1646+
16181647 /// Enable or disable the default menu on macOS. Enabled by default.
16191648 ///
16201649 /// # Examples
@@ -1820,6 +1849,8 @@ tauri::Builder::default()
18201849 self . on_page_load ,
18211850 self . uri_scheme_protocols ,
18221851 self . state ,
1852+ #[ cfg( desktop) ]
1853+ self . menu_event_listeners ,
18231854 self . window_event_listeners ,
18241855 self . webview_event_listeners ,
18251856 #[ cfg( desktop) ]
0 commit comments