Crate tray_icon_win

Crate tray_icon_win 

Source
Expand description

tray-icon-win lets you create tray icons for desktop applications on Windows.

This is a personal fork of tray-icon. For general use, please consider using the original.

§Notes:

  • An event loop must be running on the thread, on Windows, a win32 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.

§Examples

§Create a tray icon without a menu.
use tray_icon_win::{TrayIconBuilder, Icon};

let tray_icon = TrayIconBuilder::new()
    .with_tooltip("system-tray - tray icon library!")
    .with_icon(icon)
    .build()
    .unwrap();
§Create a tray icon with a menu.
use tray_icon_win::{TrayIconBuilder, menu::Menu,Icon};

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

use tray_icon_win::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.

use tray_icon_win::{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);
}

§Note for winit or tao users:

You should use TrayIconEvent::set_event_handler and forward the tray icon events to the event loop by using EventLoopProxy so that the event loop is awakened on each tray icon event.

enum UserEvent {
  TrayIconEvent(tray_icon_win::TrayIconEvent),
  MenuEvent(tray_icon_win::menu::MenuEvent)
}

let event_loop = EventLoop::<UserEvent>::with_user_event().build().unwrap();

let proxy = event_loop.create_proxy();
tray_icon_win::TrayIconEvent::set_event_handler(Some(move |event| {
    proxy.send_event(UserEvent::TrayIconEvent(event));
}));

let proxy = event_loop.create_proxy();
tray_icon_win::menu::MenuEvent::set_event_handler(Some(move |event| {
    proxy.send_event(UserEvent::MenuEvent(event));
}));

Re-exports§

pub use muda_win::dpi;

Modules§

menu
Re-export of muda-win crate and used for tray context menu.

Structs§

Icon
An icon used for the window titlebar, taskbar, etc.
Rect
Describes a rectangle including position (x - y axis) and size.
TrayIcon
This type is reference-counted and the icon is removed when the last instance is dropped.
TrayIconAttributes
Attributes to use when creating a tray icon.
TrayIconBuilder
TrayIcon builder struct and associated methods.
TrayIconId
An unique id that is associated with a tray icon.

Enums§

BadIcon
An error produced when using Icon::from_rgba with invalid arguments.
Error
Errors returned by tray-icon.
MouseButton
Describes which mouse button triggered the event..
MouseButtonState
Describes the mouse button state.
TrayIconEvent
Describes a tray icon event.

Type Aliases§

Result
Convenient type alias of Result type for tray-icon.
TrayIconEventReceiver
A reciever that could be used to listen to tray events.