use crate::{
error::OsError,
event_loop::EventLoopWindowTarget,
menu::ContextMenu,
platform_impl::{
SystemTray as SystemTrayPlatform, SystemTrayBuilder as SystemTrayBuilderPlatform,
},
};
pub struct SystemTrayBuilder(pub(crate) SystemTrayBuilderPlatform);
#[cfg(target_os = "linux")]
use std::path::PathBuf;
impl SystemTrayBuilder {
#[cfg(not(target_os = "linux"))]
pub fn new(icon: Vec<u8>, tray_menu: Option<ContextMenu>) -> Self {
Self(SystemTrayBuilderPlatform::new(
icon,
tray_menu.map(|m| m.0.menu_platform),
))
}
#[cfg(target_os = "linux")]
pub fn new(icon: PathBuf, tray_menu: Option<ContextMenu>) -> Self {
Self(SystemTrayBuilderPlatform::new(
icon,
tray_menu.map(|m| m.0.menu_platform),
))
}
pub fn build<T: 'static>(
self,
window_target: &EventLoopWindowTarget<T>,
) -> Result<SystemTray, OsError> {
self.0.build(window_target)
}
}
pub struct SystemTray(pub SystemTrayPlatform);
impl SystemTray {
#[cfg(not(target_os = "linux"))]
pub fn set_icon(&mut self, icon: Vec<u8>) {
self.0.set_icon(icon)
}
#[cfg(target_os = "linux")]
pub fn set_icon(&mut self, icon: PathBuf) {
self.0.set_icon(icon)
}
pub fn set_menu(&mut self, tray_menu: &ContextMenu) {
self.0.set_menu(&tray_menu.0.menu_platform)
}
}