|
415 | 415 | obj->callback = p_callback; |
416 | 416 | obj->key_callback = p_key_callback; |
417 | 417 | obj->meta = p_tag; |
| 418 | + obj->accel = p_accel; |
418 | 419 | [menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)]; |
419 | 420 | [menu_item setRepresentedObject:obj]; |
420 | 421 | } |
|
433 | 434 | obj->key_callback = p_key_callback; |
434 | 435 | obj->meta = p_tag; |
435 | 436 | obj->checkable_type = CHECKABLE_TYPE_CHECK_BOX; |
| 437 | + obj->accel = p_accel; |
436 | 438 | [menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)]; |
437 | 439 | [menu_item setRepresentedObject:obj]; |
438 | 440 | } |
|
450 | 452 | obj->callback = p_callback; |
451 | 453 | obj->key_callback = p_key_callback; |
452 | 454 | obj->meta = p_tag; |
| 455 | + obj->accel = p_accel; |
453 | 456 | DisplayServerMacOS *ds = (DisplayServerMacOS *)DisplayServer::get_singleton(); |
454 | 457 | if (ds && p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) { |
455 | 458 | obj->img = p_icon->get_image(); |
|
479 | 482 | obj->key_callback = p_key_callback; |
480 | 483 | obj->meta = p_tag; |
481 | 484 | obj->checkable_type = CHECKABLE_TYPE_CHECK_BOX; |
| 485 | + obj->accel = p_accel; |
482 | 486 | DisplayServerMacOS *ds = (DisplayServerMacOS *)DisplayServer::get_singleton(); |
483 | 487 | if (ds && p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) { |
484 | 488 | obj->img = p_icon->get_image(); |
|
508 | 512 | obj->key_callback = p_key_callback; |
509 | 513 | obj->meta = p_tag; |
510 | 514 | obj->checkable_type = CHECKABLE_TYPE_RADIO_BUTTON; |
| 515 | + obj->accel = p_accel; |
511 | 516 | [menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)]; |
512 | 517 | [menu_item setRepresentedObject:obj]; |
513 | 518 | } |
|
526 | 531 | obj->key_callback = p_key_callback; |
527 | 532 | obj->meta = p_tag; |
528 | 533 | obj->checkable_type = CHECKABLE_TYPE_RADIO_BUTTON; |
| 534 | + obj->accel = p_accel; |
529 | 535 | DisplayServerMacOS *ds = (DisplayServerMacOS *)DisplayServer::get_singleton(); |
530 | 536 | if (ds && p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) { |
531 | 537 | obj->img = p_icon->get_image(); |
|
556 | 562 | obj->meta = p_tag; |
557 | 563 | obj->max_states = p_max_states; |
558 | 564 | obj->state = p_default_state; |
| 565 | + obj->accel = p_accel; |
559 | 566 | [menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)]; |
560 | 567 | [menu_item setRepresentedObject:obj]; |
561 | 568 | } |
|
1096 | 1103 | NSMenuItem *menu_item = [md->menu itemAtIndex:p_idx]; |
1097 | 1104 | if (menu_item) { |
1098 | 1105 | [md->menu setSubmenu:md_sub->menu forItem:menu_item]; |
| 1106 | + [menu_item setAction:nil]; |
| 1107 | + [menu_item setKeyEquivalent:@""]; |
1099 | 1108 | } |
1100 | 1109 | } else { |
1101 | 1110 | int item_start = _get_system_menu_start(md->menu); |
|
1108 | 1117 | ERR_PRINT("Can't remove open menu!"); |
1109 | 1118 | return; |
1110 | 1119 | } |
| 1120 | + GodotMenuItem *obj = [menu_item representedObject]; |
| 1121 | + String keycode = KeyMappingMacOS::keycode_get_native_string(obj->accel & KeyModifierMask::CODE_MASK); |
1111 | 1122 | [md->menu setSubmenu:nil forItem:menu_item]; |
| 1123 | + [menu_item setAction:@selector(globalMenuCallback:)]; |
| 1124 | + [menu_item setKeyEquivalent:[NSString stringWithUTF8String:keycode.utf8().get_data()]]; |
1112 | 1125 | } |
1113 | 1126 | } |
1114 | 1127 | } |
|
1124 | 1137 | ERR_FAIL_COND(p_idx >= item_start + item_count); |
1125 | 1138 | NSMenuItem *menu_item = [md->menu itemAtIndex:p_idx]; |
1126 | 1139 | if (menu_item) { |
1127 | | - if (p_keycode == Key::NONE) { |
1128 | | - [menu_item setKeyEquivalent:@""]; |
1129 | | - } else { |
1130 | | - [menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_keycode)]; |
1131 | | - String keycode = KeyMappingMacOS::keycode_get_native_string(p_keycode & KeyModifierMask::CODE_MASK); |
1132 | | - [menu_item setKeyEquivalent:[NSString stringWithUTF8String:keycode.utf8().get_data()]]; |
| 1140 | + GodotMenuItem *obj = [menu_item representedObject]; |
| 1141 | + obj->accel = p_keycode; |
| 1142 | + NSMenu *sub_menu = [menu_item submenu]; |
| 1143 | + if (!sub_menu) { |
| 1144 | + if (p_keycode == Key::NONE) { |
| 1145 | + [menu_item setKeyEquivalent:@""]; |
| 1146 | + } else { |
| 1147 | + [menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_keycode)]; |
| 1148 | + String keycode = KeyMappingMacOS::keycode_get_native_string(p_keycode & KeyModifierMask::CODE_MASK); |
| 1149 | + [menu_item setKeyEquivalent:[NSString stringWithUTF8String:keycode.utf8().get_data()]]; |
| 1150 | + } |
1133 | 1151 | } |
1134 | 1152 | } |
1135 | 1153 | } |
|
0 commit comments