Sophie

Sophie

distrib > PLD > ra > i686 > by-pkgid > 7d9d988b8daaf36219b4c06c923aefbc > files > 175

gtk+-devel-1.2.10-6.i686.rpm

<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
>&#60;&#60;&#60; 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 &#62;&#62;&#62;</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&nbsp;--&nbsp;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"
>&#13;#include &lt;gtk/gtk.h&gt;


#define     <A
HREF="gtk-signal-marshallers.html#GTK-SIGNAL-DEFAULT-MARSHALLER"
>gtk_signal_default_marshaller</A
>&#13;</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
>&#60;&#60;&#60; 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 &#62;&#62;&#62;</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
>