⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.83
Server IP:
157.245.101.34
Server:
Linux skvinfotech-website 5.4.0-131-generic #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 x86_64
Server Software:
Apache/2.4.41 (Ubuntu)
PHP Version:
7.4.33
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
share
/
doc
/
libglib2.0-doc
/
gio
/
View File Name :
ch35s05.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Generating code and docs: GIO Reference Manual</title> <meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> <link rel="home" href="index.html" title="GIO Reference Manual"> <link rel="up" href="ch35.html" title="Migrating to GDBus"> <link rel="prev" href="ch35s04.html" title="Creating proxies for well-known names"> <link rel="next" href="gdbus-org.gtk.GDBus.Example.ObjectManager.Animal.html" title="org.gtk.GDBus.Example.ObjectManager.Animal"> <meta name="generator" content="GTK-Doc V1.32 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle"> <td width="100%" align="left" class="shortcuts"></td> <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td> <td><a accesskey="u" href="ch35.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td> <td><a accesskey="p" href="ch35s04.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td> <td><a accesskey="n" href="gdbus-org.gtk.GDBus.Example.ObjectManager.Animal.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td> </tr></table> <div class="section"> <div class="titlepage"><div><div><h2 class="title" style="clear: both"> <a name="id-1.5.5.6"></a>Generating code and docs</h2></div></div></div> <div class="section"> <div class="titlepage"><div><div><h3 class="title"> <a name="gdbus-example-gdbus-codegen"></a>Using gdbus-codegen</h3></div></div></div> <p> dbus-glib comes with <span class="command"><strong>dbus-binding-tool</strong></span>, which can produce somewhat nice client- and server-side wrappers for a D-Bus interface. With GDBus, <span class="command"><strong>gdbus-codegen</strong></span> is used and like its counterpart, it also takes D-Bus Introspection XML as input: </p> <div class="example"> <a name="gdbus-example-codegen-input"></a><p class="title"><b>Example 2. Example D-Bus Introspection XML</b></p> <div class="example-contents"> <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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78</pre></td> <td class="listing_code"><pre class="programlisting"><span class="o"><</span><span class="n">node</span><span class="o">></span> <span class="o"><!--</span> <span class="n">org</span><span class="p">.</span><span class="n">gtk</span><span class="p">.</span><span class="n">GDBus</span><span class="p">.</span><span class="n">Example</span><span class="p">.</span><span class="n">ObjectManager</span><span class="p">.</span><span class="nl">Animal</span><span class="p">:</span> <span class="err">@</span><span class="nl">short_description</span><span class="p">:</span> <span class="n">Example</span> <span class="n">docs</span> <span class="n">generated</span> <span class="n">by</span> <span class="n">gdbus</span><span class="o">-</span><span class="n">codegen</span> <span class="err">@</span><span class="nl">since</span><span class="p">:</span> <span class="mf">2.30</span> <span class="n">This</span> <span class="n">D</span><span class="o">-</span><span class="n">Bus</span> <span class="n">interface</span> <span class="n">is</span> <span class="n">used</span> <span class="n">to</span> <span class="n">describe</span> <span class="n">a</span> <span class="n">simple</span> <span class="n">animal</span><span class="p">.</span> <span class="o">--></span> <span class="o"><</span><span class="n">interface</span> <span class="n">name</span><span class="o">=</span><span class="s">"org.gtk.GDBus.Example.ObjectManager.Animal"</span><span class="o">></span> <span class="o"><!--</span> <span class="nl">Mood</span><span class="p">:</span> <span class="n">The</span> <span class="n">mood</span> <span class="n">of</span> <span class="n">the</span> <span class="n">animal</span><span class="p">.</span> <span class="err">@</span><span class="nl">since</span><span class="p">:</span> <span class="mf">2.30</span> <span class="n">Known</span> <span class="n">values</span> <span class="k">for</span> <span class="n">this</span> <span class="n">property</span> <span class="n">include</span> <span class="o"><</span><span class="n">literal</span><span class="o">></span><span class="n">Happy</span><span class="o"></</span><span class="n">literal</span><span class="o">></span> <span class="n">and</span> <span class="o"><</span><span class="n">literal</span><span class="o">></span><span class="n">Sad</span><span class="o"></</span><span class="n">literal</span><span class="o">></span><span class="p">.</span> <span class="n">Use</span> <span class="n">the</span> <span class="n">org</span><span class="p">.</span><span class="n">gtk</span><span class="p">.</span><span class="n">GDBus</span><span class="p">.</span><span class="n">Example</span><span class="p">.</span><span class="n">ObjectManager</span><span class="p">.</span><span class="n">Animal</span><span class="p">.</span><span class="n">Poke</span><span class="p">()</span> <span class="n">method</span> <span class="n">to</span> <span class="n">change</span> <span class="n">this</span> <span class="n">property</span><span class="p">.</span> <span class="n">This</span> <span class="n">property</span> <span class="n">influences</span> <span class="n">how</span> <span class="n">often</span> <span class="n">the</span> <span class="n">animal</span> <span class="n">jumps</span> <span class="n">up</span> <span class="n">and</span> <span class="n">down</span><span class="p">,</span> <span class="n">see</span> <span class="n">the</span> <span class="cp">#org.gtk.GDBus.Example.ObjectManager.Animal::Jumped signal</span> <span class="k">for</span> <span class="n">more</span> <span class="n">details</span><span class="p">.</span> <span class="o">--></span> <span class="o"><</span><span class="n">property</span> <span class="n">name</span><span class="o">=</span><span class="s">"Mood"</span> <span class="n">type</span><span class="o">=</span><span class="s">"s"</span> <span class="n">access</span><span class="o">=</span><span class="s">"read"</span><span class="o">/></span> <span class="o"><!--</span> <span class="nl">Poke</span><span class="p">:</span> <span class="err">@</span><span class="nl">make_sad</span><span class="p">:</span> <span class="n">Whether</span> <span class="n">to</span> <span class="n">make</span> <span class="n">the</span> <span class="n">animal</span> <span class="n">sad</span><span class="p">.</span> <span class="err">@</span><span class="nl">make_happy</span><span class="p">:</span> <span class="n">Whether</span> <span class="n">to</span> <span class="n">make</span> <span class="n">the</span> <span class="n">animal</span> <span class="n">happy</span><span class="p">.</span> <span class="err">@</span><span class="nl">since</span><span class="p">:</span> <span class="mf">2.30</span> <span class="n">Method</span> <span class="n">used</span> <span class="n">to</span> <span class="n">changing</span> <span class="n">the</span> <span class="n">mood</span> <span class="n">of</span> <span class="n">the</span> <span class="n">animal</span><span class="p">.</span> <span class="n">See</span> <span class="n">also</span> <span class="n">the</span> <span class="cp">#org.gtk.GDBus.Example.ObjectManager.Animal:Mood property.</span> <span class="o">--></span> <span class="o"><</span><span class="n">method</span> <span class="n">name</span><span class="o">=</span><span class="s">"Poke"</span><span class="o">></span> <span class="o"><</span><span class="n">arg</span> <span class="n">direction</span><span class="o">=</span><span class="s">"in"</span> <span class="n">type</span><span class="o">=</span><span class="s">"b"</span> <span class="n">name</span><span class="o">=</span><span class="s">"make_sad"</span><span class="o">/></span> <span class="o"><</span><span class="n">arg</span> <span class="n">direction</span><span class="o">=</span><span class="s">"in"</span> <span class="n">type</span><span class="o">=</span><span class="s">"b"</span> <span class="n">name</span><span class="o">=</span><span class="s">"make_happy"</span><span class="o">/></span> <span class="o"></</span><span class="n">method</span><span class="o">></span> <span class="o"><!--</span> <span class="nl">Jumped</span><span class="p">:</span> <span class="err">@</span><span class="nl">height</span><span class="p">:</span> <span class="n">Height</span><span class="p">,</span> <span class="n">in</span> <span class="n">meters</span><span class="p">,</span> <span class="n">that</span> <span class="n">the</span> <span class="n">animal</span> <span class="n">jumped</span><span class="p">.</span> <span class="err">@</span><span class="nl">since</span><span class="p">:</span> <span class="mf">2.30</span> <span class="n">Emitted</span> <span class="n">when</span> <span class="n">the</span> <span class="n">animal</span> <span class="n">decides</span> <span class="n">to</span> <span class="n">jump</span><span class="p">.</span> <span class="o">--></span> <span class="o"><</span><span class="n">signal</span> <span class="n">name</span><span class="o">=</span><span class="s">"Jumped"</span><span class="o">></span> <span class="o"><</span><span class="n">arg</span> <span class="n">type</span><span class="o">=</span><span class="s">"d"</span> <span class="n">name</span><span class="o">=</span><span class="s">"height"</span><span class="o">/></span> <span class="o"></</span><span class="n">signal</span><span class="o">></span> <span class="o"><!--</span> <span class="nl">Foo</span><span class="p">:</span> <span class="n">Property</span> <span class="n">with</span> <span class="n">no</span> <span class="o"><</span><span class="n">quote</span><span class="o">></span><span class="n">since</span><span class="o"></</span><span class="n">quote</span><span class="o">></span> <span class="n">annotation</span> <span class="p">(</span><span class="n">should</span> <span class="n">inherit</span> <span class="n">the</span> <span class="mf">2.30</span> <span class="n">from</span> <span class="n">its</span> <span class="n">containing</span> <span class="n">interface</span><span class="p">).</span> <span class="o">--></span> <span class="o"><</span><span class="n">property</span> <span class="n">name</span><span class="o">=</span><span class="s">"Foo"</span> <span class="n">type</span><span class="o">=</span><span class="s">"s"</span> <span class="n">access</span><span class="o">=</span><span class="s">"read"</span><span class="o">/></span> <span class="o"><!--</span> <span class="nl">Bar</span><span class="p">:</span> <span class="err">@</span><span class="nl">since</span><span class="p">:</span> <span class="mf">2.36</span> <span class="n">Property</span> <span class="n">with</span> <span class="n">a</span> <span class="n">later</span> <span class="o"><</span><span class="n">quote</span><span class="o">></span><span class="n">since</span><span class="o"></</span><span class="n">quote</span><span class="o">></span> <span class="n">annotation</span><span class="p">.</span> <span class="o">--></span> <span class="o"><</span><span class="n">property</span> <span class="n">name</span><span class="o">=</span><span class="s">"Bar"</span> <span class="n">type</span><span class="o">=</span><span class="s">"s"</span> <span class="n">access</span><span class="o">=</span><span class="s">"read"</span><span class="o">/></span> <span class="o"></</span><span class="n">interface</span><span class="o">></span> <span class="o"><!--</span> <span class="n">org</span><span class="p">.</span><span class="n">gtk</span><span class="p">.</span><span class="n">GDBus</span><span class="p">.</span><span class="n">Example</span><span class="p">.</span><span class="n">ObjectManager</span><span class="p">.</span><span class="nl">Cat</span><span class="p">:</span> <span class="err">@</span><span class="nl">short_description</span><span class="p">:</span> <span class="n">More</span> <span class="n">example</span> <span class="n">docs</span> <span class="n">generated</span> <span class="n">by</span> <span class="n">gdbus</span><span class="o">-</span><span class="n">codegen</span> <span class="n">This</span> <span class="n">D</span><span class="o">-</span><span class="n">Bus</span> <span class="n">interface</span> <span class="n">is</span> <span class="n">used</span> <span class="n">to</span> <span class="n">describe</span> <span class="n">a</span> <span class="n">cat</span><span class="p">.</span> <span class="n">Right</span> <span class="n">now</span> <span class="n">there</span> <span class="n">are</span> <span class="n">no</span> <span class="n">properties</span><span class="p">,</span> <span class="n">methods</span> <span class="n">or</span> <span class="n">signals</span> <span class="n">associated</span> <span class="n">with</span> <span class="n">this</span> <span class="n">interface</span> <span class="n">so</span> <span class="n">it</span> <span class="n">is</span> <span class="n">essentially</span> <span class="n">a</span> <span class="o"><</span><span class="n">ulink</span> <span class="n">url</span><span class="o">=</span><span class="s">"http://en.wikipedia.org/wiki/Marker_interface_pattern"</span><span class="o">></span><span class="n">Marker</span> <span class="n">Interface</span><span class="o"></</span><span class="n">ulink</span><span class="o">></span><span class="p">.</span> <span class="n">Note</span> <span class="n">that</span> <span class="n">D</span><span class="o">-</span><span class="n">Bus</span> <span class="n">objects</span> <span class="n">implementing</span> <span class="n">this</span> <span class="n">interface</span> <span class="n">also</span> <span class="n">implement</span> <span class="n">the</span> <span class="err">#</span><span class="n">org</span><span class="p">.</span><span class="n">gtk</span><span class="p">.</span><span class="n">GDBus</span><span class="p">.</span><span class="n">Example</span><span class="p">.</span><span class="n">ObjectManager</span><span class="p">.</span><span class="n">Animal</span> <span class="n">interface</span><span class="p">.</span> <span class="o">--></span> <span class="o"><</span><span class="n">interface</span> <span class="n">name</span><span class="o">=</span><span class="s">"org.gtk.GDBus.Example.ObjectManager.Cat"</span><span class="o">></span> <span class="o"></</span><span class="n">interface</span><span class="o">></span> <span class="o"></</span><span class="n">node</span><span class="o">></span></pre></td> </tr> </tbody> </table> </div> </div> <br class="example-break"><p> If this XML is processed like this </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="n">gdbus</span><span class="o">-</span><span class="n">codegen</span> <span class="o">--</span><span class="n">interface</span><span class="o">-</span><span class="n">prefix</span> <span class="n">org</span><span class="p">.</span><span class="n">gtk</span><span class="p">.</span><span class="n">GDBus</span><span class="p">.</span><span class="n">Example</span><span class="p">.</span><span class="n">ObjectManager</span><span class="p">.</span> \ <span class="o">--</span><span class="n">generate</span><span class="o">-</span><span class="n">c</span><span class="o">-</span><span class="n">code</span> <span class="n">generated</span><span class="o">-</span><span class="n">code</span> \ <span class="o">--</span><span class="n">c</span><span class="o">-</span><span class="n">namespace</span> <span class="n">Example</span> \ <span class="o">--</span><span class="n">c</span><span class="o">-</span><span class="n">generate</span><span class="o">-</span><span class="n">object</span><span class="o">-</span><span class="n">manager</span> \ <span class="o">--</span><span class="n">generate</span><span class="o">-</span><span class="n">docbook</span> <span class="n">generated</span><span class="o">-</span><span class="n">docs</span> \ <span class="n">gdbus</span><span class="o">-</span><span class="n">example</span><span class="o">-</span><span class="n">objectmanager</span><span class="p">.</span><span class="n">xml</span></pre></td> </tr> </tbody> </table> </div> <p> then two files <code class="filename">generated-code.h</code> and <code class="filename">generated-code.c</code> are generated. Additionally, two XML files <code class="filename">generated-docs-org.gtk.GDBus.Example.ObjectManager.Animal</code> and <code class="filename">generated-docs-org.gtk.GDBus.Example.ObjectManager.Cat</code> with Docbook XML are generated. For an example of what the docs look like see <a class="link" href="gdbus-org.gtk.GDBus.Example.ObjectManager.Animal.html#gdbus-interface-org-gtk-GDBus-Example-ObjectManager-Animal" title="Description">the Animal D-Bus interface documentation</a>. and <a class="link" href="gdbus-org.gtk.GDBus.Example.ObjectManager.Cat.html#gdbus-interface-org-gtk-GDBus-Example-ObjectManager-Cat" title="Description">the Cat D-Bus interface documentation</a>. </p> <p> While the contents of <code class="filename">generated-code.h</code> and <code class="filename">generated-code.c</code> are best described by the <span class="command"><strong>gdbus-codegen</strong></span> manual page, brief examples of how this generated code can be used can be found in <a class="xref" href="ch35s05.html#gdbus-example-codegen-server" title="Example 3. Server-side application using generated code">Example 3, “Server-side application using generated code”</a> and <a class="xref" href="ch35s05.html#gdbus-example-codegen-client" title="Example 4. Client-side application using generated code">Example 4, “Client-side application using generated code”</a>. Additionally, since the generated code has 100% gtk-doc coverage, see <a class="link" href="ExampleAnimal.html" title="ExampleAnimal"><span class="type">ExampleAnimal</span></a>, <a class="link" href="ExampleCat.html" title="ExampleCat"><span class="type">ExampleCat</span></a>, <a class="link" href="ExampleObject.html" title="ExampleObject"><span class="type">ExampleObject</span></a> and <a class="link" href="ExampleObjectManagerClient.html" title="ExampleObjectManagerClient"><span class="type">ExampleObjectManagerClient</span></a> pages for documentation. </p> <div class="example"> <a name="gdbus-example-codegen-server"></a><p class="title"><b>Example 3. Server-side application using generated code</b></p> <div class="example-contents"> <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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159</pre></td> <td class="listing_code"><pre class="programlisting"><span class="cp">#include</span> <span class="cpf">"gdbus-object-manager-example/objectmanager-gen.h"</span><span class="cp"></span> <span class="cm">/* ---------------------------------------------------------------------------------------------------- */</span> <span class="k">static</span> <span class="n">GDBusObjectManagerServer</span> <span class="o">*</span><span class="n">manager</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="k">static</span> <span class="n">gboolean</span> <span class="nf">on_animal_poke</span> <span class="p">(</span><span class="n">ExampleAnimal</span> <span class="o">*</span><span class="n">animal</span><span class="p">,</span> <span class="n">GDBusMethodInvocation</span> <span class="o">*</span><span class="n">invocation</span><span class="p">,</span> <span class="n">gboolean</span> <span class="n">make_sad</span><span class="p">,</span> <span class="n">gboolean</span> <span class="n">make_happy</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">user_data</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span> <span class="p">((</span><span class="n">make_sad</span> <span class="o">&&</span> <span class="n">make_happy</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span><span class="o">!</span><span class="n">make_sad</span> <span class="o">&&</span> <span class="o">!</span><span class="n">make_happy</span><span class="p">))</span> <span class="p">{</span> <span class="n">g_dbus_method_invocation_return_dbus_error</span> <span class="p">(</span><span class="n">invocation</span><span class="p">,</span> <span class="s">"org.gtk.GDBus.Examples.ObjectManager.Error.Failed"</span><span class="p">,</span> <span class="s">"Exactly one of make_sad or make_happy must be TRUE"</span><span class="p">);</span> <span class="k">goto</span> <span class="n">out</span><span class="p">;</span> <span class="p">}</span> <span class="k">if</span> <span class="p">(</span><span class="n">make_sad</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span><span class="n">g_strcmp0</span> <span class="p">(</span><span class="n">example_animal_get_mood</span> <span class="p">(</span><span class="n">animal</span><span class="p">),</span> <span class="s">"Sad"</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="n">g_dbus_method_invocation_return_dbus_error</span> <span class="p">(</span><span class="n">invocation</span><span class="p">,</span> <span class="s">"org.gtk.GDBus.Examples.ObjectManager.Error.SadAnimalIsSad"</span><span class="p">,</span> <span class="s">"Sad animal is already sad"</span><span class="p">);</span> <span class="k">goto</span> <span class="n">out</span><span class="p">;</span> <span class="p">}</span> <span class="n">example_animal_set_mood</span> <span class="p">(</span><span class="n">animal</span><span class="p">,</span> <span class="s">"Sad"</span><span class="p">);</span> <span class="n">example_animal_complete_poke</span> <span class="p">(</span><span class="n">animal</span><span class="p">,</span> <span class="n">invocation</span><span class="p">);</span> <span class="k">goto</span> <span class="n">out</span><span class="p">;</span> <span class="p">}</span> <span class="k">if</span> <span class="p">(</span><span class="n">make_happy</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span><span class="n">g_strcmp0</span> <span class="p">(</span><span class="n">example_animal_get_mood</span> <span class="p">(</span><span class="n">animal</span><span class="p">),</span> <span class="s">"Happy"</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="n">g_dbus_method_invocation_return_dbus_error</span> <span class="p">(</span><span class="n">invocation</span><span class="p">,</span> <span class="s">"org.gtk.GDBus.Examples.ObjectManager.Error.HappyAnimalIsHappy"</span><span class="p">,</span> <span class="s">"Happy animal is already happy"</span><span class="p">);</span> <span class="k">goto</span> <span class="n">out</span><span class="p">;</span> <span class="p">}</span> <span class="n">example_animal_set_mood</span> <span class="p">(</span><span class="n">animal</span><span class="p">,</span> <span class="s">"Happy"</span><span class="p">);</span> <span class="n">example_animal_complete_poke</span> <span class="p">(</span><span class="n">animal</span><span class="p">,</span> <span class="n">invocation</span><span class="p">);</span> <span class="k">goto</span> <span class="n">out</span><span class="p">;</span> <span class="p">}</span> <span class="n">g_assert_not_reached</span> <span class="p">();</span> <span class="nl">out</span><span class="p">:</span> <span class="k">return</span> <span class="n">TRUE</span><span class="p">;</span> <span class="cm">/* to indicate that the method was handled */</span> <span class="p">}</span> <span class="k">static</span> <span class="kt">void</span> <span class="nf">on_bus_acquired</span> <span class="p">(</span><span class="n">GDBusConnection</span> <span class="o">*</span><span class="n">connection</span><span class="p">,</span> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">user_data</span><span class="p">)</span> <span class="p">{</span> <span class="n">ExampleObjectSkeleton</span> <span class="o">*</span><span class="n">object</span><span class="p">;</span> <span class="n">guint</span> <span class="n">n</span><span class="p">;</span> <span class="n">g_print</span> <span class="p">(</span><span class="s">"Acquired a message bus connection</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> <span class="cm">/* Create a new org.freedesktop.DBus.ObjectManager rooted at /example/Animals */</span> <span class="n">manager</span> <span class="o">=</span> <span class="n">g_dbus_object_manager_server_new</span> <span class="p">(</span><span class="s">"/example/Animals"</span><span class="p">);</span> <span class="k">for</span> <span class="p">(</span><span class="n">n</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">n</span> <span class="o"><</span> <span class="mi">10</span><span class="p">;</span> <span class="n">n</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">s</span><span class="p">;</span> <span class="n">ExampleAnimal</span> <span class="o">*</span><span class="n">animal</span><span class="p">;</span> <span class="cm">/* Create a new D-Bus object at the path /example/Animals/N where N is 000..009 */</span> <span class="n">s</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">"/example/Animals/%03d"</span><span class="p">,</span> <span class="n">n</span><span class="p">);</span> <span class="n">object</span> <span class="o">=</span> <span class="n">example_object_skeleton_new</span> <span class="p">(</span><span class="n">s</span><span class="p">);</span> <span class="n">g_free</span> <span class="p">(</span><span class="n">s</span><span class="p">);</span> <span class="cm">/* Make the newly created object export the interface</span> <span class="cm"> * org.gtk.GDBus.Example.ObjectManager.Animal (note</span> <span class="cm"> * that @object takes its own reference to @animal).</span> <span class="cm"> */</span> <span class="n">animal</span> <span class="o">=</span> <span class="n">example_animal_skeleton_new</span> <span class="p">();</span> <span class="n">example_animal_set_mood</span> <span class="p">(</span><span class="n">animal</span><span class="p">,</span> <span class="s">"Happy"</span><span class="p">);</span> <span class="n">example_object_skeleton_set_animal</span> <span class="p">(</span><span class="n">object</span><span class="p">,</span> <span class="n">animal</span><span class="p">);</span> <span class="n">g_object_unref</span> <span class="p">(</span><span class="n">animal</span><span class="p">);</span> <span class="cm">/* Cats are odd animals - so some of our objects implement the</span> <span class="cm"> * org.gtk.GDBus.Example.ObjectManager.Cat interface in addition</span> <span class="cm"> * to the .Animal interface</span> <span class="cm"> */</span> <span class="k">if</span> <span class="p">(</span><span class="n">n</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span> <span class="n">ExampleCat</span> <span class="o">*</span><span class="n">cat</span><span class="p">;</span> <span class="n">cat</span> <span class="o">=</span> <span class="n">example_cat_skeleton_new</span> <span class="p">();</span> <span class="n">example_object_skeleton_set_cat</span> <span class="p">(</span><span class="n">object</span><span class="p">,</span> <span class="n">cat</span><span class="p">);</span> <span class="n">g_object_unref</span> <span class="p">(</span><span class="n">cat</span><span class="p">);</span> <span class="p">}</span> <span class="cm">/* Handle Poke() D-Bus method invocations on the .Animal interface */</span> <span class="n">g_signal_connect</span> <span class="p">(</span><span class="n">animal</span><span class="p">,</span> <span class="s">"handle-poke"</span><span class="p">,</span> <span class="n">G_CALLBACK</span> <span class="p">(</span><span class="n">on_animal_poke</span><span class="p">),</span> <span class="nb">NULL</span><span class="p">);</span> <span class="cm">/* user_data */</span> <span class="cm">/* Export the object (@manager takes its own reference to @object) */</span> <span class="n">g_dbus_object_manager_server_export</span> <span class="p">(</span><span class="n">manager</span><span class="p">,</span> <span class="n">G_DBUS_OBJECT_SKELETON</span> <span class="p">(</span><span class="n">object</span><span class="p">));</span> <span class="n">g_object_unref</span> <span class="p">(</span><span class="n">object</span><span class="p">);</span> <span class="p">}</span> <span class="cm">/* Export all objects */</span> <span class="n">g_dbus_object_manager_server_set_connection</span> <span class="p">(</span><span class="n">manager</span><span class="p">,</span> <span class="n">connection</span><span class="p">);</span> <span class="p">}</span> <span class="k">static</span> <span class="kt">void</span> <span class="nf">on_name_acquired</span> <span class="p">(</span><span class="n">GDBusConnection</span> <span class="o">*</span><span class="n">connection</span><span class="p">,</span> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">user_data</span><span class="p">)</span> <span class="p">{</span> <span class="n">g_print</span> <span class="p">(</span><span class="s">"Acquired the name %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">name</span><span class="p">);</span> <span class="p">}</span> <span class="k">static</span> <span class="kt">void</span> <span class="nf">on_name_lost</span> <span class="p">(</span><span class="n">GDBusConnection</span> <span class="o">*</span><span class="n">connection</span><span class="p">,</span> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">user_data</span><span class="p">)</span> <span class="p">{</span> <span class="n">g_print</span> <span class="p">(</span><span class="s">"Lost the name %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">name</span><span class="p">);</span> <span class="p">}</span> <span class="n">gint</span> <span class="nf">main</span> <span class="p">(</span><span class="n">gint</span> <span class="n">argc</span><span class="p">,</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">argv</span><span class="p">[])</span> <span class="p">{</span> <span class="n">GMainLoop</span> <span class="o">*</span><span class="n">loop</span><span class="p">;</span> <span class="n">guint</span> <span class="n">id</span><span class="p">;</span> <span class="n">loop</span> <span class="o">=</span> <span class="n">g_main_loop_new</span> <span class="p">(</span><span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> <span class="n">id</span> <span class="o">=</span> <span class="n">g_bus_own_name</span> <span class="p">(</span><span class="n">G_BUS_TYPE_SESSION</span><span class="p">,</span> <span class="s">"org.gtk.GDBus.Examples.ObjectManager"</span><span class="p">,</span> <span class="n">G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT</span> <span class="o">|</span> <span class="n">G_BUS_NAME_OWNER_FLAGS_REPLACE</span><span class="p">,</span> <span class="n">on_bus_acquired</span><span class="p">,</span> <span class="n">on_name_acquired</span><span class="p">,</span> <span class="n">on_name_lost</span><span class="p">,</span> <span class="n">loop</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> <span class="n">g_main_loop_run</span> <span class="p">(</span><span class="n">loop</span><span class="p">);</span> <span class="n">g_bus_unown_name</span> <span class="p">(</span><span class="n">id</span><span class="p">);</span> <span class="n">g_main_loop_unref</span> <span class="p">(</span><span class="n">loop</span><span class="p">);</span> <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> <span class="p">}</span></pre></td> </tr> </tbody> </table> </div> </div> <br class="example-break"><div class="example"> <a name="gdbus-example-codegen-client"></a><p class="title"><b>Example 4. Client-side application using generated code</b></p> <div class="example-contents"> <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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167</pre></td> <td class="listing_code"><pre class="programlisting"><span class="cp">#include</span> <span class="cpf">"gdbus-object-manager-example/objectmanager-gen.h"</span><span class="cp"></span> <span class="cm">/* ---------------------------------------------------------------------------------------------------- */</span> <span class="k">static</span> <span class="kt">void</span> <span class="nf">print_objects</span> <span class="p">(</span><span class="n">GDBusObjectManager</span> <span class="o">*</span><span class="n">manager</span><span class="p">)</span> <span class="p">{</span> <span class="n">GList</span> <span class="o">*</span><span class="n">objects</span><span class="p">;</span> <span class="n">GList</span> <span class="o">*</span><span class="n">l</span><span class="p">;</span> <span class="n">g_print</span> <span class="p">(</span><span class="s">"Object manager at %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">g_dbus_object_manager_get_object_path</span> <span class="p">(</span><span class="n">manager</span><span class="p">));</span> <span class="n">objects</span> <span class="o">=</span> <span class="n">g_dbus_object_manager_get_objects</span> <span class="p">(</span><span class="n">manager</span><span class="p">);</span> <span class="k">for</span> <span class="p">(</span><span class="n">l</span> <span class="o">=</span> <span class="n">objects</span><span class="p">;</span> <span class="n">l</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="n">l</span> <span class="o">=</span> <span class="n">l</span><span class="o">-></span><span class="n">next</span><span class="p">)</span> <span class="p">{</span> <span class="n">ExampleObject</span> <span class="o">*</span><span class="n">object</span> <span class="o">=</span> <span class="n">EXAMPLE_OBJECT</span> <span class="p">(</span><span class="n">l</span><span class="o">-></span><span class="n">data</span><span class="p">);</span> <span class="n">GList</span> <span class="o">*</span><span class="n">interfaces</span><span class="p">;</span> <span class="n">GList</span> <span class="o">*</span><span class="n">ll</span><span class="p">;</span> <span class="n">g_print</span> <span class="p">(</span><span class="s">" - Object at %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">g_dbus_object_get_object_path</span> <span class="p">(</span><span class="n">G_DBUS_OBJECT</span> <span class="p">(</span><span class="n">object</span><span class="p">)));</span> <span class="n">interfaces</span> <span class="o">=</span> <span class="n">g_dbus_object_get_interfaces</span> <span class="p">(</span><span class="n">G_DBUS_OBJECT</span> <span class="p">(</span><span class="n">object</span><span class="p">));</span> <span class="k">for</span> <span class="p">(</span><span class="n">ll</span> <span class="o">=</span> <span class="n">interfaces</span><span class="p">;</span> <span class="n">ll</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="n">ll</span> <span class="o">=</span> <span class="n">ll</span><span class="o">-></span><span class="n">next</span><span class="p">)</span> <span class="p">{</span> <span class="n">GDBusInterface</span> <span class="o">*</span><span class="n">interface</span> <span class="o">=</span> <span class="n">G_DBUS_INTERFACE</span> <span class="p">(</span><span class="n">ll</span><span class="o">-></span><span class="n">data</span><span class="p">);</span> <span class="n">g_print</span> <span class="p">(</span><span class="s">" - Interface %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">g_dbus_interface_get_info</span> <span class="p">(</span><span class="n">interface</span><span class="p">)</span><span class="o">-></span><span class="n">name</span><span class="p">);</span> <span class="cm">/* Note that @interface is really a GDBusProxy instance - and additionally also</span> <span class="cm"> * an ExampleAnimal or ExampleCat instance - either of these can be used to</span> <span class="cm"> * invoke methods on the remote object. For example, the generated function</span> <span class="cm"> *</span> <span class="cm"> * void example_animal_call_poke_sync (ExampleAnimal *proxy,</span> <span class="cm"> * gboolean make_sad,</span> <span class="cm"> * gboolean make_happy,</span> <span class="cm"> * GCancellable *cancellable,</span> <span class="cm"> * GError **error);</span> <span class="cm"> *</span> <span class="cm"> * can be used to call the Poke() D-Bus method on the .Animal interface.</span> <span class="cm"> * Additionally, the generated function</span> <span class="cm"> *</span> <span class="cm"> * const gchar *example_animal_get_mood (ExampleAnimal *object);</span> <span class="cm"> *</span> <span class="cm"> * can be used to get the value of the :Mood property.</span> <span class="cm"> */</span> <span class="p">}</span> <span class="n">g_list_free_full</span> <span class="p">(</span><span class="n">interfaces</span><span class="p">,</span> <span class="n">g_object_unref</span><span class="p">);</span> <span class="p">}</span> <span class="n">g_list_free_full</span> <span class="p">(</span><span class="n">objects</span><span class="p">,</span> <span class="n">g_object_unref</span><span class="p">);</span> <span class="p">}</span> <span class="k">static</span> <span class="kt">void</span> <span class="nf">on_object_added</span> <span class="p">(</span><span class="n">GDBusObjectManager</span> <span class="o">*</span><span class="n">manager</span><span class="p">,</span> <span class="n">GDBusObject</span> <span class="o">*</span><span class="n">object</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">user_data</span><span class="p">)</span> <span class="p">{</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">owner</span><span class="p">;</span> <span class="n">owner</span> <span class="o">=</span> <span class="n">g_dbus_object_manager_client_get_name_owner</span> <span class="p">(</span><span class="n">G_DBUS_OBJECT_MANAGER_CLIENT</span> <span class="p">(</span><span class="n">manager</span><span class="p">));</span> <span class="n">g_print</span> <span class="p">(</span><span class="s">"Added object at %s (owner %s)</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">g_dbus_object_get_object_path</span> <span class="p">(</span><span class="n">object</span><span class="p">),</span> <span class="n">owner</span><span class="p">);</span> <span class="n">g_free</span> <span class="p">(</span><span class="n">owner</span><span class="p">);</span> <span class="p">}</span> <span class="k">static</span> <span class="kt">void</span> <span class="nf">on_object_removed</span> <span class="p">(</span><span class="n">GDBusObjectManager</span> <span class="o">*</span><span class="n">manager</span><span class="p">,</span> <span class="n">GDBusObject</span> <span class="o">*</span><span class="n">object</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">user_data</span><span class="p">)</span> <span class="p">{</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">owner</span><span class="p">;</span> <span class="n">owner</span> <span class="o">=</span> <span class="n">g_dbus_object_manager_client_get_name_owner</span> <span class="p">(</span><span class="n">G_DBUS_OBJECT_MANAGER_CLIENT</span> <span class="p">(</span><span class="n">manager</span><span class="p">));</span> <span class="n">g_print</span> <span class="p">(</span><span class="s">"Removed object at %s (owner %s)</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">g_dbus_object_get_object_path</span> <span class="p">(</span><span class="n">object</span><span class="p">),</span> <span class="n">owner</span><span class="p">);</span> <span class="n">g_free</span> <span class="p">(</span><span class="n">owner</span><span class="p">);</span> <span class="p">}</span> <span class="k">static</span> <span class="kt">void</span> <span class="nf">on_notify_name_owner</span> <span class="p">(</span><span class="n">GObject</span> <span class="o">*</span><span class="n">object</span><span class="p">,</span> <span class="n">GParamSpec</span> <span class="o">*</span><span class="n">pspec</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">user_data</span><span class="p">)</span> <span class="p">{</span> <span class="n">GDBusObjectManagerClient</span> <span class="o">*</span><span class="n">manager</span> <span class="o">=</span> <span class="n">G_DBUS_OBJECT_MANAGER_CLIENT</span> <span class="p">(</span><span class="n">object</span><span class="p">);</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">name_owner</span><span class="p">;</span> <span class="n">name_owner</span> <span class="o">=</span> <span class="n">g_dbus_object_manager_client_get_name_owner</span> <span class="p">(</span><span class="n">manager</span><span class="p">);</span> <span class="n">g_print</span> <span class="p">(</span><span class="s">"name-owner: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">name_owner</span><span class="p">);</span> <span class="n">g_free</span> <span class="p">(</span><span class="n">name_owner</span><span class="p">);</span> <span class="p">}</span> <span class="k">static</span> <span class="kt">void</span> <span class="nf">on_interface_proxy_properties_changed</span> <span class="p">(</span><span class="n">GDBusObjectManagerClient</span> <span class="o">*</span><span class="n">manager</span><span class="p">,</span> <span class="n">GDBusObjectProxy</span> <span class="o">*</span><span class="n">object_proxy</span><span class="p">,</span> <span class="n">GDBusProxy</span> <span class="o">*</span><span class="n">interface_proxy</span><span class="p">,</span> <span class="n">GVariant</span> <span class="o">*</span><span class="n">changed_properties</span><span class="p">,</span> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="k">const</span> <span class="o">*</span><span class="n">invalidated_properties</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">user_data</span><span class="p">)</span> <span class="p">{</span> <span class="n">GVariantIter</span> <span class="n">iter</span><span class="p">;</span> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">key</span><span class="p">;</span> <span class="n">GVariant</span> <span class="o">*</span><span class="n">value</span><span class="p">;</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">s</span><span class="p">;</span> <span class="n">g_print</span> <span class="p">(</span><span class="s">"Properties Changed on %s:</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">g_dbus_object_get_object_path</span> <span class="p">(</span><span class="n">G_DBUS_OBJECT</span> <span class="p">(</span><span class="n">object_proxy</span><span class="p">)));</span> <span class="n">g_variant_iter_init</span> <span class="p">(</span><span class="o">&</span><span class="n">iter</span><span class="p">,</span> <span class="n">changed_properties</span><span class="p">);</span> <span class="k">while</span> <span class="p">(</span><span class="n">g_variant_iter_next</span> <span class="p">(</span><span class="o">&</span><span class="n">iter</span><span class="p">,</span> <span class="s">"{&sv}"</span><span class="p">,</span> <span class="o">&</span><span class="n">key</span><span class="p">,</span> <span class="o">&</span><span class="n">value</span><span class="p">))</span> <span class="p">{</span> <span class="n">s</span> <span class="o">=</span> <span class="n">g_variant_print</span> <span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> <span class="n">g_print</span> <span class="p">(</span><span class="s">" %s -> %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">s</span><span class="p">);</span> <span class="n">g_variant_unref</span> <span class="p">(</span><span class="n">value</span><span class="p">);</span> <span class="n">g_free</span> <span class="p">(</span><span class="n">s</span><span class="p">);</span> <span class="p">}</span> <span class="p">}</span> <span class="n">gint</span> <span class="nf">main</span> <span class="p">(</span><span class="n">gint</span> <span class="n">argc</span><span class="p">,</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">argv</span><span class="p">[])</span> <span class="p">{</span> <span class="n">GDBusObjectManager</span> <span class="o">*</span><span class="n">manager</span><span class="p">;</span> <span class="n">GMainLoop</span> <span class="o">*</span><span class="n">loop</span><span class="p">;</span> <span class="n">GError</span> <span class="o">*</span><span class="n">error</span><span class="p">;</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">name_owner</span><span class="p">;</span> <span class="n">manager</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="n">loop</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="n">loop</span> <span class="o">=</span> <span class="n">g_main_loop_new</span> <span class="p">(</span><span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> <span class="n">error</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="n">manager</span> <span class="o">=</span> <span class="n">example_object_manager_client_new_for_bus_sync</span> <span class="p">(</span><span class="n">G_BUS_TYPE_SESSION</span><span class="p">,</span> <span class="n">G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE</span><span class="p">,</span> <span class="s">"org.gtk.GDBus.Examples.ObjectManager"</span><span class="p">,</span> <span class="s">"/example/Animals"</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="cm">/* GCancellable */</span> <span class="o">&</span><span class="n">error</span><span class="p">);</span> <span class="k">if</span> <span class="p">(</span><span class="n">manager</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> <span class="n">g_printerr</span> <span class="p">(</span><span class="s">"Error getting object manager client: %s"</span><span class="p">,</span> <span class="n">error</span><span class="o">-></span><span class="n">message</span><span class="p">);</span> <span class="n">g_error_free</span> <span class="p">(</span><span class="n">error</span><span class="p">);</span> <span class="k">goto</span> <span class="n">out</span><span class="p">;</span> <span class="p">}</span> <span class="n">name_owner</span> <span class="o">=</span> <span class="n">g_dbus_object_manager_client_get_name_owner</span> <span class="p">(</span><span class="n">G_DBUS_OBJECT_MANAGER_CLIENT</span> <span class="p">(</span><span class="n">manager</span><span class="p">));</span> <span class="n">g_print</span> <span class="p">(</span><span class="s">"name-owner: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">name_owner</span><span class="p">);</span> <span class="n">g_free</span> <span class="p">(</span><span class="n">name_owner</span><span class="p">);</span> <span class="n">print_objects</span> <span class="p">(</span><span class="n">manager</span><span class="p">);</span> <span class="n">g_signal_connect</span> <span class="p">(</span><span class="n">manager</span><span class="p">,</span> <span class="s">"notify::name-owner"</span><span class="p">,</span> <span class="n">G_CALLBACK</span> <span class="p">(</span><span class="n">on_notify_name_owner</span><span class="p">),</span> <span class="nb">NULL</span><span class="p">);</span> <span class="n">g_signal_connect</span> <span class="p">(</span><span class="n">manager</span><span class="p">,</span> <span class="s">"object-added"</span><span class="p">,</span> <span class="n">G_CALLBACK</span> <span class="p">(</span><span class="n">on_object_added</span><span class="p">),</span> <span class="nb">NULL</span><span class="p">);</span> <span class="n">g_signal_connect</span> <span class="p">(</span><span class="n">manager</span><span class="p">,</span> <span class="s">"object-removed"</span><span class="p">,</span> <span class="n">G_CALLBACK</span> <span class="p">(</span><span class="n">on_object_removed</span><span class="p">),</span> <span class="nb">NULL</span><span class="p">);</span> <span class="n">g_signal_connect</span> <span class="p">(</span><span class="n">manager</span><span class="p">,</span> <span class="s">"interface-proxy-properties-changed"</span><span class="p">,</span> <span class="n">G_CALLBACK</span> <span class="p">(</span><span class="n">on_interface_proxy_properties_changed</span><span class="p">),</span> <span class="nb">NULL</span><span class="p">);</span> <span class="n">g_main_loop_run</span> <span class="p">(</span><span class="n">loop</span><span class="p">);</span> <span class="nl">out</span><span class="p">:</span> <span class="k">if</span> <span class="p">(</span><span class="n">manager</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="n">g_object_unref</span> <span class="p">(</span><span class="n">manager</span><span class="p">);</span> <span class="k">if</span> <span class="p">(</span><span class="n">loop</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="n">g_main_loop_unref</span> <span class="p">(</span><span class="n">loop</span><span class="p">);</span> <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> <span class="p">}</span></pre></td> </tr> </tbody> </table> </div> </div> <br class="example-break"> </div> </div> <div class="footer"> <hr>Generated by GTK-Doc V1.32</div> </body> </html>