From 3ae1549289877907e1767b8cbf30ab8b4b2ed9f2 Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Mon, 16 Nov 1998 06:05:37 +0000 Subject: [PATCH] relookup type node after class creation and parent class' object Mon Nov 16 00:17:53 1998 Tim Janik * gtk/gtktypeutils.c (gtk_type_new): relookup type node after class creation and parent class' object initializer. --- ChangeLog | 5 +++++ ChangeLog.pre-2-0 | 5 +++++ ChangeLog.pre-2-10 | 5 +++++ ChangeLog.pre-2-2 | 5 +++++ ChangeLog.pre-2-4 | 5 +++++ ChangeLog.pre-2-6 | 5 +++++ ChangeLog.pre-2-8 | 5 +++++ gtk/gtktypeutils.c | 35 ++++++++++++++++++++++------------- 8 files changed, 57 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 06ad4d2e1..e4ae81d7c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Nov 16 00:17:53 1998 Tim Janik + + * gtk/gtktypeutils.c (gtk_type_new): relookup type node after + class creation and parent class' object initializer. + 1998-11-13 Federico Mena Quintero * gtk/gtkpaned.c (gtk_paned_realize): Destroy the cursor after we diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 06ad4d2e1..e4ae81d7c 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,8 @@ +Mon Nov 16 00:17:53 1998 Tim Janik + + * gtk/gtktypeutils.c (gtk_type_new): relookup type node after + class creation and parent class' object initializer. + 1998-11-13 Federico Mena Quintero * gtk/gtkpaned.c (gtk_paned_realize): Destroy the cursor after we diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 06ad4d2e1..e4ae81d7c 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,8 @@ +Mon Nov 16 00:17:53 1998 Tim Janik + + * gtk/gtktypeutils.c (gtk_type_new): relookup type node after + class creation and parent class' object initializer. + 1998-11-13 Federico Mena Quintero * gtk/gtkpaned.c (gtk_paned_realize): Destroy the cursor after we diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 06ad4d2e1..e4ae81d7c 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,8 @@ +Mon Nov 16 00:17:53 1998 Tim Janik + + * gtk/gtktypeutils.c (gtk_type_new): relookup type node after + class creation and parent class' object initializer. + 1998-11-13 Federico Mena Quintero * gtk/gtkpaned.c (gtk_paned_realize): Destroy the cursor after we diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 06ad4d2e1..e4ae81d7c 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,8 @@ +Mon Nov 16 00:17:53 1998 Tim Janik + + * gtk/gtktypeutils.c (gtk_type_new): relookup type node after + class creation and parent class' object initializer. + 1998-11-13 Federico Mena Quintero * gtk/gtkpaned.c (gtk_paned_realize): Destroy the cursor after we diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 06ad4d2e1..e4ae81d7c 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,8 @@ +Mon Nov 16 00:17:53 1998 Tim Janik + + * gtk/gtktypeutils.c (gtk_type_new): relookup type node after + class creation and parent class' object initializer. + 1998-11-13 Federico Mena Quintero * gtk/gtkpaned.c (gtk_paned_realize): Destroy the cursor after we diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 06ad4d2e1..e4ae81d7c 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,8 @@ +Mon Nov 16 00:17:53 1998 Tim Janik + + * gtk/gtktypeutils.c (gtk_type_new): relookup type node after + class creation and parent class' object initializer. + 1998-11-13 Federico Mena Quintero * gtk/gtkpaned.c (gtk_paned_realize): Destroy the cursor after we diff --git a/gtk/gtktypeutils.c b/gtk/gtktypeutils.c index 49074bc8e..165a8d08c 100644 --- a/gtk/gtktypeutils.c +++ b/gtk/gtktypeutils.c @@ -331,19 +331,20 @@ gtk_type_new (GtkType type) GtkTypeNode *node; GtkTypeObject *tobject; gpointer klass; - guint i; LOOKUP_TYPE_NODE (node, type); g_return_val_if_fail (node != NULL, NULL); - klass = gtk_type_class (type); + klass = node->klass; + if (!klass) + { + klass = gtk_type_class (type); + LOOKUP_TYPE_NODE (node, type); + } node->chunk_alloc_locked = TRUE; if (node->mem_chunk) - { - tobject = g_mem_chunk_alloc (node->mem_chunk); - memset (tobject, 0, node->type_info.object_size); - } + tobject = g_mem_chunk_alloc0 (node->mem_chunk); else tobject = g_malloc0 (node->type_info.object_size); @@ -352,16 +353,24 @@ gtk_type_new (GtkType type) * corresponding base class, otherwise overridden class functions * could get called with partly-initialized objects. */ - for (i = node->n_supers; i > 0; i--) + if (node->n_supers) { - GtkTypeNode *pnode; - - LOOKUP_TYPE_NODE (pnode, node->supers[i]); - if (pnode->type_info.object_init_func) + guint i; + GtkType *supers; + + supers = node->supers; + for (i = node->n_supers; i > 0; i--) { - tobject->klass = pnode->klass; - pnode->type_info.object_init_func (tobject); + GtkTypeNode *pnode; + + LOOKUP_TYPE_NODE (pnode, supers[i]); + if (pnode->type_info.object_init_func) + { + tobject->klass = pnode->klass; + pnode->type_info.object_init_func (tobject); + } } + LOOKUP_TYPE_NODE (node, type); } tobject->klass = klass; if (node->type_info.object_init_func)