medit/moo/mooutils/moosignal.c

68 lines
2.3 KiB
C

/*
* mooutils/moosignal.c
*
* Copyright (C) 2004-2005 by Yevgen Muntyan <muntyan@math.tamu.edu>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* See COPYING file that comes with this distribution.
*/
#include "mooutils/moosignal.h"
static void void_marshal (G_GNUC_UNUSED GClosure *closure,
G_GNUC_UNUSED GValue *return_value,
G_GNUC_UNUSED guint n_param_values,
G_GNUC_UNUSED const GValue *param_values,
G_GNUC_UNUSED gpointer invocation_hint,
G_GNUC_UNUSED gpointer marshal_data)
{
}
static GClosure *void_closure_new (void)
{
GClosure *closure = g_closure_new_simple (sizeof (GClosure), NULL);
g_closure_set_marshal (closure, void_marshal);
return closure;
}
guint moo_signal_new_cb (const gchar *signal_name,
GType itype,
GSignalFlags signal_flags,
GCallback handler,
GSignalAccumulator accumulator,
gpointer accu_data,
GSignalCMarshaller c_marshaller,
GType return_type,
guint n_params,
...)
{
va_list args;
guint signal_id;
g_return_val_if_fail (signal_name != NULL, 0);
va_start (args, n_params);
if (handler)
signal_id = g_signal_new_valist (signal_name, itype, signal_flags,
g_cclosure_new (handler, NULL, NULL),
accumulator, accu_data, c_marshaller,
return_type, n_params, args);
else
signal_id = g_signal_new_valist (signal_name, itype, signal_flags,
void_closure_new (),
accumulator, accu_data, c_marshaller,
return_type, n_params, args);
va_end (args);
return signal_id;
}