/* * Add a sub-menu showing the sub-directories in the current directory. */ static GtkWidget* fm__make_subdir_menu(AyyiFilemanager* fm) { GtkWidget* submenu = gtk_menu_new(); if (fm->real_path) { //TODO we should use existing data instead of recanning the directory. // Why are there no directories in the hashtable? #if 0 GPtrArray* array = g_ptr_array_new(); g_hash_table_foreach(filer.directory->known_items, temp, array); #endif GDir* dir = g_dir_open((char*)fm->real_path, 0, NULL); const char* leaf; char escaped[256]; if (dir) { GList* items = NULL; while ((leaf = g_dir_read_name(dir))) { if (leaf[0] == '.') continue; gchar* filename = g_build_filename(fm->real_path, leaf, NULL); if (g_file_test(filename, G_FILE_TEST_IS_DIR)) { strncpy(escaped, leaf, 255); fm__escape_for_menu(escaped); items = g_list_append(items, g_strdup(escaped)); } g_free(filename); } g_dir_close(dir); items = g_list_sort(items, (GCompareFunc)g_ascii_strcasecmp); GList* l = items; for(;l;l=l->next){ gchar* name = l->data; GtkWidget* item = gtk_image_menu_item_new_with_mnemonic(name); GtkWidget* ico = gtk_image_new_from_pixbuf(mime_type_get_pixbuf(inode_directory)); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), ico); gtk_container_add(GTK_CONTAINER(submenu), item); g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(menu__go_down_dir), NULL); g_free(name); } g_list_free(items); } } return submenu; }
static void book_tree_create_pixbufs (DhBookTree *tree) { g_return_if_fail (DH_IS_BOOK_TREE (tree)); DhBookTreePixbufs *pixbufs = g_new0 (DhBookTreePixbufs, 1); GdkPixbuf* iconbuf = mime_type_get_pixbuf(inode_directory); pixbufs->pixbuf_closed = iconbuf;//gdk_pixbuf_new_from_file (DATA_DIR "/devhelp/images/book_closed.png", NULL); pixbufs->pixbuf_opened = gdk_pixbuf_new_from_file (DATA_DIR "/devhelp/images/book_open.png", NULL); pixbufs->pixbuf_helpdoc = iconbuf;//gdk_pixbuf_new_from_file (DATA_DIR "/devhelp/images/helpdoc.png", NULL); tree->priv->pixbufs = pixbufs; }