Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tauri-apps/tray-icon
Tray icons for Desktop Applications.
https://github.com/tauri-apps/tray-icon
gui rust system-tray tray tray-app tray-application tray-icon tray-menu windowing
Last synced: about 21 hours ago
JSON representation
Tray icons for Desktop Applications.
- Host: GitHub
- URL: https://github.com/tauri-apps/tray-icon
- Owner: tauri-apps
- License: apache-2.0
- Created: 2022-10-20T18:01:15.000Z (almost 2 years ago)
- Default Branch: dev
- Last Pushed: 2024-04-09T01:45:14.000Z (6 months ago)
- Last Synced: 2024-04-14T01:50:54.914Z (5 months ago)
- Topics: gui, rust, system-tray, tray, tray-app, tray-application, tray-icon, tray-menu, windowing
- Language: Rust
- Homepage:
- Size: 214 KB
- Stars: 159
- Watchers: 13
- Forks: 20
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
tray-icon lets you create tray icons for desktop applications.
## Platforms supported:
- Windows
- macOS
- Linux (gtk Only)## Platform-specific notes:
- On Windows and Linux, an event loop must be running on the thread, on Windows, a win32 event loop and on Linux, a gtk event loop. It doesn't need to be the main thread but you have to create the tray icon on the same thread as the event loop.
- On macOS, an event loop must be running on the main thread so you also need to create the tray icon on the main thread.### Cargo Features
- `common-controls-v6`: Use `TaskDialogIndirect` API from `ComCtl32.dll` v6 on Windows for showing the predefined `About` menu item dialog.
- `libxdo`: Enables linking to `libxdo` which is used for the predfined `Copy`, `Cut`, `Paste` and `SelectAll` menu item, see https://github.com/tauri-apps/muda#cargo-features
- `serde`: Enables de/serializing derives.## Dependencies (Linux Only)
On Linux, `gtk`, `libxdo` is used to make the predfined `Copy`, `Cut`, `Paste` and `SelectAll` menu items work and `libappindicator` or `libayatnat-appindicator` are used to create the tray icon, so make sure to install them on your system.
#### Arch Linux / Manjaro:
```sh
pacman -S gtk3 xdotool libappindicator-gtk3 #or libayatana-appindicator
```#### Debian / Ubuntu:
```sh
sudo apt install libgtk-3-dev libxdo-dev libappindicator3-dev #or libayatana-appindicator3-dev
```## Examples
#### Create a tray icon without a menu.
```rs
use tray_icon::TrayIconBuilder;let tray_icon = TrayIconBuilder::new()
.with_tooltip("system-tray - tray icon library!")
.with_icon(icon)
.build()
.unwrap();
```#### Create a tray icon with a menu.
```rs
use tray_icon::{TrayIconBuilder, menu::Menu};let tray_menu = Menu::new();
let tray_icon = TrayIconBuilder::new()
.with_menu(Box::new(tray_menu))
.with_tooltip("system-tray - tray icon library!")
.with_icon(icon)
.build()
.unwrap();
```## Processing tray events
You can use `TrayIconEvent::receiver` to get a reference to the `TrayIconEventReceiver`
which you can use to listen to events when a click happens on the tray icon```rs
use tray_icon::TrayIconEvent;if let Ok(event) = TrayIconEvent::receiver().try_recv() {
println!("{:?}", event);
}
```You can also listen for the menu events using `MenuEvent::receiver` to get events for the tray context menu.
```rs
use tray_icon::{TrayIconEvent, menu::{MenuEvent}};if let Ok(event) = TrayIconEvent::receiver().try_recv() {
println!("tray event: {:?}", event);
}if let Ok(event) = MenuEvent::receiver().try_recv() {
println!("menu event: {:?}", event);
}
```## License
Apache-2.0/MIT