ui/gtk/menu.c

changeset 859
c13653b1cc9d
parent 852
a04cb4398034
child 890
8d30cbd1c465
--- 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);

mercurial