From 8dc9cd53ff0ecdfe983155327b636b6db59ccb56 Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Sat, 17 Jan 1998 05:31:13 +0000 Subject: [PATCH] +Sat Jan 17 06:24:05 1998 Tim Janik + + * gtk/gtktypeutils.h (gtk_type_get_arg): new function. + * gtk/gtkobject.h (gtk_object_query_args): new function. + * gtk/gtkobject.h (gtk_object_getv): new function. + * gtk/gtkwidget.h (gtk_widget_get): new function. --- ChangeLog | 7 ++++ ChangeLog.pre-2-0 | 7 ++++ ChangeLog.pre-2-10 | 7 ++++ ChangeLog.pre-2-2 | 7 ++++ ChangeLog.pre-2-4 | 7 ++++ ChangeLog.pre-2-6 | 7 ++++ ChangeLog.pre-2-8 | 7 ++++ gtk/gtkobject.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++ gtk/gtkobject.h | 11 ++++++- 9 files changed, 141 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 388a3c86b1..67441b610a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sat Jan 17 06:24:05 1998 Tim Janik + + * gtk/gtktypeutils.h (gtk_type_get_arg): new function. + * gtk/gtkobject.h (gtk_object_query_args): new function. + * gtk/gtkobject.h (gtk_object_getv): new function. + * gtk/gtkwidget.h (gtk_widget_get): new function. + Fri Jan 16 00:36:31 1998 Federico Mena * gtk/gtkhandlebox.c: Now we use a GtkWindow of type diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 388a3c86b1..67441b610a 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,10 @@ +Sat Jan 17 06:24:05 1998 Tim Janik + + * gtk/gtktypeutils.h (gtk_type_get_arg): new function. + * gtk/gtkobject.h (gtk_object_query_args): new function. + * gtk/gtkobject.h (gtk_object_getv): new function. + * gtk/gtkwidget.h (gtk_widget_get): new function. + Fri Jan 16 00:36:31 1998 Federico Mena * gtk/gtkhandlebox.c: Now we use a GtkWindow of type diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 388a3c86b1..67441b610a 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,10 @@ +Sat Jan 17 06:24:05 1998 Tim Janik + + * gtk/gtktypeutils.h (gtk_type_get_arg): new function. + * gtk/gtkobject.h (gtk_object_query_args): new function. + * gtk/gtkobject.h (gtk_object_getv): new function. + * gtk/gtkwidget.h (gtk_widget_get): new function. + Fri Jan 16 00:36:31 1998 Federico Mena * gtk/gtkhandlebox.c: Now we use a GtkWindow of type diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 388a3c86b1..67441b610a 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,10 @@ +Sat Jan 17 06:24:05 1998 Tim Janik + + * gtk/gtktypeutils.h (gtk_type_get_arg): new function. + * gtk/gtkobject.h (gtk_object_query_args): new function. + * gtk/gtkobject.h (gtk_object_getv): new function. + * gtk/gtkwidget.h (gtk_widget_get): new function. + Fri Jan 16 00:36:31 1998 Federico Mena * gtk/gtkhandlebox.c: Now we use a GtkWindow of type diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 388a3c86b1..67441b610a 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,10 @@ +Sat Jan 17 06:24:05 1998 Tim Janik + + * gtk/gtktypeutils.h (gtk_type_get_arg): new function. + * gtk/gtkobject.h (gtk_object_query_args): new function. + * gtk/gtkobject.h (gtk_object_getv): new function. + * gtk/gtkwidget.h (gtk_widget_get): new function. + Fri Jan 16 00:36:31 1998 Federico Mena * gtk/gtkhandlebox.c: Now we use a GtkWindow of type diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 388a3c86b1..67441b610a 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,10 @@ +Sat Jan 17 06:24:05 1998 Tim Janik + + * gtk/gtktypeutils.h (gtk_type_get_arg): new function. + * gtk/gtkobject.h (gtk_object_query_args): new function. + * gtk/gtkobject.h (gtk_object_getv): new function. + * gtk/gtkwidget.h (gtk_widget_get): new function. + Fri Jan 16 00:36:31 1998 Federico Mena * gtk/gtkhandlebox.c: Now we use a GtkWindow of type diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 388a3c86b1..67441b610a 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,10 @@ +Sat Jan 17 06:24:05 1998 Tim Janik + + * gtk/gtktypeutils.h (gtk_type_get_arg): new function. + * gtk/gtkobject.h (gtk_object_query_args): new function. + * gtk/gtkobject.h (gtk_object_getv): new function. + * gtk/gtkwidget.h (gtk_widget_get): new function. + Fri Jan 16 00:36:31 1998 Federico Mena * gtk/gtkhandlebox.c: Now we use a GtkWindow of type diff --git a/gtk/gtkobject.c b/gtk/gtkobject.c index 8d76b6d9f5..366f6bcace 100644 --- a/gtk/gtkobject.c +++ b/gtk/gtkobject.c @@ -371,6 +371,88 @@ gtk_object_getv (GtkObject *object, } } +/***************************************** + * gtk_object_query_args: + * + * arguments: + * + * results: + *****************************************/ + +struct _GtkQueryArgData +{ + GList *arg_list; + GtkType class_type; +}; +typedef struct _GtkQueryArgData GtkQueryArgData; + +static void +gtk_query_arg_foreach (gpointer key, + gpointer value, + gpointer user_data) +{ + register GtkArgInfo *info; + register GtkQueryArgData *data; + + info = value; + data = user_data; + + if (info->class_type == data->class_type) + data->arg_list = g_list_prepend (data->arg_list, info); +} + +GtkArg* +gtk_object_query_args (GtkType class_type, + guint *nargs) +{ + GtkArg *args; + GtkQueryArgData query_data; + + g_return_val_if_fail (nargs != NULL, NULL); + *nargs = 0; + g_return_val_if_fail (gtk_type_is_a (class_type, gtk_object_get_type ()), NULL); + + if (!arg_info_ht) + return NULL; + + query_data.arg_list = NULL; + query_data.class_type = class_type; + g_hash_table_foreach (arg_info_ht, gtk_query_arg_foreach, &query_data); + + if (query_data.arg_list) + { + register GList *list; + register guint i; + + list = query_data.arg_list; + + i = g_list_length (list); + args = g_new0 (GtkArg, i); + *nargs = i; + + do + { + GtkArgInfo *info; + + i--; + info = list->data; + list = list->next; + + args[i].type = info->type; + args[i].name = info->name; + } + while (i > 0); + + g_assert (list == NULL); /* paranoid */ + + g_list_free (query_data.arg_list); + } + else + args = NULL; + + return args; +} + /***************************************** * gtk_object_set: * diff --git a/gtk/gtkobject.h b/gtk/gtkobject.h index 40edb8d66b..d2e6631707 100644 --- a/gtk/gtkobject.h +++ b/gtk/gtkobject.h @@ -135,7 +135,7 @@ struct _GtkObjectClass /* The type identifier for the objects class. There is * one unique identifier per class. */ - guint type; + GtkType type; /* The signals this object class handles. "signals" is an * array of signal ID's. @@ -199,6 +199,15 @@ void gtk_object_setv (GtkObject *object, guint nargs, GtkArg *args); +/* Allocate a GtkArg array of size nargs that hold the + * names and types of the args that can be used with + * gtk_object_set/gtk_object_get. + * It is the callers response to do a + * g_free (returned_args). + */ +GtkArg* gtk_object_query_args (GtkType class_type, + guint *nargs); + void gtk_object_add_arg_type (const gchar *arg_name, GtkType arg_type, guint arg_id);