Things are such much easier with the new g_signal_newc().

This commit is contained in:
Martin Baulig
2001-04-20 15:47:25 +00:00
parent 1491ccc594
commit 407514e4d7

View File

@@ -95,77 +95,34 @@ glibtop_client_warning_handler (glibtop_client *client, GError *error)
} }
static void static void
glibtop_client_marshal_VOID__POINTER (GClosure *closure, glibtop_client_class_init (glibtop_client_class *klass)
GValue *return_value,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint,
gpointer marshal_data)
{
typedef void (*GSignalFunc_VOID__POINTER) (gpointer data1,
gpointer arg_1,
gpointer data2);
register GSignalFunc_VOID__POINTER callback;
register GCClosure *cc = (GCClosure*) closure;
register gpointer data1, data2;
g_return_if_fail (n_param_values >= 2);
if (G_CCLOSURE_SWAP_DATA (closure))
{
data1 = closure->data;
data2 = g_value_get_as_pointer (param_values + 0);
}
else
{
data1 = g_value_get_as_pointer (param_values + 0);
data2 = closure->data;
}
callback = (GSignalFunc_VOID__POINTER) (marshal_data ? marshal_data : cc->callback);
callback (data1,
g_value_get_as_pointer (param_values + 1),
data2);
}
static void
glibtop_client_class_init (glibtop_client_class *class)
{ {
GObjectClass *gobject_class; GObjectClass *gobject_class;
GType *param_types;
GClosure *closure;
gobject_class = (GObjectClass *) class; gobject_class = (GObjectClass *) klass;
parent_class = g_type_class_ref (G_TYPE_OBJECT); parent_class = g_type_class_peek_parent (klass);
closure = g_signal_type_closure_new (G_TYPE_FROM_CLASS (class),
G_STRUCT_OFFSET (glibtop_client_class,
error));
param_types = g_new0 (GType, 1);
param_types [0] = G_TYPE_POINTER;
glibtop_client_signals [GLIBTOP_CLIENT_SIGNAL_ERROR] = glibtop_client_signals [GLIBTOP_CLIENT_SIGNAL_ERROR] =
g_signal_newv ("error", G_TYPE_FROM_CLASS (class), g_signal_newc ("error",
G_SIGNAL_RUN_LAST, closure, NULL, G_TYPE_FROM_CLASS (klass),
glibtop_client_marshal_VOID__POINTER, G_SIGNAL_RUN_LAST,
G_TYPE_NONE, 1, param_types); G_STRUCT_OFFSET (glibtop_client_class, error),
NULL, NULL,
closure = g_signal_type_closure_new (G_TYPE_FROM_CLASS (class), g_cclosure_marshal_VOID__POINTER,
G_STRUCT_OFFSET (glibtop_client_class, G_TYPE_NONE, 1, G_TYPE_POINTER);
warning));
glibtop_client_signals [GLIBTOP_CLIENT_SIGNAL_WARNING] = glibtop_client_signals [GLIBTOP_CLIENT_SIGNAL_WARNING] =
g_signal_newv ("warning", G_TYPE_FROM_CLASS (class), g_signal_newc ("warning",
G_SIGNAL_RUN_LAST, closure, NULL, G_TYPE_FROM_CLASS (klass),
glibtop_client_marshal_VOID__POINTER, G_SIGNAL_RUN_LAST,
G_TYPE_NONE, 1, param_types); G_STRUCT_OFFSET (glibtop_client_class, warning),
NULL, NULL,
g_cclosure_marshal_VOID__POINTER,
G_TYPE_NONE, 1, G_TYPE_POINTER);
g_free (param_types); klass->error = glibtop_client_error_handler;
klass->warning = glibtop_client_warning_handler;
class->error = glibtop_client_error_handler;
class->warning = glibtop_client_warning_handler;
gobject_class->finalize = glibtop_client_finalize; gobject_class->finalize = glibtop_client_finalize;
} }