use dioxus_core::{provide_context, try_consume_context, use_hook};
#[cfg(not(any(target_os = "ios", target_os = "android")))]
pub use tray_icon::*;
#[cfg(not(any(target_os = "ios", target_os = "android")))]
pub type DioxusTrayMenu = tray_icon::menu::Menu;
#[cfg(any(target_os = "ios", target_os = "android"))]
pub type DioxusTrayMenu = ();
#[cfg(not(any(target_os = "ios", target_os = "android")))]
pub type DioxusTrayIcon = tray_icon::Icon;
#[cfg(any(target_os = "ios", target_os = "android"))]
pub type DioxusTrayIcon = ();
#[cfg(not(any(target_os = "ios", target_os = "android")))]
pub type DioxusTray = tray_icon::TrayIcon;
#[cfg(any(target_os = "ios", target_os = "android"))]
pub type DioxusTray = ();
#[allow(unused)]
pub fn init_tray_icon(menu: DioxusTrayMenu, icon: Option<DioxusTrayIcon>) -> DioxusTray {
#[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))]
{
let icon = icon.map(Ok).unwrap_or_else(crate::default_icon);
let tray = tray_icon::TrayIconBuilder::new()
.with_menu(Box::new(menu))
.with_menu_on_left_click(false);
let tray = match icon {
Ok(icon) => tray.with_icon(icon),
Err(err) => {
tracing::trace!("No tray icon: {:?}", err);
tray
}
};
provide_context(tray.build().expect("tray icon builder failed"))
}
}
pub fn default_tray_icon() -> DioxusTrayMenu {
#[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))]
{
use tray_icon::menu::{Menu, PredefinedMenuItem};
let tray_menu = Menu::new();
tray_menu
.append_items(&[&PredefinedMenuItem::quit(None)])
.unwrap();
tray_menu
}
}
#[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))]
pub fn use_tray_icon() -> Option<tray_icon::TrayIcon> {
use_hook(try_consume_context)
}