From: Ryan Lortie Date: Tue, 3 Apr 2007 10:44:30 +0000 (+0000) Subject: invoke GObjectClass.constructed() only for newly constructed objects, and X-Git-Tag: GLIB_2_13_1~26 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dac885cba5e02b0a6911061ed9fa4413fb7f289c;p=platform%2Fupstream%2Fglib.git invoke GObjectClass.constructed() only for newly constructed objects, and Tue Apr 3 12:34:14 2007 Tim Janik * gobject.[hc]: invoke GObjectClass.constructed() only for newly constructed objects, and invoke it while the notify queue is still being frozen, after all CONSTRUCT* properties have been set and before random other properties are being set. * applied modified patch from Ryan Lortie to implement GObjectClass.constructed() to fix #425324. 2007-04-02 Ryan Lortie * gobject/gobject.h: Add 'constructed' vcall to GObjectClass. * gobject/gobject.c (g_object_newv): call ->constructed() as last step of object construction. svn path=/trunk/; revision=5441 --- diff --git a/gobject/ChangeLog b/gobject/ChangeLog index 8183a2a..14252b4 100644 --- a/gobject/ChangeLog +++ b/gobject/ChangeLog @@ -1,3 +1,19 @@ +Tue Apr 3 12:34:14 2007 Tim Janik + + * gobject.[hc]: invoke GObjectClass.constructed() only for newly + constructed objects, and invoke it while the notify queue is + still being frozen, after all CONSTRUCT* properties have been + set and before random other properties are being set. + + * applied modified patch from Ryan Lortie to implement + GObjectClass.constructed() to fix #425324. + +2007-04-02 Ryan Lortie + + * gobject/gobject.h: Add 'constructed' vcall to GObjectClass. + * gobject/gobject.c (g_object_newv): call ->constructed() as last + step of object construction. + 2007-03-16 Matthias Clasen * === Released 2.13.0 === diff --git a/gobject/gobject.c b/gobject/gobject.c index 7514c9a..abcc56c 100644 --- a/gobject/gobject.c +++ b/gobject/gobject.c @@ -950,6 +950,10 @@ g_object_newv (GType object_type, if (newly_constructed) g_object_notify_queue_thaw (object, nqueue); + /* run 'constructed' handler if there is one */ + if (newly_constructed && class->constructed) + class->constructed (object); + /* set remaining properties */ for (i = 0; i < n_oparams; i++) object_set_property (object, oparams[i].pspec, oparams[i].value, nqueue); @@ -958,6 +962,7 @@ g_object_newv (GType object_type, /* release our own freeze count and handle notifications */ if (newly_constructed || n_oparams) g_object_notify_queue_thaw (object, nqueue); + if (unref_class) g_type_class_unref (unref_class); diff --git a/gobject/gobject.h b/gobject/gobject.h index 4dda126..4f7ef57 100644 --- a/gobject/gobject.h +++ b/gobject/gobject.h @@ -87,10 +87,11 @@ struct _GObjectClass GSList *construct_properties; /*< public >*/ - /* overridable methods */ + /* seldomly overidden */ GObject* (*constructor) (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties); + /* overridable methods */ void (*set_property) (GObject *object, guint property_id, const GValue *value, @@ -101,18 +102,20 @@ struct _GObjectClass GParamSpec *pspec); void (*dispose) (GObject *object); void (*finalize) (GObject *object); - /* seldomly overidden */ void (*dispatch_properties_changed) (GObject *object, guint n_pspecs, GParamSpec **pspecs); - /* signals */ void (*notify) (GObject *object, GParamSpec *pspec); + + /* called when done constructing */ + void (*constructed) (GObject *object); + /*< private >*/ /* padding */ - gpointer pdummy[8]; + gpointer pdummy[7]; }; struct _GObjectConstructParam {