*/
#define GTK_TEXT_USE_INTERNAL_UNSUPPORTED_API
+#include "config.h"
#include "gtktextchild.h"
#include "gtktextbtree.h"
#include "gtktextlayout.h"
-
-#define CHECK_IN_BUFFER(anchor) \
- G_STMT_START { \
- if ((anchor)->segment == NULL) \
- { \
- g_warning ("%s: GtkTextChildAnchor hasn't been in a buffer yet", G_GNUC_FUNCTION); \
- } \
+#include "gtkintl.h"
+
+#define CHECK_IN_BUFFER(anchor) \
+ G_STMT_START { \
+ if ((anchor)->segment == NULL) \
+ { \
+ g_warning ("%s: GtkTextChildAnchor hasn't been in a buffer yet",\
+ G_STRFUNC); \
+ } \
} G_STMT_END
-#define CHECK_IN_BUFFER_RETURN(anchor, val) \
- G_STMT_START { \
- if ((anchor)->segment == NULL) \
- { \
- g_warning ("%s: GtkTextChildAnchor hasn't been in a buffer yet", G_GNUC_FUNCTION); \
- return (val); \
- } \
+#define CHECK_IN_BUFFER_RETURN(anchor, val) \
+ G_STMT_START { \
+ if ((anchor)->segment == NULL) \
+ { \
+ g_warning ("%s: GtkTextChildAnchor hasn't been in a buffer yet",\
+ G_STRFUNC); \
+ return (val); \
+ } \
} G_STMT_END
static GtkTextLineSegment *
gboolean tree_gone)
{
if (seg->body.pixbuf.pixbuf)
- g_object_unref (G_OBJECT (seg->body.pixbuf.pixbuf));
+ g_object_unref (seg->body.pixbuf.pixbuf);
g_free (seg);
}
-GtkTextLineSegmentClass gtk_text_pixbuf_type = {
+const GtkTextLineSegmentClass gtk_text_pixbuf_type = {
"pixbuf", /* name */
FALSE, /* leftGravity */
NULL, /* splitFunc */
seg->body.pixbuf.pixbuf = pixbuf;
- g_object_ref (G_OBJECT (pixbuf));
+ g_object_ref (pixbuf);
return seg;
}
g_error ("child segment has char count of %d", seg->char_count);
}
-GtkTextLineSegmentClass gtk_text_child_type = {
+const GtkTextLineSegmentClass gtk_text_child_type = {
"child-widget", /* name */
FALSE, /* leftGravity */
NULL, /* splitFunc */
seg->body.child.tree = NULL;
seg->body.child.line = NULL;
- g_object_ref (G_OBJECT (anchor));
+ g_object_ref (anchor);
return seg;
}
_gtk_widget_segment_add (GtkTextLineSegment *widget_segment,
GtkWidget *child)
{
- g_return_if_fail (widget_segment->type = >k_text_child_type);
+ g_return_if_fail (widget_segment->type == >k_text_child_type);
g_return_if_fail (widget_segment->body.child.tree != NULL);
- g_object_ref (G_OBJECT (child));
+ g_object_ref (child);
widget_segment->body.child.widgets =
g_slist_prepend (widget_segment->body.child.widgets,
_gtk_widget_segment_remove (GtkTextLineSegment *widget_segment,
GtkWidget *child)
{
- g_return_if_fail (widget_segment->type = >k_text_child_type);
+ g_return_if_fail (widget_segment->type == >k_text_child_type);
widget_segment->body.child.widgets =
g_slist_remove (widget_segment->body.child.widgets,
child);
- g_object_unref (G_OBJECT (child));
+ g_object_unref (child);
}
void
_gtk_widget_segment_ref (GtkTextLineSegment *widget_segment)
{
- g_assert (widget_segment->type = >k_text_child_type);
+ g_assert (widget_segment->type == >k_text_child_type);
- g_object_ref (G_OBJECT (widget_segment->body.child.obj));
+ g_object_ref (widget_segment->body.child.obj);
}
void
_gtk_widget_segment_unref (GtkTextLineSegment *widget_segment)
{
- g_assert (widget_segment->type = >k_text_child_type);
+ g_assert (widget_segment->type == >k_text_child_type);
- g_object_unref (G_OBJECT (widget_segment->body.child.obj));
+ g_object_unref (widget_segment->body.child.obj);
}
GtkTextLayout*
GtkTextLayout *layout)
{
g_object_set_data (G_OBJECT (child),
- "gtk-text-child-anchor-layout",
+ I_("gtk-text-child-anchor-layout"),
layout);
}
-static void gtk_text_child_anchor_init (GtkTextChildAnchor *child_anchor);
-static void gtk_text_child_anchor_class_init (GtkTextChildAnchorClass *klass);
-static void gtk_text_child_anchor_finalize (GObject *obj);
-
-static gpointer parent_class = NULL;
-
-GType
-gtk_text_child_anchor_get_type (void)
-{
- static GType object_type = 0;
-
- if (!object_type)
- {
- static const GTypeInfo object_info =
- {
- sizeof (GtkTextChildAnchorClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) gtk_text_child_anchor_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (GtkTextChildAnchor),
- 0, /* n_preallocs */
- (GInstanceInitFunc) gtk_text_child_anchor_init,
- };
-
- object_type = g_type_register_static (G_TYPE_OBJECT,
- "GtkTextChildAnchor",
- &object_info, 0);
- }
+static void gtk_text_child_anchor_finalize (GObject *obj);
- return object_type;
-}
+G_DEFINE_TYPE (GtkTextChildAnchor, gtk_text_child_anchor, G_TYPE_OBJECT)
static void
gtk_text_child_anchor_init (GtkTextChildAnchor *child_anchor)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- parent_class = g_type_class_peek_parent (klass);
-
object_class->finalize = gtk_text_child_anchor_finalize;
}
GtkTextChildAnchor*
gtk_text_child_anchor_new (void)
{
- return GTK_TEXT_CHILD_ANCHOR (g_object_new (GTK_TYPE_TEXT_CHILD_ANCHOR,
- NULL));
+ return g_object_new (GTK_TYPE_TEXT_CHILD_ANCHOR, NULL);
}
static void
seg = anchor->segment;
- if (seg->body.child.tree != NULL)
- {
- g_warning ("Someone removed a reference to a GtkTextChildAnchor "
- "they didn't own; the anchor is still in the text buffer "
- "and the refcount is 0.");
- return;
- }
-
- tmp_list = seg->body.child.widgets;
- while (tmp_list)
+ if (seg)
{
- g_object_unref (G_OBJECT (tmp_list->data));
+ if (seg->body.child.tree != NULL)
+ {
+ g_warning ("Someone removed a reference to a GtkTextChildAnchor "
+ "they didn't own; the anchor is still in the text buffer "
+ "and the refcount is 0.");
+ return;
+ }
- tmp_list = g_slist_next (tmp_list);
- }
+ tmp_list = seg->body.child.widgets;
+ while (tmp_list)
+ {
+ g_object_unref (tmp_list->data);
+ tmp_list = g_slist_next (tmp_list);
+ }
- g_slist_free (seg->body.child.widgets);
+ g_slist_free (seg->body.child.widgets);
- g_free (seg);
+ g_free (seg);
+ }
anchor->segment = NULL;
+
+ G_OBJECT_CLASS (gtk_text_child_anchor_parent_class)->finalize (obj);
}
/**
*
* Gets a list of all widgets anchored at this child anchor.
* The returned list should be freed with g_list_free().
- *
- *
- * Return value: list of widgets anchored at @anchor
+ *
+ *
+ * Return value: (element-type GtkWidget) (transfer container): list of widgets anchored at @anchor
**/
GList*
gtk_text_child_anchor_get_widgets (GtkTextChildAnchor *anchor)
CHECK_IN_BUFFER_RETURN (anchor, NULL);
- g_return_val_if_fail (seg->type = >k_text_child_type, NULL);
+ g_return_val_if_fail (seg->type == >k_text_child_type, NULL);
iter = seg->body.child.widgets;
while (iter != NULL)
CHECK_IN_BUFFER_RETURN (anchor, TRUE);
- g_return_val_if_fail (seg->type = >k_text_child_type, TRUE);
+ g_return_val_if_fail (seg->type == >k_text_child_type, TRUE);
return seg->body.child.tree == NULL;
}
_gtk_anchored_child_set_layout (child, layout);
}
-
-