void html_interval_forall (HTMLInterval *i, HTMLEngine *e, HTMLObjectForallFunc f, gpointer data) { GSList *from_downline, *to_downline; HTMLEngine *engine; g_return_if_fail (i->from.object); g_return_if_fail (i->to.object); i = html_interval_flat (i); from_downline = get_downtree_line (i->from.object); to_downline = get_downtree_line (i->to.object); engine = do_downtree_lines_intersection (&from_downline, &to_downline, e); if (from_downline) interval_forall (HTML_OBJECT (from_downline->data)->parent, from_downline, to_downline, html_object_get_engine (HTML_OBJECT (from_downline->data)->parent, engine), f, data); else { g_assert (i->from.object == i->to.object); html_object_forall (i->from.object, html_object_get_engine (i->from.object, engine), f, data); } g_slist_free (from_downline); g_slist_free (to_downline); html_interval_destroy (i); }
static void forall (HTMLObject *self, HTMLEngine *e, HTMLObjectForallFunc func, gpointer data) { HTMLFrame *frame; frame = HTML_FRAME (self); (* func) (self, html_object_get_engine (self, e), data); html_object_forall (GTK_HTML (frame->html)->engine->clue, html_object_get_engine (self, e), func, data); }