83
77
The type is initially introduced (usually upon loading the module
84
78
the first time, or by your main application that knows what modules
85
79
introduces what types), like this:
86
<literal>new_type_id = g_type_register_dynamic (parent_type_id,
80
<informalexample><programlisting>
81
new_type_id = g_type_register_dynamic (parent_type_id,
85
</programlisting></informalexample>
91
86
where <literal>new_type_plugin</literal> is an implementation of the
92
87
<link linkend="GTypePlugin"><type>GTypePlugin</type></link> interface.
95
90
The type's implementation is referenced, e.g. through
96
<link linkend="g-type-class-ref"><function>g_type_class_ref()</function></link> or through <link linkend="g-type-create-instance"><function>g_type_create_instance()</function></link> (this is
97
being called by <link linkend="g-object-new"><function>g_object_new()</function></link>) or through one of the above done on
91
<link linkend="g-type-class-ref"><function>g_type_class_ref()</function></link> or through <link linkend="g-type-create-instance"><function>g_type_create_instance()</function></link> (this is
92
being called by <link linkend="g-object-new"><function>g_object_new()</function></link>) or through one of the above done on
98
93
a type derived from <literal>new_type_id</literal>.
101
96
This causes the type system to load the type's implementation by calling
102
<link linkend="g-type-plugin-use"><function>g_type_plugin_use()</function></link> and <link linkend="g-type-plugin-complete-type-info"><function>g_type_plugin_complete_type_info()</function></link> on
97
<link linkend="g-type-plugin-use"><function>g_type_plugin_use()</function></link> and <link linkend="g-type-plugin-complete-type-info"><function>g_type_plugin_complete_type_info()</function></link> on
103
98
<literal>new_type_plugin</literal>.
104
99
</para></listitem>
106
101
At some point the type's implementation isn't required anymore, e.g. after
107
102
<link linkend="g-type-class-unref"><function>g_type_class_unref()</function></link> or <link linkend="g-type-free-instance"><function>g_type_free_instance()</function></link> (called when the reference
108
103
count of an instance drops to zero).
109
104
</para></listitem>
111
106
This causes the type system to throw away the information retrieved from
112
107
<link linkend="g-type-plugin-complete-type-info"><function>g_type_plugin_complete_type_info()</function></link> and then it calls
113
108
<link linkend="g-type-plugin-unuse"><function>g_type_plugin_unuse()</function></link> on <literal>new_type_plugin</literal>.
114
109
</para></listitem>
116
111
Things may repeat from the second step.
117
112
</para></listitem>
121
So basically, you need to implement a <link linkend="GTypePlugin"><type>GTypePlugin</type></link> type that carries a
122
use_count, once use_count goes from zero to one, you need to load the
123
implementation to successfully handle the upcoming
124
<link linkend="g-type-plugin-complete-type-info"><function>g_type_plugin_complete_type_info()</function></link> call. Later, maybe after succeeding
125
use/unuse calls, once use_count drops to zero, you can unload the
126
implementation again. The type system makes sure to call <link linkend="g-type-plugin-use"><function>g_type_plugin_use()</function></link>
127
and <link linkend="g-type-plugin-complete-type-info"><function>g_type_plugin_complete_type_info()</function></link> again when the type is needed again.
116
So basically, you need to implement a <link linkend="GTypePlugin"><type>GTypePlugin</type></link> type that
117
carries a use_count, once use_count goes from zero to one, you need
118
to load the implementation to successfully handle the upcoming
119
<link linkend="g-type-plugin-complete-type-info"><function>g_type_plugin_complete_type_info()</function></link> call. Later, maybe after
120
succeeding use/unuse calls, once use_count drops to zero, you can
121
unload the implementation again. The type system makes sure to call
122
<link linkend="g-type-plugin-use"><function>g_type_plugin_use()</function></link> and <link linkend="g-type-plugin-complete-type-info"><function>g_type_plugin_complete_type_info()</function></link> again
123
when the type is needed again.
130
<link linkend="GTypeModule"><type>GTypeModule</type></link> is an implementation of <link linkend="GTypePlugin"><type>GTypePlugin</type></link> that already implements
131
most of this except for the actual module loading and unloading. It even
132
handles multiple registered types per module.
126
<link linkend="GTypeModule"><type>GTypeModule</type></link> is an implementation of <link linkend="GTypePlugin"><type>GTypePlugin</type></link> that already
127
implements most of this except for the actual module loading and
128
unloading. It even handles multiple registered types per module.</para>
136
<refsect1 role="details">
133
<refsect1 id="GTypePlugin.details" role="details">
137
134
<title role="details.title">Details</title>
139
<title><anchor id="GTypePlugin-struct" role="struct"/>GTypePlugin</title>
140
<indexterm><primary>GTypePlugin</primary></indexterm><programlisting>typedef struct _GTypePlugin GTypePlugin;</programlisting>
135
<refsect2 id="GTypePlugin-struct" role="struct">
136
<title>GTypePlugin</title>
137
<indexterm zone="GTypePlugin-struct"><primary sortas="GTypePlugin">GTypePlugin</primary></indexterm><programlisting>typedef struct _GTypePlugin GTypePlugin;</programlisting>
142
139
The <structname>GTypePlugin</structname> typedef is used as a placeholder
143
140
for objects that implement the <structname>GTypePlugin</structname>
145
143
</para></refsect2>
147
<title><anchor id="GTypePluginClass" role="struct"/>GTypePluginClass</title>
148
<indexterm><primary>GTypePluginClass</primary></indexterm><programlisting>typedef struct {
144
<refsect2 id="GTypePluginClass" role="struct">
145
<title>GTypePluginClass</title>
146
<indexterm zone="GTypePluginClass"><primary sortas="GTypePluginClass">GTypePluginClass</primary></indexterm><programlisting>typedef struct {
149
147
GTypePluginUse use_plugin;
150
148
GTypePluginUnuse unuse_plugin;
151
149
GTypePluginCompleteTypeInfo complete_type_info;
154
152
</programlisting>
156
154
The <link linkend="GTypePlugin"><type>GTypePlugin</type></link> interface is used by the type system in order to handle
157
the lifecycle of dynamically loaded types.
155
the lifecycle of dynamically loaded types.</para>
158
157
</para><variablelist role="struct">
160
<term><link linkend="GTypePluginUse">GTypePluginUse</link> <structfield>use_plugin</structfield>;</term>
161
<listitem><simpara>Increases the use count of the plugin.
162
</simpara></listitem>
165
<term><link linkend="GTypePluginUnuse">GTypePluginUnuse</link> <structfield>unuse_plugin</structfield>;</term>
166
<listitem><simpara>Decreases the use count of the plugin.
167
</simpara></listitem>
170
<term><link linkend="GTypePluginCompleteTypeInfo">GTypePluginCompleteTypeInfo</link> <structfield>complete_type_info</structfield>;</term>
171
<listitem><simpara>Fills in the <link linkend="GTypeInfo"><type>GTypeInfo</type></link> and
172
<link linkend="GTypeValueTable"><type>GTypeValueTable</type></link> structs for the type. The structs are initialized
173
with <literal>memset(s, 0, sizeof (s))</literal> before calling
175
</simpara></listitem>
178
<term><link linkend="GTypePluginCompleteInterfaceInfo">GTypePluginCompleteInterfaceInfo</link> <structfield>complete_interface_info</structfield>;</term>
179
<listitem><simpara>Fills in missing parts of the <link linkend="GInterfaceInfo"><type>GInterfaceInfo</type></link>
180
for the interface. The structs is initialized with
181
<literal>memset(s, 0, sizeof (s))</literal> before calling
159
<term><link linkend="GTypePluginUse">GTypePluginUse</link> <structfield>use_plugin</structfield>;</term>
160
<listitem><simpara> Increases the use count of the plugin.
161
</simpara></listitem>
164
<term><link linkend="GTypePluginUnuse">GTypePluginUnuse</link> <structfield>unuse_plugin</structfield>;</term>
165
<listitem><simpara> Decreases the use count of the plugin.
166
</simpara></listitem>
169
<term><link linkend="GTypePluginCompleteTypeInfo">GTypePluginCompleteTypeInfo</link> <structfield>complete_type_info</structfield>;</term>
170
<listitem><simpara> Fills in the <link linkend="GTypeInfo"><type>GTypeInfo</type></link> and
171
<link linkend="GTypeValueTable"><type>GTypeValueTable</type></link> structs for the type. The structs are initialized
172
with <literal>memset(s, 0, sizeof (s))</literal> before calling
174
</simpara></listitem>
177
<term><link linkend="GTypePluginCompleteInterfaceInfo">GTypePluginCompleteInterfaceInfo</link> <structfield>complete_interface_info</structfield>;</term>
178
<listitem><simpara> Fills in missing parts of the <link linkend="GInterfaceInfo"><type>GInterfaceInfo</type></link>
179
for the interface. The structs is initialized with
180
<literal>memset(s, 0, sizeof (s))</literal> before calling
184
182
</simpara></listitem>
186
184
</variablelist></refsect2>
188
<title><anchor id="GTypePluginUse" role="function"/>GTypePluginUse ()</title>
189
<indexterm><primary>GTypePluginUse</primary></indexterm><programlisting><link linkend="void">void</link> (*GTypePluginUse) (<link linkend="GTypePlugin">GTypePlugin</link> *plugin);</programlisting>
185
<refsect2 id="GTypePluginUse" role="function">
186
<title>GTypePluginUse ()</title>
187
<indexterm zone="GTypePluginUse"><primary sortas="GTypePluginUse">GTypePluginUse</primary></indexterm><programlisting><link linkend="void">void</link> (*GTypePluginUse) (<link linkend="GTypePlugin">GTypePlugin</link> *plugin);</programlisting>
191
189
The type of the <parameter>use_plugin</parameter> function of <link linkend="GTypePluginClass"><type>GTypePluginClass</type></link>, which gets called
192
to increase the use count of <parameter>plugin</parameter>.
193
</para><variablelist role="params">
194
<varlistentry><term><parameter>plugin</parameter> :</term>
195
<listitem><simpara>the <link linkend="GTypePlugin"><type>GTypePlugin</type></link> whose use count should be increased
198
</simpara></listitem></varlistentry>
199
</variablelist></refsect2>
201
<title><anchor id="GTypePluginUnuse" role="function"/>GTypePluginUnuse ()</title>
202
<indexterm><primary>GTypePluginUnuse</primary></indexterm><programlisting><link linkend="void">void</link> (*GTypePluginUnuse) (<link linkend="GTypePlugin">GTypePlugin</link> *plugin);</programlisting>
204
The type of the <parameter>unuse_plugin</parameter> function of <link linkend="GTypePluginClass"><type>GTypePluginClass</type></link>.
205
</para><variablelist role="params">
206
<varlistentry><term><parameter>plugin</parameter> :</term>
207
<listitem><simpara>the <link linkend="GTypePlugin"><type>GTypePlugin</type></link> whose use count should be decreased
210
</simpara></listitem></varlistentry>
211
</variablelist></refsect2>
213
<title><anchor id="GTypePluginCompleteTypeInfo" role="function"/>GTypePluginCompleteTypeInfo ()</title>
214
<indexterm><primary>GTypePluginCompleteTypeInfo</primary></indexterm><programlisting><link linkend="void">void</link> (*GTypePluginCompleteTypeInfo) (<link linkend="GTypePlugin">GTypePlugin</link> *plugin,
190
to increase the use count of <parameter>plugin</parameter>.</para>
192
</para><variablelist role="params">
193
<varlistentry><term><parameter>plugin</parameter> :</term>
194
<listitem><simpara> the <link linkend="GTypePlugin"><type>GTypePlugin</type></link> whose use count should be increased
195
</simpara></listitem></varlistentry>
196
</variablelist></refsect2>
197
<refsect2 id="GTypePluginUnuse" role="function">
198
<title>GTypePluginUnuse ()</title>
199
<indexterm zone="GTypePluginUnuse"><primary sortas="GTypePluginUnuse">GTypePluginUnuse</primary></indexterm><programlisting><link linkend="void">void</link> (*GTypePluginUnuse) (<link linkend="GTypePlugin">GTypePlugin</link> *plugin);</programlisting>
201
The type of the <parameter>unuse_plugin</parameter> function of <link linkend="GTypePluginClass"><type>GTypePluginClass</type></link>.</para>
203
</para><variablelist role="params">
204
<varlistentry><term><parameter>plugin</parameter> :</term>
205
<listitem><simpara> the <link linkend="GTypePlugin"><type>GTypePlugin</type></link> whose use count should be decreased
206
</simpara></listitem></varlistentry>
207
</variablelist></refsect2>
208
<refsect2 id="GTypePluginCompleteTypeInfo" role="function">
209
<title>GTypePluginCompleteTypeInfo ()</title>
210
<indexterm zone="GTypePluginCompleteTypeInfo"><primary sortas="GTypePluginCompleteTypeInfo">GTypePluginCompleteTypeInfo</primary></indexterm><programlisting><link linkend="void">void</link> (*GTypePluginCompleteTypeInfo) (<link linkend="GTypePlugin">GTypePlugin</link> *plugin,
215
211
<link linkend="GType">GType</link> g_type,
216
212
<link linkend="GTypeInfo">GTypeInfo</link> *info,
217
213
<link linkend="GTypeValueTable">GTypeValueTable</link> *value_table);</programlisting>
219
The type of the <parameter>complete_type_info</parameter> function of <link linkend="GTypePluginClass"><type>GTypePluginClass</type></link>.
215
The type of the <parameter>complete_type_info</parameter> function of <link linkend="GTypePluginClass"><type>GTypePluginClass</type></link>.</para>
220
217
</para><variablelist role="params">
221
<varlistentry><term><parameter>plugin</parameter> :</term>
222
<listitem><simpara>the <link linkend="GTypePlugin"><type>GTypePlugin</type></link>
223
</simpara></listitem></varlistentry>
224
<varlistentry><term><parameter>g_type</parameter> :</term>
225
<listitem><simpara>the <link linkend="GType"><type>GType</type></link> whose info is completed
226
</simpara></listitem></varlistentry>
227
<varlistentry><term><parameter>info</parameter> :</term>
228
<listitem><simpara>the <link linkend="GTypeInfo"><type>GTypeInfo</type></link> struct to fill in
229
</simpara></listitem></varlistentry>
230
<varlistentry><term><parameter>value_table</parameter> :</term>
231
<listitem><simpara>the <link linkend="GTypeValueTable"><type>GTypeValueTable</type></link> to fill in
218
<varlistentry><term><parameter>plugin</parameter> :</term>
219
<listitem><simpara> the <link linkend="GTypePlugin"><type>GTypePlugin</type></link>
220
</simpara></listitem></varlistentry>
221
<varlistentry><term><parameter>g_type</parameter> :</term>
222
<listitem><simpara> the <link linkend="GType"><type>GType</type></link> whose info is completed
223
</simpara></listitem></varlistentry>
224
<varlistentry><term><parameter>info</parameter> :</term>
225
<listitem><simpara> the <link linkend="GTypeInfo"><type>GTypeInfo</type></link> struct to fill in
226
</simpara></listitem></varlistentry>
227
<varlistentry><term><parameter>value_table</parameter> :</term>
228
<listitem><simpara> the <link linkend="GTypeValueTable"><type>GTypeValueTable</type></link> to fill in
234
229
</simpara></listitem></varlistentry>
235
230
</variablelist></refsect2>
237
<title><anchor id="GTypePluginCompleteInterfaceInfo" role="function"/>GTypePluginCompleteInterfaceInfo ()</title>
238
<indexterm><primary>GTypePluginCompleteInterfaceInfo</primary></indexterm><programlisting><link linkend="void">void</link> (*GTypePluginCompleteInterfaceInfo) (<link linkend="GTypePlugin">GTypePlugin</link> *plugin,
231
<refsect2 id="GTypePluginCompleteInterfaceInfo" role="function">
232
<title>GTypePluginCompleteInterfaceInfo ()</title>
233
<indexterm zone="GTypePluginCompleteInterfaceInfo"><primary sortas="GTypePluginCompleteInterfaceInfo">GTypePluginCompleteInterfaceInfo</primary></indexterm><programlisting><link linkend="void">void</link> (*GTypePluginCompleteInterfaceInfo) (<link linkend="GTypePlugin">GTypePlugin</link> *plugin,
239
234
<link linkend="GType">GType</link> instance_type,
240
235
<link linkend="GType">GType</link> interface_type,
241
236
<link linkend="GInterfaceInfo">GInterfaceInfo</link> *info);</programlisting>
243
The type of the <parameter>complete_interface_info</parameter> function of <link linkend="GTypePluginClass"><type>GTypePluginClass</type></link>.
244
</para><variablelist role="params">
245
<varlistentry><term><parameter>plugin</parameter> :</term>
246
<listitem><simpara>the <link linkend="GTypePlugin"><type>GTypePlugin</type></link>
247
</simpara></listitem></varlistentry>
248
<varlistentry><term><parameter>instance_type</parameter> :</term>
249
<listitem><simpara>the <link linkend="GType"><type>GType</type></link> of an instantiable type to which the interface
251
</simpara></listitem></varlistentry>
252
<varlistentry><term><parameter>interface_type</parameter> :</term>
253
<listitem><simpara>the <link linkend="GType"><type>GType</type></link> of the interface whose info is completed
254
</simpara></listitem></varlistentry>
255
<varlistentry><term><parameter>info</parameter> :</term>
256
<listitem><simpara>the <link linkend="GInterfaceInfo"><type>GInterfaceInfo</type></link> to fill in
259
</simpara></listitem></varlistentry>
260
</variablelist></refsect2>
262
<title><anchor id="g-type-plugin-use" role="function"/>g_type_plugin_use ()</title>
263
<indexterm><primary>g_type_plugin_use</primary></indexterm><programlisting><link linkend="void">void</link> g_type_plugin_use (<link linkend="GTypePlugin">GTypePlugin</link> *plugin);</programlisting>
265
Calls the <parameter>use_plugin</parameter> function from the <link linkend="GTypePluginClass"><type>GTypePluginClass</type></link> of <parameter>plugin</parameter>.
266
There should be no need to use this function outside of the GObject
268
</para><variablelist role="params">
269
<varlistentry><term><parameter>plugin</parameter> :</term>
270
<listitem><simpara>a <link linkend="GTypePlugin"><type>GTypePlugin</type></link>
273
</simpara></listitem></varlistentry>
274
</variablelist></refsect2>
276
<title><anchor id="g-type-plugin-unuse" role="function"/>g_type_plugin_unuse ()</title>
277
<indexterm><primary>g_type_plugin_unuse</primary></indexterm><programlisting><link linkend="void">void</link> g_type_plugin_unuse (<link linkend="GTypePlugin">GTypePlugin</link> *plugin);</programlisting>
279
Calls the <parameter>unuse_plugin</parameter> function from the <link linkend="GTypePluginClass"><type>GTypePluginClass</type></link> of <parameter>plugin</parameter>.
280
There should be no need to use this function outside of the GObject
282
</para><variablelist role="params">
283
<varlistentry><term><parameter>plugin</parameter> :</term>
284
<listitem><simpara>a <link linkend="GTypePlugin"><type>GTypePlugin</type></link>
287
</simpara></listitem></varlistentry>
288
</variablelist></refsect2>
290
<title><anchor id="g-type-plugin-complete-type-info" role="function"/>g_type_plugin_complete_type_info ()</title>
291
<indexterm><primary>g_type_plugin_complete_type_info</primary></indexterm><programlisting><link linkend="void">void</link> g_type_plugin_complete_type_info (<link linkend="GTypePlugin">GTypePlugin</link> *plugin,
238
The type of the <parameter>complete_interface_info</parameter> function of <link linkend="GTypePluginClass"><type>GTypePluginClass</type></link>.</para>
240
</para><variablelist role="params">
241
<varlistentry><term><parameter>plugin</parameter> :</term>
242
<listitem><simpara> the <link linkend="GTypePlugin"><type>GTypePlugin</type></link>
243
</simpara></listitem></varlistentry>
244
<varlistentry><term><parameter>instance_type</parameter> :</term>
245
<listitem><simpara> the <link linkend="GType"><type>GType</type></link> of an instantiable type to which the interface
247
</simpara></listitem></varlistentry>
248
<varlistentry><term><parameter>interface_type</parameter> :</term>
249
<listitem><simpara> the <link linkend="GType"><type>GType</type></link> of the interface whose info is completed
250
</simpara></listitem></varlistentry>
251
<varlistentry><term><parameter>info</parameter> :</term>
252
<listitem><simpara> the <link linkend="GInterfaceInfo"><type>GInterfaceInfo</type></link> to fill in
253
</simpara></listitem></varlistentry>
254
</variablelist></refsect2>
255
<refsect2 id="g-type-plugin-use" role="function">
256
<title>g_type_plugin_use ()</title>
257
<indexterm zone="g-type-plugin-use"><primary sortas="g_type_plugin_use">g_type_plugin_use</primary></indexterm><programlisting><link linkend="void">void</link> g_type_plugin_use (<link linkend="GTypePlugin">GTypePlugin</link> *plugin);</programlisting>
259
Calls the <parameter>use_plugin</parameter> function from the <link linkend="GTypePluginClass"><type>GTypePluginClass</type></link> of
260
<parameter>plugin</parameter>. There should be no need to use this function outside of
261
the GObject type system itself.</para>
263
</para><variablelist role="params">
264
<varlistentry><term><parameter>plugin</parameter> :</term>
265
<listitem><simpara> a <link linkend="GTypePlugin"><type>GTypePlugin</type></link>
266
</simpara></listitem></varlistentry>
267
</variablelist></refsect2>
268
<refsect2 id="g-type-plugin-unuse" role="function">
269
<title>g_type_plugin_unuse ()</title>
270
<indexterm zone="g-type-plugin-unuse"><primary sortas="g_type_plugin_unuse">g_type_plugin_unuse</primary></indexterm><programlisting><link linkend="void">void</link> g_type_plugin_unuse (<link linkend="GTypePlugin">GTypePlugin</link> *plugin);</programlisting>
272
Calls the <parameter>unuse_plugin</parameter> function from the <link linkend="GTypePluginClass"><type>GTypePluginClass</type></link> of
273
<parameter>plugin</parameter>. There should be no need to use this function outside of
274
the GObject type system itself.</para>
276
</para><variablelist role="params">
277
<varlistentry><term><parameter>plugin</parameter> :</term>
278
<listitem><simpara> a <link linkend="GTypePlugin"><type>GTypePlugin</type></link>
279
</simpara></listitem></varlistentry>
280
</variablelist></refsect2>
281
<refsect2 id="g-type-plugin-complete-type-info" role="function">
282
<title>g_type_plugin_complete_type_info ()</title>
283
<indexterm zone="g-type-plugin-complete-type-info"><primary sortas="g_type_plugin_complete_type_info">g_type_plugin_complete_type_info</primary></indexterm><programlisting><link linkend="void">void</link> g_type_plugin_complete_type_info (<link linkend="GTypePlugin">GTypePlugin</link> *plugin,
292
284
<link linkend="GType">GType</link> g_type,
293
285
<link linkend="GTypeInfo">GTypeInfo</link> *info,
294
286
<link linkend="GTypeValueTable">GTypeValueTable</link> *value_table);</programlisting>
296
288
Calls the <parameter>complete_type_info</parameter> function from the <link linkend="GTypePluginClass"><type>GTypePluginClass</type></link> of <parameter>plugin</parameter>.
297
289
There should be no need to use this function outside of the GObject
290
type system itself.</para>
299
292
</para><variablelist role="params">
300
<varlistentry><term><parameter>plugin</parameter> :</term>
301
<listitem><simpara>a <link linkend="GTypePlugin"><type>GTypePlugin</type></link>
302
</simpara></listitem></varlistentry>
303
<varlistentry><term><parameter>g_type</parameter> :</term>
304
<listitem><simpara>the <link linkend="GType"><type>GType</type></link> whose info is completed
305
</simpara></listitem></varlistentry>
306
<varlistentry><term><parameter>info</parameter> :</term>
307
<listitem><simpara>the <link linkend="GTypeInfo"><type>GTypeInfo</type></link> struct to fill in
308
</simpara></listitem></varlistentry>
309
<varlistentry><term><parameter>value_table</parameter> :</term>
310
<listitem><simpara>the <link linkend="GTypeValueTable"><type>GTypeValueTable</type></link> to fill in
293
<varlistentry><term><parameter>plugin</parameter> :</term>
294
<listitem><simpara> a <link linkend="GTypePlugin"><type>GTypePlugin</type></link>
295
</simpara></listitem></varlistentry>
296
<varlistentry><term><parameter>g_type</parameter> :</term>
297
<listitem><simpara> the <link linkend="GType"><type>GType</type></link> whose info is completed
298
</simpara></listitem></varlistentry>
299
<varlistentry><term><parameter>info</parameter> :</term>
300
<listitem><simpara> the <link linkend="GTypeInfo"><type>GTypeInfo</type></link> struct to fill in
301
</simpara></listitem></varlistentry>
302
<varlistentry><term><parameter>value_table</parameter> :</term>
303
<listitem><simpara> the <link linkend="GTypeValueTable"><type>GTypeValueTable</type></link> to fill in
313
304
</simpara></listitem></varlistentry>
314
305
</variablelist></refsect2>
316
<title><anchor id="g-type-plugin-complete-interface-info" role="function"/>g_type_plugin_complete_interface_info ()</title>
317
<indexterm><primary>g_type_plugin_complete_interface_info</primary></indexterm><programlisting><link linkend="void">void</link> g_type_plugin_complete_interface_info
306
<refsect2 id="g-type-plugin-complete-interface-info" role="function">
307
<title>g_type_plugin_complete_interface_info ()</title>
308
<indexterm zone="g-type-plugin-complete-interface-info"><primary sortas="g_type_plugin_complete_interface_info">g_type_plugin_complete_interface_info</primary></indexterm><programlisting><link linkend="void">void</link> g_type_plugin_complete_interface_info
318
309
(<link linkend="GTypePlugin">GTypePlugin</link> *plugin,
319
310
<link linkend="GType">GType</link> instance_type,
320
311
<link linkend="GType">GType</link> interface_type,
321
312
<link linkend="GInterfaceInfo">GInterfaceInfo</link> *info);</programlisting>
323
Calls the <parameter>complete_interface_info</parameter> function from the <link linkend="GTypePluginClass"><type>GTypePluginClass</type></link>
324
of <parameter>plugin</parameter>. There should be no need to use this function outside of the
325
GObject type system itself.
314
Calls the <parameter>complete_interface_info</parameter> function from the
315
<link linkend="GTypePluginClass"><type>GTypePluginClass</type></link> of <parameter>plugin</parameter>. There should be no need to use this
316
function outside of the GObject type system itself.</para>
326
318
</para><variablelist role="params">
327
<varlistentry><term><parameter>plugin</parameter> :</term>
328
<listitem><simpara>the <link linkend="GTypePlugin"><type>GTypePlugin</type></link>
329
</simpara></listitem></varlistentry>
330
<varlistentry><term><parameter>instance_type</parameter> :</term>
331
<listitem><simpara>the <link linkend="GType"><type>GType</type></link> of an instantiable type to which the interface
333
</simpara></listitem></varlistentry>
334
<varlistentry><term><parameter>interface_type</parameter> :</term>
335
<listitem><simpara>the <link linkend="GType"><type>GType</type></link> of the interface whose info is completed
336
</simpara></listitem></varlistentry>
337
<varlistentry><term><parameter>info</parameter> :</term>
338
<listitem><simpara>the <link linkend="GInterfaceInfo"><type>GInterfaceInfo</type></link> to fill in
319
<varlistentry><term><parameter>plugin</parameter> :</term>
320
<listitem><simpara> the <link linkend="GTypePlugin"><type>GTypePlugin</type></link>
321
</simpara></listitem></varlistentry>
322
<varlistentry><term><parameter>instance_type</parameter> :</term>
323
<listitem><simpara> the <link linkend="GType"><type>GType</type></link> of an instantiable type to which the interface
325
</simpara></listitem></varlistentry>
326
<varlistentry><term><parameter>interface_type</parameter> :</term>
327
<listitem><simpara> the <link linkend="GType"><type>GType</type></link> of the interface whose info is completed
328
</simpara></listitem></varlistentry>
329
<varlistentry><term><parameter>info</parameter> :</term>
330
<listitem><simpara> the <link linkend="GInterfaceInfo"><type>GInterfaceInfo</type></link> to fill in
341
331
</simpara></listitem></varlistentry>
342
332
</variablelist></refsect2>