From 1d3f51e100b0efc0e4ce164796460e9acdc458da Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Wed, 9 Oct 2024 17:09:42 +0300 Subject: [PATCH] feat: add back `tauri::Builder::on_menu_event` (#11228) * feat: add back `tauri::Builder::on_menu_event` * fix build * fix build and fmt * fix mobile --- .changes/builder-on-menu-event.md | 5 +++++ crates/tauri/src/app.rs | 31 +++++++++++++++++++++++++++++++ crates/tauri/src/ipc/protocol.rs | 2 ++ crates/tauri/src/manager/mod.rs | 4 +++- 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 .changes/builder-on-menu-event.md diff --git a/.changes/builder-on-menu-event.md b/.changes/builder-on-menu-event.md new file mode 100644 index 000000000..313cc91ad --- /dev/null +++ b/.changes/builder-on-menu-event.md @@ -0,0 +1,5 @@ +--- +"tauri": "patch:feat" +--- + +Add `tauri::Builder::on_menu_event`. diff --git a/crates/tauri/src/app.rs b/crates/tauri/src/app.rs index e8512e56d..f37c7db32 100644 --- a/crates/tauri/src/app.rs +++ b/crates/tauri/src/app.rs @@ -1224,6 +1224,10 @@ pub struct Builder { #[cfg(desktop)] menu: Option) -> crate::Result> + Send>>, + /// Menu event listeners for any menu event. + #[cfg(desktop)] + menu_event_listeners: Vec>>, + /// Enable macOS default menu creation. #[allow(unused)] enable_macos_default_menu: bool, @@ -1293,6 +1297,8 @@ impl Builder { state: StateManager::new(), #[cfg(desktop)] menu: None, + #[cfg(desktop)] + menu_event_listeners: Vec::new(), enable_macos_default_menu: true, window_event_listeners: Vec::new(), webview_event_listeners: Vec::new(), @@ -1615,6 +1621,29 @@ tauri::Builder::default() self } + /// Registers an event handler for any menu event. + /// + /// # Examples + /// ``` + /// use tauri::menu::*; + /// + /// tauri::Builder::default() + /// .on_menu_event(|app, event| { + /// if event.id() == "quit" { + /// app.exit(0); + /// } + /// }); + /// ``` + #[must_use] + #[cfg(desktop)] + pub fn on_menu_event, MenuEvent) + Send + Sync + 'static>( + mut self, + f: F, + ) -> Self { + self.menu_event_listeners.push(Box::new(f)); + self + } + /// Enable or disable the default menu on macOS. Enabled by default. /// /// # Examples @@ -1820,6 +1849,8 @@ tauri::Builder::default() self.on_page_load, self.uri_scheme_protocols, self.state, + #[cfg(desktop)] + self.menu_event_listeners, self.window_event_listeners, self.webview_event_listeners, #[cfg(desktop)] diff --git a/crates/tauri/src/ipc/protocol.rs b/crates/tauri/src/ipc/protocol.rs index 8252a9257..49ed50c9c 100644 --- a/crates/tauri/src/ipc/protocol.rs +++ b/crates/tauri/src/ipc/protocol.rs @@ -589,6 +589,7 @@ mod tests { Default::default(), Default::default(), Default::default(), + Default::default(), "".into(), crate::generate_invoke_key().unwrap(), ); @@ -702,6 +703,7 @@ mod tests { Default::default(), Default::default(), Default::default(), + Default::default(), "".into(), crate::generate_invoke_key().unwrap(), ); diff --git a/crates/tauri/src/manager/mod.rs b/crates/tauri/src/manager/mod.rs index 00b13fef1..a216e823a 100644 --- a/crates/tauri/src/manager/mod.rs +++ b/crates/tauri/src/manager/mod.rs @@ -248,6 +248,7 @@ impl AppManager { on_page_load: Option>>, uri_scheme_protocols: HashMap>>, state: StateManager, + #[cfg(desktop)] menu_event_listener: Vec>>, window_event_listeners: Vec>, webiew_event_listeners: Vec>, #[cfg(desktop)] window_menu_event_listeners: HashMap< @@ -290,7 +291,7 @@ impl AppManager { menu: menu::MenuManager { menus: Default::default(), menu: Default::default(), - global_event_listeners: Default::default(), + global_event_listeners: Mutex::new(menu_event_listener), event_listeners: Mutex::new(window_menu_event_listeners), }, plugins: Mutex::new(plugins), @@ -730,6 +731,7 @@ mod test { Default::default(), Default::default(), Default::default(), + Default::default(), "".into(), crate::generate_invoke_key().unwrap(), );