Mon, 11 Jan 1999 08:09:08 +0100 Paolo Molaro <lupus@debian.org>
* gtk/gtktypeutils.[ch]: add gtk_type_{add,remove}_creation_hook(). You can have a notification when a type is created.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
Mon, 11 Jan 1999 08:09:08 +0100 Paolo Molaro <lupus@debian.org>
|
||||||
|
|
||||||
|
* gtk/gtktypeutils.[ch]: add gtk_type_{add,remove}_creation_hook().
|
||||||
|
You can have a notification when a type is created.
|
||||||
|
|
||||||
1999-01-11 Tim Janik <timj@gtk.org>
|
1999-01-11 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
|
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
Mon, 11 Jan 1999 08:09:08 +0100 Paolo Molaro <lupus@debian.org>
|
||||||
|
|
||||||
|
* gtk/gtktypeutils.[ch]: add gtk_type_{add,remove}_creation_hook().
|
||||||
|
You can have a notification when a type is created.
|
||||||
|
|
||||||
1999-01-11 Tim Janik <timj@gtk.org>
|
1999-01-11 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
|
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
Mon, 11 Jan 1999 08:09:08 +0100 Paolo Molaro <lupus@debian.org>
|
||||||
|
|
||||||
|
* gtk/gtktypeutils.[ch]: add gtk_type_{add,remove}_creation_hook().
|
||||||
|
You can have a notification when a type is created.
|
||||||
|
|
||||||
1999-01-11 Tim Janik <timj@gtk.org>
|
1999-01-11 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
|
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
Mon, 11 Jan 1999 08:09:08 +0100 Paolo Molaro <lupus@debian.org>
|
||||||
|
|
||||||
|
* gtk/gtktypeutils.[ch]: add gtk_type_{add,remove}_creation_hook().
|
||||||
|
You can have a notification when a type is created.
|
||||||
|
|
||||||
1999-01-11 Tim Janik <timj@gtk.org>
|
1999-01-11 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
|
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
Mon, 11 Jan 1999 08:09:08 +0100 Paolo Molaro <lupus@debian.org>
|
||||||
|
|
||||||
|
* gtk/gtktypeutils.[ch]: add gtk_type_{add,remove}_creation_hook().
|
||||||
|
You can have a notification when a type is created.
|
||||||
|
|
||||||
1999-01-11 Tim Janik <timj@gtk.org>
|
1999-01-11 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
|
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
Mon, 11 Jan 1999 08:09:08 +0100 Paolo Molaro <lupus@debian.org>
|
||||||
|
|
||||||
|
* gtk/gtktypeutils.[ch]: add gtk_type_{add,remove}_creation_hook().
|
||||||
|
You can have a notification when a type is created.
|
||||||
|
|
||||||
1999-01-11 Tim Janik <timj@gtk.org>
|
1999-01-11 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
|
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
Mon, 11 Jan 1999 08:09:08 +0100 Paolo Molaro <lupus@debian.org>
|
||||||
|
|
||||||
|
* gtk/gtktypeutils.[ch]: add gtk_type_{add,remove}_creation_hook().
|
||||||
|
You can have a notification when a type is created.
|
||||||
|
|
||||||
1999-01-11 Tim Janik <timj@gtk.org>
|
1999-01-11 Tim Janik <timj@gtk.org>
|
||||||
|
|
||||||
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
|
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
|
||||||
|
@ -37,7 +37,6 @@ struct _GtkTypeNode
|
|||||||
GMemChunk *mem_chunk;
|
GMemChunk *mem_chunk;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define LOOKUP_TYPE_NODE(node_var, type) { \
|
#define LOOKUP_TYPE_NODE(node_var, type) { \
|
||||||
GtkTypeNode *__node = NULL; \
|
GtkTypeNode *__node = NULL; \
|
||||||
GtkType sqn = GTK_TYPE_SEQNO (type); \
|
GtkType sqn = GTK_TYPE_SEQNO (type); \
|
||||||
@ -66,6 +65,7 @@ static guint n_type_nodes = 0;
|
|||||||
static guint n_ftype_nodes = 0;
|
static guint n_ftype_nodes = 0;
|
||||||
static GHashTable *type_name_2_type_ht = NULL;
|
static GHashTable *type_name_2_type_ht = NULL;
|
||||||
|
|
||||||
|
static GHookList *creation_hook_list = NULL;
|
||||||
|
|
||||||
static GtkTypeNode*
|
static GtkTypeNode*
|
||||||
gtk_type_node_next_and_invalidate (GtkType parent_type)
|
gtk_type_node_next_and_invalidate (GtkType parent_type)
|
||||||
@ -228,6 +228,15 @@ gtk_type_create (GtkType parent_type,
|
|||||||
return new_node->type;
|
return new_node->type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gtk_creation_marshaller (GHook* hook, gpointer data)
|
||||||
|
{
|
||||||
|
GtkTypeQuery *query = (GtkTypeQuery*) data;
|
||||||
|
GtkCreationHook func = hook->func;
|
||||||
|
|
||||||
|
return func(query, hook->data);
|
||||||
|
}
|
||||||
|
|
||||||
GtkType
|
GtkType
|
||||||
gtk_type_unique (GtkType parent_type,
|
gtk_type_unique (GtkType parent_type,
|
||||||
const GtkTypeInfo *type_info)
|
const GtkTypeInfo *type_info)
|
||||||
@ -253,7 +262,17 @@ gtk_type_unique (GtkType parent_type,
|
|||||||
|
|
||||||
if (!new_type)
|
if (!new_type)
|
||||||
g_free (type_name);
|
g_free (type_name);
|
||||||
|
else if ( creation_hook_list )
|
||||||
|
{
|
||||||
|
GtkTypeQuery data;
|
||||||
|
data.type = new_type;
|
||||||
|
data.type_name = type_name;
|
||||||
|
data.object_size = type_info->object_size;
|
||||||
|
data.class_size = type_info->class_size;
|
||||||
|
|
||||||
|
g_hook_list_marshal_check(creation_hook_list, FALSE, gtk_creation_marshaller, &data);
|
||||||
|
}
|
||||||
|
|
||||||
return new_type;
|
return new_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1015,3 +1034,40 @@ gtk_identifier_get_type (void)
|
|||||||
|
|
||||||
return identifier_type;
|
return identifier_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
guint
|
||||||
|
gtk_type_add_creation_hook (GtkCreationHook hook_func,
|
||||||
|
gpointer data,
|
||||||
|
GDestroyNotify destroy)
|
||||||
|
{
|
||||||
|
static guint seq_id =1;
|
||||||
|
GHook * hook;
|
||||||
|
|
||||||
|
g_return_val_if_fail(hook_func != NULL, 0);
|
||||||
|
|
||||||
|
if (!creation_hook_list)
|
||||||
|
{
|
||||||
|
creation_hook_list = g_new(GHookList, 1);
|
||||||
|
g_hook_list_init(creation_hook_list, sizeof(GHook));
|
||||||
|
}
|
||||||
|
|
||||||
|
hook = g_hook_alloc (creation_hook_list);
|
||||||
|
hook->data = data;
|
||||||
|
hook->func = hook_func;
|
||||||
|
hook->destroy = destroy;
|
||||||
|
|
||||||
|
creation_hook_list->seq_id = seq_id;
|
||||||
|
g_hook_prepend(creation_hook_list, hook);
|
||||||
|
seq_id = creation_hook_list->seq_id;
|
||||||
|
|
||||||
|
return hook->hook_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gtk_type_remove_creation_hook (guint hook_id)
|
||||||
|
{
|
||||||
|
g_return_if_fail(hook_id != 0);
|
||||||
|
|
||||||
|
if (!creation_hook_list || !g_hook_destroy(creation_hook_list, hook_id))
|
||||||
|
g_warning("gtk_type_remove_creation_hook(): could not find hook (%u)", hook_id);
|
||||||
|
}
|
||||||
|
@ -153,7 +153,8 @@ typedef void (*GtkSignalMarshaller) (GtkObject *object,
|
|||||||
GtkSignalFunc func,
|
GtkSignalFunc func,
|
||||||
gpointer func_data,
|
gpointer func_data,
|
||||||
GtkArg *args);
|
GtkArg *args);
|
||||||
|
typedef gboolean (*GtkCreationHook) (GtkTypeQuery *type_info,
|
||||||
|
gpointer data);
|
||||||
|
|
||||||
/* deprecated */
|
/* deprecated */
|
||||||
typedef void (*GtkArgGetFunc) (GtkObject*, GtkArg*, guint);
|
typedef void (*GtkArgGetFunc) (GtkObject*, GtkArg*, guint);
|
||||||
@ -362,7 +363,10 @@ GtkType gtk_type_get_varargs_type (GtkType foreign_type);
|
|||||||
*/
|
*/
|
||||||
GtkTypeQuery* gtk_type_query (GtkType type);
|
GtkTypeQuery* gtk_type_query (GtkType type);
|
||||||
|
|
||||||
|
guint gtk_type_add_creation_hook (GtkCreationHook hook,
|
||||||
|
gpointer data,
|
||||||
|
GDestroyNotify destroy);
|
||||||
|
void gtk_type_remove_creation_hook (guint hook_id);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user