1
0
Fork 0

Merge pull request #108596 from bruvzg/mac_menu_autoen

[macOS] Fix disabling native menu items in system menus.
This commit is contained in:
Rémi Verschelde 2025-12-18 23:29:20 +01:00
commit c5247f68a4
No known key found for this signature in database
GPG Key ID: C3336907360768E1
5 changed files with 16 additions and 1 deletions

View File

@ -37,7 +37,7 @@
class OS_MacOS_NSApp;
@interface GodotApplicationDelegate : NSObject <NSUserInterfaceItemSearching, NSApplicationDelegate>
@interface GodotApplicationDelegate : NSObject <NSUserInterfaceItemSearching, NSApplicationDelegate, NSMenuItemValidation>
- (GodotApplicationDelegate *)initWithOS:(OS_MacOS_NSApp *)os;

View File

@ -31,6 +31,7 @@
#import "godot_application_delegate.h"
#import "display_server_macos.h"
#import "godot_menu_item.h"
#import "key_mapping_macos.h"
#import "native_menu_macos.h"
#import "os_macos.h"
@ -282,6 +283,16 @@ constexpr static NSEventModifierFlags FLAGS = NSEventModifierFlagCommand | NSEve
}
}
- (BOOL)validateMenuItem:(NSMenuItem *)item {
if (item) {
GodotMenuItem *value = [item representedObject];
if (value) {
return value->enabled;
}
}
return YES;
}
- (void)globalMenuCallback:(id)sender {
DisplayServerMacOS *ds = Object::cast_to<DisplayServerMacOS>(DisplayServer::get_singleton());
if (ds) {

View File

@ -53,6 +53,7 @@ enum GlobalMenuCheckType {
Key accel;
GlobalMenuCheckType checkable_type;
bool checked;
bool enabled;
int max_states;
int state;
Ref<Image> img;

View File

@ -38,6 +38,7 @@
self->callback = Callable();
self->key_callback = Callable();
self->checkable_type = GlobalMenuCheckType::CHECKABLE_TYPE_NONE;
self->enabled = true;
self->checked = false;
self->max_states = 0;
self->state = 0;

View File

@ -1204,6 +1204,8 @@ void NativeMenuMacOS::set_item_disabled(const RID &p_rid, int p_idx, bool p_disa
ERR_FAIL_COND(p_idx >= item_start + item_count);
NSMenuItem *menu_item = [md->menu itemAtIndex:p_idx];
if (menu_item) {
GodotMenuItem *obj = [menu_item representedObject];
obj->enabled = !p_disabled;
[menu_item setEnabled:(!p_disabled)];
}
}