use objc2::sel;
use objc2_app_kit::{NSApplication, NSMenu, NSMenuItem};
use objc2_foundation::{ns_string, MainThreadMarker};
pub fn install_window_menu() -> bool {
let Some(mtm) = MainThreadMarker::new() else {
return false;
};
let app = NSApplication::sharedApplication(mtm);
if unsafe { app.windowsMenu() }.is_some() {
return true;
}
let Some(main_menu) = (unsafe { app.mainMenu() }) else {
return false;
};
let menu = unsafe { NSMenu::initWithTitle(mtm.alloc(), ns_string!("Window")) };
let item = |title, action, key| unsafe {
NSMenuItem::initWithTitle_action_keyEquivalent(mtm.alloc(), title, Some(action), key)
};
menu.addItem(&item(
ns_string!("Minimize"),
sel!(performMiniaturize:),
ns_string!("m"),
));
menu.addItem(&item(
ns_string!("Zoom"),
sel!(performZoom:),
ns_string!(""),
));
menu.addItem(&NSMenuItem::separatorItem(mtm));
menu.addItem(&item(
ns_string!("Bring All to Front"),
sel!(arrangeInFront:),
ns_string!(""),
));
let bar_item = NSMenuItem::new(mtm);
bar_item.setSubmenu(Some(&menu));
main_menu.addItem(&bar_item);
unsafe { app.setWindowsMenu(Some(&menu)) };
true
}