|
373 | 373 | menu_item = [md->menu insertItemWithTitle:[NSString stringWithUTF8String:p_label.utf8().get_data()] action:nil keyEquivalent:@"" atIndex:p_index]; |
374 | 374 |
|
375 | 375 | GodotMenuItem *obj = [[GodotMenuItem alloc] init]; |
376 | | - obj->callback = Callable(); |
377 | | - obj->key_callback = Callable(); |
378 | 376 | obj->meta = p_tag; |
379 | | - obj->checkable_type = CHECKABLE_TYPE_NONE; |
380 | | - obj->max_states = 0; |
381 | | - obj->state = 0; |
382 | 377 | [menu_item setRepresentedObject:obj]; |
383 | 378 |
|
384 | 379 | [md_sub->menu setTitle:[NSString stringWithUTF8String:p_label.utf8().get_data()]]; |
|
417 | 412 | obj->callback = p_callback; |
418 | 413 | obj->key_callback = p_key_callback; |
419 | 414 | obj->meta = p_tag; |
420 | | - obj->checkable_type = CHECKABLE_TYPE_NONE; |
421 | | - obj->max_states = 0; |
422 | | - obj->state = 0; |
423 | 415 | [menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)]; |
424 | 416 | [menu_item setRepresentedObject:obj]; |
425 | 417 | } |
|
438 | 430 | obj->key_callback = p_key_callback; |
439 | 431 | obj->meta = p_tag; |
440 | 432 | obj->checkable_type = CHECKABLE_TYPE_CHECK_BOX; |
441 | | - obj->max_states = 0; |
442 | | - obj->state = 0; |
443 | 433 | [menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)]; |
444 | 434 | [menu_item setRepresentedObject:obj]; |
445 | 435 | } |
|
457 | 447 | obj->callback = p_callback; |
458 | 448 | obj->key_callback = p_key_callback; |
459 | 449 | obj->meta = p_tag; |
460 | | - obj->checkable_type = CHECKABLE_TYPE_NONE; |
461 | | - obj->max_states = 0; |
462 | | - obj->state = 0; |
463 | 450 | DisplayServerMacOS *ds = (DisplayServerMacOS *)DisplayServer::get_singleton(); |
464 | 451 | if (ds && p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) { |
465 | 452 | obj->img = p_icon->get_image(); |
|
489 | 476 | obj->key_callback = p_key_callback; |
490 | 477 | obj->meta = p_tag; |
491 | 478 | obj->checkable_type = CHECKABLE_TYPE_CHECK_BOX; |
492 | | - obj->max_states = 0; |
493 | | - obj->state = 0; |
494 | 479 | DisplayServerMacOS *ds = (DisplayServerMacOS *)DisplayServer::get_singleton(); |
495 | 480 | if (ds && p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) { |
496 | 481 | obj->img = p_icon->get_image(); |
|
520 | 505 | obj->key_callback = p_key_callback; |
521 | 506 | obj->meta = p_tag; |
522 | 507 | obj->checkable_type = CHECKABLE_TYPE_RADIO_BUTTON; |
523 | | - obj->max_states = 0; |
524 | | - obj->state = 0; |
525 | 508 | [menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)]; |
526 | 509 | [menu_item setRepresentedObject:obj]; |
527 | 510 | } |
|
540 | 523 | obj->key_callback = p_key_callback; |
541 | 524 | obj->meta = p_tag; |
542 | 525 | obj->checkable_type = CHECKABLE_TYPE_RADIO_BUTTON; |
543 | | - obj->max_states = 0; |
544 | | - obj->state = 0; |
545 | 526 | DisplayServerMacOS *ds = (DisplayServerMacOS *)DisplayServer::get_singleton(); |
546 | 527 | if (ds && p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) { |
547 | 528 | obj->img = p_icon->get_image(); |
|
570 | 551 | obj->callback = p_callback; |
571 | 552 | obj->key_callback = p_key_callback; |
572 | 553 | obj->meta = p_tag; |
573 | | - obj->checkable_type = CHECKABLE_TYPE_NONE; |
574 | 554 | obj->max_states = p_max_states; |
575 | 555 | obj->state = p_default_state; |
576 | 556 | [menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)]; |
|
640 | 620 | ERR_FAIL_COND_V(p_idx >= item_start + item_count, false); |
641 | 621 | const NSMenuItem *menu_item = [md->menu itemAtIndex:p_idx]; |
642 | 622 | if (menu_item) { |
643 | | - return ([menu_item state] == NSControlStateValueOn); |
| 623 | + const GodotMenuItem *obj = [menu_item representedObject]; |
| 624 | + if (obj) { |
| 625 | + return obj->checked; |
| 626 | + } |
644 | 627 | } |
645 | 628 | return false; |
646 | 629 | } |
|
958 | 941 | ERR_FAIL_COND(p_idx >= item_start + item_count); |
959 | 942 | NSMenuItem *menu_item = [md->menu itemAtIndex:p_idx]; |
960 | 943 | if (menu_item) { |
961 | | - if (p_checked) { |
962 | | - [menu_item setState:NSControlStateValueOn]; |
963 | | - } else { |
964 | | - [menu_item setState:NSControlStateValueOff]; |
| 944 | + GodotMenuItem *obj = [menu_item representedObject]; |
| 945 | + if (obj) { |
| 946 | + obj->checked = p_checked; |
| 947 | + if (p_checked) { |
| 948 | + [menu_item setState:NSControlStateValueOn]; |
| 949 | + } else { |
| 950 | + [menu_item setState:NSControlStateValueOff]; |
| 951 | + } |
965 | 952 | } |
966 | 953 | } |
967 | 954 | } |
|
0 commit comments