Skip to content

Cross-platform system tray icon, with menu builder and support for egui and iced 🦀

License

Notifications You must be signed in to change notification settings

nobane/tray-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

2 Commits

Repository files navigation

tray

Cross-platform system tray for Rust.

Cratecrates.io
traycrates.io
tray-menucrates.io

Install

cargo add tray-menu --features gtk # Linux (includes tray) cargo add tray-menu # Windows/macOS (includes tray) cargo add tray # Just the icon, no menus

Usage

use tray_menu::{CheckEntry,Divider,Icon,MouseButton,MouseButtonState,PopupMenu,SubMenu,TextEntry,TrayIconBuilder,TrayIconEvent,};fnmain(){let icon = Icon::from_rgba(vec![0u8;32*32*4],32,32).unwrap();let _tray = TrayIconBuilder::new().with_icon(icon).with_tooltip("My App").build().unwrap();loop{ifletOk(TrayIconEvent::Click{button:MouseButton::Right,button_state:MouseButtonState::Up, position, .. }) = TrayIconEvent::receiver().try_recv(){letmut menu = PopupMenu::new(); menu.add(&TextEntry::of("open","Open")); menu.add(&CheckEntry::of("notify","Notifications",true)); menu.add(&Divider);letmut help = SubMenu::of("Help"); help.add(&TextEntry::of("about","About")); menu.add(&help); menu.add(&Divider); menu.add(&TextEntry::of("quit","Quit"));ifletSome(id) = menu.popup(position){if id.0 == "quit"{break;}}} std::thread::sleep(std::time::Duration::from_millis(16));}}

Examples

cargo run -p tray-menu --features gtk --example simple-menu # right-click menu cargo run -p tray-menu --features gtk --example simple-menu -- left # left-click menu cargo run -p tray-menu --features gtk --example simple-menu -- enter # hover to open cargo run -p tray --example simple-tray # icon only, no menu

See the justfile for more commands.

Platform Support

PlatformTray IconPopup Menu
LinuxX11 system trayGTK or Qt
WindowsShell_NotifyIconWTrackPopupMenu
macOSNSStatusItemNSMenu

Architecture

graph TD A[tray-menu] -->|uses| B[tray] B -->|Linux| C[X11 system tray protocol] B -->|Windows| D[Shell_NotifyIconW] B -->|macOS| E[NSStatusItem] A -->|Linux GTK| F[GtkMenu] A -->|Linux Qt| G[QMenu] A -->|Windows| H[TrackPopupMenu] A -->|macOS| I[NSMenu] 
Loading

tray - Thread-safe tray icon with mouse events (click, double-click, hover). No menus.

tray-menu - Popup menus with text items, checkboxes, submenus, dividers. Re-exports tray.

License

MIT

About

Cross-platform system tray icon, with menu builder and support for egui and iced 🦀

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published