diff options
author | Jasper St. Pierre <jstpierre@mecheye.net> | 2012-12-12 04:49:28 -0500 |
---|---|---|
committer | Jasper St. Pierre <jstpierre@mecheye.net> | 2012-12-13 21:38:18 -0500 |
commit | 3c87ab97ffd8735bff78c177e163826484776cd2 (patch) | |
tree | 149d56dc757725c91da929972daa17d87d803aec | |
parent | 6cce4790b7639656c7701a4ed8495ba50abd7c6e (diff) | |
download | glib-3c87ab97ffd8735bff78c177e163826484776cd2.tar.gz |
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
-rw-r--r-- | docs/reference/gio/gio-sections.txt | 1 | ||||
-rw-r--r-- | gio/gfileenumerator.c | 31 | ||||
-rw-r--r-- | gio/gfileenumerator.h | 3 | ||||
-rw-r--r-- | gio/gio.symbols | 1 | ||||
-rw-r--r-- | 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 <SUBSECTION Standard> 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); |