use objc2::AnyThread;
use objc2_app_kit::{NSApplication, NSImage};
use objc2_foundation::{MainThreadMarker, NSString};
pub fn set_dock_icon(path: &str) {
let Some(mtm) = MainThreadMarker::new() else {
return;
};
let ns_path = NSString::from_str(path);
let image = unsafe { NSImage::initWithContentsOfFile(NSImage::alloc(), &ns_path) };
let Some(image) = image else {
eprintln!("[app_icon] could not load dock icon at {path}");
return;
};
let app = NSApplication::sharedApplication(mtm);
unsafe { app.setApplicationIconImage(Some(&image)) };
}
pub fn set_dock_icon_scheduled(app: &tauri::AppHandle, path: String) {
for delay_ms in [0u64, 300, 900, 2000] {
let app = app.clone();
let path = path.clone();
std::thread::spawn(move || {
if delay_ms > 0 {
std::thread::sleep(std::time::Duration::from_millis(delay_ms));
}
let _ = app.run_on_main_thread(move || set_dock_icon(&path));
});
}
}