Skip to content

Commit 1d3f51e

Browse files
authored
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
1 parent 04fd3a7 commit 1d3f51e

File tree

4 files changed

+41
-1
lines changed

4 files changed

+41
-1
lines changed

.changes/builder-on-menu-event.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"tauri": "patch:feat"
3+
---
4+
5+
Add `tauri::Builder::on_menu_event`.

crates/tauri/src/app.rs

+31
Original file line numberDiff line numberDiff line change
@@ -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)]

crates/tauri/src/ipc/protocol.rs

+2
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,7 @@ mod tests {
589589
Default::default(),
590590
Default::default(),
591591
Default::default(),
592+
Default::default(),
592593
"".into(),
593594
crate::generate_invoke_key().unwrap(),
594595
);
@@ -702,6 +703,7 @@ mod tests {
702703
Default::default(),
703704
Default::default(),
704705
Default::default(),
706+
Default::default(),
705707
"".into(),
706708
crate::generate_invoke_key().unwrap(),
707709
);

crates/tauri/src/manager/mod.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ impl<R: Runtime> AppManager<R> {
248248
on_page_load: Option<Arc<OnPageLoad<R>>>,
249249
uri_scheme_protocols: HashMap<String, Arc<webview::UriSchemeProtocol<R>>>,
250250
state: StateManager,
251+
#[cfg(desktop)] menu_event_listener: Vec<crate::app::GlobalMenuEventListener<AppHandle<R>>>,
251252
window_event_listeners: Vec<GlobalWindowEventListener<R>>,
252253
webiew_event_listeners: Vec<GlobalWebviewEventListener<R>>,
253254
#[cfg(desktop)] window_menu_event_listeners: HashMap<
@@ -290,7 +291,7 @@ impl<R: Runtime> AppManager<R> {
290291
menu: menu::MenuManager {
291292
menus: Default::default(),
292293
menu: Default::default(),
293-
global_event_listeners: Default::default(),
294+
global_event_listeners: Mutex::new(menu_event_listener),
294295
event_listeners: Mutex::new(window_menu_event_listeners),
295296
},
296297
plugins: Mutex::new(plugins),
@@ -730,6 +731,7 @@ mod test {
730731
Default::default(),
731732
Default::default(),
732733
Default::default(),
734+
Default::default(),
733735
"".into(),
734736
crate::generate_invoke_key().unwrap(),
735737
);

0 commit comments

Comments
 (0)