static GtkWidget * populate_menu_from_directory (GtkWidget *menu, MateMenuTreeDirectory *directory) { GList *children; GSList *l; GSList *items; gboolean add_separator; children = gtk_container_get_children (GTK_CONTAINER (menu)); add_separator = (children != NULL); g_list_free (children); items = matemenu_tree_directory_get_contents (directory); for (l = items; l; l = l->next) { MateMenuTreeItem *item = l->data; if (add_separator || matemenu_tree_item_get_type (item) == MATEMENU_TREE_ITEM_SEPARATOR) { add_menu_separator (menu); add_separator = FALSE; } switch (matemenu_tree_item_get_type (item)) { case MATEMENU_TREE_ITEM_DIRECTORY: create_submenu (menu, MATEMENU_TREE_DIRECTORY (item), NULL); break; case MATEMENU_TREE_ITEM_ENTRY: create_menuitem (menu, MATEMENU_TREE_ENTRY (item), NULL); break; case MATEMENU_TREE_ITEM_SEPARATOR : /* already added */ break; case MATEMENU_TREE_ITEM_ALIAS: create_menuitem_from_alias (menu, MATEMENU_TREE_ALIAS (item)); break; case MATEMENU_TREE_ITEM_HEADER: create_header (menu, MATEMENU_TREE_HEADER (item)); break; default: break; } matemenu_tree_item_unref (item); } g_slist_free (items); return menu; }
static GtkWidget * populate_menu_from_directory (GtkWidget *menu, GMenuTreeDirectory *directory) { GList *children; gboolean add_separator; GMenuTreeIter *iter; GMenuTreeItemType next_type; children = gtk_container_get_children (GTK_CONTAINER (menu)); add_separator = (children != NULL); g_list_free (children); iter = gmenu_tree_directory_iter (directory); while ((next_type = gmenu_tree_iter_next (iter)) != GMENU_TREE_ITEM_INVALID) { gpointer item = NULL; if (add_separator || next_type == GMENU_TREE_ITEM_SEPARATOR) { add_menu_separator (menu); add_separator = FALSE; } switch (next_type) { case GMENU_TREE_ITEM_DIRECTORY: item = gmenu_tree_iter_get_directory (iter); create_submenu (menu, item, NULL); break; case GMENU_TREE_ITEM_ENTRY: item = gmenu_tree_iter_get_entry (iter); create_menuitem (menu, item, NULL); break; case GMENU_TREE_ITEM_SEPARATOR : /* already added */ break; case GMENU_TREE_ITEM_ALIAS: item = gmenu_tree_iter_get_alias (iter); create_menuitem_from_alias (menu, item); break; case GMENU_TREE_ITEM_HEADER: item = gmenu_tree_iter_get_header (iter); create_header (menu, item); break; default: break; } if (item) gmenu_tree_item_unref (item); } gmenu_tree_iter_unref (iter); return menu; }