src/gtkblist.c

changeset 11638
1821b40269a3
parent 11636
7512e00792be
child 11643
f04408721780
--- a/src/gtkblist.c	Mon Oct 10 12:29:30 2005 +0000
+++ b/src/gtkblist.c	Mon Oct 10 17:59:48 2005 +0000
@@ -1114,11 +1114,12 @@
 static void
 blist_node_menu_cb(GtkMenuItem *item, GaimBlistNode *node)
 {
-	GaimBlistNodeAction *act;
-	act = (GaimBlistNodeAction *) g_object_get_data(G_OBJECT(item),
-			"gaimcallback");
-	if(act->callback)
-		act->callback(node, act->data);
+	void (*callback)(GaimBlistNode *, gpointer);
+	gpointer data;
+	callback = g_object_get_data(G_OBJECT(item), "gaimcallback");
+	data = g_object_get_data(G_OBJECT(item), "gaimcallbackdata");
+	if (callback)
+		callback(node, data);
 }
 
 
@@ -1140,7 +1141,9 @@
 			menuitem = gtk_menu_item_new_with_mnemonic(act->label);
 			if (act->callback != NULL) {
 				g_object_set_data(G_OBJECT(menuitem), "gaimcallback",
-				                  act);
+				                  act->callback);
+				g_object_set_data(G_OBJECT(menuitem), "gaimcallbackdata",
+				                  act->data);
 				g_signal_connect(G_OBJECT(menuitem), "activate",
 				                 G_CALLBACK(blist_node_menu_cb), node);
 			} else {
@@ -1161,11 +1164,11 @@
 				GaimBlistNodeAction *act = (GaimBlistNodeAction *) l->data;
 
 				append_blist_node_action(submenu, act, node, dup_separator);
-
-				g_list_free(act->children);
-				act->children = NULL;
 			}
+			g_list_free(act->children);
+			act->children = NULL;
 		}
+		g_free(act);
 	}
 }
 

mercurial