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 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; }
static void create_menuitem (GtkWidget *menu, GMenuTreeEntry *entry, GMenuTreeDirectory *alias_directory) { GtkWidget *menuitem; menuitem = panel_image_menu_item_new2 (); if (alias_directory) panel_load_menu_image_deferred (menuitem, panel_menu_icon_get_size (), gmenu_tree_directory_get_icon (alias_directory), NULL, NULL); else panel_load_menu_image_deferred (menuitem, panel_menu_icon_get_size (), g_app_info_get_icon (G_APP_INFO (gmenu_tree_entry_get_app_info (entry))), NULL, NULL); setup_menuitem (menuitem, panel_menu_icon_get_size (), NULL, alias_directory ? gmenu_tree_directory_get_name (alias_directory) : g_app_info_get_display_name (G_APP_INFO (gmenu_tree_entry_get_app_info (entry)))); if (alias_directory && gmenu_tree_directory_get_comment (alias_directory)) panel_util_set_tooltip_text (menuitem, gmenu_tree_directory_get_comment (alias_directory)); else if (!alias_directory) { const char *description = g_app_info_get_description (G_APP_INFO (gmenu_tree_entry_get_app_info (entry))); if (!description) description = g_desktop_app_info_get_generic_name (gmenu_tree_entry_get_app_info (entry)); if (description) panel_util_set_tooltip_text (menuitem, description); } g_signal_connect_after (menuitem, "button_press_event", G_CALLBACK (menu_dummy_button_press_event), NULL); if (!panel_lockdown_get_panels_locked_down_s ()) { GIcon *icon; static GtkTargetEntry menu_item_targets[] = { { "text/uri-list", 0, 0 } }; gtk_drag_source_set (menuitem, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, menu_item_targets, 1, GDK_ACTION_COPY); icon = g_app_info_get_icon (G_APP_INFO (gmenu_tree_entry_get_app_info (entry))); if (icon != NULL) gtk_drag_source_set_icon_gicon (menuitem, icon); g_signal_connect (G_OBJECT (menuitem), "drag_begin", G_CALLBACK (drag_begin_menu_cb), NULL); g_signal_connect (menuitem, "drag_data_get", G_CALLBACK (drag_data_get_menu_cb), entry); g_signal_connect (menuitem, "drag_end", G_CALLBACK (drag_end_menu_cb), NULL); } gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); g_signal_connect (menuitem, "activate", G_CALLBACK (activate_app_def), entry); gtk_widget_show (menuitem); }