+void
+gtk_text_child_anchor_register_child (GtkTextChildAnchor *anchor,
+ GtkWidget *child,
+ GtkTextLayout *layout)
+{
+ g_return_if_fail (GTK_IS_TEXT_CHILD_ANCHOR (anchor));
+ g_return_if_fail (GTK_IS_WIDGET (child));
+
+ CHECK_IN_BUFFER (anchor);
+
+ _gtk_anchored_child_set_layout (child, layout);
+
+ _gtk_widget_segment_add (anchor->segment, child);
+
+ gtk_text_child_anchor_queue_resize (anchor, layout);
+}
+
+void
+gtk_text_child_anchor_unregister_child (GtkTextChildAnchor *anchor,
+ GtkWidget *child)
+{
+ g_return_if_fail (GTK_IS_TEXT_CHILD_ANCHOR (anchor));
+ g_return_if_fail (GTK_IS_WIDGET (child));
+
+ CHECK_IN_BUFFER (anchor);
+
+ if (_gtk_anchored_child_get_layout (child))
+ {
+ gtk_text_child_anchor_queue_resize (anchor,
+ _gtk_anchored_child_get_layout (child));
+ }
+
+ _gtk_anchored_child_set_layout (child, NULL);
+
+ _gtk_widget_segment_remove (anchor->segment, child);
+}
+
+void
+gtk_text_child_anchor_queue_resize (GtkTextChildAnchor *anchor,
+ GtkTextLayout *layout)
+{
+ GtkTextIter start;
+ GtkTextIter end;
+ GtkTextLineSegment *seg;
+
+ g_return_if_fail (GTK_IS_TEXT_CHILD_ANCHOR (anchor));
+ g_return_if_fail (GTK_IS_TEXT_LAYOUT (layout));