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());
}
}
}