ui/gtk/menu.c

changeset 1107
22d58a28fea7
parent 1092
0accf125a65f
child 1108
2c8ab8c17da7
equal deleted inserted replaced
1106:785c2c75b2a5 1107:22d58a28fea7
275 ls->object = obj; 275 ls->object = obj;
276 ls->menu = GTK_MENU_SHELL(p); 276 ls->menu = GTK_MENU_SHELL(p);
277 ls->index = index; 277 ls->index = index;
278 ls->oldcount = 0; 278 ls->oldcount = 0;
279 ls->getvalue = il->getvalue; 279 ls->getvalue = il->getvalue;
280 ls->getvaluedata = il->getvaluedata;
280 281
281 UiVar* var = uic_create_var(ui_global_context(), il->varname, UI_VAR_LIST); 282 UiVar* var = uic_create_var(ui_global_context(), il->varname, UI_VAR_LIST);
282 //UiVar* var = uic_create_var(obj->ctx, il->varname, UI_VAR_LIST); 283 //UiVar* var = uic_create_var(obj->ctx, il->varname, UI_VAR_LIST);
283 ls->var = var; 284 ls->var = var;
284 if(var) { 285 if(var) {
338 GtkWidget *widget = gtk_separator_menu_item_new(); 339 GtkWidget *widget = gtk_separator_menu_item_new();
339 gtk_menu_shell_insert(list->menu, widget, list->index); 340 gtk_menu_shell_insert(list->menu, widget, list->index);
340 gtk_widget_show(widget); 341 gtk_widget_show(widget);
341 } 342 }
342 343
343 ui_getvaluefunc getvalue = list->getvalue; 344 ui_getvaluefunc2 getvalue = list->getvalue;
345 void *getvaluedata = list->getvaluedata;
344 int i = 1; 346 int i = 1;
345 while(elm) { 347 while(elm) {
346 char *label = (char*) (getvalue ? getvalue(elm, 0) : elm); 348 UiBool freeResult = FALSE;
349 char *label = (char*) (getvalue ? getvalue(ls, elm, i, 0, getvaluedata, &freeResult) : elm);
347 350
348 GtkWidget *widget = gtk_menu_item_new_with_label(label); 351 GtkWidget *widget = gtk_menu_item_new_with_label(label);
349 gtk_menu_shell_insert(list->menu, widget, list->index + i); 352 gtk_menu_shell_insert(list->menu, widget, list->index + i);
350 gtk_widget_show(widget); 353 gtk_widget_show(widget);
351 354
370 event); 373 event);
371 } 374 }
372 375
373 elm = ui_list_next(ls); 376 elm = ui_list_next(ls);
374 i++; 377 i++;
378
379 if(freeResult) {
380 free(label);
381 }
375 } 382 }
376 383
377 list->oldcount = i; 384 list->oldcount = i;
378 } 385 }
379 386
823 ls->object = obj; 830 ls->object = obj;
824 ls->menu = p; 831 ls->menu = p;
825 ls->index = index; 832 ls->index = index;
826 ls->oldcount = 0; 833 ls->oldcount = 0;
827 ls->getvalue = il->getvalue; 834 ls->getvalue = il->getvalue;
835 ls->getvaluedata = il->getvalue;
828 836
829 GSimpleAction *action = g_simple_action_new(item->id, g_variant_type_new("i")); 837 GSimpleAction *action = g_simple_action_new(item->id, g_variant_type_new("i"));
830 g_action_map_add_action(obj->ctx->action_map, G_ACTION(action)); 838 g_action_map_add_action(obj->ctx->action_map, G_ACTION(action));
831 g_object_unref(action); 839 g_object_unref(action);
832 snprintf(ls->action, 32, "win.%s", item->id); 840 snprintf(ls->action, 32, "win.%s", item->id);
941 g_menu_remove(list->menu, list->index); 949 g_menu_remove(list->menu, list->index);
942 } 950 }
943 UiList *ls = list->var->value; 951 UiList *ls = list->var->value;
944 952
945 // add list items 953 // add list items
946 ui_getvaluefunc getvalue = list->getvalue; 954 ui_getvaluefunc2 getvalue = list->getvalue;
955 void *getvaluedata = list->getvaluedata;
947 int i = 0; 956 int i = 0;
948 void* elm = ui_list_first(ls); 957 void* elm = ui_list_first(ls);
949 while(elm) { 958 while(elm) {
950 char *label = (char*) (getvalue ? getvalue(elm, 0) : elm); 959 UiBool freeResult = FALSE;
960 char *label = (char*) (getvalue ? getvalue(ls, elm, i, 0, getvaluedata, &freeResult) : elm);
951 961
952 GMenuItem *item = g_menu_item_new(label, NULL); 962 GMenuItem *item = g_menu_item_new(label, NULL);
953 GVariant *v = g_variant_new("i", i); 963 GVariant *v = g_variant_new("i", i);
954 g_menu_item_set_action_and_target_value(item, list->action, v); 964 g_menu_item_set_action_and_target_value(item, list->action, v);
955 g_menu_insert_item(list->menu, list->index+i, item); 965 g_menu_insert_item(list->menu, list->index+i, item);
956 g_object_unref(item); 966 g_object_unref(item);
957 967
958 elm = ui_list_next(ls); 968 elm = ui_list_next(ls);
959 i++; 969 i++;
970
971 if(freeResult) {
972 free(label);
973 }
960 } 974 }
961 975
962 list->oldcount = i; 976 list->oldcount = i;
963 } 977 }
964 978

mercurial