fix crash in listview_save_selection when only one item is selected (Motif)

Tue, 18 Nov 2025 13:49:41 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Tue, 18 Nov 2025 13:49:41 +0100
changeset 909
28c2a28026ab
parent 908
54150a21abb4
child 910
311bebe6aa82

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

mercurial