Browse Source

[macOS] Fix crash when using system default menu shortcuts.

bruvzg 1 year ago
parent
commit
6371cc3d69
2 changed files with 15 additions and 13 deletions
  1. 1 1
      platform/macos/display_server_macos.mm
  2. 14 12
      platform/macos/godot_menu_delegate.mm

+ 1 - 1
platform/macos/display_server_macos.mm

@@ -649,7 +649,7 @@ void DisplayServerMacOS::menu_callback(id p_sender) {
 			}
 			}
 		}
 		}
 
 
-		if (value->callback != Callable()) {
+		if (value->callback.is_valid()) {
 			MenuCall mc;
 			MenuCall mc;
 			mc.tag = value->meta;
 			mc.tag = value->meta;
 			mc.callback = value->callback;
 			mc.callback = value->callback;

+ 14 - 12
platform/macos/godot_menu_delegate.mm

@@ -56,7 +56,7 @@
 - (void)menu:(NSMenu *)menu willHighlightItem:(NSMenuItem *)item {
 - (void)menu:(NSMenu *)menu willHighlightItem:(NSMenuItem *)item {
 	if (item) {
 	if (item) {
 		GodotMenuItem *value = [item representedObject];
 		GodotMenuItem *value = [item representedObject];
-		if (value && value->hover_callback != Callable()) {
+		if (value && value->hover_callback.is_valid()) {
 			// If custom callback is set, use it.
 			// If custom callback is set, use it.
 			value->hover_callback.call(value->meta);
 			value->hover_callback.call(value->meta);
 		}
 		}
@@ -73,19 +73,21 @@
 
 
 			if (ev_modifiers == item_modifiers) {
 			if (ev_modifiers == item_modifiers) {
 				GodotMenuItem *value = [menu_item representedObject];
 				GodotMenuItem *value = [menu_item representedObject];
-				if (value->key_callback != Callable()) {
-					// If custom callback is set, use it.
-					value->key_callback.call(value->meta);
-				} else {
-					// Otherwise redirect event to the engine.
-					if (DisplayServer::get_singleton()) {
-						[[[NSApplication sharedApplication] keyWindow] sendEvent:event];
+				if (value) {
+					if (value->key_callback.is_valid()) {
+						// If custom callback is set, use it.
+						value->key_callback.call(value->meta);
+					} else {
+						// Otherwise redirect event to the engine.
+						if (DisplayServer::get_singleton()) {
+							[[[NSApplication sharedApplication] keyWindow] sendEvent:event];
+						}
 					}
 					}
-				}
 
 
-				// Suppress default menu action.
-				*target = self;
-				*action = @selector(doNothing:);
+					// Suppress default menu action.
+					*target = self;
+					*action = @selector(doNothing:);
+				}
 				return YES;
 				return YES;
 			}
 			}
 		}
 		}