ui/cocoa/menu.m

changeset 709
131d38916ac7
parent 708
0598e70c6489
child 710
6c7f700e4900
--- a/ui/cocoa/menu.m	Sat Aug 23 11:45:10 2025 +0200
+++ b/ui/cocoa/menu.m	Sat Aug 23 14:00:09 2025 +0200
@@ -63,46 +63,51 @@
     /* UI_MENU_SEPARATOR       */ add_menuseparator_widget
 };
 
-void ui_add_menu_items(NSMenu *parent, int i, UiMenu *menu) {
+void ui_add_menu_items(UiObject *obj, NSMenu *parent, int i, UiMenu *menu) {
     UiMenuItemI *it = menu->items_begin;
     int index = 0;
     while(it) {
-        createMenuItem[it->type](parent, index, it);
+        createMenuItem[it->type](obj, parent, index, it);
         it = it->next;
         index++;
     }
 }
 
-void add_menu_widget(NSMenu *parent, int i, UiMenuItemI *item) {
+void add_menu_widget(UiObject *obj, NSMenu *parent, int i, UiMenuItemI *item) {
     UiMenu *it = (UiMenu*)item;
     NSString *str = [[NSString alloc] initWithUTF8String:it->label];
     NSMenu *menu = [[NSMenu alloc] initWithTitle: str];
     NSMenuItem *menuItem = [parent addItemWithTitle:str action:nil keyEquivalent:@""];
     [parent setSubmenu:menu forItem:menuItem];
     
-    ui_add_menu_items(menu, i, it);
+    ui_add_menu_items(obj, menu, i, it);
 }
 
-void add_menuitem_widget(NSMenu *parent, int i, UiMenuItemI *item) {
+void add_menuitem_widget(UiObject *obj, NSMenu *parent, int i, UiMenuItemI *item) {
     UiMenuItem *it = (UiMenuItem*)item;
     
     NSString *str = [[NSString alloc] initWithUTF8String:it->label];
-    NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuItemAction:) keyEquivalent:@""];
+    NSMenuItem *menuItem = [parent addItemWithTitle:str action:@selector(menuItemAction) keyEquivalent:@""];
     
     if(it->callback) {
         EventData *event = [[EventData alloc] init:it->callback userdata:it->userdata];
+        if(obj) {
+            event.obj = obj;
+            menuItem.target = event;
+            menuItem.action = @selector(handleEvent:);
+        }
         objc_setAssociatedObject(menuItem, "eventdata", event, OBJC_ASSOCIATION_RETAIN);
     }
 }
 
-void add_menuseparator_widget(NSMenu *parent, int i, UiMenuItemI *item) {
+void add_menuseparator_widget(UiObject *obj, NSMenu *parent, int i, UiMenuItemI *item) {
     NSMenuItem *menuItem = [NSMenuItem separatorItem];
     [parent addItem:menuItem];
 }
 
 static int nItem = 0;
 
-void add_checkitem_widget(NSMenu *parent, int i, UiMenuItemI *item) {
+void add_checkitem_widget(UiObject *obj, NSMenu *parent, int i, UiMenuItemI *item) {
     UiMenuCheckItem *it = (UiMenuCheckItem*)item;
     
     NSString *str = [[NSString alloc] initWithUTF8String:it->label];
@@ -117,7 +122,7 @@
     [bindingItems addObject:mItem];
 }
 
-void add_radioitem_widget(NSMenu *parent, int index, UiMenuItemI *item) {
+void add_radioitem_widget(UiObject *obj, NSMenu *parent, int index, UiMenuItemI *item) {
     UiMenuRadioItem *it = (UiMenuRadioItem*)item;
     
     NSString *str = [[NSString alloc] initWithUTF8String:it->label];
@@ -132,11 +137,11 @@
     [bindingItems addObject:mItem];
 }
 
-void add_checkitemnv_widget(NSMenu *parent, int i, UiMenuItemI *item) {
+void add_checkitemnv_widget(UiObject *obj, NSMenu *parent, int i, UiMenuItemI *item) {
     
 }
 
-void add_menuitem_list_widget(NSMenu *parent, int i, UiMenuItemI *item) {
+void add_menuitem_list_widget(UiObject *obj, NSMenu *parent, int i, UiMenuItemI *item) {
     
 }
 
@@ -154,7 +159,7 @@
             NSMenuItem *menuItem = [[NSApp mainMenu] insertItemWithTitle:str action:nil keyEquivalent:@"" atIndex:index];
             [[NSApp mainMenu] setSubmenu:menu forItem:menuItem];
             
-            ui_add_menu_items(menu, 0, ls);
+            ui_add_menu_items(NULL, menu, 0, ls);
         }
         ls = (UiMenu*)ls->item.next;
         index++;

mercurial