summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--ChangeLog.pre-2-05
-rw-r--r--ChangeLog.pre-2-105
-rw-r--r--ChangeLog.pre-2-25
-rw-r--r--ChangeLog.pre-2-45
-rw-r--r--ChangeLog.pre-2-65
-rw-r--r--ChangeLog.pre-2-85
-rw-r--r--gtk/gtktypeutils.c60
-rw-r--r--gtk/gtktypeutils.h8
9 files changed, 99 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 66310e7384..719cd47983 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0
index 66310e7384..719cd47983 100644
--- a/ChangeLog.pre-2-0
+++ b/ChangeLog.pre-2-0
@@ -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>
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 66310e7384..719cd47983 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -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>
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index 66310e7384..719cd47983 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -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>
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index 66310e7384..719cd47983 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -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>
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index 66310e7384..719cd47983 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -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>
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index 66310e7384..719cd47983 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -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>
* gtk/gtkmain.c (gtk_propagate_event): added an assertement.
diff --git a/gtk/gtktypeutils.c b/gtk/gtktypeutils.c
index 1d3fed1c1a..dc33bc84d9 100644
--- a/gtk/gtktypeutils.c
+++ b/gtk/gtktypeutils.c
@@ -37,7 +37,6 @@ struct _GtkTypeNode
GMemChunk *mem_chunk;
};
-
#define LOOKUP_TYPE_NODE(node_var, type) { \
GtkTypeNode *__node = NULL; \
GtkType sqn = GTK_TYPE_SEQNO (type); \
@@ -66,6 +65,7 @@ static guint n_type_nodes = 0;
static guint n_ftype_nodes = 0;
static GHashTable *type_name_2_type_ht = NULL;
+static GHookList *creation_hook_list = NULL;
static GtkTypeNode*
gtk_type_node_next_and_invalidate (GtkType parent_type)
@@ -228,6 +228,15 @@ gtk_type_create (GtkType parent_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
gtk_type_unique (GtkType parent_type,
const GtkTypeInfo *type_info)
@@ -253,7 +262,17 @@ gtk_type_unique (GtkType parent_type,
if (!new_type)
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;
}
@@ -1015,3 +1034,40 @@ gtk_identifier_get_type (void)
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);
+}
diff --git a/gtk/gtktypeutils.h b/gtk/gtktypeutils.h
index 42bf9d8093..5b42840ce5 100644
--- a/gtk/gtktypeutils.h
+++ b/gtk/gtktypeutils.h
@@ -153,7 +153,8 @@ typedef void (*GtkSignalMarshaller) (GtkObject *object,
GtkSignalFunc func,
gpointer func_data,
GtkArg *args);
-
+typedef gboolean (*GtkCreationHook) (GtkTypeQuery *type_info,
+ gpointer data);
/* deprecated */
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);
-
+guint gtk_type_add_creation_hook (GtkCreationHook hook,
+ gpointer data,
+ GDestroyNotify destroy);
+void gtk_type_remove_creation_hook (guint hook_id);