diff --git a/plug-ins/fractal-explorer/fractal-explorer.c b/plug-ins/fractal-explorer/fractal-explorer.c index 1b5fae6c56..01fe73a7ef 100644 --- a/plug-ins/fractal-explorer/fractal-explorer.c +++ b/plug-ins/fractal-explorer/fractal-explorer.c @@ -968,28 +968,69 @@ fractalexplorer_load (const gchar *filename, } static void -fractalexplorer_list_load_one (const GimpDatafileData *file_data, - gpointer user_data) +fractalexplorer_list_load_all (const gchar *explorer_path) { - fractalexplorerOBJ *fractalexplorer; + GList *path; + GList *list; - fractalexplorer = fractalexplorer_load (file_data->filename, - file_data->basename); - - if (fractalexplorer) - fractalexplorer_list_insert (fractalexplorer); -} - -static void -fractalexplorer_list_load_all (const gchar *path) -{ /* Make sure to clear any existing fractalexplorers */ current_obj = NULL; fractalexplorer_list_free_all (); - gimp_datafiles_read_directories (path, G_FILE_TEST_IS_REGULAR, - fractalexplorer_list_load_one, - NULL); + path = gimp_config_path_expand_to_files (explorer_path, NULL); + + for (list = path; list; list = g_list_next (list)) + { + GFileEnumerator *enumerator; + + enumerator = g_file_enumerate_children (list->data, + G_FILE_ATTRIBUTE_STANDARD_NAME "," + G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN "," + G_FILE_ATTRIBUTE_STANDARD_TYPE, + G_FILE_QUERY_INFO_NONE, + NULL, NULL); + + if (enumerator) + { + GFileInfo *info; + + while ((info = g_file_enumerator_next_file (enumerator, NULL, NULL))) + { + GFileType file_type = g_file_info_get_file_type (info); + + if (file_type == G_FILE_TYPE_REGULAR && + ! g_file_info_get_is_hidden (info)) + { + fractalexplorerOBJ *fractalexplorer; + GFile *child; + gchar *filename; + gchar *basename; + + child = g_file_enumerator_get_child (enumerator, info); + + filename = g_file_get_path (child); + basename = g_file_get_basename (child); + + fractalexplorer = fractalexplorer_load (filename, + basename); + + g_free (filename); + g_free (basename); + + if (fractalexplorer) + fractalexplorer_list_insert (fractalexplorer); + + g_object_unref (child); + } + + g_object_unref (info); + } + + g_object_unref (enumerator); + } + } + + g_list_free_full (path, (GDestroyNotify) g_object_unref); if (!fractalexplorer_list) { diff --git a/plug-ins/gradient-flare/gradient-flare.c b/plug-ins/gradient-flare/gradient-flare.c index 48fb0f853b..0186c13df6 100644 --- a/plug-ins/gradient-flare/gradient-flare.c +++ b/plug-ins/gradient-flare/gradient-flare.c @@ -1633,27 +1633,68 @@ gflares_list_remove (GFlare *gflare) /* * Load all gflares, which are founded in gflare-path-list, into gflares_list. */ -static void -gflares_list_load_one (const GimpDatafileData *file_data, - gpointer user_data) -{ - GFlare *gflare; - - gflare = gflare_load (file_data->filename, file_data->basename); - - if (gflare) - gflares_list_insert (gflare); -} - static void gflares_list_load_all (void) { + GList *path; + GList *list; + /* Make sure to clear any existing gflares */ gflares_list_free_all (); - gimp_datafiles_read_directories (gflare_path, G_FILE_TEST_EXISTS, - gflares_list_load_one, - NULL); + path = gimp_config_path_expand_to_files (gflare_path, NULL); + + for (list = path; list; list = g_list_next (list)) + { + GFileEnumerator *enumerator; + + enumerator = g_file_enumerate_children (list->data, + G_FILE_ATTRIBUTE_STANDARD_NAME "," + G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN "," + G_FILE_ATTRIBUTE_STANDARD_TYPE, + G_FILE_QUERY_INFO_NONE, + NULL, NULL); + + if (enumerator) + { + GFileInfo *info; + + while ((info = g_file_enumerator_next_file (enumerator, NULL, NULL))) + { + GFileType file_type = g_file_info_get_file_type (info); + + if (file_type == G_FILE_TYPE_REGULAR && + ! g_file_info_get_is_hidden (info)) + { + GFlare *gflare; + GFile *child; + gchar *filename; + gchar *basename; + + child = g_file_enumerator_get_child (enumerator, info); + + filename = g_file_get_path (child); + basename = g_file_get_basename (child); + + gflare = gflare_load (filename, basename); + + g_free (filename); + g_free (basename); + + if (gflare) + gflares_list_insert (gflare); + + g_object_unref (child); + } + + g_object_unref (info); + } + + g_object_unref (enumerator); + } + } + + g_list_free_full (path, (GDestroyNotify) g_object_unref); } static void