MamanBar *bar = g_object_new (MAMAN_TYPE_BAR, NULL);
first instantiation of an object,
(1) maman_b_class_init is invoked after any mam_b_base_class_init
--->make sure the class structure of this new object is correctly initialized
-->setup the class' own methods. (e.g. the constructor method is the overridden method,i.e. Set to mam_bar_constructor).
After g_object_new has obtained a reference to an initialized class structure
(2)invokes its constructor method(maman_bar_constructor) to create an instance of the new object.
(3)mam_bar_consturctor chains up parent's constructor
(4)g_object_constructor is invoked :
a. allocates the object's instance's buffer through g_type_create_instance
==>where instance_init is invoked
b.set the construction properties(i.e. The properties given to g_object_new)
- #define MAMAN_TYPE_BAR (maman_bar_get_type ())
- #define MAMAN_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAMAN_TYPE_BAR, MamanBar))
- #define MAMAN_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MAMAN_TYPE_BAR, MamanBarClass))
- #define MAMAN_IS_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MAMAN_TYPE_BAR))
- #define MAMAN_IS_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MAMAN_TYPE_BAR))
- #define MAMAN_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MAMAN_TYPE_BAR, MamanBarClass))
- typedef struct _MamanBar MamanBar;
- typedef struct _MamanBarClass MamanBarClass;
- struct _MamanBar {
- GObject parent;
- /* instance members */
- };
- struct _MamanBarClass {
- GObjectClass parent;
- /* class members */
- };
- /* used by MAMAN_TYPE_BAR */
- GType maman_bar_get_type (void);
- static GObject *
- maman_bar_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
- {
- GObject *obj;
- {
- /* Invoke parent constructor. */
- MamanBarClass *klass;
- GObjectClass *parent_class;
- klass = MAMAN_BAR_CLASS (g_type_class_peek (MAMAN_TYPE_BAR));
- parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
- obj = parent_class->constructor (type,
- n_construct_properties,
- construct_properties);
- }
- /* do stuff. */
- return obj;
- }
- static void
- maman_bar_instance_init (GTypeInstance *instance,
- gpointer g_class)
- {
- MamanBar *self = (MamanBar *)instance;
- /* do stuff */
- }
- static void
- maman_bar_class_init (gpointer g_class,
- gpointer g_class_data)
- {
- GObjectClass *gobject_class = G_OBJECT_CLASS (g_class);
- MamanBarClass *klass = MAMAN_BAR_CLASS (g_class);
- gobject_class->constructor = maman_bar_constructor;
- }
- GType maman_bar_get_type (void)
- {
- static GType type = 0;
- if (type == 0) {
- static const GTypeInfo info = {
- sizeof (MamanBarClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- maman_bar_class_init, /* class_init */
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (MamanBar),
- 0, /* n_preallocs */
- maman_bar_instance_init /* instance_init */
- };
- type = g_type_register_static (G_TYPE_OBJECT,
- "MamanBarType",
- &info, 0);
- }
- return type;
- }