<HTML ><HEAD ><TITLE >Signal Marshallers</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.61 "><LINK REL="HOME" TITLE="GTK+ Reference Manual" HREF="index.html"><LINK REL="UP" TITLE="GTK+ " HREF="gtk.html"><LINK REL="PREVIOUS" TITLE="Signals" HREF="gtk-signals.html"><LINK REL="NEXT" TITLE="Implementation of Object Properties" HREF="gtk-object-properties.html"></HEAD ><BODY CLASS="REFENTRY" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE WIDTH="100%" BORDER="0" BGCOLOR="#000000" CELLPADDING="1" CELLSPACING="0" ><TR ><TH COLSPAN="4" ALIGN="center" ><FONT COLOR="#FFFFFF" SIZE="5" >GTK+ Reference Manual</FONT ></TH ></TR ><TR ><TD WIDTH="25%" BGCOLOR="#C00000" ALIGN="left" ><A HREF="gtk-signals.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B ><<< Previous Page</B ></FONT ></A ></TD ><TD WIDTH="25%" BGCOLOR="#0000C0" ALIGN="center" ><FONT COLOR="#FFFFFF" SIZE="3" ><B ><A HREF="index.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >Home</B ></FONT ></A ></B ></FONT ></TD ><TD WIDTH="25%" BGCOLOR="#00C000" ALIGN="center" ><FONT COLOR="#FFFFFF" SIZE="3" ><B ><A HREF="gtk.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >Up</B ></FONT ></A ></B ></FONT ></TD ><TD WIDTH="25%" BGCOLOR="#C00000" ALIGN="right" ><A HREF="gtk-object-properties.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >Next Page >>></B ></FONT ></A ></TD ></TR ></TABLE ></DIV ><H1 ><A NAME="GTK-SIGNAL-MARSHALLERS" >Signal Marshallers</A ></H1 ><DIV CLASS="REFNAMEDIV" ><A NAME="AEN9134" ></A ><H2 >Name</H2 >Signal Marshallers -- Functions to adapt C structures to native calling convention.</DIV ><DIV CLASS="REFSYNOPSISDIV" ><A NAME="AEN9137" ></A ><H2 >Synopsis</H2 ><TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="SYNOPSIS" > #include <gtk/gtk.h> #define <A HREF="gtk-signal-marshallers.html#GTK-SIGNAL-DEFAULT-MARSHALLER" >gtk_signal_default_marshaller</A > </PRE ></TD ></TR ></TABLE ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN9141" ></A ><H2 >Description</H2 ><DIV CLASS="REFSECT2" ><A NAME="AEN9143" ></A ><H3 >What are Signal Marshallers?</H3 ><P >Marshals are functions which all have the same prototype: they take a <A HREF="gtkobject.html" >GtkObject</A >, a <A HREF="gtk-types.html#GTKSIGNALFUNC" >GtkSignalFunc</A >, a <A HREF=../glib/glib-basic-types.html#GPOINTER >gpointer</A>, and an array of argument values. The functions are names gtk_marshall_RETURNTYPE__PARAMTYPE1_PARAMTYPE2....</P ><P >They then call a native function: the GtkObject is the first parameter passed in. The arguments are passed in the native calling convention: chars, shorts, ints, longs may be packed on the stack, or tucked in registers: it doesn't matter because the same calling convention will be generated inside the gtkmarshal code as is expected where you define your handlers.</P ><P >So the function named: <TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="PROGRAMLISTING" >gtk_marshal_BOOL__POINTER_INT_INT_UINT(GtkObject*, GtkSignalFunc, gpointer, GtkArg*);</PRE ></TD ></TR ></TABLE > will call the <A HREF="gtk-types.html#GTKSIGNALFUNC" >GtkSignalFunc</A > assuming it was a function with signature: <TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="PROGRAMLISTING" >gboolean sigfunc(gpointer,gint,gint,guint);</PRE ></TD ></TR ></TABLE ></P ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN9154" ></A ><H3 >Writing Custom Marshals</H3 ><P >Marshals are primarily used as arguments to <A HREF="gtk-signals.html#GTK-SIGNAL-NEW" >gtk_signal_new</A >(). Sometimes, you may find that a marshaller you need isn't available in the standard list. Then you have to write your own.</P ><P >If you wish to define a signal with a new type of argument list. Suppose you want 2 pointers and 2 integers. You would write: <TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="PROGRAMLISTING" >typedef int (*GtkSignal_INT__POINTER_POINTER_INT_INT)( gpointer, gpointer, gint, gint ); void marshal_INT__POINTER_POINTER_INT_INT(GtkObject* object, GtkSignalFunc func, gpointer func_data, GtkArg* args) { GtkSignal_NONE__POINTER_POINTER_INT_INT rfunc; gint* return_val; return_val = GTK_RETLOC_INT(args[4]); rfunc = (GtkSignal_INT__POINTER_POINTER_INT_INT)func; *return_val = (*rfunc)(object, GTK_VALUE_POINTER(args[0]), GTK_VALUE_POINTER(args[1]), GTK_VALUE_INT(args[2]), GTK_VALUE_INT(args[3]), func_data); }</PRE ></TD ></TR ></TABLE ></P ></DIV ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN9160" ></A ><H2 >Details</H2 ><DIV CLASS="REFSECT2" ><A NAME="AEN9162" ></A ><H3 ><A NAME="GTK-SIGNAL-DEFAULT-MARSHALLER" ></A >gtk_signal_default_marshaller</H3 ><TABLE BORDER="0" BGCOLOR="#D6E8FF" WIDTH="100%" CELLPADDING="6" ><TR ><TD ><PRE CLASS="PROGRAMLISTING" >#define gtk_signal_default_marshaller gtk_marshal_NONE__NONE</PRE ></TD ></TR ></TABLE ><P >A marshaller that returns void and takes no extra parameters.</P ></DIV ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN9167" ></A ><H2 >See Also</H2 ><P ><P ></P ><DIV CLASS="VARIABLELIST" ><DL ><DT >GtkSignal</DT ><DD ><P >The signal handling functions (of which marshallers are really an implementation detail).</P ></DD ></DL ></DIV ></P ></DIV ><DIV CLASS="NAVFOOTER" ><BR CLEAR="all"><BR><TABLE WIDTH="100%" BORDER="0" BGCOLOR="#000000" CELLPADDING="1" CELLSPACING="0" ><TR ><TD WIDTH="25%" BGCOLOR="#C00000" ALIGN="left" ><A HREF="gtk-signals.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B ><<< Previous Page</B ></FONT ></A ></TD ><TD WIDTH="25%" BGCOLOR="#0000C0" ALIGN="center" ><FONT COLOR="#FFFFFF" SIZE="3" ><B ><A HREF="index.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >Home</B ></FONT ></A ></B ></FONT ></TD ><TD WIDTH="25%" BGCOLOR="#00C000" ALIGN="center" ><FONT COLOR="#FFFFFF" SIZE="3" ><B ><A HREF="gtk.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >Up</B ></FONT ></A ></B ></FONT ></TD ><TD WIDTH="25%" BGCOLOR="#C00000" ALIGN="right" ><A HREF="gtk-object-properties.html" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >Next Page >>></B ></FONT ></A ></TD ></TR ><TR ><TD COLSPAN="2" ALIGN="left" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >Signals</B ></FONT ></TD ><TD COLSPAN="2" ALIGN="right" ><FONT COLOR="#FFFFFF" SIZE="3" ><B >Implementation of Object Properties</B ></FONT ></TD ></TR ></TABLE ></DIV ></BODY ></HTML >