diff options
-rw-r--r-- | ChangeLog | 28 | ||||
-rw-r--r-- | ChangeLog.pre-2-0 | 28 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 28 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 28 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 28 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 28 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 28 | ||||
-rw-r--r-- | gtk/gtkarg.c | 14 | ||||
-rw-r--r-- | gtk/gtkarg.h | 3 | ||||
-rw-r--r-- | gtk/gtkargcollector.c | 285 | ||||
-rw-r--r-- | gtk/gtkcontainer.c | 18 | ||||
-rw-r--r-- | gtk/gtkcontainer.h | 5 | ||||
-rw-r--r-- | gtk/gtkitemfactory.c | 2 | ||||
-rw-r--r-- | gtk/gtkobject.c | 20 | ||||
-rw-r--r-- | gtk/gtkobject.h | 5 | ||||
-rw-r--r-- | gtk/gtksignal.c | 7 | ||||
-rw-r--r-- | gtk/gtkwidget.c | 18 | ||||
-rw-r--r-- | gtk/gtkwidget.h | 6 |
18 files changed, 403 insertions, 176 deletions
@@ -1,3 +1,31 @@ +Mon Aug 24 02:36:53 1998 Tim Janik <timj@gtk.org> + + * gtk/gtkarg.h: + * gtk/gtkarg.c: + * gtk/gtkwidget.h: + * gtk/gtkwidget.c: + * gtk/gtkobject.h: + * gtk/gtkobject.c: + * gtk/gtkcontainer.h: + * gtk/gtkcontainer.c: + (gtk_object_new): + (gtk_object_set): + (gtk_widget_new): + (gtk_widget_set): + (gtk_container_add_with_args): + (gtk_container_child_set): + begin the parameter elipsis (...) after the first argument name. this + change is source compatible, since it was always required, even as NULL. + (gtk_args_collect): + (gtk_object_args_collect): + (gtk_container_child_args_collect): + changed prototypes to pass first_arg_name, also, pass va_list variable + by value (portability concerns). callers changed. + + * gtk/gtkargcollector.c: implemented gtk_arg_collect_value() as + a huge macro GTK_ARG_COLLECT_VALUE() <shrug>. this is needed because we + can't pass va_list variables by reference for portability reasons. + Fri Aug 21 22:40:00 Raph Levien <raph@gtk.org> * gdk/gdkrgb.c: added calls to gdk_rgb_init in the get_cmap and diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 0113621c4b..ad5cafa657 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,31 @@ +Mon Aug 24 02:36:53 1998 Tim Janik <timj@gtk.org> + + * gtk/gtkarg.h: + * gtk/gtkarg.c: + * gtk/gtkwidget.h: + * gtk/gtkwidget.c: + * gtk/gtkobject.h: + * gtk/gtkobject.c: + * gtk/gtkcontainer.h: + * gtk/gtkcontainer.c: + (gtk_object_new): + (gtk_object_set): + (gtk_widget_new): + (gtk_widget_set): + (gtk_container_add_with_args): + (gtk_container_child_set): + begin the parameter elipsis (...) after the first argument name. this + change is source compatible, since it was always required, even as NULL. + (gtk_args_collect): + (gtk_object_args_collect): + (gtk_container_child_args_collect): + changed prototypes to pass first_arg_name, also, pass va_list variable + by value (portability concerns). callers changed. + + * gtk/gtkargcollector.c: implemented gtk_arg_collect_value() as + a huge macro GTK_ARG_COLLECT_VALUE() <shrug>. this is needed because we + can't pass va_list variables by reference for portability reasons. + Fri Aug 21 22:40:00 Raph Levien <raph@gtk.org> * gdk/gdkrgb.c: added calls to gdk_rgb_init in the get_cmap and diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 0113621c4b..ad5cafa657 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,31 @@ +Mon Aug 24 02:36:53 1998 Tim Janik <timj@gtk.org> + + * gtk/gtkarg.h: + * gtk/gtkarg.c: + * gtk/gtkwidget.h: + * gtk/gtkwidget.c: + * gtk/gtkobject.h: + * gtk/gtkobject.c: + * gtk/gtkcontainer.h: + * gtk/gtkcontainer.c: + (gtk_object_new): + (gtk_object_set): + (gtk_widget_new): + (gtk_widget_set): + (gtk_container_add_with_args): + (gtk_container_child_set): + begin the parameter elipsis (...) after the first argument name. this + change is source compatible, since it was always required, even as NULL. + (gtk_args_collect): + (gtk_object_args_collect): + (gtk_container_child_args_collect): + changed prototypes to pass first_arg_name, also, pass va_list variable + by value (portability concerns). callers changed. + + * gtk/gtkargcollector.c: implemented gtk_arg_collect_value() as + a huge macro GTK_ARG_COLLECT_VALUE() <shrug>. this is needed because we + can't pass va_list variables by reference for portability reasons. + Fri Aug 21 22:40:00 Raph Levien <raph@gtk.org> * gdk/gdkrgb.c: added calls to gdk_rgb_init in the get_cmap and diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 0113621c4b..ad5cafa657 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,31 @@ +Mon Aug 24 02:36:53 1998 Tim Janik <timj@gtk.org> + + * gtk/gtkarg.h: + * gtk/gtkarg.c: + * gtk/gtkwidget.h: + * gtk/gtkwidget.c: + * gtk/gtkobject.h: + * gtk/gtkobject.c: + * gtk/gtkcontainer.h: + * gtk/gtkcontainer.c: + (gtk_object_new): + (gtk_object_set): + (gtk_widget_new): + (gtk_widget_set): + (gtk_container_add_with_args): + (gtk_container_child_set): + begin the parameter elipsis (...) after the first argument name. this + change is source compatible, since it was always required, even as NULL. + (gtk_args_collect): + (gtk_object_args_collect): + (gtk_container_child_args_collect): + changed prototypes to pass first_arg_name, also, pass va_list variable + by value (portability concerns). callers changed. + + * gtk/gtkargcollector.c: implemented gtk_arg_collect_value() as + a huge macro GTK_ARG_COLLECT_VALUE() <shrug>. this is needed because we + can't pass va_list variables by reference for portability reasons. + Fri Aug 21 22:40:00 Raph Levien <raph@gtk.org> * gdk/gdkrgb.c: added calls to gdk_rgb_init in the get_cmap and diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 0113621c4b..ad5cafa657 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,31 @@ +Mon Aug 24 02:36:53 1998 Tim Janik <timj@gtk.org> + + * gtk/gtkarg.h: + * gtk/gtkarg.c: + * gtk/gtkwidget.h: + * gtk/gtkwidget.c: + * gtk/gtkobject.h: + * gtk/gtkobject.c: + * gtk/gtkcontainer.h: + * gtk/gtkcontainer.c: + (gtk_object_new): + (gtk_object_set): + (gtk_widget_new): + (gtk_widget_set): + (gtk_container_add_with_args): + (gtk_container_child_set): + begin the parameter elipsis (...) after the first argument name. this + change is source compatible, since it was always required, even as NULL. + (gtk_args_collect): + (gtk_object_args_collect): + (gtk_container_child_args_collect): + changed prototypes to pass first_arg_name, also, pass va_list variable + by value (portability concerns). callers changed. + + * gtk/gtkargcollector.c: implemented gtk_arg_collect_value() as + a huge macro GTK_ARG_COLLECT_VALUE() <shrug>. this is needed because we + can't pass va_list variables by reference for portability reasons. + Fri Aug 21 22:40:00 Raph Levien <raph@gtk.org> * gdk/gdkrgb.c: added calls to gdk_rgb_init in the get_cmap and diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 0113621c4b..ad5cafa657 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,31 @@ +Mon Aug 24 02:36:53 1998 Tim Janik <timj@gtk.org> + + * gtk/gtkarg.h: + * gtk/gtkarg.c: + * gtk/gtkwidget.h: + * gtk/gtkwidget.c: + * gtk/gtkobject.h: + * gtk/gtkobject.c: + * gtk/gtkcontainer.h: + * gtk/gtkcontainer.c: + (gtk_object_new): + (gtk_object_set): + (gtk_widget_new): + (gtk_widget_set): + (gtk_container_add_with_args): + (gtk_container_child_set): + begin the parameter elipsis (...) after the first argument name. this + change is source compatible, since it was always required, even as NULL. + (gtk_args_collect): + (gtk_object_args_collect): + (gtk_container_child_args_collect): + changed prototypes to pass first_arg_name, also, pass va_list variable + by value (portability concerns). callers changed. + + * gtk/gtkargcollector.c: implemented gtk_arg_collect_value() as + a huge macro GTK_ARG_COLLECT_VALUE() <shrug>. this is needed because we + can't pass va_list variables by reference for portability reasons. + Fri Aug 21 22:40:00 Raph Levien <raph@gtk.org> * gdk/gdkrgb.c: added calls to gdk_rgb_init in the get_cmap and diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 0113621c4b..ad5cafa657 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,31 @@ +Mon Aug 24 02:36:53 1998 Tim Janik <timj@gtk.org> + + * gtk/gtkarg.h: + * gtk/gtkarg.c: + * gtk/gtkwidget.h: + * gtk/gtkwidget.c: + * gtk/gtkobject.h: + * gtk/gtkobject.c: + * gtk/gtkcontainer.h: + * gtk/gtkcontainer.c: + (gtk_object_new): + (gtk_object_set): + (gtk_widget_new): + (gtk_widget_set): + (gtk_container_add_with_args): + (gtk_container_child_set): + begin the parameter elipsis (...) after the first argument name. this + change is source compatible, since it was always required, even as NULL. + (gtk_args_collect): + (gtk_object_args_collect): + (gtk_container_child_args_collect): + changed prototypes to pass first_arg_name, also, pass va_list variable + by value (portability concerns). callers changed. + + * gtk/gtkargcollector.c: implemented gtk_arg_collect_value() as + a huge macro GTK_ARG_COLLECT_VALUE() <shrug>. this is needed because we + can't pass va_list variables by reference for portability reasons. + Fri Aug 21 22:40:00 Raph Levien <raph@gtk.org> * gdk/gdkrgb.c: added calls to gdk_rgb_init in the get_cmap and diff --git a/gtk/gtkarg.c b/gtk/gtkarg.c index c61bc95d07..60ebdc1e4c 100644 --- a/gtk/gtkarg.c +++ b/gtk/gtkarg.c @@ -233,12 +233,12 @@ gtk_args_collect (GtkType object_type, GHashTable *arg_info_hash_table, GSList **arg_list_p, GSList **info_list_p, - gpointer var_args_p) + const gchar *first_arg_name, + va_list var_args) { GSList *arg_list; GSList *info_list; - gchar *arg_name; - va_list *var_args = var_args_p; + const gchar *arg_name; g_return_val_if_fail (arg_list_p != NULL, NULL); *arg_list_p = NULL; @@ -248,7 +248,7 @@ gtk_args_collect (GtkType object_type, arg_list = NULL; info_list = NULL; - arg_name = va_arg (*var_args, gchar*); + arg_name = first_arg_name; while (arg_name) { GtkArgInfo *info = NULL; @@ -262,8 +262,8 @@ gtk_args_collect (GtkType object_type, info_list = g_slist_prepend (info_list, info); arg = gtk_arg_new (info->type); - arg->name = arg_name; - error = gtk_arg_collect_value (GTK_FUNDAMENTAL_TYPE (arg->type), arg, var_args); + arg->name = (gchar*) arg_name; + GTK_ARG_COLLECT_VALUE (GTK_FUNDAMENTAL_TYPE (arg->type), arg, var_args, error); arg_list = g_slist_prepend (arg_list, arg); } if (error) @@ -273,7 +273,7 @@ gtk_args_collect (GtkType object_type, return error; } - arg_name = va_arg (*var_args, gchar*); + arg_name = va_arg (var_args, gchar*); } *arg_list_p = g_slist_reverse (arg_list); diff --git a/gtk/gtkarg.h b/gtk/gtkarg.h index 7d4e6f777a..5217c0a60a 100644 --- a/gtk/gtkarg.h +++ b/gtk/gtkarg.h @@ -60,7 +60,8 @@ gchar* gtk_args_collect (GtkType object_type, GHashTable *arg_info_hash_table, GSList **arg_list_p, GSList **info_list_p, - gpointer var_args_p); + const gchar *first_arg_name, + va_list var_args); void gtk_args_collect_cleanup (GSList *arg_list, GSList *info_list); gchar* gtk_arg_get_info (GtkType object_type, diff --git a/gtk/gtkargcollector.c b/gtk/gtkargcollector.c index 3067738062..32a0ec7847 100644 --- a/gtk/gtkargcollector.c +++ b/gtk/gtkargcollector.c @@ -17,144 +17,149 @@ * Boston, MA 02111-1307, USA. */ -/* collect a single argument value from a va_list +/* collect a single argument value from a va_list. + * this is implemented as a huge macro <shrug>, because we can't + * pass va_list variables by reference on some systems. + * the former prototype was: + * static inline gchar* + * gtk_arg_collect_value (GtkType fundamental_type, + * GtkArg *arg, + * va_list var_args); */ -static inline gchar* -gtk_arg_collect_value (GtkType fundamental_type, - GtkArg *arg, - va_list *var_args) -{ - gchar *error_msg; - - error_msg = NULL; - switch (fundamental_type) - { - case GTK_TYPE_INVALID: - error_msg = g_strdup ("invalid untyped argument"); - break; - - case GTK_TYPE_NONE: - /* we just ignore this type, since it arithmetically just requires - * us to not move the var_args pointer any further. callers need to - * check for the validity of GTK_TYPE_NONE themselves. - * - * error_msg = g_strdup ("invalid argument type `void'"); - */ - break; - - /* everything smaller than an int is guarranteed to be - * passed as an int - */ - case GTK_TYPE_CHAR: - GTK_VALUE_CHAR (*arg) = va_arg (*var_args, gint); - break; - case GTK_TYPE_UCHAR: - GTK_VALUE_UCHAR (*arg) = va_arg (*var_args, guint); - break; - case GTK_TYPE_BOOL: - GTK_VALUE_BOOL (*arg) = va_arg (*var_args, gint); - break; - case GTK_TYPE_INT: - GTK_VALUE_INT (*arg) = va_arg (*var_args, gint); - break; - case GTK_TYPE_UINT: - GTK_VALUE_UINT (*arg) = va_arg (*var_args, guint); - break; - case GTK_TYPE_ENUM: - GTK_VALUE_ENUM (*arg) = va_arg (*var_args, gint); - break; - case GTK_TYPE_FLAGS: - GTK_VALUE_FLAGS (*arg) = va_arg (*var_args, guint); - break; - - /* we collect longs as glongs since they differ in size with - * integers on some platforms - */ - case GTK_TYPE_LONG: - GTK_VALUE_LONG (*arg) = va_arg (*var_args, glong); - break; - case GTK_TYPE_ULONG: - GTK_VALUE_ULONG (*arg) = va_arg (*var_args, gulong); - break; - - /* floats are always passed as doubles - */ - case GTK_TYPE_FLOAT: - /* GTK_VALUE_FLOAT (*arg) = va_arg (*var_args, gfloat); */ - GTK_VALUE_FLOAT (*arg) = va_arg (*var_args, gdouble); - break; - case GTK_TYPE_DOUBLE: - GTK_VALUE_DOUBLE (*arg) = va_arg (*var_args, gdouble); - break; - - /* collect pointer values - */ - case GTK_TYPE_STRING: - GTK_VALUE_STRING (*arg) = va_arg (*var_args, gchar*); - break; - case GTK_TYPE_POINTER: - GTK_VALUE_POINTER (*arg) = va_arg (*var_args, gpointer); - break; - case GTK_TYPE_BOXED: - GTK_VALUE_BOXED (*arg) = va_arg (*var_args, gpointer); - break; - - /* structured types - */ - case GTK_TYPE_SIGNAL: - GTK_VALUE_SIGNAL (*arg).f = va_arg (*var_args, GtkSignalFunc); - GTK_VALUE_SIGNAL (*arg).d = va_arg (*var_args, gpointer); - break; - case GTK_TYPE_ARGS: - GTK_VALUE_ARGS (*arg).n_args = va_arg (*var_args, gint); - GTK_VALUE_ARGS (*arg).args = va_arg (*var_args, GtkArg*); - break; - case GTK_TYPE_FOREIGN: - GTK_VALUE_FOREIGN (*arg).data = va_arg (*var_args, gpointer); - GTK_VALUE_FOREIGN (*arg).notify = va_arg (*var_args, GtkDestroyNotify); - break; - case GTK_TYPE_CALLBACK: - GTK_VALUE_CALLBACK (*arg).marshal = va_arg (*var_args, GtkCallbackMarshal); - GTK_VALUE_CALLBACK (*arg).data = va_arg (*var_args, gpointer); - GTK_VALUE_CALLBACK (*arg).notify = va_arg (*var_args, GtkDestroyNotify); - break; - case GTK_TYPE_C_CALLBACK: - GTK_VALUE_C_CALLBACK (*arg).func = va_arg (*var_args, GtkFunction); - GTK_VALUE_C_CALLBACK (*arg).func_data = va_arg (*var_args, gpointer); - break; - - /* we do some extra sanity checking when collecting objects, - * i.e. if the object pointer is not NULL, we check whether we - * actually got an object pointer within the desired class branch. - */ - case GTK_TYPE_OBJECT: - GTK_VALUE_OBJECT (*arg) = va_arg (*var_args, GtkObject*); - if (GTK_VALUE_OBJECT (*arg) != NULL) - { - register GtkObject *object = GTK_VALUE_OBJECT (*arg); - - if (object->klass == NULL) - error_msg = g_strconcat ("invalid unclassed object pointer for argument type `", - gtk_type_name (arg->type), - "'", - NULL); - else if (!gtk_type_is_a (GTK_OBJECT_TYPE (object), arg->type)) - error_msg = g_strconcat ("invalid object `", - gtk_type_name (GTK_OBJECT_TYPE (object)), - "' for argument type `", - gtk_type_name (arg->type), - "'", - NULL); - } - break; - - default: - error_msg = g_strconcat ("unsupported argument type `", - gtk_type_name (arg->type), - "'", - NULL); - break; - } - - return error_msg; -} +#define GTK_ARG_COLLECT_VALUE(_ft, arg, var_args, _error) \ +G_STMT_START { \ + GtkType fundamental_type = _ft; \ + gchar *error_msg; \ + \ + error_msg = NULL; \ + switch (fundamental_type) \ + { \ + case GTK_TYPE_INVALID: \ + error_msg = g_strdup ("invalid untyped argument"); \ + break; \ + \ + case GTK_TYPE_NONE: \ + /* we just ignore this type, since it arithmetically just requires \ + * us to not move the var_args pointer any further. callers need to \ + * check for the validity of GTK_TYPE_NONE themselves. \ + * \ + * error_msg = g_strdup ("invalid argument type `void'"); \ + */ \ + break; \ + \ + /* everything smaller than an int is guarranteed to be \ + * passed as an int \ + */ \ + case GTK_TYPE_CHAR: \ + GTK_VALUE_CHAR (*arg) = va_arg (var_args, gint); \ + break; \ + case GTK_TYPE_UCHAR: \ + GTK_VALUE_UCHAR (*arg) = va_arg (var_args, guint); \ + break; \ + case GTK_TYPE_BOOL: \ + GTK_VALUE_BOOL (*arg) = va_arg (var_args, gint); \ + break; \ + case GTK_TYPE_INT: \ + GTK_VALUE_INT (*arg) = va_arg (var_args, gint); \ + break; \ + case GTK_TYPE_UINT: \ + GTK_VALUE_UINT (*arg) = va_arg (var_args, guint); \ + break; \ + case GTK_TYPE_ENUM: \ + GTK_VALUE_ENUM (*arg) = va_arg (var_args, gint); \ + break; \ + case GTK_TYPE_FLAGS: \ + GTK_VALUE_FLAGS (*arg) = va_arg (var_args, guint); \ + break; \ + \ + /* we collect longs as glongs since they differ in size with \ + * integers on some platforms \ + */ \ + case GTK_TYPE_LONG: \ + GTK_VALUE_LONG (*arg) = va_arg (var_args, glong); \ + break; \ + case GTK_TYPE_ULONG: \ + GTK_VALUE_ULONG (*arg) = va_arg (var_args, gulong); \ + break; \ + \ + /* floats are always passed as doubles \ + */ \ + case GTK_TYPE_FLOAT: \ + /* GTK_VALUE_FLOAT (*arg) = va_arg (var_args, gfloat); */ \ + GTK_VALUE_FLOAT (*arg) = va_arg (var_args, gdouble); \ + break; \ + case GTK_TYPE_DOUBLE: \ + GTK_VALUE_DOUBLE (*arg) = va_arg (var_args, gdouble); \ + break; \ + \ + /* collect pointer values \ + */ \ + case GTK_TYPE_STRING: \ + GTK_VALUE_STRING (*arg) = va_arg (var_args, gchar*); \ + break; \ + case GTK_TYPE_POINTER: \ + GTK_VALUE_POINTER (*arg) = va_arg (var_args, gpointer); \ + break; \ + case GTK_TYPE_BOXED: \ + GTK_VALUE_BOXED (*arg) = va_arg (var_args, gpointer); \ + break; \ + \ + /* structured types \ + */ \ + case GTK_TYPE_SIGNAL: \ + GTK_VALUE_SIGNAL (*arg).f = va_arg (var_args, GtkSignalFunc); \ + GTK_VALUE_SIGNAL (*arg).d = va_arg (var_args, gpointer); \ + break; \ + case GTK_TYPE_ARGS: \ + GTK_VALUE_ARGS (*arg).n_args = va_arg (var_args, gint); \ + GTK_VALUE_ARGS (*arg).args = va_arg (var_args, GtkArg*); \ + break; \ + case GTK_TYPE_FOREIGN: \ + GTK_VALUE_FOREIGN (*arg).data = va_arg (var_args, gpointer); \ + GTK_VALUE_FOREIGN (*arg).notify = va_arg (var_args, GtkDestroyNotify); \ + break; \ + case GTK_TYPE_CALLBACK: \ + GTK_VALUE_CALLBACK (*arg).marshal = va_arg (var_args, GtkCallbackMarshal); \ + GTK_VALUE_CALLBACK (*arg).data = va_arg (var_args, gpointer); \ + GTK_VALUE_CALLBACK (*arg).notify = va_arg (var_args, GtkDestroyNotify); \ + break; \ + case GTK_TYPE_C_CALLBACK: \ + GTK_VALUE_C_CALLBACK (*arg).func = va_arg (var_args, GtkFunction); \ + GTK_VALUE_C_CALLBACK (*arg).func_data = va_arg (var_args, gpointer); \ + break; \ + \ + /* we do some extra sanity checking when collecting objects, \ + * i.e. if the object pointer is not NULL, we check whether we \ + * actually got an object pointer within the desired class branch. \ + */ \ + case GTK_TYPE_OBJECT: \ + GTK_VALUE_OBJECT (*arg) = va_arg (var_args, GtkObject*); \ + if (GTK_VALUE_OBJECT (*arg) != NULL) \ + { \ + register GtkObject *object = GTK_VALUE_OBJECT (*arg); \ + \ + if (object->klass == NULL) \ + error_msg = g_strconcat ("invalid unclassed object pointer for argument type `", \ + gtk_type_name (arg->type), \ + "'", \ + NULL); \ + else if (!gtk_type_is_a (GTK_OBJECT_TYPE (object), arg->type)) \ + error_msg = g_strconcat ("invalid object `", \ + gtk_type_name (GTK_OBJECT_TYPE (object)), \ + "' for argument type `", \ + gtk_type_name (arg->type), \ + "'", \ + NULL); \ + } \ + break; \ + \ + default: \ + error_msg = g_strconcat ("unsupported argument type `", \ + gtk_type_name (arg->type), \ + "'", \ + NULL); \ + break; \ + } \ + \ + _error = error_msg; /* return error_msg; */ \ +} G_STMT_END diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c index 8f3696f32e..2bcc30b83f 100644 --- a/gtk/gtkcontainer.c +++ b/gtk/gtkcontainer.c @@ -250,6 +250,7 @@ gtk_container_child_type (GtkContainer *container) void gtk_container_add_with_args (GtkContainer *container, GtkWidget *widget, + const gchar *first_arg_name, ...) { g_return_if_fail (container != NULL); @@ -270,11 +271,12 @@ gtk_container_add_with_args (GtkContainer *container, GSList *info_list = NULL; gchar *error; - va_start (var_args, widget); + va_start (var_args, first_arg_name); error = gtk_container_child_args_collect (GTK_OBJECT_TYPE (container), &arg_list, &info_list, - &var_args); + first_arg_name, + var_args); va_end (var_args); if (error) @@ -375,6 +377,7 @@ gtk_container_child_getv (GtkContainer *container, void gtk_container_child_set (GtkContainer *container, GtkWidget *child, + const gchar *first_arg_name, ...) { va_list var_args; @@ -388,11 +391,12 @@ gtk_container_child_set (GtkContainer *container, g_return_if_fail (GTK_IS_WIDGET (child)); g_return_if_fail (child->parent != NULL); - va_start (var_args, child); + va_start (var_args, first_arg_name); error = gtk_container_child_args_collect (GTK_OBJECT_TYPE (container), &arg_list, &info_list, - &var_args); + first_arg_name, + var_args); va_end (var_args); if (error) @@ -541,13 +545,15 @@ gchar* gtk_container_child_args_collect (GtkType object_type, GSList **arg_list_p, GSList **info_list_p, - gpointer var_args_p) + const gchar *first_arg_name, + va_list var_args) { return gtk_args_collect (object_type, container_child_arg_info_ht, arg_list_p, info_list_p, - var_args_p); + first_arg_name, + var_args); } gchar* diff --git a/gtk/gtkcontainer.h b/gtk/gtkcontainer.h index 8fe0babcef..aecd268f48 100644 --- a/gtk/gtkcontainer.h +++ b/gtk/gtkcontainer.h @@ -174,6 +174,7 @@ void gtk_container_child_setv (GtkContainer *container, */ void gtk_container_add_with_args (GtkContainer *container, GtkWidget *widget, + const gchar *first_arg_name, ...); void gtk_container_addv (GtkContainer *container, GtkWidget *widget, @@ -181,6 +182,7 @@ void gtk_container_addv (GtkContainer *container, GtkArg *args); void gtk_container_child_set (GtkContainer *container, GtkWidget *child, + const gchar *first_arg_name, ...); @@ -199,7 +201,8 @@ void gtk_container_arg_get (GtkContainer *container, gchar* gtk_container_child_args_collect (GtkType object_type, GSList **arg_list_p, GSList **info_list_p, - gpointer var_args_p); + const gchar *first_arg_name, + va_list args); gchar* gtk_container_child_arg_get_info (GtkType object_type, const gchar *arg_name, GtkArgInfo **info_p); diff --git a/gtk/gtkitemfactory.c b/gtk/gtkitemfactory.c index 33d9f11db5..74054e8b22 100644 --- a/gtk/gtkitemfactory.c +++ b/gtk/gtkitemfactory.c @@ -1481,7 +1481,7 @@ gtk_item_factory_parse_statement (GScanner *scanner, parser_func = scanner->value.v_symbol; - /* check whether this is a GtkItemFactory symbol... + /* check whether this is a GtkItemFactory symbol. */ if (parser_func == gtk_item_factory_parse_menu_path) expected_token = parser_func (scanner, class); diff --git a/gtk/gtkobject.c b/gtk/gtkobject.c index f94b485d46..f8f1d4e2e8 100644 --- a/gtk/gtkobject.c +++ b/gtk/gtkobject.c @@ -621,7 +621,8 @@ gtk_object_notify_weaks (GtkObject *object) ****************************************************/ GtkObject* -gtk_object_new (GtkType object_type, +gtk_object_new (GtkType object_type, + const gchar *first_arg_name, ...) { GtkObject *object; @@ -634,11 +635,12 @@ gtk_object_new (GtkType object_type, object = gtk_type_new (object_type); - va_start (var_args, object_type); + va_start (var_args, first_arg_name); error = gtk_object_args_collect (GTK_OBJECT_TYPE (object), &arg_list, &info_list, - &var_args); + first_arg_name, + var_args); va_end (var_args); if (error) @@ -719,6 +721,7 @@ gtk_object_getv (GtkObject *object, void gtk_object_set (GtkObject *object, + const gchar *first_arg_name, ...) { va_list var_args; @@ -729,11 +732,12 @@ gtk_object_set (GtkObject *object, g_return_if_fail (object != NULL); g_return_if_fail (GTK_IS_OBJECT (object)); - va_start (var_args, object); + va_start (var_args, first_arg_name); error = gtk_object_args_collect (GTK_OBJECT_TYPE (object), &arg_list, &info_list, - &var_args); + first_arg_name, + var_args); va_end (var_args); if (error) @@ -878,13 +882,15 @@ gchar* gtk_object_args_collect (GtkType object_type, GSList **arg_list_p, GSList **info_list_p, - gpointer var_args_p) + const gchar *first_arg_name, + va_list var_args) { return gtk_args_collect (object_type, object_arg_info_ht, arg_list_p, info_list_p, - var_args_p); + first_arg_name, + var_args); } gchar* diff --git a/gtk/gtkobject.h b/gtk/gtkobject.h index fd38e30d75..3fe07f24db 100644 --- a/gtk/gtkobject.h +++ b/gtk/gtkobject.h @@ -242,6 +242,7 @@ guint gtk_object_class_user_signal_newv (GtkObjectClass *klass, guint nparams, GtkType *params); GtkObject* gtk_object_new (GtkType type, + const gchar *first_arg_name, ...); GtkObject* gtk_object_newv (GtkType object_type, guint n_args, @@ -272,6 +273,7 @@ void gtk_object_getv (GtkObject *object, * more than one c-function argument. */ void gtk_object_set (GtkObject *object, + const gchar *first_arg_name, ...); void gtk_object_setv (GtkObject *object, guint n_args, @@ -372,7 +374,8 @@ void gtk_object_arg_get (GtkObject *object, gchar* gtk_object_args_collect (GtkType object_type, GSList **arg_list_p, GSList **info_list_p, - gpointer var_args_p); + const gchar *first_arg_name, + va_list var_args); gchar* gtk_object_arg_get_info (GtkType object_type, const gchar *arg_name, GtkArgInfo **info_p); diff --git a/gtk/gtksignal.c b/gtk/gtksignal.c index 1830c741bc..b3488f8f6b 100644 --- a/gtk/gtksignal.c +++ b/gtk/gtksignal.c @@ -1780,9 +1780,10 @@ gtk_signal_collect_params (GtkArg *params, params->type = *(param_types++); params->name = NULL; - error = gtk_arg_collect_value (GTK_FUNDAMENTAL_TYPE (params->type), - params, - &var_args); + GTK_ARG_COLLECT_VALUE (GTK_FUNDAMENTAL_TYPE (params->type), + params, + var_args, + error); if (error) { failed = TRUE; diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index adf517cca7..eb420ecde4 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -955,7 +955,8 @@ gtk_widget_init (GtkWidget *widget) *****************************************/ GtkWidget* -gtk_widget_new (guint widget_type, +gtk_widget_new (GtkType widget_type, + const gchar *first_arg_name, ...) { GtkObject *object; @@ -968,11 +969,12 @@ gtk_widget_new (guint widget_type, object = gtk_type_new (widget_type); - va_start (var_args, widget_type); + va_start (var_args, first_arg_name); error = gtk_object_args_collect (GTK_OBJECT_TYPE (object), &arg_list, &info_list, - &var_args); + first_arg_name, + var_args); va_end (var_args); if (error) @@ -1008,7 +1010,7 @@ gtk_widget_new (guint widget_type, *****************************************/ GtkWidget* -gtk_widget_newv (guint type, +gtk_widget_newv (GtkType type, guint nargs, GtkArg *args) { @@ -1060,7 +1062,8 @@ gtk_widget_getv (GtkWidget *widget, *****************************************/ void -gtk_widget_set (GtkWidget *widget, +gtk_widget_set (GtkWidget *widget, + const gchar *first_arg_name, ...) { GtkObject *object; @@ -1074,11 +1077,12 @@ gtk_widget_set (GtkWidget *widget, object = GTK_OBJECT (widget); - va_start (var_args, widget); + va_start (var_args, first_arg_name); error = gtk_object_args_collect (GTK_OBJECT_TYPE (object), &arg_list, &info_list, - &var_args); + first_arg_name, + var_args); va_end (var_args); if (error) diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h index ddbcf1b951..abb559b189 100644 --- a/gtk/gtkwidget.h +++ b/gtk/gtkwidget.h @@ -360,9 +360,10 @@ struct _GtkWidgetShapeInfo GtkType gtk_widget_get_type (void); -GtkWidget* gtk_widget_new (guint type, +GtkWidget* gtk_widget_new (GtkType type, + const gchar *first_arg_name, ...); -GtkWidget* gtk_widget_newv (guint type, +GtkWidget* gtk_widget_newv (GtkType type, guint nargs, GtkArg *args); void gtk_widget_ref (GtkWidget *widget); @@ -376,6 +377,7 @@ void gtk_widget_getv (GtkWidget *widget, guint nargs, GtkArg *args); void gtk_widget_set (GtkWidget *widget, + const gchar *first_arg_name, ...); void gtk_widget_setv (GtkWidget *widget, guint nargs, |