fn reconcile_action()

in native/desktop-macos/src/macos/application_menu.rs [184:226]


    fn reconcile_action(
        item: &NSMenuItem,
        enabled: bool,
        state: ActionItemState,
        title: &Retained<NSString>,
        special_tag: ActionMenuItemSpecialTag,
        keystroke: Option<&AppMenuKeystrokeSafe>,
        item_id: ItemId,
        mtm: MainThreadMarker,
    ) {
        unsafe {
            item.setTitle(title);
            item.setEnabled(enabled);
            let state = match state {
                ActionItemState::On => NSControlStateValueOn,
                ActionItemState::Off => NSControlStateValueOff,
                ActionItemState::Mixed => NSControlStateValueMixed,
            };
            item.setState(state);

            let representer = MenuItemRepresenter::new(mtm);
            item.setRepresentedObject(Some(&representer));
            let selector = match special_tag {
                ActionMenuItemSpecialTag::None => sel!(itemCallback:),
                ActionMenuItemSpecialTag::Undo => sel!(undo:),
                ActionMenuItemSpecialTag::Redo => sel!(redo:),
                ActionMenuItemSpecialTag::Cut => sel!(cut:),
                ActionMenuItemSpecialTag::Copy => sel!(copy:),
                ActionMenuItemSpecialTag::Paste => sel!(paste:),
                ActionMenuItemSpecialTag::SelectAll => sel!(selectAll:),
            };
            item.setAction(Some(selector));
            item.setTag(NSInteger::try_from(item_id).unwrap());

            if let Some(keystroke) = keystroke {
                item.setKeyEquivalent(&keystroke.key);
                item.setKeyEquivalentModifierMask(keystroke.modifiers.into());
            } else {
                item.setKeyEquivalent(&NSString::new());
                item.setKeyEquivalentModifierMask(NSEventModifierFlags::empty());
            }
        }
    }