diff -r 52d05b12ea87 -r c13653b1cc9d ui/gtk/menu.c --- a/ui/gtk/menu.c Fri Oct 17 20:21:50 2025 +0200 +++ b/ui/gtk/menu.c Sat Oct 18 09:33:39 2025 +0200 @@ -413,6 +413,9 @@ GMenu *section = NULL; while(it) { if(it->type == UI_MENU_SEPARATOR) { + if(section) { + g_object_unref(section); + } section = g_menu_new(); g_menu_append_section(parent, NULL, G_MENU_MODEL(section)); index++; @@ -426,6 +429,9 @@ } it = it->next; } + if(section) { + g_object_unref(section); + } } void ui_gmenu_add_menu(GMenu *parent, int index, UiMenuItemI *item, UiObject *obj) { @@ -433,6 +439,7 @@ GMenu *menu = g_menu_new(); ui_gmenu_add_menu_items(menu, 0, mi, obj); g_menu_append_submenu(parent, mi->label, G_MENU_MODEL(menu)); + g_object_unref(menu); } static void action_enable(GSimpleAction *action, int enabled) { @@ -444,6 +451,7 @@ GSimpleAction *action = g_simple_action_new(item->id, NULL); g_action_map_add_action(obj->ctx->action_map, G_ACTION(action)); + g_object_unref(action); if(i->groups) { CxList *groups = cxArrayListCreateSimple(sizeof(int), i->ngroups); @@ -474,7 +482,8 @@ } char action_name[32]; - snprintf(action_name, 32, "win.%s", item->id); + snprintf(action_name, 32, "win.%s", item->id); + g_menu_append(parent, i->label, action_name); } @@ -614,6 +623,7 @@ GVariant *state = g_variant_new_string("0"); GSimpleAction *newAction = g_simple_action_new_stateful(i->varname, G_VARIANT_TYPE_STRING, state); g_action_map_add_action(obj->ctx->action_map, G_ACTION(newAction)); + g_object_unref(newAction); group = create_radio_group(obj, i, newAction); g_object_set_data(G_OBJECT(newAction), "ui_radiogroup", group); @@ -675,6 +685,7 @@ 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)); + g_object_unref(action); snprintf(ls->action, 32, "win.%s", item->id); UiVar* var = uic_create_var(ui_global_context(), il->varname, UI_VAR_LIST); @@ -788,6 +799,7 @@ GVariant *v = g_variant_new("i", i); g_menu_item_set_action_and_target_value(item, list->action, v); g_menu_insert_item(list->menu, list->index+i, item); + g_object_unref(item); elm = ui_list_next(ls); i++; @@ -807,6 +819,7 @@ GMenu *menu = g_menu_new(); ui_gmenu_add_menu_items(menu, 0, builder->menus_begin, obj); GtkWidget *contextmenu = gtk_popover_menu_new_from_model(G_MENU_MODEL(menu)); + g_object_unref(menu); gtk_popover_set_has_arrow(GTK_POPOVER(contextmenu), FALSE); gtk_widget_set_halign(contextmenu, GTK_ALIGN_START); gtk_widget_set_parent(GTK_WIDGET(contextmenu), widget);