static void panel_addto_make_application_list (GSList **parent_list, MateMenuTreeDirectory *directory, const char *filename) { GSList *items; GSList *l; items = matemenu_tree_directory_get_contents (directory); for (l = items; l; l = l->next) { switch (matemenu_tree_item_get_type (l->data)) { case MATEMENU_TREE_ITEM_DIRECTORY: panel_addto_prepend_directory (parent_list, l->data, filename); break; case MATEMENU_TREE_ITEM_ENTRY: panel_addto_prepend_entry (parent_list, l->data, filename); break; case MATEMENU_TREE_ITEM_ALIAS: panel_addto_prepend_alias (parent_list, l->data, filename); break; default: break; } matemenu_tree_item_unref (l->data); } g_slist_free (items); *parent_list = g_slist_reverse (*parent_list); }
static GSList * get_all_applications_from_dir (MateMenuTreeDirectory *directory, GSList *list) { GSList *items; GSList *l; items = matemenu_tree_directory_get_contents (directory); for (l = items; l; l = l->next) { switch (matemenu_tree_item_get_type (l->data)) { case MATEMENU_TREE_ITEM_ENTRY: list = g_slist_append (list, matemenu_tree_item_ref (l->data)); break; case MATEMENU_TREE_ITEM_DIRECTORY: list = get_all_applications_from_dir (l->data, list); break; case MATEMENU_TREE_ITEM_ALIAS: list = get_all_applications_from_alias (l->data, list); break; default: break; } matemenu_tree_item_unref (l->data); } g_slist_free (items); return list; }
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 void add_drawers_from_dir (MateMenuTreeDirectory *directory, int pos, const char *toplevel_id) { const char *name; const char *icon; GSList *items; GSList *l; char *attached_toplevel_id; name = matemenu_tree_directory_get_name (directory); icon = matemenu_tree_directory_get_icon (directory); attached_toplevel_id = panel_drawer_create_with_id (toplevel_id, pos, icon, icon != NULL, name); if (!attached_toplevel_id) return; items = matemenu_tree_directory_get_contents (directory); for (l = items; l; l = l->next) { MateMenuTreeItem *item = l->data; switch (matemenu_tree_item_get_type (item)) { case MATEMENU_TREE_ITEM_ENTRY: panel_launcher_create_with_id (attached_toplevel_id, G_MAXINT/2, matemenu_tree_entry_get_desktop_file_path (MATEMENU_TREE_ENTRY (item))); break; case MATEMENU_TREE_ITEM_DIRECTORY: add_drawers_from_dir (MATEMENU_TREE_DIRECTORY (item), G_MAXINT/2, attached_toplevel_id); break; case MATEMENU_TREE_ITEM_ALIAS: add_drawers_from_alias (MATEMENU_TREE_ALIAS (item), attached_toplevel_id); break; default: break; } matemenu_tree_item_unref (item); } g_slist_free (items); g_free (attached_toplevel_id); }