|
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