+Tue Apr 3 12:34:14 2007 Tim Janik <timj@gtk.org>
+
+ * 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 <desrt@desrt.ca>
+
+ * 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 <mclasen@redhat.com>
* === Released 2.13.0 ===
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);
/* 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);
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,
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
{