<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" 
               "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
]>
<chapter id="chapter-signal">
  <title>The GObject messaging system</title>

  <sect1 id="closure">
    <title>Closures</title>

    <para>
      Closures are central to the concept of asynchronous signal delivery
      which is widely used throughout GTK+ and GNOME applications. A closure is an 
      abstraction, a generic representation of a callback. It is a small structure
      which contains three objects:
      <itemizedlist>
        <listitem><para>a function pointer (the callback itself) whose prototype looks like:
<informalexample><programlisting>
return_type function_callback (… , gpointer user_data);
</programlisting></informalexample>
        </para></listitem>
        <listitem><para>
           the <parameter>user_data</parameter> pointer which is passed to the callback upon invocation of the closure
          </para></listitem>
        <listitem><para>
           a function pointer which represents the destructor of the closure: whenever the
           closure's refcount reaches zero, this function will be called before the closure
           structure is freed.
          </para></listitem>
      </itemizedlist>
    </para>

    <para>
      The <link linkend="GClosure"><type>GClosure</type></link> structure represents the common functionality of all
      closure implementations: there exists a different closure implementation for
      each separate runtime which wants to use the GObject type system.
      <footnote><para>
        In practice, closures sit at the boundary of language runtimes: if you are
        writing Python code and one of your Python callbacks receives a signal from
        a GTK+ widget, the C code in GTK+ needs to execute your Python
        code. The closure invoked by the GTK+ object invokes the Python callback:
        it behaves as a normal C object for GTK+ and as a normal Python object for
        Python code.
      </para></footnote>
      The GObject library provides a simple <link linkend="GCClosure"><type>GCClosure</type></link> type which
      is a specific implementation of closures to be used with C/C++ callbacks.
    </para>
    <para>
      A <link linkend="GClosure"><type>GClosure</type></link> provides simple services:
      <itemizedlist>
        <listitem><para>
          Invocation (<function><link linkend="g-closure-invoke">g_closure_invoke</link></function>): this is what closures 
          were created for: they hide the details of callback invocation from the
          callback invoker.</para>
        </listitem>
        <listitem><para>
          Notification: the closure notifies listeners of certain events such as
          closure invocation, closure invalidation and closure finalization. Listeners
          can be registered with <function><link linkend="g-closure-add-finalize-notifier">g_closure_add_finalize_notifier</link></function>
          (finalization notification), <function><link linkend="g-closure-add-invalidate-notifier">g_closure_add_invalidate_notifier</link></function> 
          (invalidation notification) and 
          <function><link linkend="g-closure-add-marshal-guards">g_closure_add_marshal_guards</link></function> (invocation notification).
          There exist symmetric deregistration functions for finalization and invalidation
          events (<function><link linkend="g-closure-remove-finalize-notifier">g_closure_remove_finalize_notifier</link></function> and
          <function><link linkend="g-closure-remove-invalidate-notifier">g_closure_remove_invalidate_notifier</link></function>) but not for the invocation 
          process.
          <footnote><para>
            Closures are reference counted and notify listeners of their destruction in a two-stage
            process: the invalidation notifiers are invoked before the finalization notifiers.
          </para></footnote></para>
        </listitem>
      </itemizedlist>
    </para>

    <sect2>
      <title>C Closures</title>

      <para>
        If you are using C or C++
        to connect a callback to a given event, you will either use simple <link linkend="GCClosure"><type>GCClosure</type></link>s
        which have a pretty minimal API or the even simpler <function><link linkend="g-signal-connect">g_signal_connect</link></function> 
        functions (which will be presented a bit later).
      </para>

      <para>
        <function><link linkend="g-cclosure-new">g_cclosure_new</link></function> will create a new closure which can invoke the
        user-provided callback_func with the user-provided
        <parameter>user_data</parameter> as its last parameter. When the closure
        is finalized (second stage of the destruction process), it will invoke
        the <parameter>destroy_data</parameter> function if the user has
        supplied one.
      </para>
  
      <para>
        <function><link linkend="g-cclosure-new-swap">g_cclosure_new_swap</link></function> will create a new closure which can invoke the
        user-provided <parameter>callback_func</parameter> with the
        user-provided <parameter>user_data</parameter> as its first parameter
        (instead of being the 
        last parameter as with <function><link linkend="g-cclosure-new">g_cclosure_new</link></function>). When the closure
        is finalized (second stage of the destruction process), it will invoke
        the <parameter>destroy_data</parameter> function if the user has
        supplied one.
      </para>
    </sect2>

    <sect2>
      <title>Non-C closures (for the fearless)</title>

      <para>
        As was explained above, closures hide the details of callback invocation. In C,
        callback invocation is just like function invocation: it is a matter of creating
        the correct stack frame for the called function and executing a <emphasis>call</emphasis>
        assembly instruction.
      </para>
  
      <para>
        C closure marshallers transform the array of GValues which represent 
        the parameters to the target function into a C-style function parameter list, invoke
        the user-supplied C function with this new parameter list, get the return value of the
        function, transform it into a GValue and return this GValue to the marshaller caller.
      </para>

      <para>
        A generic C closure marshaller is available as
        <link linkend="g-cclosure-marshal-generic"><function>g_cclosure_marshal_generic</function></link>
        which implements marshalling for all function types using libffi. Custom
        marshallers for different types are not needed apart from performance
        critical code where the libffi-based marshaller may be too slow.
      </para>

      <para>
        An example of a custom marshaller is given below, illustrating how
        <type>GValue</type>s can be converted to a C function call. The
        marshaller is for a C function which takes an integer as its first
        parameter and returns void.
<informalexample><programlisting>
g_cclosure_marshal_VOID__INT (GClosure     *closure,
                              GValue       *return_value,
                              guint         n_param_values,
                              const GValue *param_values,
                              gpointer      invocation_hint,
                              gpointer      marshal_data)
{
  typedef void (*GMarshalFunc_VOID__INT) (gpointer     data1,
                                          gint         arg_1,
                                          gpointer     data2);
  register GMarshalFunc_VOID__INT callback;
  register GCClosure *cc = (GCClosure*) closure;
  register gpointer data1, data2;

  g_return_if_fail (n_param_values == 2);

  data1 = g_value_peek_pointer (param_values + 0);
  data2 = closure->data;

  callback = (GMarshalFunc_VOID__INT) (marshal_data ? marshal_data : cc->callback);

  callback (data1,
            g_marshal_value_peek_int (param_values + 1),
            data2);
}
</programlisting></informalexample>
      </para>
  
      <para>
        There exist other kinds of marshallers, for example there is a generic
        Python marshaller which is used by all Python closures (a Python closure
        is used to invoke a callback written in Python). This Python marshaller
        transforms the input GValue list representing the function parameters
        into a Python tuple which is the equivalent structure in Python.
      </para>

    </sect2>
  </sect1>

  <sect1 id="signal">
    <title>Signals</title>

    <para>
      GObject's signals have nothing to do with standard UNIX signals: they connect 
      arbitrary application-specific events with any number of listeners.
      For example, in GTK+, every user event (keystroke or mouse move) is received
      from the windowing system and generates a GTK+ event in the form of a signal emission
      on the widget object instance.
    </para>

    <para>
      Each signal is registered in the type system together with the type on which
      it can be emitted: users of the type are said to <emphasis>connect</emphasis>
      to the signal on a given type instance when they register a closure to be 
      invoked upon the signal emission. Users can also emit the signal by themselves 
      or stop the emission of the signal from within one of the closures connected 
      to the signal.
    </para>

    <para>
      When a signal is emitted on a given type instance, all the closures
      connected to this signal on this type instance will be invoked. All the closures
      connected to such a signal represent callbacks whose signature looks like:
<informalexample><programlisting>
return_type function_callback (gpointer instance, …, gpointer user_data);
</programlisting></informalexample>
    </para>

    <sect2 id="signal-registration">
      <title>Signal registration</title>

	  <para>
		To register a new signal on an existing type, we can use any of <function><link linkend="g-signal-newv">g_signal_newv</link></function>,
		<function><link linkend="g-signal-new-valist">g_signal_new_valist</link></function> or <function><link linkend="g-signal-new">g_signal_new</link></function> functions:
<informalexample><programlisting>
guint g_signal_newv (const gchar        *signal_name,
                     GType               itype,
                     GSignalFlags        signal_flags,
                     GClosure           *class_closure,
                     GSignalAccumulator  accumulator,
                     gpointer            accu_data,
                     GSignalCMarshaller  c_marshaller,
                     GType               return_type,
                     guint               n_params,
                     GType              *param_types);
</programlisting></informalexample>
		The number of parameters to these functions is a bit intimidating but they are relatively
		simple:
		<itemizedlist>
		  <listitem><para>
			  <parameter>signal_name</parameter>: is a string which can be used to uniquely identify a given signal.
			</para></listitem>
		  <listitem><para>
			  <parameter>itype</parameter>: is the instance type on which this signal can be emitted.
			</para></listitem>
		  <listitem><para>
			  <parameter>signal_flags</parameter>: partly defines the order in which closures which were connected to the
			  signal are invoked.
			</para></listitem>
		  <listitem><para>
			  <parameter>class_closure</parameter>: this is the default closure for the signal: if it is not NULL upon
			  the signal emission, it will be invoked upon this emission of the signal. The 
			  moment where this closure is invoked compared to other closures connected to that 
			  signal depends partly on the signal_flags.
			</para></listitem>
			<listitem><para>
			  <parameter>accumulator</parameter>: this is a function pointer which is invoked after each closure
			  has been invoked. If it returns FALSE, signal emission is stopped. If it returns
			  TRUE, signal emission proceeds normally. It is also used to compute the return
			  value of the signal based on the return value of all the invoked closures.
			  For example, an accumulator could ignore
			  <literal>NULL</literal> returns from closures; or it
			  could build a list of the values returned by the
			  closures.
			</para></listitem>
		  <listitem><para>
			  <parameter>accumulator_data</parameter>: this pointer will be passed down to each invocation of the
			  accumulator during emission.
			</para></listitem>
		  <listitem><para>
			  <parameter>c_marshaller</parameter>: this is the default C marshaller for any closure which is connected to
			this signal.
			</para></listitem>
		  <listitem><para>
			  <parameter>return_type</parameter>: this is the type of the return value of the signal.
			</para></listitem>
		  <listitem><para>
			  <parameter>n_params</parameter>: this is the number of parameters this signal takes.
			</para></listitem>
		  <listitem><para>
			  <parameter>param_types</parameter>: this is an array of GTypes which indicate the type of each parameter
			  of the signal. The length of this array is indicated by n_params.
			</para></listitem>
		</itemizedlist>
      </para>

	  <para>
		As you can see from the above definition, a signal is basically a description
		of the closures which can be connected to this signal and a description of the
		order in which the closures connected to this signal will be invoked.
	  </para>

	</sect2>

	<sect2 id="signal-connection">
	  <title>Signal connection</title>

	  <para>
		If you want to connect to a signal with a closure, you have three possibilities:
		<itemizedlist>
		  <listitem><para>
		  You can register a class closure at signal registration: this is a
		  system-wide operation. i.e.: the class closure will be invoked during each emission
		  of a given signal on <emphasis>any</emphasis> of the instances of the type which supports that signal.
			</para></listitem>
		  <listitem><para>
		  You can use <function><link linkend="g-signal-override-class-closure">g_signal_override_class_closure</link></function> which
		  overrides the class closure of a given type. It is possible to call this function
		  only on a derived type of the type on which the signal was registered.
		  This function is of use only to language bindings.
			</para></listitem>
		  <listitem><para>
		  You can register a closure with the <function><link linkend="g-signal-connect">g_signal_connect</link></function>
		  family of functions. This is an instance-specific operation: the closure
		  will be invoked only during emission of a given signal on a given instance.
			</para></listitem>
		</itemizedlist>
		It is also possible to connect a different kind of callback on a given signal: 
		emission hooks are invoked whenever a given signal is emitted whatever the instance on 
		which it is emitted. Emission hooks are used for example to get all mouse_clicked
		emissions in an application to be able to emit the small mouse click sound.
		Emission hooks are connected with <function><link linkend="g-signal-add-emission-hook">g_signal_add_emission_hook</link></function>
		and removed with <function><link linkend="g-signal-remove-emission-hook">g_signal_remove_emission_hook</link></function>.
	  </para>

	</sect2>

	<sect2 id="signal-emission">
	  <title>Signal emission</title>

	  <para>
		Signal emission is done through the use of the <function><link linkend="g-signal-emit">g_signal_emit</link></function> family 
		of functions.
<informalexample><programlisting>
void g_signal_emitv (const GValue *instance_and_params,
                     guint         signal_id,
                     GQuark        detail,
                     GValue       *return_value);
</programlisting></informalexample>
		<itemizedlist>
		  <listitem><para>
			The <parameter>instance_and_params</parameter> array of GValues contains the list of input
			parameters to the signal. The first element of the array is the 
			instance pointer on which to invoke the signal. The following elements of
			the array contain the list of parameters to the signal.
			</para></listitem>
		  <listitem><para>
			<parameter>signal_id</parameter> identifies the signal to invoke.
			</para></listitem>
		  <listitem><para>
			<parameter>detail</parameter> identifies the specific detail of the signal to invoke. A detail is a kind of 
			magic token/argument which is passed around during signal emission and which is used
			by closures connected to the signal to filter out unwanted signal emissions. In most 
			cases, you can safely set this value to zero. See <xref linkend="signal-detail"/> for
			more details about this parameter.
			</para></listitem>
		  <listitem><para>
			<parameter>return_value</parameter> holds the return value of the last closure invoked during emission if
			no accumulator was specified. If an accumulator was specified during signal creation,
			this accumulator is used to calculate the return value as a function of the return
			values of all the closures invoked during emission. 
			If no closure is invoked during
			emission, the <parameter>return_value</parameter> is nonetheless initialized to zero/null.
			</para></listitem>
		  </itemizedlist>
		</para>

	  <para>
		Signal emission can be decomposed in 5 steps:
		<orderedlist>
		  <listitem><para>
			<literal>RUN_FIRST</literal>: if the
			<link linkend="G-SIGNAL-RUN-FIRST:CAPS"><literal>G_SIGNAL_RUN_FIRST</literal></link> flag was used
			during signal registration and if there exists a class closure for this signal,
			the class closure is invoked.
			</para></listitem>
		  <listitem><para>
			<literal>EMISSION_HOOK</literal>: if any emission hook was added to
			the signal, they are invoked from first to last added. Accumulate return values.
			</para></listitem>
		  <listitem><para>
			<literal>HANDLER_RUN_FIRST</literal>: if any closure were connected
			with the <function><link linkend="g-signal-connect">g_signal_connect</link></function> family of 
			functions, and if they are not blocked (with the <function><link linkend="g-signal-handler-block">g_signal_handler_block</link></function>
			family of functions) they are run here, from first to last connected.
			</para></listitem>
		  <listitem><para>
			<literal>RUN_LAST</literal>: if the <literal>G_SIGNAL_RUN_LAST</literal>
			flag was set during registration and if a class closure
			was set, it is invoked here.
			</para></listitem>
		  <listitem><para>
			<literal>HANDLER_RUN_LAST</literal>: if any closure were connected
			with the <function>g_signal_connect_after</function> family of 
			functions, if they were not invoked during <literal>HANDLER_RUN_FIRST</literal> and if they 
			are not blocked, they are run here, from first to last connected.
			</para></listitem>
		  <listitem><para>
			<literal>RUN_CLEANUP</literal>: if the <literal>G_SIGNAL_RUN_CLEANUP</literal> flag
			was set during registration and if a class closure was set,
			it is invoked here. Signal emission is completed here.
			</para></listitem>
		</orderedlist>
	  </para>
  
	  <para>
		If, at any point during emission (except in <literal>RUN_CLEANUP</literal> state), one of the
		closures or emission hook stops the signal emission with
		<function><link linkend="g-signal-stop-emission">g_signal_stop_emission</link></function>,
		emission jumps to <literal>RUN_CLEANUP</literal> state.
	  </para>
  
	  <para>
		If, at any point during emission, one of the closures or emission hook 
		emits the same signal on the same instance, emission is restarted from
		the <literal>RUN_FIRST</literal> state.
	  </para>
  
	  <para>
		The accumulator function is invoked in all states, after invocation
		of each closure (except in <literal>RUN_EMISSION_HOOK</literal> and
		<literal>RUN_CLEANUP</literal>). It accumulates
		the closure return value into the signal return value and returns TRUE or
		FALSE. If, at any point, it does not return TRUE, emission jumps
		to <literal>RUN_CLEANUP</literal> state.
	  </para>

	  <para>
		If no accumulator function was provided, the value returned by the last handler
		run will be returned by <function><link linkend="g-signal-emit">g_signal_emit</link></function>.
	  </para>

	</sect2>


	<sect2 id="signal-detail">
	  <title>The <emphasis>detail</emphasis> argument</title>

	  <para>All the functions related to signal emission or signal connection have a parameter
		named the <emphasis>detail</emphasis>. Sometimes, this parameter is hidden by the API
		but it is always there, in one form or another. 
	  </para>

	  <para>
	    Of the three main connection functions,
		only one has an explicit detail parameter as a <link linkend="GQuark"><type>GQuark</type></link>:
		<link linkend="g-signal-connect-closure-by-id"><function>g_signal_connect_closure_by_id</function></link>.
		<footnote>
		  <para>A GQuark is an integer which uniquely represents a string. It is possible to transform
		   back and forth between the integer and string representations with the functions 
		   <function><link linkend="g-quark-from-string">g_quark_from_string</link></function> and <function><link linkend="g-quark-to-string">g_quark_to_string</link></function>.
		  </para>
		</footnote>
	  </para>
	  <para>
	    The two other functions,
	    <link linkend="g-signal-connect-closure"><function>g_signal_connect_closure</function></link> and
	    <link linkend="g-signal-connect-data"><function>g_signal_connect_data</function></link>
	    hide the detail parameter in the signal name identification.
		Their <parameter>detailed_signal</parameter> parameter is a
		string which identifies the name of the signal to connect to.
		The format of this string should match
		<emphasis>signal_name::detail_name</emphasis>. For example,
		connecting to the signal named
		<emphasis>notify::cursor_position</emphasis> will actually
		connect to the signal named <emphasis>notify</emphasis> with the
		<emphasis>cursor_position</emphasis> detail.
		Internally, the detail string is transformed to a GQuark if it is present.
	  </para>

	  <para>
	    Of the four main signal emission functions, one hides it in its
	    signal name parameter:
	    <link linkend="g-signal-connect"><function>g_signal_connect</function></link>.
	    The other three have an explicit detail parameter as a
	    <link linkend="GQuark"><type>GQuark</type></link> again:
	    <link linkend="g-signal-emit"><function>g_signal_emit</function></link>,
	    <link linkend="g-signal-emitv"><function>g_signal_emitv</function></link> and
	    <link linkend="g-signal-emit-valist"><function>g_signal_emit_valist</function></link>.
	  </para>

	  <para>
        If a detail is provided by the user to the emission function, it is used during emission to match
        against the closures which also provide a detail.
        If a closure's detail does not match the detail provided by the user, it
        will not be invoked (even though it is connected to a signal which is
        being emitted).
	  </para>

	  <para>
		This completely optional filtering mechanism is mainly used as an optimization for signals
		which are often emitted for many different reasons: the clients can filter out which events they are
		interested in before the closure's marshalling code runs. For example, this is used extensively
		by the <link linkend="GObject-notify"><structfield>notify</structfield></link> signal of GObject: whenever a property is modified on a GObject,
		instead of just emitting the <emphasis>notify</emphasis> signal, GObject associates as a detail to this
		signal emission the name of the property modified. This allows clients who wish to be notified of changes
		to only one property to filter most events before receiving them.
	  </para>

	  <para>
		As a simple rule, users can and should set the detail parameter to zero: this will disable completely
        this optional filtering for that signal.
	  </para>

	</sect2>

  </sect1>
</chapter>

