in native/desktop-macos/src/macos/application_menu.rs [264:314]
fn create_ns_menu_item(&self, mtm: MainThreadMarker) -> Retained<NSMenuItem> {
match self {
&Self::Action {
enabled,
state,
ref title,
special_tag,
ref keystroke,
item_id,
} => {
let item = NSMenuItem::new(mtm);
Self::reconcile_action(&item, enabled, state, title, special_tag, keystroke.as_ref(), item_id, mtm);
item
}
Self::Separator => {
let item = NSMenuItem::separatorItem(mtm);
let representer = MenuItemRepresenter::new(mtm);
unsafe {
item.setRepresentedObject(Some(&representer));
};
item
}
Self::SubMenu { title, special_tag, items } => {
let item = NSMenuItem::new(mtm);
let representer = MenuItemRepresenter::new(mtm);
unsafe {
item.setRepresentedObject(Some(&representer));
};
let submenu = NSMenu::new(mtm);
submenu.setAutoenablesItems(false);
item.setSubmenu(Some(&submenu));
match special_tag {
SubMenuItemSpecialTag::Window => {
let app = MyNSApplication::sharedApplication(mtm);
app.setWindowsMenu(Some(&submenu));
}
SubMenuItemSpecialTag::Services => {
let app = MyNSApplication::sharedApplication(mtm);
app.setServicesMenu(Some(&submenu));
}
SubMenuItemSpecialTag::Help => {
let app = MyNSApplication::sharedApplication(mtm);
app.setHelpMenu(Some(&submenu));
}
_ => {}
}
Self::reconcile_ns_submenu(mtm, &item, title, *special_tag, items);
item
}
}
}