ui/gtk/menu.c

changeset 1107
22d58a28fea7
parent 1092
0accf125a65f
child 1108
2c8ab8c17da7
--- a/ui/gtk/menu.c	Fri Apr 24 12:52:05 2026 +0200
+++ b/ui/gtk/menu.c	Fri Apr 24 12:52:18 2026 +0200
@@ -277,6 +277,7 @@
     ls->index = index;
     ls->oldcount = 0;
     ls->getvalue = il->getvalue;
+    ls->getvaluedata = il->getvaluedata;
     
     UiVar* var = uic_create_var(ui_global_context(), il->varname, UI_VAR_LIST);
     //UiVar* var = uic_create_var(obj->ctx, il->varname, UI_VAR_LIST);
@@ -340,10 +341,12 @@
         gtk_widget_show(widget);
     }
     
-    ui_getvaluefunc getvalue = list->getvalue;
+    ui_getvaluefunc2 getvalue = list->getvalue;
+    void *getvaluedata = list->getvaluedata;
     int i = 1;
     while(elm) {
-        char *label = (char*) (getvalue ? getvalue(elm, 0) : elm);
+        UiBool freeResult = FALSE;
+        char *label = (char*) (getvalue ? getvalue(ls, elm, i, 0, getvaluedata, &freeResult) : elm);
         
         GtkWidget *widget = gtk_menu_item_new_with_label(label);
         gtk_menu_shell_insert(list->menu, widget, list->index + i);
@@ -372,6 +375,10 @@
         
         elm = ui_list_next(ls);
         i++;
+        
+        if(freeResult) {
+            free(label);
+        }
     }
     
     list->oldcount = i;
@@ -825,6 +832,7 @@
     ls->index = index;
     ls->oldcount = 0;
     ls->getvalue = il->getvalue;
+    ls->getvaluedata = il->getvalue;
     
     GSimpleAction *action = g_simple_action_new(item->id, g_variant_type_new("i"));
     g_action_map_add_action(obj->ctx->action_map, G_ACTION(action));
@@ -943,11 +951,13 @@
     UiList *ls = list->var->value;
     
     // add list items
-    ui_getvaluefunc getvalue = list->getvalue;
+    ui_getvaluefunc2 getvalue = list->getvalue;
+    void *getvaluedata = list->getvaluedata;
     int i = 0;
     void* elm = ui_list_first(ls);
     while(elm) {
-        char *label = (char*) (getvalue ? getvalue(elm, 0) : elm);
+        UiBool freeResult = FALSE;
+        char *label = (char*) (getvalue ? getvalue(ls, elm, i, 0, getvaluedata, &freeResult) : elm);
         
         GMenuItem *item = g_menu_item_new(label, NULL);
         GVariant *v = g_variant_new("i", i);
@@ -957,6 +967,10 @@
         
         elm = ui_list_next(ls);
         i++;
+        
+        if(freeResult) {
+            free(label);
+        }
     }
     
     list->oldcount = i;

mercurial