fn create_ns_menu_item()

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
            }
        }
    }