dioxus_desktop/
trayicon.rs1use dioxus_core::{
4 prelude::{provide_context, try_consume_context},
5 use_hook,
6};
7
8#[cfg(not(any(target_os = "ios", target_os = "android")))]
9pub use tray_icon::*;
10
11#[cfg(not(any(target_os = "ios", target_os = "android")))]
13pub type DioxusTrayMenu = tray_icon::menu::Menu;
14#[cfg(any(target_os = "ios", target_os = "android"))]
15pub type DioxusTrayMenu = ();
16
17#[cfg(not(any(target_os = "ios", target_os = "android")))]
19pub type DioxusTrayIcon = tray_icon::Icon;
20#[cfg(any(target_os = "ios", target_os = "android"))]
21pub type DioxusTrayIcon = ();
22
23#[cfg(not(any(target_os = "ios", target_os = "android")))]
25pub type DioxusTray = tray_icon::TrayIcon;
26#[cfg(any(target_os = "ios", target_os = "android"))]
27pub type DioxusTray = ();
28
29#[allow(unused)]
31pub fn init_tray_icon(menu: DioxusTrayMenu, icon: Option<DioxusTrayIcon>) -> DioxusTray {
32 #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))]
33 {
34 let builder = tray_icon::TrayIconBuilder::new()
35 .with_menu(Box::new(menu))
36 .with_menu_on_left_click(false)
37 .with_icon(match icon {
38 Some(value) => value,
39 None => tray_icon::Icon::from_rgba(
40 include_bytes!("./assets/default_icon.bin").to_vec(),
41 460,
42 460,
43 )
44 .expect("image parse failed"),
45 });
46
47 provide_context(builder.build().expect("tray icon builder failed"))
48 }
49}
50
51pub fn default_tray_icon() -> DioxusTrayMenu {
53 #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))]
54 {
55 use tray_icon::menu::{Menu, PredefinedMenuItem};
56 let tray_menu = Menu::new();
57 tray_menu
58 .append_items(&[&PredefinedMenuItem::quit(None)])
59 .unwrap();
60 tray_menu
61 }
62}
63
64#[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))]
66pub fn use_tray_icon() -> Option<tray_icon::TrayIcon> {
67 use_hook(try_consume_context)
68}