[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:
parent
ae744bf206
commit
bf7b166237
@ -1338,3 +1338,50 @@ st_box_layout_get_pack_start (StBoxLayout *box)
|
|||||||
|
|
||||||
return box->priv->is_pack_start;
|
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);
|
||||||
|
}
|
||||||
|
@ -89,6 +89,10 @@ void st_box_layout_set_pack_start (StBoxLayout *box,
|
|||||||
gboolean pack_start);
|
gboolean pack_start);
|
||||||
gboolean st_box_layout_get_pack_start (StBoxLayout *box);
|
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
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* _ST_BOX_LAYOUT_H */
|
#endif /* _ST_BOX_LAYOUT_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user