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
This commit is contained in:
Jasper St. Pierre 2012-12-12 04:49:28 -05:00
parent 6cce4790b7
commit 3c87ab97ff
5 changed files with 38 additions and 2 deletions

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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);