You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-12-31 18:41:20 +00:00
[macOS] Fix disabling native menu items in system menus.
This commit is contained in:
@@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
class OS_MacOS_NSApp;
|
class OS_MacOS_NSApp;
|
||||||
|
|
||||||
@interface GodotApplicationDelegate : NSObject <NSUserInterfaceItemSearching, NSApplicationDelegate>
|
@interface GodotApplicationDelegate : NSObject <NSUserInterfaceItemSearching, NSApplicationDelegate, NSMenuItemValidation>
|
||||||
|
|
||||||
- (GodotApplicationDelegate *)initWithOS:(OS_MacOS_NSApp *)os;
|
- (GodotApplicationDelegate *)initWithOS:(OS_MacOS_NSApp *)os;
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
#import "godot_application_delegate.h"
|
#import "godot_application_delegate.h"
|
||||||
|
|
||||||
#import "display_server_macos.h"
|
#import "display_server_macos.h"
|
||||||
|
#import "godot_menu_item.h"
|
||||||
#import "key_mapping_macos.h"
|
#import "key_mapping_macos.h"
|
||||||
#import "native_menu_macos.h"
|
#import "native_menu_macos.h"
|
||||||
#import "os_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 {
|
- (void)globalMenuCallback:(id)sender {
|
||||||
DisplayServerMacOS *ds = Object::cast_to<DisplayServerMacOS>(DisplayServer::get_singleton());
|
DisplayServerMacOS *ds = Object::cast_to<DisplayServerMacOS>(DisplayServer::get_singleton());
|
||||||
if (ds) {
|
if (ds) {
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ enum GlobalMenuCheckType {
|
|||||||
Key accel;
|
Key accel;
|
||||||
GlobalMenuCheckType checkable_type;
|
GlobalMenuCheckType checkable_type;
|
||||||
bool checked;
|
bool checked;
|
||||||
|
bool enabled;
|
||||||
int max_states;
|
int max_states;
|
||||||
int state;
|
int state;
|
||||||
Ref<Image> img;
|
Ref<Image> img;
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
self->callback = Callable();
|
self->callback = Callable();
|
||||||
self->key_callback = Callable();
|
self->key_callback = Callable();
|
||||||
self->checkable_type = GlobalMenuCheckType::CHECKABLE_TYPE_NONE;
|
self->checkable_type = GlobalMenuCheckType::CHECKABLE_TYPE_NONE;
|
||||||
|
self->enabled = true;
|
||||||
self->checked = false;
|
self->checked = false;
|
||||||
self->max_states = 0;
|
self->max_states = 0;
|
||||||
self->state = 0;
|
self->state = 0;
|
||||||
|
|||||||
@@ -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);
|
ERR_FAIL_COND(p_idx >= item_start + item_count);
|
||||||
NSMenuItem *menu_item = [md->menu itemAtIndex:p_idx];
|
NSMenuItem *menu_item = [md->menu itemAtIndex:p_idx];
|
||||||
if (menu_item) {
|
if (menu_item) {
|
||||||
|
GodotMenuItem *obj = [menu_item representedObject];
|
||||||
|
obj->enabled = !p_disabled;
|
||||||
[menu_item setEnabled:(!p_disabled)];
|
[menu_item setEnabled:(!p_disabled)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user