Browse Source

Merge pull request #89953 from bruvzg/macos_menu_shortcuts

[macOS] Fix non-global native menu shortcuts.
Rémi Verschelde 1 năm trước cách đây
mục cha
commit
3881778ebc

+ 2 - 0
platform/macos/display_server_macos.h

@@ -241,6 +241,8 @@ public:
 	NSImage *_convert_to_nsimg(Ref<Image> &p_image) const;
 	NSImage *_convert_to_nsimg(Ref<Image> &p_image) const;
 	Point2i _get_screens_origin() const;
 	Point2i _get_screens_origin() const;
 
 
+	void set_menu_delegate(NSMenu *p_menu);
+
 	void send_event(NSEvent *p_event);
 	void send_event(NSEvent *p_event);
 	void send_window_event(const WindowData &p_wd, WindowEvent p_event);
 	void send_window_event(const WindowData &p_wd, WindowEvent p_event);
 	void release_pressed_events();
 	void release_pressed_events();

+ 4 - 0
platform/macos/display_server_macos.mm

@@ -290,6 +290,10 @@ void DisplayServerMacOS::_update_displays_arrangement() {
 	displays_arrangement_dirty = false;
 	displays_arrangement_dirty = false;
 }
 }
 
 
+void DisplayServerMacOS::set_menu_delegate(NSMenu *p_menu) {
+	[p_menu setDelegate:menu_delegate];
+}
+
 Point2i DisplayServerMacOS::_get_screens_origin() const {
 Point2i DisplayServerMacOS::_get_screens_origin() const {
 	// Returns the native top-left screen coordinate of the smallest rectangle
 	// Returns the native top-left screen coordinate of the smallest rectangle
 	// that encompasses all screens. Needed in get_screen_position(),
 	// that encompasses all screens. Needed in get_screen_position(),

+ 5 - 0
platform/macos/native_menu_macos.mm

@@ -223,6 +223,11 @@ RID NativeMenuMacOS::get_system_menu(SystemMenus p_menu_id) const {
 RID NativeMenuMacOS::create_menu() {
 RID NativeMenuMacOS::create_menu() {
 	MenuData *md = memnew(MenuData);
 	MenuData *md = memnew(MenuData);
 	md->menu = [[NSMenu alloc] initWithTitle:@""];
 	md->menu = [[NSMenu alloc] initWithTitle:@""];
+	[md->menu setAutoenablesItems:NO];
+	DisplayServerMacOS *ds = (DisplayServerMacOS *)DisplayServer::get_singleton();
+	if (ds) {
+		ds->set_menu_delegate(md->menu);
+	}
 	RID rid = menus.make_rid(md);
 	RID rid = menus.make_rid(md);
 	menu_lookup[md->menu] = rid;
 	menu_lookup[md->menu] = rid;
 	return rid;
 	return rid;