From d93230d1bf141f91f8d02fbac9e4b12e1bb79e9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Kol=C3=A5s?= <pippin@openedhand.com> Date: Fri, 28 Sep 2007 14:52:54 +0000 Subject: [PATCH] =?UTF-8?q?2007-09-28=20=20=C3=98yvind=20Kol=C3=A5s=20=20<?= =?UTF-8?q?pippin@openedhand.com>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * clutter/clutter-container.[ch]: added clutter_container_find_child_by_name. --- ChangeLog | 5 ++++ clutter/clutter-container.c | 52 +++++++++++++++++++++++++++++++++++++ clutter/clutter-container.h | 2 ++ 3 files changed, 59 insertions(+) diff --git a/ChangeLog b/ChangeLog index c4f4efea4..9926fc5bd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-09-28 Øyvind Kolås <pippin@openedhand.com> + + * clutter/clutter-container.[ch]: added + clutter_container_find_child_by_name. + 2007-09-28 Øyvind Kolås <pippin@openedhand.com> * clutter/glx/clutter-stage-glx.c: (clutter_stage_glx_realize): diff --git a/clutter/clutter-container.c b/clutter/clutter-container.c index f9ee905b5..17c167433 100644 --- a/clutter/clutter-container.c +++ b/clutter/clutter-container.c @@ -504,3 +504,55 @@ clutter_container_sort_depth_order (ClutterContainer *container) CLUTTER_CONTAINER_GET_IFACE (container)->sort_depth_order (container); } + +/** + * clutter_container_find_child_by_name: + * @container: a #ClutterContainer + * @child_name: the name of the requested child. + * + * Finds a child actor of a container by its name. Search recurses + * into any child container. + * + * Return value: The child actor with the requested name, or %NULL if no + * actor with that name was found. + * + * Since: 0.6 + */ +ClutterActor * +clutter_container_find_child_by_name (ClutterContainer *container, + const gchar *child_name) +{ + GList *children; + GList *iter; + ClutterActor *actor = NULL; + + g_return_val_if_fail (CLUTTER_IS_CONTAINER (container), NULL); + + children = clutter_container_get_children (container); + + for (iter=children; iter; iter = g_list_next (iter)) + { + ClutterActor *a; + const gchar *iter_name; + + a = CLUTTER_ACTOR (iter->data); + iter_name = clutter_actor_get_name (a); + + if (iter_name && !strcmp (iter_name, child_name)) + { + actor = a; + break; + } + + if (CLUTTER_IS_CONTAINER (a)) + { + ClutterContainer *c = CLUTTER_CONTAINER (a); + + actor = clutter_container_find_child_by_name (c, child_name); + if (actor) + break; + } + } + g_list_free (children); + return actor; +} diff --git a/clutter/clutter-container.h b/clutter/clutter-container.h index 00378dd87..9934162c0 100644 --- a/clutter/clutter-container.h +++ b/clutter/clutter-container.h @@ -114,6 +114,8 @@ void clutter_container_foreach (ClutterContainer *container, gpointer user_data); ClutterActor *clutter_container_find_child_by_id (ClutterContainer *container, guint child_id); +ClutterActor *clutter_container_find_child_by_name(ClutterContainer *container, + const gchar *child_name); void clutter_container_raise_child (ClutterContainer *container, ClutterActor *actor, ClutterActor *sibling);