From 3c87ab97ffd8735bff78c177e163826484776cd2 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Wed, 12 Dec 2012 04:49:28 -0500 Subject: [PATCH] gfileenumerator: Add a g_file_enumerator_get_child method This is a new convenience method designed to simplify some use cases of GFileEnumerator, by making it easy to get the next file from a file enumerator. https://bugzilla.gnome.org/show_bug.cgi?id=690083 --- docs/reference/gio/gio-sections.txt | 1 + gio/gfileenumerator.c | 31 +++++++++++++++++++++++++++++ gio/gfileenumerator.h | 3 +++ gio/gio.symbols | 1 + gio/tests/live-g-file.c | 4 ++-- 5 files changed, 38 insertions(+), 2 deletions(-) diff --git a/docs/reference/gio/gio-sections.txt b/docs/reference/gio/gio-sections.txt index 81f613ccf..a39f55fe0 100644 --- a/docs/reference/gio/gio-sections.txt +++ b/docs/reference/gio/gio-sections.txt @@ -213,6 +213,7 @@ g_file_enumerator_is_closed g_file_enumerator_has_pending g_file_enumerator_set_pending g_file_enumerator_get_container +g_file_enumerator_get_child GFileEnumeratorClass G_FILE_ENUMERATOR diff --git a/gio/gfileenumerator.c b/gio/gfileenumerator.c index d8f622b39..6a8065b2a 100644 --- a/gio/gfileenumerator.c +++ b/gio/gfileenumerator.c @@ -589,6 +589,37 @@ g_file_enumerator_get_container (GFileEnumerator *enumerator) return enumerator->priv->container; } +/** + * g_file_enumerator_get_child: + * @enumerator: a #GFileEnumerator + * @info: a #GFileInfo gotten from g_file_enumerator_next_file() + * or the async equivalents. + * + * Return a new #GFile which refers to the file named by @info in the source + * directory of @enumerator. This function is primarily intended to be used + * inside loops with g_file_enumerator_next_file(). + * + * This is a convenience method that's equivalent to: + * |[ + * gchar *name = g_file_info_get_name (info); + * GFile *child = g_file_get_child (g_file_enumerator_get_container (enumr), + * name); + * ]| + * + * Returns: (transfer full): a #GFile for the #GFileInfo passed it. + * + * Since: 2.36 + */ +GFile * +g_file_enumerator_get_child (GFileEnumerator *enumerator, + GFileInfo *info) +{ + g_return_val_if_fail (G_IS_FILE_ENUMERATOR (enumerator), NULL); + + return g_file_get_child (enumerator->priv->container, + g_file_info_get_name (info)); +} + typedef struct { int num_files; GList *files; diff --git a/gio/gfileenumerator.h b/gio/gfileenumerator.h index 9cd2f3eca..9fcec1281 100644 --- a/gio/gfileenumerator.h +++ b/gio/gfileenumerator.h @@ -126,6 +126,9 @@ gboolean g_file_enumerator_has_pending (GFileEnumerator *enumerator void g_file_enumerator_set_pending (GFileEnumerator *enumerator, gboolean pending); GFile * g_file_enumerator_get_container (GFileEnumerator *enumerator); +GLIB_AVAILABLE_IN_2_36 +GFile * g_file_enumerator_get_child (GFileEnumerator *enumerator, + GFileInfo *info); G_END_DECLS diff --git a/gio/gio.symbols b/gio/gio.symbols index b1483338a..30967558a 100644 --- a/gio/gio.symbols +++ b/gio/gio.symbols @@ -384,6 +384,7 @@ g_file_enumerator_close_finish g_file_enumerator_is_closed g_file_enumerator_has_pending g_file_enumerator_set_pending +g_file_enumerator_get_child g_file_enumerator_get_container g_file_icon_get_type g_file_icon_new diff --git a/gio/tests/live-g-file.c b/gio/tests/live-g-file.c index c104a9cf8..a9a9c03f7 100644 --- a/gio/tests/live-g-file.c +++ b/gio/tests/live-g-file.c @@ -513,7 +513,7 @@ traverse_recurse_dirs (GFile * parent, GFile * root) info = g_file_enumerator_next_file (enumerator, NULL, &error); while ((info) && (!error)) { - descend = g_file_get_child (parent, g_file_info_get_name (info)); + descend = g_file_enumerator_get_child (enumerator, info); g_assert (descend != NULL); relative_path = g_file_get_relative_path (root, descend); g_assert (relative_path != NULL); @@ -1159,7 +1159,7 @@ cleanup_dir_recurse (GFile *parent, GFile *root) info = g_file_enumerator_next_file (enumerator, NULL, &error); while ((info) && (!error)) { - descend = g_file_get_child (parent, g_file_info_get_name (info)); + descend = g_file_enumerator_get_child (enumerator, info); g_assert (descend != NULL); relative_path = g_file_get_relative_path (root, descend); g_assert (relative_path != NULL);