[StBoxLayout] Add st_box_layout_remove_all, st_box_layout_destroy_children

In a variety of places we're using boxes as data-modeling displays,
and in doing so we often want to either remove the children or
explictly destroy them.

Now ideally Gjs would support callbacks, and this would make using
the for_each functions possible, but even then these functions
are more efficient and shorter to type, at least.

https://bugzilla.gnome.org/show_bug.cgi?id=600734
This commit is contained in:
Colin Walters 2009-11-10 14:25:41 -05:00
parent ae744bf206
commit bf7b166237
2 changed files with 51 additions and 0 deletions

View File

@ -1338,3 +1338,50 @@ st_box_layout_get_pack_start (StBoxLayout *box)
return box->priv->is_pack_start;
}
static void
st_box_layout_internal_remove_all (StBoxLayout *self,
gboolean destroy)
{
StBoxLayoutPrivate *priv = ST_BOX_LAYOUT (self)->priv;
ClutterActor *child;
while (priv->children)
{
child = priv->children->data;
g_object_ref (child);
priv->children = g_list_delete_link (priv->children, priv->children);
clutter_actor_unparent (child);
g_signal_emit_by_name (self, "actor-removed", child);
if (destroy)
clutter_actor_destroy (child);
g_object_unref (child);
}
clutter_actor_queue_relayout ((ClutterActor*) self);
}
/**
* st_box_layout_remove_all:
* @self:
*
* Efficiently unparent all children currently in this box.
*/
void
st_box_layout_remove_all (StBoxLayout *self)
{
st_box_layout_internal_remove_all (self, FALSE);
}
/**
* st_box_layout_destroy_children:
* @self:
*
* Efficiently unparent and destroy all children currently in this box.
*/
void
st_box_layout_destroy_children (StBoxLayout *self)
{
st_box_layout_internal_remove_all (self, TRUE);
}

View File

@ -89,6 +89,10 @@ void st_box_layout_set_pack_start (StBoxLayout *box,
gboolean pack_start);
gboolean st_box_layout_get_pack_start (StBoxLayout *box);
void st_box_layout_remove_all (StBoxLayout *box);
void st_box_layout_destroy_children (StBoxLayout *box);
G_END_DECLS
#endif /* _ST_BOX_LAYOUT_H */