gtk_*_get_arg() and gtk_*_set_arg() implementations. new arg
Sun Jan 18 03:57:52 1998 Tim Janik <timj@psynet.net> * gtk/gtkframe.c: gtk_*_get_arg() and gtk_*_set_arg() implementations. * gtk/gtkobject.c: new arg `GtkObject::object_signal' similar to `GtkObject::signal'. check for class type in gtk_object_{setv|getv}. * gtk/gtkobject.c: * gtk/gtksignal.c: * gtk/gtktypeutils.h: * gtk/gtktypeutils.c: added GTK_TYPE_DOUBLE. * gtk/gtkwidget.c: new args `has_focus' and `has_default'. * gtk/gtkwindow.c: new arg `window_position'.
This commit is contained in:
@ -31,7 +31,8 @@ enum {
|
||||
enum {
|
||||
ARG_0,
|
||||
ARG_USER_DATA,
|
||||
ARG_SIGNAL
|
||||
ARG_SIGNAL,
|
||||
ARG_OBJECT_SIGNAL
|
||||
};
|
||||
|
||||
|
||||
@ -136,6 +137,7 @@ gtk_object_class_init (GtkObjectClass *class)
|
||||
|
||||
gtk_object_add_arg_type ("GtkObject::user_data", GTK_TYPE_POINTER, ARG_USER_DATA);
|
||||
gtk_object_add_arg_type ("GtkObject::signal", GTK_TYPE_SIGNAL, ARG_SIGNAL);
|
||||
gtk_object_add_arg_type ("GtkObject::object_signal", GTK_TYPE_SIGNAL, ARG_OBJECT_SIGNAL);
|
||||
|
||||
object_signals[DESTROY] =
|
||||
gtk_signal_new ("destroy",
|
||||
@ -185,15 +187,25 @@ gtk_object_set_arg (GtkObject *object,
|
||||
gtk_object_set_user_data (object, GTK_VALUE_POINTER (*arg));
|
||||
break;
|
||||
case ARG_SIGNAL:
|
||||
if ((arg->name[11 + 6] != ':') || (arg->name[11 + 7] != ':'))
|
||||
if ((arg->name[9 + 2 + 6] != ':') || (arg->name[9 + 2 + 7] != ':'))
|
||||
{
|
||||
g_print ("invalid signal argument: \"%s\"\n", arg->name);
|
||||
g_warning ("invalid signal argument: \"%s\"\n", arg->name);
|
||||
return;
|
||||
}
|
||||
gtk_signal_connect (object, arg->name + 11 + 8,
|
||||
gtk_signal_connect (object, arg->name + 9 + 2 + 6 + 2,
|
||||
(GtkSignalFunc) GTK_VALUE_SIGNAL (*arg).f,
|
||||
GTK_VALUE_SIGNAL (*arg).d);
|
||||
break;
|
||||
case ARG_OBJECT_SIGNAL:
|
||||
if ((arg->name[9 + 2 + 13] != ':') || (arg->name[9 + 2 + 14] != ':'))
|
||||
{
|
||||
g_warning ("invalid signal argument: \"%s\"\n", arg->name);
|
||||
return;
|
||||
}
|
||||
gtk_signal_connect_object (object, arg->name + 9 + 2 + 13 + 2,
|
||||
(GtkSignalFunc) GTK_VALUE_SIGNAL (*arg).f,
|
||||
(GtkObject*) GTK_VALUE_SIGNAL (*arg).d);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -208,6 +220,7 @@ gtk_object_get_arg (GtkObject *object,
|
||||
GTK_VALUE_POINTER (*arg) = gtk_object_get_user_data (object);
|
||||
break;
|
||||
case ARG_SIGNAL:
|
||||
case ARG_OBJECT_SIGNAL:
|
||||
default:
|
||||
arg->type = GTK_TYPE_INVALID;
|
||||
break;
|
||||
@ -381,6 +394,13 @@ gtk_object_getv (GtkObject *object,
|
||||
g_free (lookup_name);
|
||||
continue;
|
||||
}
|
||||
else if (!gtk_type_is_a (object->klass->type, info->class_type))
|
||||
{
|
||||
g_warning ("invalid arg for %s: \"%s\"\n", gtk_type_name (object->klass->type), lookup_name);
|
||||
args[i].type = GTK_TYPE_INVALID;
|
||||
g_free (lookup_name);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
g_free (lookup_name);
|
||||
|
||||
@ -510,13 +530,13 @@ gtk_object_set (GtkObject *object,
|
||||
*****************************************/
|
||||
|
||||
void
|
||||
gtk_object_setv (GtkObject *obj,
|
||||
gtk_object_setv (GtkObject *object,
|
||||
guint nargs,
|
||||
GtkArg *args)
|
||||
{
|
||||
int i;
|
||||
|
||||
g_return_if_fail (obj != NULL);
|
||||
g_return_if_fail (object != NULL);
|
||||
|
||||
if (!arg_info_ht)
|
||||
return;
|
||||
@ -553,13 +573,18 @@ gtk_object_setv (GtkObject *obj,
|
||||
g_warning ("invalid arg type for: \"%s\"\n", lookup_name);
|
||||
arg_ok = FALSE;
|
||||
}
|
||||
else if (!gtk_type_is_a (object->klass->type, info->class_type))
|
||||
{
|
||||
g_warning ("invalid arg for %s: \"%s\"\n", gtk_type_name (object->klass->type), lookup_name);
|
||||
arg_ok = FALSE;
|
||||
}
|
||||
|
||||
g_free (lookup_name);
|
||||
|
||||
if (!arg_ok)
|
||||
continue;
|
||||
|
||||
gtk_type_set_arg (obj, info->class_type, &args[i], info->arg_id);
|
||||
gtk_type_set_arg (object, info->class_type, &args[i], info->arg_id);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1074,6 +1099,9 @@ gtk_object_collect_args (guint *nargs,
|
||||
case GTK_TYPE_FLOAT:
|
||||
(void) va_arg (args1, gfloat);
|
||||
break;
|
||||
case GTK_TYPE_DOUBLE:
|
||||
(void) va_arg (args1, gdouble);
|
||||
break;
|
||||
case GTK_TYPE_STRING:
|
||||
(void) va_arg (args1, gchar*);
|
||||
break;
|
||||
@ -1160,6 +1188,9 @@ gtk_object_collect_args (guint *nargs,
|
||||
case GTK_TYPE_FLOAT:
|
||||
GTK_VALUE_FLOAT(args[i]) = va_arg (args2, gfloat);
|
||||
break;
|
||||
case GTK_TYPE_DOUBLE:
|
||||
GTK_VALUE_DOUBLE(args[i]) = va_arg (args2, gdouble);
|
||||
break;
|
||||
case GTK_TYPE_STRING:
|
||||
GTK_VALUE_STRING(args[i]) = va_arg (args2, gchar*);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user