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