36 GtkWidget * widget = gtk_image_menu_item_new_with_mnemonic (item->
name);
37 g_object_set_data ((GObject *) widget,
"func", (
void *) item->
func);
38 g_signal_connect (widget,
"activate", item->
func,
NULL);
41 gtk_image_menu_item_set_image ((GtkImageMenuItem *) widget,
42 gtk_image_new_from_stock (item->
icon, GTK_ICON_SIZE_MENU));
44 gtk_widget_show (widget);
45 gtk_menu_shell_append ((GtkMenuShell *) menu, widget);
53 menus[id] = gtk_menu_new ();
54 g_signal_connect (
menus[
id],
"destroy", (GCallback)
55 gtk_widget_destroyed, &
menus[
id]);
57 for (GList * node =
items[
id]; node; node = node->next)
67 struct Item * item = g_slice_new (
struct Item);
80 if ((
MenuFunc) g_object_get_data ((GObject *) widget,
"func") == func)
81 gtk_widget_destroy (widget);
87 gtk_container_foreach ((GtkContainer *)
menus[
id], (GtkCallback)
91 for (GList * node =
items[
id]; node; node = next)
95 if (((
struct Item *) node->data)->func == func)
97 g_slice_free (
struct Item, node->data);
98 items[id] = g_list_delete_link (
items[
id], node);