You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
[NativeMenu] Do not auto toggle check/multi-state items. Add is_native_menu method.
This commit is contained in:
@@ -373,12 +373,7 @@ int NativeMenuMacOS::add_submenu_item(const RID &p_rid, const String &p_label, c
|
||||
menu_item = [md->menu insertItemWithTitle:[NSString stringWithUTF8String:p_label.utf8().get_data()] action:nil keyEquivalent:@"" atIndex:p_index];
|
||||
|
||||
GodotMenuItem *obj = [[GodotMenuItem alloc] init];
|
||||
obj->callback = Callable();
|
||||
obj->key_callback = Callable();
|
||||
obj->meta = p_tag;
|
||||
obj->checkable_type = CHECKABLE_TYPE_NONE;
|
||||
obj->max_states = 0;
|
||||
obj->state = 0;
|
||||
[menu_item setRepresentedObject:obj];
|
||||
|
||||
[md_sub->menu setTitle:[NSString stringWithUTF8String:p_label.utf8().get_data()]];
|
||||
@@ -417,9 +412,6 @@ int NativeMenuMacOS::add_item(const RID &p_rid, const String &p_label, const Cal
|
||||
obj->callback = p_callback;
|
||||
obj->key_callback = p_key_callback;
|
||||
obj->meta = p_tag;
|
||||
obj->checkable_type = CHECKABLE_TYPE_NONE;
|
||||
obj->max_states = 0;
|
||||
obj->state = 0;
|
||||
[menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)];
|
||||
[menu_item setRepresentedObject:obj];
|
||||
}
|
||||
@@ -438,8 +430,6 @@ int NativeMenuMacOS::add_check_item(const RID &p_rid, const String &p_label, con
|
||||
obj->key_callback = p_key_callback;
|
||||
obj->meta = p_tag;
|
||||
obj->checkable_type = CHECKABLE_TYPE_CHECK_BOX;
|
||||
obj->max_states = 0;
|
||||
obj->state = 0;
|
||||
[menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)];
|
||||
[menu_item setRepresentedObject:obj];
|
||||
}
|
||||
@@ -457,9 +447,6 @@ int NativeMenuMacOS::add_icon_item(const RID &p_rid, const Ref<Texture2D> &p_ico
|
||||
obj->callback = p_callback;
|
||||
obj->key_callback = p_key_callback;
|
||||
obj->meta = p_tag;
|
||||
obj->checkable_type = CHECKABLE_TYPE_NONE;
|
||||
obj->max_states = 0;
|
||||
obj->state = 0;
|
||||
DisplayServerMacOS *ds = (DisplayServerMacOS *)DisplayServer::get_singleton();
|
||||
if (ds && p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) {
|
||||
obj->img = p_icon->get_image();
|
||||
@@ -489,8 +476,6 @@ int NativeMenuMacOS::add_icon_check_item(const RID &p_rid, const Ref<Texture2D>
|
||||
obj->key_callback = p_key_callback;
|
||||
obj->meta = p_tag;
|
||||
obj->checkable_type = CHECKABLE_TYPE_CHECK_BOX;
|
||||
obj->max_states = 0;
|
||||
obj->state = 0;
|
||||
DisplayServerMacOS *ds = (DisplayServerMacOS *)DisplayServer::get_singleton();
|
||||
if (ds && p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) {
|
||||
obj->img = p_icon->get_image();
|
||||
@@ -520,8 +505,6 @@ int NativeMenuMacOS::add_radio_check_item(const RID &p_rid, const String &p_labe
|
||||
obj->key_callback = p_key_callback;
|
||||
obj->meta = p_tag;
|
||||
obj->checkable_type = CHECKABLE_TYPE_RADIO_BUTTON;
|
||||
obj->max_states = 0;
|
||||
obj->state = 0;
|
||||
[menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)];
|
||||
[menu_item setRepresentedObject:obj];
|
||||
}
|
||||
@@ -540,8 +523,6 @@ int NativeMenuMacOS::add_icon_radio_check_item(const RID &p_rid, const Ref<Textu
|
||||
obj->key_callback = p_key_callback;
|
||||
obj->meta = p_tag;
|
||||
obj->checkable_type = CHECKABLE_TYPE_RADIO_BUTTON;
|
||||
obj->max_states = 0;
|
||||
obj->state = 0;
|
||||
DisplayServerMacOS *ds = (DisplayServerMacOS *)DisplayServer::get_singleton();
|
||||
if (ds && p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) {
|
||||
obj->img = p_icon->get_image();
|
||||
@@ -570,7 +551,6 @@ int NativeMenuMacOS::add_multistate_item(const RID &p_rid, const String &p_label
|
||||
obj->callback = p_callback;
|
||||
obj->key_callback = p_key_callback;
|
||||
obj->meta = p_tag;
|
||||
obj->checkable_type = CHECKABLE_TYPE_NONE;
|
||||
obj->max_states = p_max_states;
|
||||
obj->state = p_default_state;
|
||||
[menu_item setKeyEquivalentModifierMask:KeyMappingMacOS::keycode_get_native_mask(p_accel)];
|
||||
@@ -640,7 +620,10 @@ bool NativeMenuMacOS::is_item_checked(const RID &p_rid, int p_idx) const {
|
||||
ERR_FAIL_COND_V(p_idx >= item_start + item_count, false);
|
||||
const NSMenuItem *menu_item = [md->menu itemAtIndex:p_idx];
|
||||
if (menu_item) {
|
||||
return ([menu_item state] == NSControlStateValueOn);
|
||||
const GodotMenuItem *obj = [menu_item representedObject];
|
||||
if (obj) {
|
||||
return obj->checked;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -958,10 +941,14 @@ void NativeMenuMacOS::set_item_checked(const RID &p_rid, int p_idx, bool p_check
|
||||
ERR_FAIL_COND(p_idx >= item_start + item_count);
|
||||
NSMenuItem *menu_item = [md->menu itemAtIndex:p_idx];
|
||||
if (menu_item) {
|
||||
if (p_checked) {
|
||||
[menu_item setState:NSControlStateValueOn];
|
||||
} else {
|
||||
[menu_item setState:NSControlStateValueOff];
|
||||
GodotMenuItem *obj = [menu_item representedObject];
|
||||
if (obj) {
|
||||
obj->checked = p_checked;
|
||||
if (p_checked) {
|
||||
[menu_item setState:NSControlStateValueOn];
|
||||
} else {
|
||||
[menu_item setState:NSControlStateValueOff];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user