ui/cocoa/menu.m

changeset 569
5c06bb9ea458
parent 541
63289f61fb7f
child 570
a2df724b4cb9
--- a/ui/cocoa/menu.m	Thu Apr 17 10:33:05 2025 +0200
+++ b/ui/cocoa/menu.m	Thu Apr 17 11:18:57 2025 +0200
@@ -30,9 +30,11 @@
 #import <stdlib.h>
 #import <string.h>
 #import <stdarg.h>
+#import <objc/runtime.h>
 
 #import "menu.h"
 #import "window.h"
+#import "EventData.h"
 
 static ui_menu_add_f createMenuItem[] = {
     /* UI_MENU                 */ add_menu_widget,
@@ -67,8 +69,14 @@
 
 void add_menuitem_widget(NSMenu *parent, int i, UiMenuItemI *item) {
     UiMenuItem *it = (UiMenuItem*)item;
+    
     NSString *str = [[NSString alloc] initWithUTF8String:it->label];
-    NSMenuItem *menuItem = [parent addItemWithTitle:str action:nil keyEquivalent:@""];
+    NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuItemAction:) keyEquivalent:@""];
+    
+    if(it->callback) {
+        EventData *event = [[EventData alloc] init:it->callback userdata:it->userdata];
+        objc_setAssociatedObject(menuItem, "eventdata", event, OBJC_ASSOCIATION_RETAIN);
+    }
 }
 
 void add_menuseparator_widget(NSMenu *parent, int i, UiMenuItemI *item) {
@@ -95,15 +103,17 @@
 void ui_menu_init(void) {
     UiMenu *menus_begin = uic_get_menu_list();
     UiMenu *ls = menus_begin;
+    int index = 1;
     while(ls) {
         if(ls->item.type == UI_MENU) {
             NSString *str = [[NSString alloc] initWithUTF8String:ls->label];
             NSMenu *menu = [[NSMenu alloc] initWithTitle: str];
-            NSMenuItem *menuItem = [[NSApp mainMenu] addItemWithTitle:str action:nil keyEquivalent:@""];
+            NSMenuItem *menuItem = [[NSApp mainMenu] insertItemWithTitle:str action:nil keyEquivalent:@"" atIndex:index];
             [[NSApp mainMenu] setSubmenu:menu forItem:menuItem];
             
             add_menu_items(menu, 0, ls);
         }
         ls = (UiMenu*)ls->item.next;
+        index++;
     }
 }

mercurial