summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog28
-rw-r--r--ChangeLog.pre-2-028
-rw-r--r--ChangeLog.pre-2-1028
-rw-r--r--ChangeLog.pre-2-228
-rw-r--r--ChangeLog.pre-2-428
-rw-r--r--ChangeLog.pre-2-628
-rw-r--r--ChangeLog.pre-2-828
-rw-r--r--gtk/gtkarg.c14
-rw-r--r--gtk/gtkarg.h3
-rw-r--r--gtk/gtkargcollector.c285
-rw-r--r--gtk/gtkcontainer.c18
-rw-r--r--gtk/gtkcontainer.h5
-rw-r--r--gtk/gtkitemfactory.c2
-rw-r--r--gtk/gtkobject.c20
-rw-r--r--gtk/gtkobject.h5
-rw-r--r--gtk/gtksignal.c7
-rw-r--r--gtk/gtkwidget.c18
-rw-r--r--gtk/gtkwidget.h6
18 files changed, 403 insertions, 176 deletions
diff --git a/ChangeLog b/ChangeLog
index 0113621c4b..ad5cafa657 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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,