Add ClutterContainer::foreach_with_internals()

Bug 1517 - clutter_container_foreach_with_internals()

This allows us to iterate over all children (for things like maintaining
map/realize invariants) or only children that apps added and care about.

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
This commit is contained in:
Havoc Pennington 2009-03-23 10:15:00 -04:00 committed by Emmanuele Bassi
parent 27bea43a4d
commit 4f663384c7
2 changed files with 59 additions and 15 deletions

View File

@ -449,7 +449,10 @@ clutter_container_get_children (ClutterContainer *container)
* @callback: a function to be called for each child * @callback: a function to be called for each child
* @user_data: data to be passed to the function, or %NULL * @user_data: data to be passed to the function, or %NULL
* *
* Calls @callback for each child of @container. * Calls @callback for each child of @container that was added
* by the application (with clutter_container_add_actor()). Does
* not iterate over "internal" children that are part of the
* container's own implementation, if any.
* *
* Since: 0.4 * Since: 0.4
*/ */
@ -473,6 +476,41 @@ clutter_container_foreach (ClutterContainer *container,
iface->foreach (container, callback, user_data); iface->foreach (container, callback, user_data);
} }
/**
* clutter_container_foreach_with_internals:
* @container: a #ClutterContainer
* @callback: a function to be called for each child
* @user_data: data to be passed to the function, or %NULL
*
* Calls @callback for each child of @container, including "internal"
* children built in to the container itself that were never added
* by the application.
*
* Since: 1.0
*/
void
clutter_container_foreach_with_internals (ClutterContainer *container,
ClutterCallback callback,
gpointer user_data)
{
ClutterContainerIface *iface;
g_return_if_fail (CLUTTER_IS_CONTAINER (container));
g_return_if_fail (callback != NULL);
iface = CLUTTER_CONTAINER_GET_IFACE (container);
if (!iface->foreach)
{
CLUTTER_CONTAINER_WARN_NOT_IMPLEMENTED (container, "foreach");
return;
}
if (iface->foreach_with_internals != NULL)
iface->foreach_with_internals (container, callback, user_data);
else
iface->foreach (container, callback, user_data);
}
/** /**
* clutter_container_raise_child: * clutter_container_raise_child:
* @container: a #ClutterContainer * @container: a #ClutterContainer

View File

@ -90,6 +90,10 @@ struct _ClutterContainerIface
ClutterCallback callback, ClutterCallback callback,
gpointer user_data); gpointer user_data);
void (* foreach_with_internals) (ClutterContainer *container,
ClutterCallback callback,
gpointer user_data);
/* child stacking */ /* child stacking */
void (* raise) (ClutterContainer *container, void (* raise) (ClutterContainer *container,
ClutterActor *actor, ClutterActor *actor,
@ -141,6 +145,9 @@ GList * clutter_container_get_children (ClutterContainer *container);
void clutter_container_foreach (ClutterContainer *container, void clutter_container_foreach (ClutterContainer *container,
ClutterCallback callback, ClutterCallback callback,
gpointer user_data); gpointer user_data);
void clutter_container_foreach_with_internals (ClutterContainer *container,
ClutterCallback callback,
gpointer user_data);
ClutterActor *clutter_container_find_child_by_name (ClutterContainer *container, ClutterActor *clutter_container_find_child_by_name (ClutterContainer *container,
const gchar *child_name); const gchar *child_name);
void clutter_container_raise_child (ClutterContainer *container, void clutter_container_raise_child (ClutterContainer *container,
@ -152,7 +159,6 @@ void clutter_container_lower_child (ClutterContainer *container,
void clutter_container_sort_depth_order (ClutterContainer *container); void clutter_container_sort_depth_order (ClutterContainer *container);
GParamSpec * clutter_container_class_find_child_property (GObjectClass *klass, GParamSpec * clutter_container_class_find_child_property (GObjectClass *klass,
const gchar *property_name); const gchar *property_name);
GParamSpec ** clutter_container_class_list_child_properties (GObjectClass *klass, GParamSpec ** clutter_container_class_list_child_properties (GObjectClass *klass,