From 1c6f2d154e74f908e2c4a137de0233b5faf4f6b6 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 6 Oct 2010 19:26:08 +0200 Subject: Bug #631320 - GtkObject is gone in GTK3 --- libgnomecanvas/gnome-canvas-bpath.c | 12 ----- libgnomecanvas/gnome-canvas-clipgroup.c | 12 ++--- libgnomecanvas/gnome-canvas-line.c | 13 ++--- libgnomecanvas/gnome-canvas-pixbuf.c | 46 +++--------------- libgnomecanvas/gnome-canvas-polygon.c | 23 ++++----- libgnomecanvas/gnome-canvas-rect-ellipse.c | 15 ------ libgnomecanvas/gnome-canvas-rich-text.c | 8 ++-- libgnomecanvas/gnome-canvas-shape.c | 13 ++--- libgnomecanvas/gnome-canvas-text.c | 14 +++--- libgnomecanvas/gnome-canvas-widget.c | 46 ++++++++---------- libgnomecanvas/gnome-canvas-widget.h | 2 - libgnomecanvas/gnome-canvas.c | 77 +++++++++++++----------------- libgnomecanvas/gnome-canvas.h | 12 ++--- 13 files changed, 101 insertions(+), 192 deletions(-) (limited to 'libgnomecanvas') diff --git a/libgnomecanvas/gnome-canvas-bpath.c b/libgnomecanvas/gnome-canvas-bpath.c index 0a59712de2..0aee2ece46 100644 --- a/libgnomecanvas/gnome-canvas-bpath.c +++ b/libgnomecanvas/gnome-canvas-bpath.c @@ -35,7 +35,6 @@ enum { static void gnome_canvas_bpath_class_init (GnomeCanvasBpathClass *class); static void gnome_canvas_bpath_init (GnomeCanvasBpath *bpath); -static void gnome_canvas_bpath_destroy (GtkObject *object); static void gnome_canvas_bpath_set_property (GObject *object, guint param_id, const GValue *value, @@ -79,11 +78,9 @@ static void gnome_canvas_bpath_class_init (GnomeCanvasBpathClass *class) { GObjectClass *gobject_class; - GtkObjectClass *object_class; GnomeCanvasItemClass *item_class; gobject_class = (GObjectClass *) class; - object_class = (GtkObjectClass *) class; item_class = (GnomeCanvasItemClass *) class; parent_class = g_type_class_peek_parent (class); @@ -95,8 +92,6 @@ gnome_canvas_bpath_class_init (GnomeCanvasBpathClass *class) gobject_class->set_property = gnome_canvas_bpath_set_property; gobject_class->get_property = gnome_canvas_bpath_get_property; - object_class->destroy = gnome_canvas_bpath_destroy; - g_object_class_install_property (gobject_class, PROP_BPATH, g_param_spec_boxed ("bpath", NULL, NULL, @@ -112,13 +107,6 @@ gnome_canvas_bpath_init (GnomeCanvasBpath *bpath) } -static void -gnome_canvas_bpath_destroy (GtkObject *object) -{ - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - static void gnome_canvas_bpath_set_property (GObject *object, guint param_id, diff --git a/libgnomecanvas/gnome-canvas-clipgroup.c b/libgnomecanvas/gnome-canvas-clipgroup.c index 6019d1cdf6..350cb643bb 100644 --- a/libgnomecanvas/gnome-canvas-clipgroup.c +++ b/libgnomecanvas/gnome-canvas-clipgroup.c @@ -44,7 +44,7 @@ enum { static void gnome_canvas_clipgroup_class_init (GnomeCanvasClipgroupClass *klass); static void gnome_canvas_clipgroup_init (GnomeCanvasClipgroup *clipgroup); -static void gnome_canvas_clipgroup_destroy (GtkObject *object); +static void gnome_canvas_clipgroup_destroy (GnomeCanvasItem *object); static void gnome_canvas_clipgroup_set_property (GObject *object, guint param_id, const GValue *value, @@ -119,17 +119,15 @@ static void gnome_canvas_clipgroup_class_init (GnomeCanvasClipgroupClass *klass) { GObjectClass *gobject_class; - GtkObjectClass *object_class; GnomeCanvasItemClass *item_class; gobject_class = (GObjectClass *) klass; - object_class = (GtkObjectClass *) klass; item_class = (GnomeCanvasItemClass *) klass; parent_class = g_type_class_ref (GNOME_TYPE_CANVAS_GROUP); - object_class->destroy = gnome_canvas_clipgroup_destroy; gobject_class->set_property = gnome_canvas_clipgroup_set_property; gobject_class->get_property = gnome_canvas_clipgroup_get_property; + item_class->destroy = gnome_canvas_clipgroup_destroy; item_class->update = gnome_canvas_clipgroup_update; item_class->render = gnome_canvas_clipgroup_render; @@ -153,7 +151,7 @@ gnome_canvas_clipgroup_init (GnomeCanvasClipgroup *clipgroup) } static void -gnome_canvas_clipgroup_destroy (GtkObject *object) +gnome_canvas_clipgroup_destroy (GnomeCanvasItem *object) { GnomeCanvasClipgroup *clipgroup; @@ -172,8 +170,8 @@ gnome_canvas_clipgroup_destroy (GtkObject *object) clipgroup->svp = NULL; } - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); + if (GNOME_CANVAS_ITEM_CLASS (parent_class)->destroy) + GNOME_CANVAS_ITEM_CLASS (parent_class)->destroy (object); } static void diff --git a/libgnomecanvas/gnome-canvas-line.c b/libgnomecanvas/gnome-canvas-line.c index fa9179d024..a55b298beb 100644 --- a/libgnomecanvas/gnome-canvas-line.c +++ b/libgnomecanvas/gnome-canvas-line.c @@ -84,7 +84,7 @@ enum { static void gnome_canvas_line_class_init (GnomeCanvasLineClass *class); static void gnome_canvas_line_init (GnomeCanvasLine *line); -static void gnome_canvas_line_destroy (GtkObject *object); +static void gnome_canvas_line_destroy (GnomeCanvasItem *object); static void gnome_canvas_line_set_property (GObject *object, guint param_id, const GValue *value, @@ -136,11 +136,9 @@ static void gnome_canvas_line_class_init (GnomeCanvasLineClass *class) { GObjectClass *gobject_class; - GtkObjectClass *object_class; GnomeCanvasItemClass *item_class; gobject_class = (GObjectClass *) class; - object_class = (GtkObjectClass *) class; item_class = (GnomeCanvasItemClass *) class; parent_class = g_type_class_peek_parent (class); @@ -254,8 +252,7 @@ gnome_canvas_line_class_init (GnomeCanvasLineClass *class) -G_MAXDOUBLE, G_MAXDOUBLE, 0, (G_PARAM_READABLE | G_PARAM_WRITABLE))); - object_class->destroy = gnome_canvas_line_destroy; - + item_class->destroy = gnome_canvas_line_destroy; item_class->update = gnome_canvas_line_update; item_class->realize = gnome_canvas_line_realize; item_class->unrealize = gnome_canvas_line_unrealize; @@ -280,7 +277,7 @@ gnome_canvas_line_init (GnomeCanvasLine *line) } static void -gnome_canvas_line_destroy (GtkObject *object) +gnome_canvas_line_destroy (GnomeCanvasItem *object) { GnomeCanvasLine *line; @@ -319,8 +316,8 @@ gnome_canvas_line_destroy (GtkObject *object) art_svp_free (line->last_svp); line->last_svp = NULL; - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); + if (GNOME_CANVAS_ITEM_CLASS (parent_class)->destroy) + GNOME_CANVAS_ITEM_CLASS (parent_class)->destroy (object); } /* Computes the bounding box of the line, including its arrow points. Assumes that the number of diff --git a/libgnomecanvas/gnome-canvas-pixbuf.c b/libgnomecanvas/gnome-canvas-pixbuf.c index 5d290f1582..3ea3f647be 100644 --- a/libgnomecanvas/gnome-canvas-pixbuf.c +++ b/libgnomecanvas/gnome-canvas-pixbuf.c @@ -83,7 +83,7 @@ enum { static void gnome_canvas_pixbuf_class_init (GnomeCanvasPixbufClass *class); static void gnome_canvas_pixbuf_init (GnomeCanvasPixbuf *cpb); -static void gnome_canvas_pixbuf_destroy (GtkObject *object); +static void gnome_canvas_pixbuf_destroy (GnomeCanvasItem *object); static void gnome_canvas_pixbuf_set_property (GObject *object, guint param_id, const GValue *value, @@ -151,11 +151,9 @@ static void gnome_canvas_pixbuf_class_init (GnomeCanvasPixbufClass *class) { GObjectClass *gobject_class; - GtkObjectClass *object_class; GnomeCanvasItemClass *item_class; gobject_class = (GObjectClass *) class; - object_class = (GtkObjectClass *) class; item_class = (GnomeCanvasItemClass *) class; parent_class = g_type_class_peek_parent (class); @@ -237,8 +235,7 @@ gnome_canvas_pixbuf_class_init (GnomeCanvasPixbufClass *class) GTK_ANCHOR_NW, (G_PARAM_READABLE | G_PARAM_WRITABLE))); - object_class->destroy = gnome_canvas_pixbuf_destroy; - + item_class->destroy = gnome_canvas_pixbuf_destroy; item_class->update = gnome_canvas_pixbuf_update; item_class->draw = gnome_canvas_pixbuf_draw; item_class->render = gnome_canvas_pixbuf_render; @@ -264,7 +261,7 @@ gnome_canvas_pixbuf_init (GnomeCanvasPixbuf *gcp) /* Destroy handler for the pixbuf canvas item */ static void -gnome_canvas_pixbuf_destroy (GtkObject *object) +gnome_canvas_pixbuf_destroy (GnomeCanvasItem *object) { GnomeCanvasItem *item; GnomeCanvasPixbuf *gcp; @@ -290,8 +287,8 @@ gnome_canvas_pixbuf_destroy (GtkObject *object) gcp->priv = NULL; } - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); + if (GNOME_CANVAS_ITEM_CLASS (parent_class)->destroy) + GNOME_CANVAS_ITEM_CLASS (parent_class)->destroy (object); } @@ -744,37 +741,7 @@ gnome_canvas_pixbuf_update (GnomeCanvasItem *item, if (parent_class->update) (* parent_class->update) (item, affine, clip_path, flags); - /* the optimzations below cause rarely triggered redrawing bugs and - * don't seem to actually save much performance. so it's probably - * better to turn them off, than to chase subtle optimization bugs - * throughgout all of gnome-canvas-pixbuf.c - TIMJ - */ -#ifdef USE_BROKEN_OPTIMIZATIONS - if (((flags & GNOME_CANVAS_UPDATE_VISIBILITY) - && !(GTK_OBJECT_FLAGS (item) & GNOME_CANVAS_ITEM_VISIBLE)) - || (flags & GNOME_CANVAS_UPDATE_AFFINE) - || priv->need_pixbuf_update - || priv->need_xform_update) { - gnome_canvas_request_redraw (item->canvas, item->x1, item->y1, item->x2, item->y2); - } - - /* If we need a pixbuf update, or if the item changed visibility to - * shown, recompute the bounding box. - */ - if (priv->need_pixbuf_update - || priv->need_xform_update - || ((flags & GNOME_CANVAS_UPDATE_VISIBILITY) - && (GTK_OBJECT_FLAGS (gcp) & GNOME_CANVAS_ITEM_VISIBLE)) - || (flags & GNOME_CANVAS_UPDATE_AFFINE)) { - recompute_bounding_box (gcp, affine); -#ifdef GNOME_CANVAS_PIXBUF_VERBOSE - g_print ("BBox is %g %g %g %g\n", item->x1, item->y1, item->x2, item->y2); -#endif - gnome_canvas_request_redraw (item->canvas, item->x1, item->y1, item->x2, item->y2); - priv->need_pixbuf_update = FALSE; - priv->need_xform_update = FALSE; - } -#else /* ordinary update logic */ + /* ordinary update logic */ gnome_canvas_request_redraw ( item->canvas, item->x1, item->y1, item->x2, item->y2); recompute_bounding_box (gcp, affine); @@ -782,7 +749,6 @@ gnome_canvas_pixbuf_update (GnomeCanvasItem *item, item->canvas, item->x1, item->y1, item->x2, item->y2); priv->need_pixbuf_update = FALSE; priv->need_xform_update = FALSE; -#endif } diff --git a/libgnomecanvas/gnome-canvas-polygon.c b/libgnomecanvas/gnome-canvas-polygon.c index fe1d55b698..90ae40fe5e 100644 --- a/libgnomecanvas/gnome-canvas-polygon.c +++ b/libgnomecanvas/gnome-canvas-polygon.c @@ -51,7 +51,7 @@ enum { static void gnome_canvas_polygon_class_init (GnomeCanvasPolygonClass *class); static void gnome_canvas_polygon_init (GnomeCanvasPolygon *poly); -static void gnome_canvas_polygon_destroy (GtkObject *object); +static void gnome_canvas_polygon_destroy (GnomeCanvasItem *object); static void gnome_canvas_polygon_set_property (GObject *object, guint param_id, const GValue *value, @@ -94,28 +94,25 @@ gnome_canvas_polygon_get_type (void) static void gnome_canvas_polygon_class_init (GnomeCanvasPolygonClass *class) { - GObjectClass *gobject_class; - GtkObjectClass *object_class; + GObjectClass *object_class; GnomeCanvasItemClass *item_class; - gobject_class = (GObjectClass *) class; - object_class = (GtkObjectClass *) class; + object_class = (GObjectClass *) class; item_class = (GnomeCanvasItemClass *) class; parent_class = g_type_class_peek_parent (class); - gobject_class->set_property = gnome_canvas_polygon_set_property; - gobject_class->get_property = gnome_canvas_polygon_get_property; + object_class->set_property = gnome_canvas_polygon_set_property; + object_class->get_property = gnome_canvas_polygon_get_property; g_object_class_install_property - (gobject_class, + (object_class, PROP_POINTS, g_param_spec_boxed ("points", NULL, NULL, GNOME_TYPE_CANVAS_POINTS, (G_PARAM_READABLE | G_PARAM_WRITABLE))); - object_class->destroy = gnome_canvas_polygon_destroy; - + item_class->destroy = gnome_canvas_polygon_destroy; item_class->update = gnome_canvas_polygon_update; } @@ -126,7 +123,7 @@ gnome_canvas_polygon_init (GnomeCanvasPolygon *poly) } static void -gnome_canvas_polygon_destroy (GtkObject *object) +gnome_canvas_polygon_destroy (GnomeCanvasItem *object) { GnomeCanvasPolygon *poly; @@ -142,8 +139,8 @@ gnome_canvas_polygon_destroy (GtkObject *object) poly->path_def = NULL; - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); + if (GNOME_CANVAS_ITEM_CLASS (parent_class)->destroy) + GNOME_CANVAS_ITEM_CLASS (parent_class)->destroy (object); } static void diff --git a/libgnomecanvas/gnome-canvas-rect-ellipse.c b/libgnomecanvas/gnome-canvas-rect-ellipse.c index e086914bc4..a848d50f8e 100644 --- a/libgnomecanvas/gnome-canvas-rect-ellipse.c +++ b/libgnomecanvas/gnome-canvas-rect-ellipse.c @@ -57,7 +57,6 @@ enum { static void gnome_canvas_re_class_init (GnomeCanvasREClass *class); static void gnome_canvas_re_init (GnomeCanvasRE *re); -static void gnome_canvas_re_destroy (GtkObject *object); static void gnome_canvas_re_set_property (GObject *object, guint param_id, const GValue *value, @@ -102,10 +101,8 @@ static void gnome_canvas_re_class_init (GnomeCanvasREClass *class) { GObjectClass *gobject_class; - GtkObjectClass *object_class; gobject_class = (GObjectClass *) class; - object_class = (GtkObjectClass *) class; re_parent_class = g_type_class_peek_parent (class); @@ -136,8 +133,6 @@ gnome_canvas_re_class_init (GnomeCanvasREClass *class) g_param_spec_double ("y2", NULL, NULL, -G_MAXDOUBLE, G_MAXDOUBLE, 0, (G_PARAM_READABLE | G_PARAM_WRITABLE))); - - object_class->destroy = gnome_canvas_re_destroy; } static void @@ -150,16 +145,6 @@ gnome_canvas_re_init (GnomeCanvasRE *re) re->path_dirty = 0; } -static void -gnome_canvas_re_destroy (GtkObject *object) -{ - g_return_if_fail (object != NULL); - g_return_if_fail (GNOME_IS_CANVAS_RE (object)); - - if (GTK_OBJECT_CLASS (re_parent_class)->destroy) - (* GTK_OBJECT_CLASS (re_parent_class)->destroy) (object); -} - static void gnome_canvas_re_set_property (GObject *object, guint param_id, diff --git a/libgnomecanvas/gnome-canvas-rich-text.c b/libgnomecanvas/gnome-canvas-rich-text.c index 8b5b2030a0..bd988ae3f5 100644 --- a/libgnomecanvas/gnome-canvas-rich-text.c +++ b/libgnomecanvas/gnome-canvas-rich-text.c @@ -199,13 +199,13 @@ static void gnome_canvas_rich_text_class_init (GnomeCanvasRichTextClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass); GnomeCanvasItemClass *item_class = GNOME_CANVAS_ITEM_CLASS (klass); parent_class = g_type_class_peek_parent (klass); gobject_class->set_property = gnome_canvas_rich_text_set_property; gobject_class->get_property = gnome_canvas_rich_text_get_property; + gobject_class->finalize = gnome_canvas_rich_text_finalize; g_object_class_install_property ( gobject_class, @@ -381,7 +381,7 @@ gnome_canvas_rich_text_class_init (GnomeCanvasRichTextClass *klass) /* Signals */ signals[TAG_CHANGED] = g_signal_new ( "tag_changed", - G_TYPE_FROM_CLASS (object_class), + G_TYPE_FROM_CLASS (gobject_class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GnomeCanvasRichTextClass, tag_changed), NULL, NULL, @@ -389,8 +389,6 @@ gnome_canvas_rich_text_class_init (GnomeCanvasRichTextClass *klass) G_TYPE_NONE, 1, G_TYPE_OBJECT); - gobject_class->finalize = gnome_canvas_rich_text_finalize; - item_class->update = gnome_canvas_rich_text_update; item_class->realize = gnome_canvas_rich_text_realize; item_class->unrealize = gnome_canvas_rich_text_unrealize; @@ -405,7 +403,7 @@ static void gnome_canvas_rich_text_init (GnomeCanvasRichText *text) { #if 0 - GtkObject *object = GTK_OBJECT (text); + GObject *object = G_OBJECT (text); object->flags |= GNOME_CANVAS_ITEM_ALWAYS_REDRAW; #endif diff --git a/libgnomecanvas/gnome-canvas-shape.c b/libgnomecanvas/gnome-canvas-shape.c index 2b606c1e5b..b1154975b2 100644 --- a/libgnomecanvas/gnome-canvas-shape.c +++ b/libgnomecanvas/gnome-canvas-shape.c @@ -62,7 +62,7 @@ enum { static void gnome_canvas_shape_class_init (GnomeCanvasShapeClass *class); static void gnome_canvas_shape_init (GnomeCanvasShape *bpath); -static void gnome_canvas_shape_destroy (GtkObject *object); +static void gnome_canvas_shape_destroy (GnomeCanvasItem *object); static void gnome_canvas_shape_set_property (GObject *object, guint param_id, const GValue *value, @@ -124,11 +124,9 @@ static void gnome_canvas_shape_class_init (GnomeCanvasShapeClass *class) { GObjectClass *gobject_class; - GtkObjectClass *object_class; GnomeCanvasItemClass *item_class; gobject_class = (GObjectClass *) class; - object_class = (GtkObjectClass *) class; item_class = (GnomeCanvasItemClass *) class; parent_class = g_type_class_peek_parent (class); @@ -217,8 +215,7 @@ gnome_canvas_shape_class_init (GnomeCanvasShapeClass *class) g_param_spec_pointer ("dash", NULL, NULL, (G_PARAM_READABLE | G_PARAM_WRITABLE))); - object_class->destroy = gnome_canvas_shape_destroy; - + item_class->destroy = gnome_canvas_shape_destroy; item_class->update = gnome_canvas_shape_update; item_class->realize = gnome_canvas_shape_realize; item_class->unrealize = gnome_canvas_shape_unrealize; @@ -261,7 +258,7 @@ gnome_canvas_shape_init (GnomeCanvasShape *shape) } static void -gnome_canvas_shape_destroy (GtkObject *object) +gnome_canvas_shape_destroy (GnomeCanvasItem *object) { GnomeCanvasShape *shape; GnomeCanvasShapePriv *priv; @@ -285,8 +282,8 @@ gnome_canvas_shape_destroy (GtkObject *object) shape->priv = NULL; } - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); + if (GNOME_CANVAS_ITEM_CLASS (parent_class)->destroy) + GNOME_CANVAS_ITEM_CLASS (parent_class)->destroy (object); } /** diff --git a/libgnomecanvas/gnome-canvas-text.c b/libgnomecanvas/gnome-canvas-text.c index c0c9acba2b..5f7679f3aa 100644 --- a/libgnomecanvas/gnome-canvas-text.c +++ b/libgnomecanvas/gnome-canvas-text.c @@ -105,7 +105,7 @@ struct _GnomeCanvasTextPrivate { static void gnome_canvas_text_class_init (GnomeCanvasTextClass *class); static void gnome_canvas_text_init (GnomeCanvasText *text); -static void gnome_canvas_text_destroy (GtkObject *object); +static void gnome_canvas_text_destroy (GnomeCanvasItem *object); static void gnome_canvas_text_set_property (GObject *object, guint param_id, const GValue *value, @@ -187,11 +187,9 @@ static void gnome_canvas_text_class_init (GnomeCanvasTextClass *class) { GObjectClass *gobject_class; - GtkObjectClass *object_class; GnomeCanvasItemClass *item_class; gobject_class = (GObjectClass *) class; - object_class = (GtkObjectClass *) class; item_class = (GnomeCanvasItemClass *) class; parent_class = g_type_class_peek_parent (class); @@ -199,6 +197,7 @@ gnome_canvas_text_class_init (GnomeCanvasTextClass *class) gobject_class->set_property = gnome_canvas_text_set_property; gobject_class->get_property = gnome_canvas_text_get_property; + /* Text */ g_object_class_install_property (gobject_class, @@ -512,8 +511,7 @@ gnome_canvas_text_class_init (GnomeCanvasTextClass *class) "Whether this tag affects font scaling"); #undef ADD_SET_PROP - object_class->destroy = gnome_canvas_text_destroy; - + item_class->destroy = gnome_canvas_text_destroy; item_class->update = gnome_canvas_text_update; item_class->realize = gnome_canvas_text_realize; item_class->unrealize = gnome_canvas_text_unrealize; @@ -554,7 +552,7 @@ gnome_canvas_text_init (GnomeCanvasText *text) /* Destroy handler for the text item */ static void -gnome_canvas_text_destroy (GtkObject *object) +gnome_canvas_text_destroy (GnomeCanvasItem *object) { GnomeCanvasText *text; @@ -590,8 +588,8 @@ gnome_canvas_text_destroy (GtkObject *object) g_free (text->priv); text->priv = NULL; - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); + if (GNOME_CANVAS_ITEM_CLASS (parent_class)->destroy) + GNOME_CANVAS_ITEM_CLASS (parent_class)->destroy (object); } static void diff --git a/libgnomecanvas/gnome-canvas-widget.c b/libgnomecanvas/gnome-canvas-widget.c index 23b687f899..fbcb0a6a53 100644 --- a/libgnomecanvas/gnome-canvas-widget.c +++ b/libgnomecanvas/gnome-canvas-widget.c @@ -49,7 +49,7 @@ enum { static void gnome_canvas_widget_class_init (GnomeCanvasWidgetClass *class); static void gnome_canvas_widget_init (GnomeCanvasWidget *witem); -static void gnome_canvas_widget_destroy (GtkObject *object); +static void gnome_canvas_widget_destroy (GnomeCanvasItem *object); static void gnome_canvas_widget_get_property (GObject *object, guint param_id, GValue *value, @@ -116,11 +116,9 @@ static void gnome_canvas_widget_class_init (GnomeCanvasWidgetClass *class) { GObjectClass *gobject_class; - GtkObjectClass *object_class; GnomeCanvasItemClass *item_class; gobject_class = (GObjectClass *) class; - object_class = (GtkObjectClass *) class; item_class = (GnomeCanvasItemClass *) class; parent_class = g_type_class_peek_parent (class); @@ -172,8 +170,7 @@ gnome_canvas_widget_class_init (GnomeCanvasWidgetClass *class) FALSE, (G_PARAM_READABLE | G_PARAM_WRITABLE))); - object_class->destroy = gnome_canvas_widget_destroy; - + item_class->destroy = gnome_canvas_widget_destroy; item_class->update = gnome_canvas_widget_update; item_class->point = gnome_canvas_widget_point; item_class->bounds = gnome_canvas_widget_bounds; @@ -181,6 +178,19 @@ gnome_canvas_widget_class_init (GnomeCanvasWidgetClass *class) item_class->draw = gnome_canvas_widget_draw; } +static void +do_destroy (gpointer data, GObject *gone_object) +{ + GnomeCanvasWidget *witem; + + witem = data; + + if (!witem->in_destroy) { + witem->in_destroy = TRUE; + g_object_run_dispose (G_OBJECT (witem)); + } +} + static void gnome_canvas_widget_init (GnomeCanvasWidget *witem) { @@ -193,7 +203,7 @@ gnome_canvas_widget_init (GnomeCanvasWidget *witem) } static void -gnome_canvas_widget_destroy (GtkObject *object) +gnome_canvas_widget_destroy (GnomeCanvasItem *object) { GnomeCanvasWidget *witem; @@ -203,13 +213,13 @@ gnome_canvas_widget_destroy (GtkObject *object) witem = GNOME_CANVAS_WIDGET (object); if (witem->widget && !witem->in_destroy) { - g_signal_handler_disconnect (witem->widget, witem->destroy_id); + g_object_weak_unref (G_OBJECT (witem->widget), do_destroy, witem); gtk_widget_destroy (witem->widget); witem->widget = NULL; } - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); + if (GNOME_CANVAS_ITEM_CLASS (parent_class)->destroy) + GNOME_CANVAS_ITEM_CLASS (parent_class)->destroy (object); } static void @@ -289,18 +299,6 @@ recalc_bounds (GnomeCanvasWidget *witem) witem->cy + item->canvas->zoom_yofs); } -static void -do_destroy (GtkObject *object, gpointer data) -{ - GnomeCanvasWidget *witem; - - witem = data; - - witem->in_destroy = TRUE; - - gtk_object_destroy (data); -} - static void gnome_canvas_widget_set_property (GObject *object, guint param_id, @@ -325,16 +323,14 @@ gnome_canvas_widget_set_property (GObject *object, switch (param_id) { case PROP_WIDGET: if (witem->widget) { - g_signal_handler_disconnect (witem->widget, witem->destroy_id); + g_object_weak_unref (G_OBJECT (witem->widget), do_destroy, witem); gtk_container_remove (GTK_CONTAINER (item->canvas), witem->widget); } obj = g_value_get_object (value); if (obj) { witem->widget = GTK_WIDGET (obj); - witem->destroy_id = g_signal_connect (obj, "destroy", - G_CALLBACK (do_destroy), - witem); + g_object_weak_ref (obj, do_destroy, witem); gtk_layout_put (GTK_LAYOUT (item->canvas), witem->widget, witem->cx + item->canvas->zoom_xofs, witem->cy + item->canvas->zoom_yofs); diff --git a/libgnomecanvas/gnome-canvas-widget.h b/libgnomecanvas/gnome-canvas-widget.h index 32514aad6e..62000299b1 100644 --- a/libgnomecanvas/gnome-canvas-widget.h +++ b/libgnomecanvas/gnome-canvas-widget.h @@ -78,8 +78,6 @@ struct _GnomeCanvasWidget { gint cx, cy; /* Top-left canvas coordinates for widget */ gint cwidth, cheight; /* Size of widget in pixels */ - guint destroy_id; /* Signal connection id for destruction of child widget */ - guint size_pixels : 1; /* Is size specified in (unchanging) pixels or units (get scaled)? */ guint in_destroy : 1; /* Is child widget being destroyed? */ }; diff --git a/libgnomecanvas/gnome-canvas.c b/libgnomecanvas/gnome-canvas.c index adc18621f9..cacabff454 100644 --- a/libgnomecanvas/gnome-canvas.c +++ b/libgnomecanvas/gnome-canvas.c @@ -136,7 +136,7 @@ static gint emit_event (GnomeCanvas *canvas, GdkEvent *ev static guint item_signals[ITEM_LAST_SIGNAL]; -static GtkObjectClass *item_parent_class; +static GObjectClass *item_parent_class; /** * gnome_canvas_item_get_type: @@ -165,7 +165,7 @@ gnome_canvas_item_get_type (void) NULL /* value_table */ }; - canvas_item_type = g_type_register_static (GTK_TYPE_OBJECT, "GnomeCanvasItem", + canvas_item_type = g_type_register_static (G_TYPE_OBJECT, "GnomeCanvasItem", &object_info, 0); } @@ -362,6 +362,9 @@ gnome_canvas_item_dispose (GObject *object) g_free (item->xform); item->xform = NULL; + if (GNOME_CANVAS_ITEM_GET_CLASS (item)->destroy) + GNOME_CANVAS_ITEM_GET_CLASS (item)->destroy (item); + G_OBJECT_CLASS (item_parent_class)->dispose (object); /* items should remove any reference to item->canvas after the first ::destroy */ @@ -1355,7 +1358,7 @@ static void gnome_canvas_group_get_property (GObject *object, GValue *value, GParamSpec *pspec); -static void gnome_canvas_group_destroy (GtkObject *object); +static void gnome_canvas_group_destroy (GnomeCanvasItem *object); static void gnome_canvas_group_update (GnomeCanvasItem *item, gdouble *affine, ArtSVP *clip_path, gint flags); @@ -1418,36 +1421,33 @@ gnome_canvas_group_get_type (void) static void gnome_canvas_group_class_init (GnomeCanvasGroupClass *class) { - GObjectClass *gobject_class; - GtkObjectClass *object_class; + GObjectClass *object_class; GnomeCanvasItemClass *item_class; - gobject_class = (GObjectClass *) class; - object_class = (GtkObjectClass *) class; + object_class = (GObjectClass *) class; item_class = (GnomeCanvasItemClass *) class; group_parent_class = g_type_class_peek_parent (class); - gobject_class->set_property = gnome_canvas_group_set_property; - gobject_class->get_property = gnome_canvas_group_get_property; + object_class->set_property = gnome_canvas_group_set_property; + object_class->get_property = gnome_canvas_group_get_property; g_object_class_install_property - (gobject_class, GROUP_PROP_X, + (object_class, GROUP_PROP_X, g_param_spec_double ("x", "X", "X", -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, (G_PARAM_READABLE | G_PARAM_WRITABLE))); g_object_class_install_property - (gobject_class, GROUP_PROP_Y, + (object_class, GROUP_PROP_Y, g_param_spec_double ("y", "Y", "Y", -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, (G_PARAM_READABLE | G_PARAM_WRITABLE))); - object_class->destroy = gnome_canvas_group_destroy; - + item_class->destroy = gnome_canvas_group_destroy; item_class->update = gnome_canvas_group_update; item_class->realize = gnome_canvas_group_realize; item_class->unrealize = gnome_canvas_group_unrealize; @@ -1553,7 +1553,7 @@ gnome_canvas_group_get_property (GObject *gobject, guint param_id, /* Destroy handler for canvas groups */ static void -gnome_canvas_group_destroy (GtkObject *object) +gnome_canvas_group_destroy (GnomeCanvasItem *object) { GnomeCanvasGroup *group; @@ -1562,12 +1562,12 @@ gnome_canvas_group_destroy (GtkObject *object) group = GNOME_CANVAS_GROUP (object); while (group->item_list) { - // child is unref'ed by the child's group_remove (). - gtk_object_destroy (GTK_OBJECT (group->item_list->data)); + /* child is unref'ed by the child's group_remove (). */ + g_object_run_dispose (G_OBJECT (group->item_list->data)); } - if (GTK_OBJECT_CLASS (group_parent_class)->destroy) - (* GTK_OBJECT_CLASS (group_parent_class)->destroy) (object); + if (GNOME_CANVAS_ITEM_CLASS (group_parent_class)->destroy) + GNOME_CANVAS_ITEM_CLASS (group_parent_class)->destroy (object); } /* Update handler for canvas groups */ @@ -1941,7 +1941,7 @@ enum { static void gnome_canvas_class_init (GnomeCanvasClass *class); static void gnome_canvas_init (GnomeCanvas *canvas); -static void gnome_canvas_destroy (GtkObject *object); +static void gnome_canvas_dispose (GObject *object); static void gnome_canvas_map (GtkWidget *widget); static void gnome_canvas_unmap (GtkWidget *widget); static void gnome_canvas_realize (GtkWidget *widget); @@ -2055,20 +2055,17 @@ gnome_canvas_set_property (GObject *object, static void gnome_canvas_class_init (GnomeCanvasClass *klass) { - GObjectClass *gobject_class; - GtkObjectClass *object_class; + GObjectClass *object_class; GtkWidgetClass *widget_class; - gobject_class = (GObjectClass *)klass; - object_class = (GtkObjectClass *) klass; + object_class = (GObjectClass *)klass; widget_class = (GtkWidgetClass *) klass; canvas_parent_class = g_type_class_peek_parent (klass); - gobject_class->set_property = gnome_canvas_set_property; - gobject_class->get_property = gnome_canvas_get_property; - - object_class->destroy = gnome_canvas_destroy; + object_class->set_property = gnome_canvas_set_property; + object_class->get_property = gnome_canvas_get_property; + object_class->dispose = gnome_canvas_dispose; widget_class->map = gnome_canvas_map; widget_class->unmap = gnome_canvas_unmap; @@ -2098,7 +2095,7 @@ gnome_canvas_class_init (GnomeCanvasClass *klass) FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property (gobject_class, PROP_FOCUSED_ITEM, + g_object_class_install_property (object_class, PROP_FOCUSED_ITEM, g_param_spec_object ("focused_item", NULL, NULL, GNOME_TYPE_CANVAS_ITEM, (G_PARAM_READABLE | G_PARAM_WRITABLE))); @@ -2128,9 +2125,9 @@ gnome_canvas_class_init (GnomeCanvasClass *klass) * never ever do this, so we panic if this happens. */ G_GNUC_NORETURN static void -panic_root_destroyed (GtkObject *object, gpointer data) +panic_root_finalized (gpointer data, GObject *gone_object) { - g_error ("Eeeek, root item %p of canvas %p was destroyed!", object, data); + g_error ("Eeeek, root item %p of canvas %p was destroyed!", gone_object, data); } /* Object initialization function for GnomeCanvas */ @@ -2182,9 +2179,7 @@ gnome_canvas_init (GnomeCanvas *canvas) g_object_ref_sink (canvas->root); - canvas->root_destroy_id = g_signal_connect (canvas->root, "destroy", - G_CALLBACK (panic_root_destroyed), - canvas); + g_object_weak_ref (G_OBJECT (canvas->root), panic_root_finalized, canvas); canvas->need_repick = TRUE; } @@ -2227,32 +2222,28 @@ shutdown_transients (GnomeCanvas *canvas) remove_idle (canvas); } -/* Destroy handler for GnomeCanvas */ +/* Dispose handler for GnomeCanvas */ static void -gnome_canvas_destroy (GtkObject *object) +gnome_canvas_dispose (GObject *object) { GnomeCanvas *canvas; g_return_if_fail (GNOME_IS_CANVAS (object)); - /* remember, destroy can be run multiple times! */ + /* remember, dispose can be run multiple times! */ canvas = GNOME_CANVAS (object); - if (canvas->root_destroy_id) { - g_signal_handler_disconnect (canvas->root, canvas->root_destroy_id); - canvas->root_destroy_id = 0; - } if (canvas->root) { - gtk_object_destroy (GTK_OBJECT (canvas->root)); + g_object_weak_unref (G_OBJECT (canvas->root), panic_root_finalized, canvas); g_object_unref (G_OBJECT (canvas->root)); canvas->root = NULL; } shutdown_transients (canvas); - if (GTK_OBJECT_CLASS (canvas_parent_class)->destroy) - (* GTK_OBJECT_CLASS (canvas_parent_class)->destroy) (object); + if (G_OBJECT_CLASS (canvas_parent_class)->dispose) + G_OBJECT_CLASS (canvas_parent_class)->dispose (object); } /** diff --git a/libgnomecanvas/gnome-canvas.h b/libgnomecanvas/gnome-canvas.h index 66b9dba652..c5d6cffe3b 100644 --- a/libgnomecanvas/gnome-canvas.h +++ b/libgnomecanvas/gnome-canvas.h @@ -138,7 +138,7 @@ typedef struct { #define GNOME_CANVAS_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GNOME_TYPE_CANVAS_ITEM, GnomeCanvasItemClass)) struct _GnomeCanvasItem { - GtkObject object; + GObject object; /* Parent canvas for this item */ GnomeCanvas *canvas; @@ -156,13 +156,13 @@ struct _GnomeCanvasItem { /* Bounding box for this item (in canvas coordinates) */ gdouble x1, y1, x2, y2; - /* XXX GtkObject flags are sealed now, so we have to provide + /* XXX GObject flags are sealed now, so we have to provide * our own. This breaks ABI compatibility with upstream. */ GnomeCanvasItemFlags flags; }; struct _GnomeCanvasItemClass { - GtkObjectClass parent_class; + GObjectClass parent_class; /* Tell the item to update itself. The flags are from the update flags * defined above. The item should update its internal state from its @@ -184,6 +184,9 @@ struct _GnomeCanvasItemClass { /* Unmap an item */ void (* unmap) (GnomeCanvasItem *item); + /* Destroy item; called inside GObject's dispose of the base class */ + void (* destroy) (GnomeCanvasItem *item); + /* Return the microtile coverage of the item */ ArtUta *(* coverage) (GnomeCanvasItem *item); @@ -426,9 +429,6 @@ struct _GnomeCanvas { /* Idle handler ID */ guint idle_id; - /* Signal handler ID for destruction of the root item */ - guint root_destroy_id; - /* Area that is being redrawn. Contains (x1, y1) but not (x2, y2). * Specified in canvas pixel coordinates. */ -- cgit v1.2.3