Skip to content

Commit f884bae

Browse files
authored
feat: add tauri::Builder::on_tray_icon_event (#11742)
1 parent fc30b20 commit f884bae

File tree

4 files changed

+47
-1
lines changed

4 files changed

+47
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"tauri": "minor:feat"
3+
---
4+
5+
Add `tauri::Builder::on_tray_icon_event` handler.
6+

crates/tauri/src/app.rs

+31
Original file line numberDiff line numberDiff line change
@@ -1249,6 +1249,10 @@ pub struct Builder<R: Runtime> {
12491249
#[cfg(desktop)]
12501250
menu_event_listeners: Vec<GlobalMenuEventListener<AppHandle<R>>>,
12511251

1252+
/// Tray event listeners for any tray icon event.
1253+
#[cfg(all(desktop, feature = "tray-icon"))]
1254+
tray_icon_event_listeners: Vec<GlobalTrayIconEventListener<AppHandle<R>>>,
1255+
12521256
/// Enable macOS default menu creation.
12531257
#[allow(unused)]
12541258
enable_macos_default_menu: bool,
@@ -1321,6 +1325,8 @@ impl<R: Runtime> Builder<R> {
13211325
menu: None,
13221326
#[cfg(desktop)]
13231327
menu_event_listeners: Vec::new(),
1328+
#[cfg(all(desktop, feature = "tray-icon"))]
1329+
tray_icon_event_listeners: Vec::new(),
13241330
enable_macos_default_menu: true,
13251331
window_event_listeners: Vec::new(),
13261332
webview_event_listeners: Vec::new(),
@@ -1682,6 +1688,29 @@ tauri::Builder::default()
16821688
self
16831689
}
16841690

1691+
/// Registers an event handler for any tray icon event.
1692+
///
1693+
/// # Examples
1694+
/// ```
1695+
/// use tauri::Manager;
1696+
///
1697+
/// tauri::Builder::default()
1698+
/// .on_tray_icon_event(|app, event| {
1699+
/// let tray = app.tray_by_id(event.id()).expect("can't find tray icon");
1700+
/// let _ = tray.set_visible(false);
1701+
/// });
1702+
/// ```
1703+
#[must_use]
1704+
#[cfg(all(desktop, feature = "tray-icon"))]
1705+
#[cfg_attr(docsrs, doc(cfg(all(desktop, feature = "tray-icon"))))]
1706+
pub fn on_tray_icon_event<F: Fn(&AppHandle<R>, TrayIconEvent) + Send + Sync + 'static>(
1707+
mut self,
1708+
f: F,
1709+
) -> Self {
1710+
self.tray_icon_event_listeners.push(Box::new(f));
1711+
self
1712+
}
1713+
16851714
/// Enable or disable the default menu on macOS. Enabled by default.
16861715
///
16871716
/// # Examples
@@ -1889,6 +1918,8 @@ tauri::Builder::default()
18891918
self.state,
18901919
#[cfg(desktop)]
18911920
self.menu_event_listeners,
1921+
#[cfg(all(desktop, feature = "tray-icon"))]
1922+
self.tray_icon_event_listeners,
18921923
self.window_event_listeners,
18931924
self.webview_event_listeners,
18941925
#[cfg(desktop)]

crates/tauri/src/ipc/protocol.rs

+4
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,8 @@ mod tests {
586586
Default::default(),
587587
StateManager::new(),
588588
Default::default(),
589+
#[cfg(all(desktop, feature = "tray-icon"))]
590+
Default::default(),
589591
Default::default(),
590592
Default::default(),
591593
Default::default(),
@@ -701,6 +703,8 @@ mod tests {
701703
Default::default(),
702704
StateManager::new(),
703705
Default::default(),
706+
#[cfg(all(desktop, feature = "tray-icon"))]
707+
Default::default(),
704708
Default::default(),
705709
Default::default(),
706710
Default::default(),

crates/tauri/src/manager/mod.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,9 @@ impl<R: Runtime> AppManager<R> {
254254
uri_scheme_protocols: HashMap<String, Arc<webview::UriSchemeProtocol<R>>>,
255255
state: StateManager,
256256
#[cfg(desktop)] menu_event_listener: Vec<crate::app::GlobalMenuEventListener<AppHandle<R>>>,
257+
#[cfg(all(desktop, feature = "tray-icon"))] tray_icon_event_listeners: Vec<
258+
crate::app::GlobalTrayIconEventListener<AppHandle<R>>,
259+
>,
257260
window_event_listeners: Vec<GlobalWindowEventListener<R>>,
258261
webiew_event_listeners: Vec<GlobalWebviewEventListener<R>>,
259262
#[cfg(desktop)] window_menu_event_listeners: HashMap<
@@ -290,7 +293,7 @@ impl<R: Runtime> AppManager<R> {
290293
tray: tray::TrayManager {
291294
icon: context.tray_icon,
292295
icons: Default::default(),
293-
global_event_listeners: Default::default(),
296+
global_event_listeners: Mutex::new(tray_icon_event_listeners),
294297
event_listeners: Default::default(),
295298
},
296299
#[cfg(desktop)]
@@ -768,6 +771,8 @@ mod test {
768771
Default::default(),
769772
StateManager::new(),
770773
Default::default(),
774+
#[cfg(all(desktop, feature = "tray-icon"))]
775+
Default::default(),
771776
Default::default(),
772777
Default::default(),
773778
Default::default(),

0 commit comments

Comments
 (0)