Tue, 18 Nov 2025 13:49:41 +0100
fix crash in listview_save_selection when only one item is selected (Motif)
| application/demo_bindings.c | file | annotate | diff | comparison | revisions | |
| ui/motif/list.c | file | annotate | diff | comparison | revisions |
--- a/application/demo_bindings.c Tue Nov 18 13:40:15 2025 +0100 +++ b/application/demo_bindings.c Tue Nov 18 13:49:41 2025 +0100 @@ -97,7 +97,7 @@ ui_llabel(obj, .varname = "name", .hfill = TRUE, .vfill = TRUE); ui_newline(obj); - ui_combobox(obj, .varname = "doclist", .colspan = 2, .onactivate = switch_document, .getvalue = doclist_get_value, .colspan = 2, .hfill = TRUE); + ui_listview(obj, .height = 200, .varname = "doclist", .colspan = 2, .onactivate = switch_document, .getvalue = doclist_get_value, .colspan = 2, .hfill = TRUE); ui_newline(obj); ui_frame(obj, .label = "Document", .colspan = 2, .fill = TRUE) { @@ -117,6 +117,8 @@ Document *doc = ui_list_get(wdata->doclist, 0); ui_attach_document(obj->ctx, doc); + //ui_list_setselection(wdata->doclist, 0); + ui_show(obj); }
--- a/ui/motif/list.c Tue Nov 18 13:40:15 2025 +0100 +++ b/ui/motif/list.c Tue Nov 18 13:49:41 2025 +0100 @@ -28,6 +28,7 @@ #include <stdio.h> #include <stdlib.h> +#include <Xm/Xm.h> #include "container.h" @@ -144,8 +145,12 @@ UiListSelection sel = { cb->selected_item_count, NULL }; if(sel.count > 0) { sel.rows = calloc(sel.count, sizeof(int)); - for(int i=0;i<sel.count;i++) { - sel.rows[i] = cb->selected_item_positions[i]-1; + if(sel.count == 1) { + sel.rows[0] = cb->item_position-1; + } else if(cb->selected_item_positions) { + for(int i=0;i<sel.count;i++) { + sel.rows[i] = cb->selected_item_positions[i]-1; + } } } free(listview->current_selection.rows);