static void append_directory_path(GMenuTreeDirectory *directory, GString *path) { GMenuTreeDirectory *parent; parent = gmenu_tree_item_get_parent(GMENU_TREE_ITEM(directory)); if (!parent) { g_string_append_c(path, '/'); return; } append_directory_path(parent, path); g_string_append(path, gmenu_tree_directory_get_name(directory)); g_string_append_c(path, '/'); gmenu_tree_item_unref(parent); }
/*============================================================================= * This function processes a directory entry and all it's child nodes */ void process_directory(GMenuTreeDirectory *directory, gboolean isRoot) { int hasSeparator = 0; int hasMenu = 0; GMenuTreeItemType entryType; GSList *entryList = gmenu_tree_directory_get_contents (directory); GSList *l; if (option_do_not_use_categories == 00 && isRoot == 0 && g_slist_length(entryList) > 0) { hasMenu = 1; if (option_show_amount_of_entries == 1) { g_printf( "<menu id=\"xdg-menu-%s\" label=\"%s (%d)\">\n", gmenu_tree_directory_get_name(directory), gmenu_tree_directory_get_name(directory), g_slist_length(entryList)); } else { g_printf( "<menu id=\"xdg-menu-%s\" label=\"%s\">\n", gmenu_tree_directory_get_name(directory), gmenu_tree_directory_get_name(directory)); } } for (l = entryList; l; l = l->next) { GMenuTreeItem *item = l->data; entryType = gmenu_tree_item_get_type (GMENU_TREE_ITEM(item)); switch (entryType) { case GMENU_TREE_ITEM_DIRECTORY: if (hasSeparator) { process_separator(GMENU_TREE_SEPARATOR(item)); hasSeparator = 0; } process_directory(GMENU_TREE_DIRECTORY(item), 0); break; case GMENU_TREE_ITEM_ENTRY: if (hasSeparator) { process_separator(GMENU_TREE_SEPARATOR(item)); hasSeparator = 0; } process_entry(GMENU_TREE_ENTRY(item)); break; case GMENU_TREE_ITEM_SEPARATOR: hasSeparator = 1; break; } gmenu_tree_item_unref (item); } if (hasMenu == 1) { g_printf("</menu>\n"); } g_slist_free (entryList); }