Update to version 2.33.1
[profile/ivi/glib2.git] / docs / reference / gobject / html / gobject-Type-Information.html
index ae0c846..903b863 100644 (file)
@@ -828,17 +828,9 @@ be taken to free any
 old contents. E.g. for the implementation of a string
 value that may never be <a href="./../glib/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, the implementation might
 look like:
-<div class="informalexample">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="normal">value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="./../glib/glib/glib-String-Utility-Functions.html#g-strdup">g_strdup</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">""</span><span class="symbol">);</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
-
+<div class="informalexample"><pre class="programlisting">
+value-&gt;data[0].v_pointer = g_strdup ("");
+</pre></div>
 </td>
 </tr>
 <tr>
@@ -847,21 +839,11 @@ look like:
 data array of the passed in <em class="parameter"><code>value</code></em>. No resources may
 remain allocated through the <a class="link" href="gobject-Generic-values.html#GValue" title="GValue"><span class="type">GValue</span></a> contents after
 this function returns. E.g. for our above string type:
-<div class="informalexample">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1
-2
-3</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="comment">// only free strings without a specific flag for static storage</span>
-<span class="keyword">if</span><span class="normal"> </span><span class="symbol">(!(</span><span class="normal">value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">1</span><span class="symbol">].</span><span class="normal">v_uint </span><span class="symbol">&amp;</span><span class="normal"> G_VALUE_NOCOPY_CONTENTS</span><span class="symbol">))</span>
-<span class="function"><a href="./../glib/glib/glib-Memory-Allocation.html#g-free">g_free</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer</span><span class="symbol">);</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
-
+<div class="informalexample"><pre class="programlisting">
+// only free strings without a specific flag for static storage
+if (!(value-&gt;data[1].v_uint &amp; G_VALUE_NOCOPY_CONTENTS))
+g_free (value-&gt;data[0].v_pointer);
+</pre></div>
 </td>
 </tr>
 <tr>
@@ -874,17 +856,9 @@ The purpose of this function is to copy the contents of
 <em class="parameter"><code>src_value</code></em> into <em class="parameter"><code>dest_value</code></em> in a way, that even after
 <em class="parameter"><code>src_value</code></em> has been freed, the contents of <em class="parameter"><code>dest_value</code></em>
 remain valid. String type example:
-<div class="informalexample">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="normal">dest_value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="./../glib/glib/glib-String-Utility-Functions.html#g-strdup">g_strdup</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">src_value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer</span><span class="symbol">);</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
-
+<div class="informalexample"><pre class="programlisting">
+dest_value-&gt;data[0].v_pointer = g_strdup (src_value-&gt;data[0].v_pointer);
+</pre></div>
 </td>
 </tr>
 <tr>
@@ -892,17 +866,9 @@ remain valid. String type example:
 <td>If the value contents fit into a pointer, such as objects
 or strings, return this pointer, so the caller can peek at
 the current contents. To extend on our above string example:
-<div class="informalexample">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="keyword">return</span><span class="normal"> value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer</span><span class="symbol">;</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
-
+<div class="informalexample"><pre class="programlisting">
+return value-&gt;data[0].v_pointer;
+</pre></div>
 </td>
 </tr>
 <tr>
@@ -967,37 +933,19 @@ for the duration of the <em class="parameter"><code>value</code></em> lifetime.
 Thus an extra copy of the contents stored in <em class="parameter"><code>collect_values</code></em> is
 not required for assignment to <em class="parameter"><code>value</code></em>.
 For our above string example, we continue with:
-<div class="informalexample">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(!</span><span class="normal">collect_values</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer</span><span class="symbol">)</span>
-<span class="normal">value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="./../glib/glib/glib-String-Utility-Functions.html#g-strdup">g_strdup</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">""</span><span class="symbol">);</span>
-<span class="keyword">else</span><span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">collect_flags </span><span class="symbol">&amp;</span><span class="normal"> G_VALUE_NOCOPY_CONTENTS</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal">value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer </span><span class="symbol">=</span><span class="normal"> collect_values</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer</span><span class="symbol">;</span>
-<span class="comment">// keep a flag for the value_free() implementation to not free this string</span>
-<span class="normal">value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">1</span><span class="symbol">].</span><span class="normal">v_uint </span><span class="symbol">=</span><span class="normal"> G_VALUE_NOCOPY_CONTENTS</span><span class="symbol">;</span>
-<span class="cbracket">}</span>
-<span class="keyword">else</span>
-<span class="normal">value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="./../glib/glib/glib-String-Utility-Functions.html#g-strdup">g_strdup</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">collect_values</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer</span><span class="symbol">);</span>
-<span class="keyword">return</span><span class="normal"> <a href="./../glib/glib/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
-
+<div class="informalexample"><pre class="programlisting">
+if (!collect_values[0].v_pointer)
+value-&gt;data[0].v_pointer = g_strdup ("");
+else if (collect_flags &amp; G_VALUE_NOCOPY_CONTENTS)
+{
+value-&gt;data[0].v_pointer = collect_values[0].v_pointer;
+// keep a flag for the value_free() implementation to not free this string
+value-&gt;data[1].v_uint = G_VALUE_NOCOPY_CONTENTS;
+}
+else
+value-&gt;data[0].v_pointer = g_strdup (collect_values[0].v_pointer);
+return NULL;
+</pre></div>
 It should be noted, that it is generally a bad idea to follow the
 <span class="type">G_VALUE_NOCOPY_CONTENTS</span> hint for reference counted types. Due to
 reentrancy requirements and reference count assertions performed
@@ -1006,35 +954,18 @@ incremented for reference counted contents stored in the value-&gt;data
 array.  To deviate from our string example for a moment, and taking
 a look at an exemplary implementation for <code class="function">collect_value()</code> of
 <a class="link" href="gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a>:
-<div class="informalexample">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">collect_values</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="usertype">GObject</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">object </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="gobject-The-Base-Object-Type.html#G-OBJECT:CAPS">G_OBJECT</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">collect_values</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer</span><span class="symbol">);</span>
-<span class="comment">// never honour G_VALUE_NOCOPY_CONTENTS for ref-counted types</span>
-<span class="normal">value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="gobject-The-Base-Object-Type.html#g-object-ref">g_object_ref</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">object</span><span class="symbol">);</span>
-<span class="keyword">return</span><span class="normal"> <a href="./../glib/glib/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span>
-<span class="cbracket">}</span>
-<span class="keyword">else</span>
-<span class="keyword">return</span><span class="normal"> </span><span class="function"><a href="./../glib/glib/glib-String-Utility-Functions.html#g-strdup-printf">g_strdup_printf</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"Object passed as invalid NULL pointer"</span><span class="symbol">);</span>
-<span class="cbracket">}</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
-
+<div class="informalexample"><pre class="programlisting">
+if (collect_values[0].v_pointer)
+{
+GObject *object = G_OBJECT (collect_values[0].v_pointer);
+// never honour G_VALUE_NOCOPY_CONTENTS for ref-counted types
+value-&gt;data[0].v_pointer = g_object_ref (object);
+return NULL;
+}
+else
+return g_strdup_printf ("Object passed as invalid NULL pointer");
+}
+</pre></div>
 The reference count for valid objects is always incremented,
 regardless of <em class="parameter"><code>collect_flags</code></em>. For invalid objects, the example
 returns a newly allocated string without altering <em class="parameter"><code>value</code></em>.
@@ -1069,60 +1000,29 @@ always properly support <code class="literal">G_VALUE_NOCOPY_CONTENTS</code>.
 Similar to <code class="function">collect_value()</code> the function may prematurely abort
 by returning a newly allocated string describing an error condition.
 To complete the string example:
-<div class="informalexample">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="usertype">gchar</span><span class="normal"> </span><span class="symbol">**</span><span class="normal">string_p </span><span class="symbol">=</span><span class="normal"> collect_values</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer</span><span class="symbol">;</span>
-<span class="keyword">if</span><span class="normal"> </span><span class="symbol">(!</span><span class="normal">string_p</span><span class="symbol">)</span>
-<span class="keyword">return</span><span class="normal"> </span><span class="function"><a href="./../glib/glib/glib-String-Utility-Functions.html#g-strdup-printf">g_strdup_printf</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"string location passed as NULL"</span><span class="symbol">);</span>
-<span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">collect_flags </span><span class="symbol">&amp;</span><span class="normal"> G_VALUE_NOCOPY_CONTENTS</span><span class="symbol">)</span>
-<span class="symbol">*</span><span class="normal">string_p </span><span class="symbol">=</span><span class="normal"> value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer</span><span class="symbol">;</span>
-<span class="keyword">else</span>
-<span class="symbol">*</span><span class="normal">string_p </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="./../glib/glib/glib-String-Utility-Functions.html#g-strdup">g_strdup</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer</span><span class="symbol">);</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
-
+<div class="informalexample"><pre class="programlisting">
+gchar **string_p = collect_values[0].v_pointer;
+if (!string_p)
+return g_strdup_printf ("string location passed as NULL");
+if (collect_flags &amp; G_VALUE_NOCOPY_CONTENTS)
+*string_p = value-&gt;data[0].v_pointer;
+else
+*string_p = g_strdup (value-&gt;data[0].v_pointer);
+</pre></div>
 And an illustrative version of <code class="function">lcopy_value()</code> for
 reference-counted types:
-<div class="informalexample">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="usertype">GObject</span><span class="normal"> </span><span class="symbol">**</span><span class="normal">object_p </span><span class="symbol">=</span><span class="normal"> collect_values</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer</span><span class="symbol">;</span>
-<span class="keyword">if</span><span class="normal"> </span><span class="symbol">(!</span><span class="normal">object_p</span><span class="symbol">)</span>
-<span class="keyword">return</span><span class="normal"> </span><span class="function"><a href="./../glib/glib/glib-String-Utility-Functions.html#g-strdup-printf">g_strdup_printf</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"object location passed as NULL"</span><span class="symbol">);</span>
-<span class="keyword">if</span><span class="normal"> </span><span class="symbol">(!</span><span class="normal">value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer</span><span class="symbol">)</span>
-<span class="symbol">*</span><span class="normal">object_p </span><span class="symbol">=</span><span class="normal"> <a href="./../glib/glib/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span>
-<span class="keyword">else</span><span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">collect_flags </span><span class="symbol">&amp;</span><span class="normal"> G_VALUE_NOCOPY_CONTENTS</span><span class="symbol">)</span><span class="normal"> </span><span class="comment">/* always honour */</span>
-<span class="symbol">*</span><span class="normal">object_p </span><span class="symbol">=</span><span class="normal"> value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer</span><span class="symbol">;</span>
-<span class="keyword">else</span>
-<span class="symbol">*</span><span class="normal">object_p </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="gobject-The-Base-Object-Type.html#g-object-ref">g_object_ref</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">value</span><span class="symbol">-&gt;</span><span class="normal">data</span><span class="symbol">[</span><span class="number">0</span><span class="symbol">].</span><span class="normal">v_pointer</span><span class="symbol">);</span>
-<span class="keyword">return</span><span class="normal"> <a href="./../glib/glib/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
-
+<div class="informalexample"><pre class="programlisting">
+GObject **object_p = collect_values[0].v_pointer;
+if (!object_p)
+return g_strdup_printf ("object location passed as NULL");
+if (!value-&gt;data[0].v_pointer)
+*object_p = NULL;
+else if (collect_flags &amp; G_VALUE_NOCOPY_CONTENTS) /* always honour */
+*object_p = value-&gt;data[0].v_pointer;
+else
+*object_p = g_object_ref (value-&gt;data[0].v_pointer);
+return NULL;
+</pre></div>
 </td>
 </tr>
 </tbody>
@@ -1579,6 +1479,9 @@ to initialize the type system and assorted other code portions
 system).
 </p>
 <p>
+This function is idempotent.
+</p>
+<p>
 Since version 2.24 this also initializes the thread system
 </p>
 </div>
@@ -1632,6 +1535,9 @@ Note that the messages can also be triggered by setting the
 <p>
 Similar to <a class="link" href="gobject-Type-Information.html#g-type-init" title="g_type_init ()"><code class="function">g_type_init()</code></a>, but additionally sets debug flags.
 </p>
+<p>
+This function is idempotent.
+</p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
@@ -1985,91 +1891,46 @@ of repeatedly calling <code class="function">MY_OBJECT_GET_PRIVATE()</code>.
 </p>
 <p>
 </p>
-<div class="informalexample">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="keyword">typedef</span><span class="normal"> </span><span class="keyword">struct</span><span class="normal"> </span><span class="classname">_MyObject</span><span class="normal">        MyObject</span><span class="symbol">;</span>
-<span class="keyword">typedef</span><span class="normal"> </span><span class="keyword">struct</span><span class="normal"> </span><span class="classname">_MyObjectPrivate</span><span class="normal"> MyObjectPrivate</span><span class="symbol">;</span>
+<div class="informalexample"><pre class="programlisting">
+typedef struct _MyObject        MyObject;
+typedef struct _MyObjectPrivate MyObjectPrivate;
 
-<span class="keyword">struct</span><span class="normal"> </span><span class="classname">_MyObject</span><span class="normal"> </span><span class="cbracket">{</span>
-<span class="normal"> </span><span class="usertype">GObject</span><span class="normal"> parent</span><span class="symbol">;</span>
+struct _MyObject {
+ GObject parent;
 
-<span class="normal"> </span><span class="usertype">MyObjectPrivate</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">priv</span><span class="symbol">;</span>
-<span class="cbracket">}</span><span class="symbol">;</span>
+ MyObjectPrivate *priv;
+};
 
-<span class="keyword">struct</span><span class="normal"> </span><span class="classname">_MyObjectPrivate</span><span class="normal"> </span><span class="cbracket">{</span>
-<span class="normal">  </span><span class="type">int</span><span class="normal"> some_field</span><span class="symbol">;</span>
-<span class="cbracket">}</span><span class="symbol">;</span>
+struct _MyObjectPrivate {
+  int some_field;
+};
 
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
-<span class="function">my_object_class_init</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">MyObjectClass</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">klass</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal">  </span><span class="function"><a href="gobject-Type-Information.html#g-type-class-add-private">g_type_class_add_private</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">klass</span><span class="symbol">,</span><span class="normal"> </span><span class="keyword">sizeof</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">MyObjectPrivate</span><span class="symbol">));</span>
-<span class="cbracket">}</span>
+static void
+my_object_class_init (MyObjectClass *klass)
+{
+  g_type_class_add_private (klass, sizeof (MyObjectPrivate));
+}
 
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
-<span class="function">my_object_init</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">MyObject</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">my_object</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal">  my_object</span><span class="symbol">-&gt;</span><span class="normal">priv </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="gobject-Type-Information.html#G-TYPE-INSTANCE-GET-PRIVATE:CAPS">G_TYPE_INSTANCE_GET_PRIVATE</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">my_object</span><span class="symbol">,</span>
-<span class="normal">                                                 MY_TYPE_OBJECT</span><span class="symbol">,</span>
-<span class="normal">                                                 MyObjectPrivate</span><span class="symbol">);</span>
-<span class="cbracket">}</span>
+static void
+my_object_init (MyObject *my_object)
+{
+  my_object-&gt;priv = G_TYPE_INSTANCE_GET_PRIVATE (my_object,
+                                                 MY_TYPE_OBJECT,
+                                                 MyObjectPrivate);
+}
 
-<span class="keyword">static</span><span class="normal"> </span><span class="type">int</span>
-<span class="function">my_object_get_some_field</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">MyObject</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">my_object</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal">  </span><span class="usertype">MyObjectPrivate</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">priv</span><span class="symbol">;</span>
+static int
+my_object_get_some_field (MyObject *my_object)
+{
+  MyObjectPrivate *priv;
 
-<span class="normal">  </span><span class="function"><a href="./../glib/glib/glib-Warnings-and-Assertions.html#g-return-val-if-fail">g_return_val_if_fail</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">MY_IS_OBJECT</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">my_object</span><span class="symbol">),</span><span class="normal"> </span><span class="number">0</span><span class="symbol">);</span>
+  g_return_val_if_fail (MY_IS_OBJECT (my_object), 0);
 
-<span class="normal">  priv </span><span class="symbol">=</span><span class="normal"> my_object</span><span class="symbol">-&gt;</span><span class="normal">priv</span><span class="symbol">;</span>
-
-<span class="normal">  </span><span class="keyword">return</span><span class="normal"> priv</span><span class="symbol">-&gt;</span><span class="normal">some_field</span><span class="symbol">;</span>
-<span class="cbracket">}</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
+  priv = my_object-&gt;priv;
 
+  return priv-&gt;some_field;
+}
+</pre></div>
 <p>
 </p>
 <div class="variablelist"><table border="0">
@@ -2570,97 +2431,49 @@ initializers:
 </p>
 <p>
 </p>
-<div class="informalexample">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="keyword">typedef</span><span class="normal"> </span><span class="keyword">struct</span><span class="normal"> </span><span class="cbracket">{</span>
-<span class="normal">  </span><span class="usertype">GObjectClass</span><span class="normal"> parent_class</span><span class="symbol">;</span>
-<span class="normal">  </span><span class="usertype">gint</span><span class="normal">         static_integer</span><span class="symbol">;</span>
-<span class="normal">  </span><span class="usertype">gchar</span><span class="normal">       </span><span class="symbol">*</span><span class="normal">dynamic_string</span><span class="symbol">;</span>
-<span class="cbracket">}</span><span class="normal"> TypeAClass</span><span class="symbol">;</span>
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
-<span class="function">type_a_base_class_init</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">TypeAClass</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">class</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal">  class</span><span class="symbol">-&gt;</span><span class="normal">dynamic_string </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="./../glib/glib/glib-String-Utility-Functions.html#g-strdup">g_strdup</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"some string"</span><span class="symbol">);</span>
-<span class="cbracket">}</span>
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
-<span class="function">type_a_base_class_finalize</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">TypeAClass</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">class</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal">  </span><span class="function"><a href="./../glib/glib/glib-Memory-Allocation.html#g-free">g_free</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">class</span><span class="symbol">-&gt;</span><span class="normal">dynamic_string</span><span class="symbol">);</span>
-<span class="cbracket">}</span>
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
-<span class="function">type_a_class_init</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">TypeAClass</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">class</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal">  class</span><span class="symbol">-&gt;</span><span class="normal">static_integer </span><span class="symbol">=</span><span class="normal"> </span><span class="number">42</span><span class="symbol">;</span>
-<span class="cbracket">}</span>
-
-<span class="keyword">typedef</span><span class="normal"> </span><span class="keyword">struct</span><span class="normal"> </span><span class="cbracket">{</span>
-<span class="normal">  </span><span class="usertype">TypeAClass</span><span class="normal">   parent_class</span><span class="symbol">;</span>
-<span class="normal">  </span><span class="usertype">gfloat</span><span class="normal">       static_float</span><span class="symbol">;</span>
-<span class="normal">  </span><span class="usertype">GString</span><span class="normal">     </span><span class="symbol">*</span><span class="normal">dynamic_gstring</span><span class="symbol">;</span>
-<span class="cbracket">}</span><span class="normal"> TypeBClass</span><span class="symbol">;</span>
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
-<span class="function">type_b_base_class_init</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">TypeBClass</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">class</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal">  class</span><span class="symbol">-&gt;</span><span class="normal">dynamic_gstring </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="./../glib/glib/glib-Strings.html#g-string-new">g_string_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"some other string"</span><span class="symbol">);</span>
-<span class="cbracket">}</span>
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
-<span class="function">type_b_base_class_finalize</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">TypeBClass</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">class</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal">  </span><span class="function"><a href="./../glib/glib/glib-Strings.html#g-string-free">g_string_free</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">class</span><span class="symbol">-&gt;</span><span class="normal">dynamic_gstring</span><span class="symbol">);</span>
-<span class="cbracket">}</span>
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
-<span class="function">type_b_class_init</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">TypeBClass</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">class</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal">  class</span><span class="symbol">-&gt;</span><span class="normal">static_float </span><span class="symbol">=</span><span class="normal"> </span><span class="number">3.14159265358979323846</span><span class="symbol">;</span>
-<span class="cbracket">}</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
+<div class="informalexample"><pre class="programlisting">
+typedef struct {
+  GObjectClass parent_class;
+  gint         static_integer;
+  gchar       *dynamic_string;
+} TypeAClass;
+static void
+type_a_base_class_init (TypeAClass *class)
+{
+  class-&gt;dynamic_string = g_strdup ("some string");
+}
+static void
+type_a_base_class_finalize (TypeAClass *class)
+{
+  g_free (class-&gt;dynamic_string);
+}
+static void
+type_a_class_init (TypeAClass *class)
+{
+  class-&gt;static_integer = 42;
+}
 
+typedef struct {
+  TypeAClass   parent_class;
+  gfloat       static_float;
+  GString     *dynamic_gstring;
+} TypeBClass;
+static void
+type_b_base_class_init (TypeBClass *class)
+{
+  class-&gt;dynamic_gstring = g_string_new ("some other string");
+}
+static void
+type_b_base_class_finalize (TypeBClass *class)
+{
+  g_string_free (class-&gt;dynamic_gstring);
+}
+static void
+type_b_class_init (TypeBClass *class)
+{
+  class-&gt;static_float = 3.14159265358979323846;
+}
+</pre></div>
 <p>
 Initialization of TypeBClass will first cause initialization of
 TypeAClass (derived classes reference their parent classes, see
@@ -3756,105 +3569,52 @@ The most general convenience macro for type implementations, on which
 </p>
 <p>
 </p>
-<div class="informalexample">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="gobject-Type-Information.html#G-DEFINE-TYPE-EXTENDED:CAPS">G_DEFINE_TYPE_EXTENDED</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">GtkGadget</span><span class="symbol">,</span>
-<span class="normal">                        gtk_gadget</span><span class="symbol">,</span>
-<span class="normal">                        GTK_TYPE_WIDGET</span><span class="symbol">,</span>
-<span class="normal">                        </span><span class="number">0</span><span class="symbol">,</span>
-<span class="normal">                        </span><span class="function"><a href="gobject-Type-Information.html#G-IMPLEMENT-INTERFACE:CAPS">G_IMPLEMENT_INTERFACE</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">TYPE_GIZMO</span><span class="symbol">,</span>
-<span class="normal">                                               gtk_gadget_gizmo_init</span><span class="symbol">));</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
-
+<div class="informalexample"><pre class="programlisting">
+G_DEFINE_TYPE_EXTENDED (GtkGadget,
+                        gtk_gadget,
+                        GTK_TYPE_WIDGET,
+                        0,
+                        G_IMPLEMENT_INTERFACE (TYPE_GIZMO,
+                                               gtk_gadget_gizmo_init));
+</pre></div>
 <p>
 expands to
 </p>
-<div class="informalexample">
-  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
-    <tbody>
-      <tr>
-        <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="keyword">static</span><span class="normal"> </span><span class="type">void</span><span class="normal">     </span><span class="function">gtk_gadget_init</span><span class="normal">       </span><span class="symbol">(</span><span class="usertype">GtkGadget</span><span class="normal">      </span><span class="symbol">*</span><span class="normal">self</span><span class="symbol">);</span>
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span><span class="normal">     </span><span class="function">gtk_gadget_class_init</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GtkGadgetClass</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">klass</span><span class="symbol">);</span>
-<span class="keyword">static</span><span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> gtk_gadget_parent_class </span><span class="symbol">=</span><span class="normal"> <a href="./../glib/glib/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span>
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span><span class="normal">     </span><span class="function">gtk_gadget_class_intern_init</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">gpointer</span><span class="normal"> klass</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal">  gtk_gadget_parent_class </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="gobject-Type-Information.html#g-type-class-peek-parent">g_type_class_peek_parent</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">klass</span><span class="symbol">);</span>
-<span class="normal">  </span><span class="function">gtk_gadget_class_init</span><span class="normal"> </span><span class="symbol">((</span><span class="normal">GtkGadgetClass</span><span class="symbol">*)</span><span class="normal"> klass</span><span class="symbol">);</span>
-<span class="cbracket">}</span>
-
-<span class="normal"><a href="gobject-Type-Information.html#GType">GType</a></span>
-<span class="function">gtk_gadget_get_type</span><span class="normal"> </span><span class="symbol">(</span><span class="type">void</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal">  </span><span class="keyword">static</span><span class="normal"> </span><span class="keyword">volatile</span><span class="normal"> </span><span class="usertype">gsize</span><span class="normal"> g_define_type_id__volatile </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
-<span class="normal">  </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="function"><a href="./../glib/glib/glib-Threads.html#g-once-init-enter">g_once_init_enter</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">g_define_type_id__volatile</span><span class="symbol">))</span>
-<span class="normal">    </span><span class="cbracket">{</span>
-<span class="normal">      </span><span class="usertype">GType</span><span class="normal"> g_define_type_id </span><span class="symbol">=</span>
-<span class="normal">        </span><span class="function"><a href="gobject-Type-Information.html#g-type-register-static-simple">g_type_register_static_simple</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">GTK_TYPE_WIDGET</span><span class="symbol">,</span>
-<span class="normal">                                       </span><span class="function"><a href="./../glib/glib/glib-Quarks.html#g-intern-static-string">g_intern_static_string</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"GtkGadget"</span><span class="symbol">),</span>
-<span class="normal">                                       </span><span class="keyword">sizeof</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">GtkGadgetClass</span><span class="symbol">),</span>
-<span class="normal">                                       </span><span class="symbol">(</span><span class="normal"><a href="gobject-Type-Information.html#GClassInitFunc">GClassInitFunc</a></span><span class="symbol">)</span><span class="normal"> gtk_gadget_class_intern_init</span><span class="symbol">,</span>
-<span class="normal">                                       </span><span class="keyword">sizeof</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">GtkGadget</span><span class="symbol">),</span>
-<span class="normal">                                       </span><span class="symbol">(</span><span class="normal"><a href="gobject-Type-Information.html#GInstanceInitFunc">GInstanceInitFunc</a></span><span class="symbol">)</span><span class="normal"> gtk_gadget_init</span><span class="symbol">,</span>
-<span class="normal">                                       </span><span class="symbol">(</span><span class="normal"><a href="gobject-Type-Information.html#GTypeFlags">GTypeFlags</a></span><span class="symbol">)</span><span class="normal"> flags</span><span class="symbol">);</span>
-<span class="normal">      </span><span class="cbracket">{</span>
-<span class="normal">        </span><span class="keyword">const</span><span class="normal"> </span><span class="usertype">GInterfaceInfo</span><span class="normal"> g_implement_interface_info </span><span class="symbol">=</span><span class="normal"> </span><span class="cbracket">{</span>
-<span class="normal">          </span><span class="symbol">(</span><span class="normal"><a href="gobject-Type-Information.html#GInterfaceInitFunc">GInterfaceInitFunc</a></span><span class="symbol">)</span><span class="normal"> gtk_gadget_gizmo_init</span>
-<span class="normal">        </span><span class="cbracket">}</span><span class="symbol">;</span>
-<span class="normal">        </span><span class="function"><a href="gobject-Type-Information.html#g-type-add-interface-static">g_type_add_interface_static</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">g_define_type_id</span><span class="symbol">,</span><span class="normal"> TYPE_GIZMO</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&amp;</span><span class="normal">g_implement_interface_info</span><span class="symbol">);</span>
-<span class="normal">      </span><span class="cbracket">}</span>
-<span class="normal">      </span><span class="function"><a href="./../glib/glib/glib-Threads.html#g-once-init-leave">g_once_init_leave</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">g_define_type_id__volatile</span><span class="symbol">,</span><span class="normal"> g_define_type_id</span><span class="symbol">);</span>
-<span class="normal">    </span><span class="cbracket">}</span>
-<span class="normal">  </span><span class="keyword">return</span><span class="normal"> g_define_type_id__volatile</span><span class="symbol">;</span>
-<span class="cbracket">}</span></pre></td>
-      </tr>
-    </tbody>
-  </table>
-</div>
+<div class="informalexample"><pre class="programlisting">
+static void     gtk_gadget_init       (GtkGadget      *self);
+static void     gtk_gadget_class_init (GtkGadgetClass *klass);
+static gpointer gtk_gadget_parent_class = NULL;
+static void     gtk_gadget_class_intern_init (gpointer klass)
+{
+  gtk_gadget_parent_class = g_type_class_peek_parent (klass);
+  gtk_gadget_class_init ((GtkGadgetClass*) klass);
+}
 
+GType
+gtk_gadget_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&amp;g_define_type_id__volatile))
+    {
+      GType g_define_type_id =
+        g_type_register_static_simple (GTK_TYPE_WIDGET,
+                                       g_intern_static_string ("GtkGadget"),
+                                       sizeof (GtkGadgetClass),
+                                       (GClassInitFunc) gtk_gadget_class_intern_init,
+                                       sizeof (GtkGadget),
+                                       (GInstanceInitFunc) gtk_gadget_init,
+                                       (GTypeFlags) flags);
+      {
+        const GInterfaceInfo g_implement_interface_info = {
+          (GInterfaceInitFunc) gtk_gadget_gizmo_init
+        };
+        g_type_add_interface_static (g_define_type_id, TYPE_GIZMO, &amp;g_implement_interface_info);
+      }
+      g_once_init_leave (&amp;g_define_type_id__volatile, g_define_type_id);
+    }
+  return g_define_type_id__volatile;
+}
+</pre></div>
 <p>
 The only pieces which have to be manually provided are the definitions of
 the instance and class structure and the definitions of the instance and