#ifndef __GSK_GENERIC_MARSHAL_H_
#define __GSK_GENERIC_MARSHAL_H_

#include "gskgtk.h"

/* this may be actually be any type of function */
typedef void (*GskGenericCallback) ();
#define GSK_GENERIC_CALLBACK(func)		((GskGenericCallback)(func))

typedef void (*GskGenericMarshal)(GtkArg      *return_val,
				  GtkArg      *params,
				  GskGenericCallback  func,
				  gpointer     func_data);
GskGenericMarshal gsk_generic_marshal_find (GtkType        return_type,
					    guint          n_params,
					    ...);          
GskGenericMarshal gsk_generic_marshal_findv(GtkType        return_type,
					    guint          n_params,
					    const GtkType *param_types);


/* --- for use by generated code only --- */
typedef struct _GskGenericMarshalInfo GskGenericMarshalInfo;
struct _GskGenericMarshalInfo
{
  const char *spec_string;
  GskGenericMarshal marshal;
};
void gsk_generic_marshal_register_marshals (guint                 count,
					    GskGenericMarshalInfo infos[]);

#endif
