GList * category_group_list_get (void) { GList *category_groups = NULL; GSList *dir_list = NULL, *sl; GList *categories, *l; FormatTemplateCategoryGroup *current_group; add_dir (&dir_list, gnm_conf_get_autoformat_sys_dir (), gnm_sys_data_dir ()); add_dir (&dir_list, gnm_conf_get_autoformat_usr_dir (), gnm_usr_dir (FALSE)); add_dir (&dir_list, gnm_conf_get_autoformat_usr_dir (), gnm_usr_dir (TRUE)); for (sl = gnm_conf_get_autoformat_extra_dirs (); sl; sl = sl->next) { const char *dir = sl->data; add_dir (&dir_list, dir, g_get_home_dir ()); } dir_list = g_slist_reverse (dir_list); categories = category_list_get_from_dir_list (dir_list); go_slist_free_custom (dir_list, g_free); categories = g_list_sort (categories, category_compare_name_and_dir); current_group = NULL; for (l = categories; l != NULL; l = l->next) { FormatTemplateCategory *category = l->data; if (current_group == NULL || strcmp (current_group->name, category->name) != 0) { if (current_group != NULL) { category_groups = g_list_prepend (category_groups, current_group); } current_group = g_new (FormatTemplateCategoryGroup, 1); current_group->categories = g_list_append (NULL, category); current_group->name = g_strdup (category->name); current_group->description = g_strdup (category->description); } else { current_group->categories = g_list_prepend (current_group->categories, category); } } if (current_group != NULL) category_groups = g_list_prepend (category_groups, current_group); g_list_free (categories); return category_groups; }
static void pm_gui_load_directory_page (PluginManagerGUI *pm_gui) { GtkTreeIter iter; char * sys_plugins = g_build_filename (gnm_sys_lib_dir (), PLUGIN_SUBDIR, NULL); char * usr_plugins = (gnm_usr_dir (TRUE) == NULL ? NULL : g_build_filename (gnm_usr_dir (TRUE), PLUGIN_SUBDIR, NULL)); char * go_plugins = go_plugins_get_plugin_dir (); GSList *plugin_dirs; gchar const *plugin_path_env; gtk_list_store_clear (pm_gui->model_directories); gtk_list_store_append (pm_gui->model_directories, &iter); gtk_list_store_set (pm_gui->model_directories, &iter, DIR_NAME, sys_plugins, DIR_IS_SYSTEM, TRUE, -1); g_free (sys_plugins); gtk_list_store_append (pm_gui->model_directories, &iter); gtk_list_store_set (pm_gui->model_directories, &iter, DIR_NAME, usr_plugins, DIR_IS_SYSTEM, TRUE, -1); g_free (usr_plugins); gtk_list_store_append (pm_gui->model_directories, &iter); gtk_list_store_set (pm_gui->model_directories, &iter, DIR_NAME, go_plugins, DIR_IS_SYSTEM, TRUE, -1); g_free (go_plugins); plugin_path_env = g_getenv ("GNUMERIC_PLUGIN_PATH"); if (plugin_path_env != NULL) { plugin_dirs = go_strsplit_to_slist (plugin_path_env, G_SEARCHPATH_SEPARATOR); pm_gui_load_directories (pm_gui, plugin_dirs, FALSE); g_slist_free_full (plugin_dirs, g_free); } pm_gui_load_directories (pm_gui, gnm_conf_get_plugins_extra_dirs (), TRUE); }