static void write_dir( FILE* of, GMenuTreeDirectory* dir ) { GSList* l; const char* cstr; char* str; fprintf( of, "+%s\n", gmenu_tree_directory_get_menu_id( dir ) ); fprintf( of, "%s\n", gmenu_tree_directory_get_name( dir ) ); cstr = gmenu_tree_directory_get_comment( dir ); fprintf( of, "%s\n", cstr ? cstr : "" ); cstr = gmenu_tree_directory_get_icon( dir ); fprintf( of, "%s\n", cstr ? cstr : "" ); if( gmenu_tree_directory_get_desktop_file_path( dir ) ) { /* get basename of its desktop file. */ str = g_path_get_basename( gmenu_tree_directory_get_desktop_file_path( dir ) ); fprintf( of, "%s\n", str ); g_free( str ); /* get the location of its desktop file. */ str = g_path_get_dirname( gmenu_tree_directory_get_desktop_file_path( dir ) ); fprintf( of, "%d\n", dirname_index( str ) ); g_free( str ); } else { fprintf( of, "\n-1\n" ); } // fprintf( of, "\n" ); /* end of item info */ for( l = gmenu_tree_directory_get_contents(dir); l; l = l->next ) { GMenuTreeItem* item = (GMenuTreeItem*)l->data; GMenuTreeItemType type = gmenu_tree_item_get_type(item); if( type == GMENU_TREE_ITEM_DIRECTORY ) { write_dir( of, (GMenuTreeDirectory*)item ); } else if( type == GMENU_TREE_ITEM_ENTRY ) { write_entry( of, (GMenuTreeEntry*)item ); } else if( type == GMENU_TREE_ITEM_SEPARATOR ) fputs( "-\n", of ); } fputs( "\n", of ); }
static GList * xde_directory(MenuContext *ctx, GMenuTreeDirectory *dir) { GList *text = NULL; const char *name, *path; char *esc1, *esc2; GIcon *gicon = NULL; char *icon = NULL; name = gmenu_tree_directory_get_name(dir); esc1 = xde_character_escape(name, ')'); esc2 = xde_character_escape(name, '}'); if (ctx->stack) gicon = gmenu_tree_directory_get_icon(ctx->stack->data); if ((path = gmenu_tree_directory_get_desktop_file_path(dir))) { GKeyFile *file = g_key_file_new(); g_key_file_load_from_file(file, path, G_KEY_FILE_NONE, NULL); icon = xde_get_entry_icon(ctx, file, gicon, "folder", "unknown", GET_ENTRY_ICON_FLAG_XPM | GET_ENTRY_ICON_FLAG_PNG); g_key_file_unref(file); } else icon = xde_get_icon2(ctx, "folder", "unknown"); icon = ctx->wmm.wrap(ctx, icon); text = g_list_append(text, g_strdup_printf("%s%s (%s) {%s Menu}%s\n", ctx->indent, "[submenu]", esc1, esc2, icon)); text = g_list_concat(text, ctx->wmm.ops.menu(ctx, dir)); text = g_list_append(text, g_strdup_printf("%s[end]\n", ctx->indent)); free(icon); free(esc1); free(esc2); return (text); }
static GList * xde_directory(MenuContext *ctx, GMenuTreeDirectory *dir) { GList *text = NULL; const char *name, *path; char *icon = NULL, *s; GIcon *gicon = NULL; char *esc; int level; name = gmenu_tree_directory_get_name(dir); esc = g_markup_escape_text(name, -1); if (ctx->stack) gicon = gmenu_tree_directory_get_icon(ctx->stack->data); if ((path = gmenu_tree_directory_get_desktop_file_path(dir))) { GKeyFile *file = g_key_file_new(); g_key_file_load_from_file(file, path, G_KEY_FILE_NONE, NULL); icon = xde_get_entry_icon(ctx, file, gicon, "folder", "unknown", GET_ENTRY_ICON_FLAG_XPM | GET_ENTRY_ICON_FLAG_PNG | GET_ENTRY_ICON_FLAG_JPG | GET_ENTRY_ICON_FLAG_SVG); g_key_file_unref(file); } else icon = xde_get_icon2(ctx, "folder", "unknown"); icon = ctx->wmm.wrap(ctx, icon); level = xde_reset_indent(ctx, 0); s = g_strdup_printf("%s<menu id=\"%s Menu\" label=\"%s\"%s>\n", ctx->indent, esc, esc, icon); text = g_list_append(text, s); text = g_list_concat(text, ctx->wmm.ops.menu(ctx, dir)); s = g_strdup_printf("%s</menu> <!-- %s Menu -->\n\n", ctx->indent, esc); text = g_list_append(text, s); level = xde_reset_indent(ctx, level); ctx->wmm.output = g_list_concat(ctx->wmm.output, text); s = g_strdup_printf("%s<menu id=\"%s Menu\" label=\"%s\"%s />\n", ctx->indent, esc, esc, icon); text = g_list_append(NULL, s); free(icon); g_free(esc); return (text); }
static GList * xde_header(MenuContext *ctx, GMenuTreeHeader *hdr) { GMenuTreeDirectory *dir; GList *text = NULL; const char *name, *path; GIcon *gicon = NULL; char *icon = NULL, *s; char *esc; if (!(dir = gmenu_tree_header_get_directory(hdr))) return (text); name = gmenu_tree_directory_get_name(dir); esc = g_markup_escape_text(name, -1); if (ctx->stack) gicon = gmenu_tree_directory_get_icon(ctx->stack->data); if ((path = gmenu_tree_directory_get_desktop_file_path(dir))) { GKeyFile *file = g_key_file_new(); g_key_file_load_from_file(file, path, G_KEY_FILE_NONE, NULL); icon = xde_get_entry_icon(ctx, file, gicon, "folder", "unknown", GET_ENTRY_ICON_FLAG_XPM | GET_ENTRY_ICON_FLAG_PNG | GET_ENTRY_ICON_FLAG_JPG | GET_ENTRY_ICON_FLAG_SVG); g_key_file_unref(file); } else icon = xde_get_icon2(ctx, "folder", "unknown"); icon = ctx->wmm.wrap(ctx, icon); s = g_strdup_printf("%s<separator label=\"%s\"%s />\n", ctx->indent, esc, icon); text = g_list_append(text, s); free(icon); g_free(esc); text = g_list_concat(text, ctx->wmm.ops.directory(ctx, dir)); return (text); }
static void fill_er_up(GMenuTreeDirectory *directory, GSList**p) { GSList* data = *p; GSList *items; GSList *tmp; const char *path; char *freeme; freeme = make_path(directory); if (!strcmp(freeme, "/")) path = freeme; else path = freeme + 1; items = gmenu_tree_directory_get_contents(directory); tmp = items; while (tmp != NULL) { GMenuTreeItem *item = tmp->data; switch (gmenu_tree_item_get_type(item)) { case GMENU_TREE_ITEM_ENTRY: // print_entry (GMENU_TREE_ENTRY (item), path); add_entry(GMENU_TREE_ENTRY(item), path, &data); break; case GMENU_TREE_ITEM_DIRECTORY: { Menu_list_item * dir_item; dir_item = g_malloc(sizeof(Menu_list_item)); dir_item->item_type = MENU_ITEM_DIRECTORY; dir_item->name = gmenu_tree_directory_get_name(item); dir_item->desktop = gmenu_tree_directory_get_desktop_file_path(item); dir_item->comment = NULL; dir_item->null = NULL; dir_item->comment = gmenu_tree_directory_get_comment(item); dir_item->icon = gmenu_tree_directory_get_icon(item); dir_item->sublist = NULL; data = g_slist_append(data, dir_item); fill_er_up(GMENU_TREE_DIRECTORY(item), &dir_item->sublist); dir_item->sublist = g_slist_prepend(dir_item->sublist, get_blank()); dir_item->sublist = g_slist_append(dir_item->sublist, get_blank()); } break; case GMENU_TREE_ITEM_HEADER: // printf("GMENU_TREE_ITEM_HEADER\n"); break; case GMENU_TREE_ITEM_SEPARATOR: // printf("GMENU_TREE_ITEM_HEADER\n"); break; case GMENU_TREE_ITEM_ALIAS: // printf("GMENU_TREE_ITEM_ALIAS\n"); /* { GMenuTreeItem *aliased_item; aliased_item = gmenu_tree_alias_get_item (GMENU_TREE_ALIAS (item)); if (gmenu_tree_item_get_type (aliased_item) == GMENU_TREE_ITEM_ENTRY) print_entry (GMENU_TREE_ENTRY (aliased_item), path); }*/ break; default: g_assert_not_reached(); break; } gmenu_tree_item_unref(tmp->data); tmp = tmp->next; } g_slist_free(items); g_free(freeme); *p = data; }