diff -r 673e7e41c93e -r 9693f447a0c7 ui/cocoa/ListDelegate.m --- a/ui/cocoa/ListDelegate.m Sat Aug 23 17:45:15 2025 +0200 +++ b/ui/cocoa/ListDelegate.m Sat Aug 23 18:31:55 2025 +0200 @@ -30,7 +30,8 @@ @implementation ListDelegate -- (id)init:(UiObject*)obj { +- (id)init:(NSTableView*) tableview obj:(UiObject*)obj { + _tableview = tableview; _obj = obj; return self; } @@ -57,4 +58,42 @@ } } +- (void) tableViewSelectionDidChange:(NSNotification *) notification { + if(_onselection) { + UiListSelection sel = ui_tableview_selection(_tableview); + + UiEvent event; + event.obj = _obj; + event.window = event.obj->window; + event.document = event.obj->ctx->document; + event.eventdata = &sel; + event.eventdatatype = UI_EVENT_DATA_LIST_SELECTION; + event.intval = 0; + event.set = ui_get_setop(); + + _onselection(&event, _onselectiondata); + } +} + @end + +UiListSelection ui_tableview_selection(NSTableView *tableview) { + NSIndexSet *indexSet = tableview.selectedRowIndexes; + NSUInteger count = [indexSet count]; + + if(count == 0) { + return (UiListSelection){0, NULL}; + } + + int *rows = calloc(count, sizeof(int)); + + __block NSUInteger i = 0; + [indexSet enumerateIndexesUsingBlock:^(NSUInteger index, BOOL *stop) { + rows[i++] = (int)index; + }]; + + UiListSelection sel; + sel.count = (int)count; + sel.rows = rows; + return sel; +}