improve listbox setselection functions (GTK)

Thu, 27 Nov 2025 19:48:30 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Thu, 27 Nov 2025 19:48:30 +0100
changeset 939
fdc6a46100a3
parent 938
be4c88ded783
child 940
105bccb3dc66

improve listbox setselection functions (GTK)

ui/gtk/list.c file | annotate | diff | comparison | revisions
--- a/ui/gtk/list.c	Thu Nov 27 15:15:09 2025 +0100
+++ b/ui/gtk/list.c	Thu Nov 27 19:48:30 2025 +0100
@@ -2300,13 +2300,15 @@
 
 void ui_listbox_dynamic_setselection(UiList *list, UiListSelection sel) {
     UiListBox *uilistbox = list->obj;
+    gtk_list_box_unselect_all(uilistbox->listbox);
     if(sel.count > 0) {
-        GtkListBoxRow *row = gtk_list_box_get_row_at_index(uilistbox->listbox, sel.rows[0]);
-        if(row) {
-            gtk_list_box_select_row(uilistbox->listbox, row);
+        int index = sel.rows[0];
+        if(index >= 0) {
+            GtkListBoxRow *row = gtk_list_box_get_row_at_index(uilistbox->listbox, index);
+            if(row) {
+                gtk_list_box_select_row(uilistbox->listbox, row);
+            }
         }
-    } else {
-        gtk_list_box_unselect_all(uilistbox->listbox);
     }
 }
 
@@ -2690,17 +2692,16 @@
 void ui_listbox_list_setselection(UiList *list, UiListSelection sel) {
     UiListBoxSubList *sublist = list->obj;
     UiListBox *uilistbox = sublist->listbox;
+    gtk_list_box_unselect_all(uilistbox->listbox);
     if(sel.count > 0) {
         int index = sel.rows[0];
-        if(index < sublist->numitems) {
+        if(index >= 0 && index < sublist->numitems) {
             int global_index = sublist->startpos + index;
             GtkListBoxRow *row = gtk_list_box_get_row_at_index(uilistbox->listbox, global_index);
             if(row) {
                 gtk_list_box_select_row(uilistbox->listbox, row);
             }
         }
-    } else {
-        gtk_list_box_unselect_all(uilistbox->listbox);
     }
 }
 

mercurial