--- 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++;