[kdbus] sync with kdbus (kdbus.h - commit: 5ae1ecac44cb)
[platform/upstream/glib.git] / gobject / gobject.h
1 /* GObject - GLib Type, Object, Parameter and Signal Library
2  * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General
15  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
16  */
17 #ifndef __G_OBJECT_H__
18 #define __G_OBJECT_H__
19
20 #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
21 #error "Only <glib-object.h> can be included directly."
22 #endif
23
24 #include        <gobject/gtype.h>
25 #include        <gobject/gvalue.h>
26 #include        <gobject/gparam.h>
27 #include        <gobject/gclosure.h>
28 #include        <gobject/gsignal.h>
29 #include        <gobject/gboxed.h>
30
31 G_BEGIN_DECLS
32
33 /* --- type macros --- */
34 /**
35  * G_TYPE_IS_OBJECT:
36  * @type: Type id to check
37  * 
38  * Check if the passed in type id is a %G_TYPE_OBJECT or derived from it.
39  * 
40  * Returns: %FALSE or %TRUE, indicating whether @type is a %G_TYPE_OBJECT.
41  */
42 #define G_TYPE_IS_OBJECT(type)      (G_TYPE_FUNDAMENTAL (type) == G_TYPE_OBJECT)
43 /**
44  * G_OBJECT:
45  * @object: Object which is subject to casting.
46  * 
47  * Casts a #GObject or derived pointer into a (GObject*) pointer.
48  * Depending on the current debugging level, this function may invoke
49  * certain runtime checks to identify invalid casts.
50  */
51 #define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
52 /**
53  * G_OBJECT_CLASS:
54  * @class: a valid #GObjectClass
55  * 
56  * Casts a derived #GObjectClass structure into a #GObjectClass structure.
57  */
58 #define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
59 /**
60  * G_IS_OBJECT:
61  * @object: Instance to check for being a %G_TYPE_OBJECT.
62  * 
63  * Checks whether a valid #GTypeInstance pointer is of type %G_TYPE_OBJECT.
64  */
65 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_42
66 #define G_IS_OBJECT(object)         (G_TYPE_CHECK_INSTANCE_FUNDAMENTAL_TYPE ((object), G_TYPE_OBJECT))
67 #else
68 #define G_IS_OBJECT(object)         (G_TYPE_CHECK_INSTANCE_TYPE ((object), G_TYPE_OBJECT))
69 #endif
70 /**
71  * G_IS_OBJECT_CLASS:
72  * @class: a #GObjectClass
73  * 
74  * Checks whether @class "is a" valid #GObjectClass structure of type
75  * %G_TYPE_OBJECT or derived.
76  */
77 #define G_IS_OBJECT_CLASS(class)    (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_OBJECT))
78 /**
79  * G_OBJECT_GET_CLASS:
80  * @object: a #GObject instance.
81  * 
82  * Get the class structure associated to a #GObject instance.
83  *
84  * Returns: pointer to object class structure.
85  */
86 #define G_OBJECT_GET_CLASS(object)  (G_TYPE_INSTANCE_GET_CLASS ((object), G_TYPE_OBJECT, GObjectClass))
87 /**
88  * G_OBJECT_TYPE:
89  * @object: Object to return the type id for.
90  * 
91  * Get the type id of an object.
92  * 
93  * Returns: Type id of @object.
94  */
95 #define G_OBJECT_TYPE(object)       (G_TYPE_FROM_INSTANCE (object))
96 /**
97  * G_OBJECT_TYPE_NAME:
98  * @object: Object to return the type name for.
99  * 
100  * Get the name of an object's type.
101  * 
102  * Returns: Type name of @object. The string is owned by the type system and 
103  *  should not be freed.
104  */
105 #define G_OBJECT_TYPE_NAME(object)  (g_type_name (G_OBJECT_TYPE (object)))
106 /**
107  * G_OBJECT_CLASS_TYPE:
108  * @class: a valid #GObjectClass
109  * 
110  * Get the type id of a class structure.
111  * 
112  * Returns: Type id of @class.
113  */
114 #define G_OBJECT_CLASS_TYPE(class)  (G_TYPE_FROM_CLASS (class))
115 /**
116  * G_OBJECT_CLASS_NAME:
117  * @class: a valid #GObjectClass
118  * 
119  * Return the name of a class structure's type.
120  * 
121  * Returns: Type name of @class. The string is owned by the type system and 
122  *  should not be freed.
123  */
124 #define G_OBJECT_CLASS_NAME(class)  (g_type_name (G_OBJECT_CLASS_TYPE (class)))
125 /**
126  * G_VALUE_HOLDS_OBJECT:
127  * @value: a valid #GValue structure
128  * 
129  * Checks whether the given #GValue can hold values derived from type %G_TYPE_OBJECT.
130  * 
131  * Returns: %TRUE on success.
132  */
133 #define G_VALUE_HOLDS_OBJECT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_OBJECT))
134
135 /* --- type macros --- */
136 /**
137  * G_TYPE_INITIALLY_UNOWNED:
138  * 
139  * The type for #GInitiallyUnowned.
140  */
141 #define G_TYPE_INITIALLY_UNOWNED              (g_initially_unowned_get_type())
142 /**
143  * G_INITIALLY_UNOWNED:
144  * @object: Object which is subject to casting.
145  * 
146  * Casts a #GInitiallyUnowned or derived pointer into a (GInitiallyUnowned*) 
147  * pointer. Depending on the current debugging level, this function may invoke
148  * certain runtime checks to identify invalid casts.
149  */
150 #define G_INITIALLY_UNOWNED(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnowned))
151 /**
152  * G_INITIALLY_UNOWNED_CLASS:
153  * @class: a valid #GInitiallyUnownedClass
154  * 
155  * Casts a derived #GInitiallyUnownedClass structure into a
156  * #GInitiallyUnownedClass structure.
157  */
158 #define G_INITIALLY_UNOWNED_CLASS(class)      (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnownedClass))
159 /**
160  * G_IS_INITIALLY_UNOWNED:
161  * @object: Instance to check for being a %G_TYPE_INITIALLY_UNOWNED.
162  * 
163  * Checks whether a valid #GTypeInstance pointer is of type %G_TYPE_INITIALLY_UNOWNED.
164  */
165 #define G_IS_INITIALLY_UNOWNED(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), G_TYPE_INITIALLY_UNOWNED))
166 /**
167  * G_IS_INITIALLY_UNOWNED_CLASS:
168  * @class: a #GInitiallyUnownedClass
169  * 
170  * Checks whether @class "is a" valid #GInitiallyUnownedClass structure of type
171  * %G_TYPE_INITIALLY_UNOWNED or derived.
172  */
173 #define G_IS_INITIALLY_UNOWNED_CLASS(class)   (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_INITIALLY_UNOWNED))
174 /**
175  * G_INITIALLY_UNOWNED_GET_CLASS:
176  * @object: a #GInitiallyUnowned instance.
177  * 
178  * Get the class structure associated to a #GInitiallyUnowned instance.
179  *
180  * Returns: pointer to object class structure.
181  */
182 #define G_INITIALLY_UNOWNED_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnownedClass))
183 /* GInitiallyUnowned ia a GObject with initially floating reference count */
184
185
186 /* --- typedefs & structures --- */
187 typedef struct _GObject                  GObject;
188 typedef struct _GObjectClass             GObjectClass;
189 typedef struct _GObject                  GInitiallyUnowned;
190 typedef struct _GObjectClass             GInitiallyUnownedClass;
191 typedef struct _GObjectConstructParam    GObjectConstructParam;
192 /**
193  * GObjectGetPropertyFunc:
194  * @object: a #GObject
195  * @property_id: the numeric id under which the property was registered with
196  *  g_object_class_install_property().
197  * @value: a #GValue to return the property value in
198  * @pspec: the #GParamSpec describing the property
199  * 
200  * The type of the @get_property function of #GObjectClass. 
201  */
202 typedef void (*GObjectGetPropertyFunc)  (GObject      *object,
203                                          guint         property_id,
204                                          GValue       *value,
205                                          GParamSpec   *pspec);
206 /**
207  * GObjectSetPropertyFunc:
208  * @object: a #GObject
209  * @property_id: the numeric id under which the property was registered with
210  *  g_object_class_install_property().
211  * @value: the new value for the property
212  * @pspec: the #GParamSpec describing the property
213  * 
214  * The type of the @set_property function of #GObjectClass. 
215  */
216 typedef void (*GObjectSetPropertyFunc)  (GObject      *object,
217                                          guint         property_id,
218                                          const GValue *value,
219                                          GParamSpec   *pspec);
220 /**
221  * GObjectFinalizeFunc:
222  * @object: the #GObject being finalized
223  * 
224  * The type of the @finalize function of #GObjectClass.
225  */
226 typedef void (*GObjectFinalizeFunc)     (GObject      *object);
227 /**
228  * GWeakNotify:
229  * @data: data that was provided when the weak reference was established
230  * @where_the_object_was: the object being finalized
231  * 
232  * A #GWeakNotify function can be added to an object as a callback that gets
233  * triggered when the object is finalized. Since the object is already being
234  * finalized when the #GWeakNotify is called, there's not much you could do 
235  * with the object, apart from e.g. using its address as hash-index or the like. 
236  */
237 typedef void (*GWeakNotify)             (gpointer      data,
238                                          GObject      *where_the_object_was);
239 /**
240  * GObject:
241  * 
242  * All the fields in the GObject structure are private 
243  * to the #GObject implementation and should never be accessed directly.
244  */
245 struct  _GObject
246 {
247   GTypeInstance  g_type_instance;
248   
249   /*< private >*/
250   volatile guint ref_count;
251   GData         *qdata;
252 };
253 /**
254  * GObjectClass:
255  * @g_type_class: the parent class
256  * @constructor: the @constructor function is called by g_object_new () to 
257  *  complete the object initialization after all the construction properties are
258  *  set. The first thing a @constructor implementation must do is chain up to the
259  *  @constructor of the parent class. Overriding @constructor should be rarely 
260  *  needed, e.g. to handle construct properties, or to implement singletons.
261  * @set_property: the generic setter for all properties of this type. Should be
262  *  overridden for every type with properties. If implementations of
263  *  @set_property don't emit property change notification explicitly, this will
264  *  be done implicitly by the type system. However, if the notify signal is
265  *  emitted explicitly, the type system will not emit it a second time.
266  * @get_property: the generic getter for all properties of this type. Should be
267  *  overridden for every type with properties.
268  * @dispose: the @dispose function is supposed to drop all references to other 
269  *  objects, but keep the instance otherwise intact, so that client method 
270  *  invocations still work. It may be run multiple times (due to reference 
271  *  loops). Before returning, @dispose should chain up to the @dispose method 
272  *  of the parent class.
273  * @finalize: instance finalization function, should finish the finalization of 
274  *  the instance begun in @dispose and chain up to the @finalize method of the 
275  *  parent class.
276  * @dispatch_properties_changed: emits property change notification for a bunch
277  *  of properties. Overriding @dispatch_properties_changed should be rarely 
278  *  needed.
279  * @notify: the class closure for the notify signal
280  * @constructed: the @constructed function is called by g_object_new() as the
281  *  final step of the object creation process.  At the point of the call, all
282  *  construction properties have been set on the object.  The purpose of this
283  *  call is to allow for object initialisation steps that can only be performed
284  *  after construction properties have been set.  @constructed implementors
285  *  should chain up to the @constructed call of their parent class to allow it
286  *  to complete its initialisation.
287  * 
288  * The class structure for the GObject type.
289  * 
290  * <example>
291  * <title>Implementing singletons using a constructor</title>
292  * <programlisting>
293  * static MySingleton *the_singleton = NULL;
294  * 
295  * static GObject*
296  * my_singleton_constructor (GType                  type,
297  *                           guint                  n_construct_params,
298  *                           GObjectConstructParam *construct_params)
299  * {
300  *   GObject *object;
301  *   
302  *   if (!the_singleton)
303  *     {
304  *       object = G_OBJECT_CLASS (parent_class)->constructor (type,
305  *                                                            n_construct_params,
306  *                                                            construct_params);
307  *       the_singleton = MY_SINGLETON (object);
308  *     }
309  *   else
310  *     object = g_object_ref (G_OBJECT (the_singleton));
311  * 
312  *   return object;
313  * }
314  * </programlisting></example>
315  */
316 struct  _GObjectClass
317 {
318   GTypeClass   g_type_class;
319
320   /*< private >*/
321   GSList      *construct_properties;
322
323   /*< public >*/
324   /* seldom overidden */
325   GObject*   (*constructor)     (GType                  type,
326                                  guint                  n_construct_properties,
327                                  GObjectConstructParam *construct_properties);
328   /* overridable methods */
329   void       (*set_property)            (GObject        *object,
330                                          guint           property_id,
331                                          const GValue   *value,
332                                          GParamSpec     *pspec);
333   void       (*get_property)            (GObject        *object,
334                                          guint           property_id,
335                                          GValue         *value,
336                                          GParamSpec     *pspec);
337   void       (*dispose)                 (GObject        *object);
338   void       (*finalize)                (GObject        *object);
339   /* seldom overidden */
340   void       (*dispatch_properties_changed) (GObject      *object,
341                                              guint         n_pspecs,
342                                              GParamSpec  **pspecs);
343   /* signals */
344   void       (*notify)                  (GObject        *object,
345                                          GParamSpec     *pspec);
346
347   /* called when done constructing */
348   void       (*constructed)             (GObject        *object);
349
350   /*< private >*/
351   gsize         flags;
352
353   /* padding */
354   gpointer      pdummy[6];
355 };
356 /**
357  * GObjectConstructParam:
358  * @pspec: the #GParamSpec of the construct parameter
359  * @value: the value to set the parameter to
360  * 
361  * The GObjectConstructParam struct is an auxiliary 
362  * structure used to hand #GParamSpec/#GValue pairs to the @constructor of
363  * a #GObjectClass.
364  */
365 struct _GObjectConstructParam
366 {
367   GParamSpec *pspec;
368   GValue     *value;
369 };
370
371 /**
372  * GInitiallyUnowned:
373  * 
374  * All the fields in the GInitiallyUnowned structure 
375  * are private to the #GInitiallyUnowned implementation and should never be 
376  * accessed directly.
377  */
378 /**
379  * GInitiallyUnownedClass:
380  * 
381  * The class structure for the GInitiallyUnowned type.
382  */
383
384
385 /* --- prototypes --- */
386 GLIB_AVAILABLE_IN_ALL
387 GType       g_initially_unowned_get_type      (void);
388 GLIB_AVAILABLE_IN_ALL
389 void        g_object_class_install_property   (GObjectClass   *oclass,
390                                                guint           property_id,
391                                                GParamSpec     *pspec);
392 GLIB_AVAILABLE_IN_ALL
393 GParamSpec* g_object_class_find_property      (GObjectClass   *oclass,
394                                                const gchar    *property_name);
395 GLIB_AVAILABLE_IN_ALL
396 GParamSpec**g_object_class_list_properties    (GObjectClass   *oclass,
397                                                guint          *n_properties);
398 GLIB_AVAILABLE_IN_ALL
399 void        g_object_class_override_property  (GObjectClass   *oclass,
400                                                guint           property_id,
401                                                const gchar    *name);
402 GLIB_AVAILABLE_IN_ALL
403 void        g_object_class_install_properties (GObjectClass   *oclass,
404                                                guint           n_pspecs,
405                                                GParamSpec    **pspecs);
406
407 GLIB_AVAILABLE_IN_ALL
408 void        g_object_interface_install_property (gpointer     g_iface,
409                                                  GParamSpec  *pspec);
410 GLIB_AVAILABLE_IN_ALL
411 GParamSpec* g_object_interface_find_property    (gpointer     g_iface,
412                                                  const gchar *property_name);
413 GLIB_AVAILABLE_IN_ALL
414 GParamSpec**g_object_interface_list_properties  (gpointer     g_iface,
415                                                  guint       *n_properties_p);
416
417 GLIB_AVAILABLE_IN_ALL
418 GType       g_object_get_type                 (void) G_GNUC_CONST;
419 GLIB_AVAILABLE_IN_ALL
420 gpointer    g_object_new                      (GType           object_type,
421                                                const gchar    *first_property_name,
422                                                ...);
423 GLIB_AVAILABLE_IN_ALL
424 gpointer    g_object_newv                     (GType           object_type,
425                                                guint           n_parameters,
426                                                GParameter     *parameters);
427 GLIB_AVAILABLE_IN_ALL
428 GObject*    g_object_new_valist               (GType           object_type,
429                                                const gchar    *first_property_name,
430                                                va_list         var_args);
431 GLIB_AVAILABLE_IN_ALL
432 void        g_object_set                      (gpointer        object,
433                                                const gchar    *first_property_name,
434                                                ...) G_GNUC_NULL_TERMINATED;
435 GLIB_AVAILABLE_IN_ALL
436 void        g_object_get                      (gpointer        object,
437                                                const gchar    *first_property_name,
438                                                ...) G_GNUC_NULL_TERMINATED;
439 GLIB_AVAILABLE_IN_ALL
440 gpointer    g_object_connect                  (gpointer        object,
441                                                const gchar    *signal_spec,
442                                                ...) G_GNUC_NULL_TERMINATED;
443 GLIB_AVAILABLE_IN_ALL
444 void        g_object_disconnect               (gpointer        object,
445                                                const gchar    *signal_spec,
446                                                ...) G_GNUC_NULL_TERMINATED;
447 GLIB_AVAILABLE_IN_ALL
448 void        g_object_set_valist               (GObject        *object,
449                                                const gchar    *first_property_name,
450                                                va_list         var_args);
451 GLIB_AVAILABLE_IN_ALL
452 void        g_object_get_valist               (GObject        *object,
453                                                const gchar    *first_property_name,
454                                                va_list         var_args);
455 GLIB_AVAILABLE_IN_ALL
456 void        g_object_set_property             (GObject        *object,
457                                                const gchar    *property_name,
458                                                const GValue   *value);
459 GLIB_AVAILABLE_IN_ALL
460 void        g_object_get_property             (GObject        *object,
461                                                const gchar    *property_name,
462                                                GValue         *value);
463 GLIB_AVAILABLE_IN_ALL
464 void        g_object_freeze_notify            (GObject        *object);
465 GLIB_AVAILABLE_IN_ALL
466 void        g_object_notify                   (GObject        *object,
467                                                const gchar    *property_name);
468 GLIB_AVAILABLE_IN_ALL
469 void        g_object_notify_by_pspec          (GObject        *object,
470                                                GParamSpec     *pspec);
471 GLIB_AVAILABLE_IN_ALL
472 void        g_object_thaw_notify              (GObject        *object);
473 GLIB_AVAILABLE_IN_ALL
474 gboolean    g_object_is_floating              (gpointer        object);
475 GLIB_AVAILABLE_IN_ALL
476 gpointer    g_object_ref_sink                 (gpointer        object);
477 GLIB_AVAILABLE_IN_ALL
478 gpointer    g_object_ref                      (gpointer        object);
479 GLIB_AVAILABLE_IN_ALL
480 void        g_object_unref                    (gpointer        object);
481 GLIB_AVAILABLE_IN_ALL
482 void        g_object_weak_ref                 (GObject        *object,
483                                                GWeakNotify     notify,
484                                                gpointer        data);
485 GLIB_AVAILABLE_IN_ALL
486 void        g_object_weak_unref               (GObject        *object,
487                                                GWeakNotify     notify,
488                                                gpointer        data);
489 GLIB_AVAILABLE_IN_ALL
490 void        g_object_add_weak_pointer         (GObject        *object, 
491                                                gpointer       *weak_pointer_location);
492 GLIB_AVAILABLE_IN_ALL
493 void        g_object_remove_weak_pointer      (GObject        *object, 
494                                                gpointer       *weak_pointer_location);
495
496 /**
497  * GToggleNotify:
498  * @data: Callback data passed to g_object_add_toggle_ref()
499  * @object: The object on which g_object_add_toggle_ref() was called.
500  * @is_last_ref: %TRUE if the toggle reference is now the
501  *  last reference to the object. %FALSE if the toggle
502  *  reference was the last reference and there are now other
503  *  references.
504  * 
505  * A callback function used for notification when the state
506  * of a toggle reference changes. See g_object_add_toggle_ref().
507  */
508 typedef void (*GToggleNotify) (gpointer      data,
509                                GObject      *object,
510                                gboolean      is_last_ref);
511
512 GLIB_AVAILABLE_IN_ALL
513 void g_object_add_toggle_ref    (GObject       *object,
514                                  GToggleNotify  notify,
515                                  gpointer       data);
516 GLIB_AVAILABLE_IN_ALL
517 void g_object_remove_toggle_ref (GObject       *object,
518                                  GToggleNotify  notify,
519                                  gpointer       data);
520
521 GLIB_AVAILABLE_IN_ALL
522 gpointer    g_object_get_qdata                (GObject        *object,
523                                                GQuark          quark);
524 GLIB_AVAILABLE_IN_ALL
525 void        g_object_set_qdata                (GObject        *object,
526                                                GQuark          quark,
527                                                gpointer        data);
528 GLIB_AVAILABLE_IN_ALL
529 void        g_object_set_qdata_full           (GObject        *object,
530                                                GQuark          quark,
531                                                gpointer        data,
532                                                GDestroyNotify  destroy);
533 GLIB_AVAILABLE_IN_ALL
534 gpointer    g_object_steal_qdata              (GObject        *object,
535                                                GQuark          quark);
536
537 GLIB_AVAILABLE_IN_2_34
538 gpointer    g_object_dup_qdata                (GObject        *object,
539                                                GQuark          quark,
540                                                GDuplicateFunc  dup_func,
541                                                gpointer         user_data);
542 GLIB_AVAILABLE_IN_2_34
543 gboolean    g_object_replace_qdata            (GObject        *object,
544                                                GQuark          quark,
545                                                gpointer        oldval,
546                                                gpointer        newval,
547                                                GDestroyNotify  destroy,
548                                                GDestroyNotify *old_destroy);
549
550 GLIB_AVAILABLE_IN_ALL
551 gpointer    g_object_get_data                 (GObject        *object,
552                                                const gchar    *key);
553 GLIB_AVAILABLE_IN_ALL
554 void        g_object_set_data                 (GObject        *object,
555                                                const gchar    *key,
556                                                gpointer        data);
557 GLIB_AVAILABLE_IN_ALL
558 void        g_object_set_data_full            (GObject        *object,
559                                                const gchar    *key,
560                                                gpointer        data,
561                                                GDestroyNotify  destroy);
562 GLIB_AVAILABLE_IN_ALL
563 gpointer    g_object_steal_data               (GObject        *object,
564                                                const gchar    *key);
565
566 GLIB_AVAILABLE_IN_2_34
567 gpointer    g_object_dup_data                 (GObject        *object,
568                                                const gchar    *key,
569                                                GDuplicateFunc  dup_func,
570                                                gpointer         user_data);
571 GLIB_AVAILABLE_IN_2_34
572 gboolean    g_object_replace_data             (GObject        *object,
573                                                const gchar    *key,
574                                                gpointer        oldval,
575                                                gpointer        newval,
576                                                GDestroyNotify  destroy,
577                                                GDestroyNotify *old_destroy);
578
579
580 GLIB_AVAILABLE_IN_ALL
581 void        g_object_watch_closure            (GObject        *object,
582                                                GClosure       *closure);
583 GLIB_AVAILABLE_IN_ALL
584 GClosure*   g_cclosure_new_object             (GCallback       callback_func,
585                                                GObject        *object);
586 GLIB_AVAILABLE_IN_ALL
587 GClosure*   g_cclosure_new_object_swap        (GCallback       callback_func,
588                                                GObject        *object);
589 GLIB_AVAILABLE_IN_ALL
590 GClosure*   g_closure_new_object              (guint           sizeof_closure,
591                                                GObject        *object);
592 GLIB_AVAILABLE_IN_ALL
593 void        g_value_set_object                (GValue         *value,
594                                                gpointer        v_object);
595 GLIB_AVAILABLE_IN_ALL
596 gpointer    g_value_get_object                (const GValue   *value);
597 GLIB_AVAILABLE_IN_ALL
598 gpointer    g_value_dup_object                (const GValue   *value);
599 GLIB_AVAILABLE_IN_ALL
600 gulong      g_signal_connect_object           (gpointer        instance,
601                                                const gchar    *detailed_signal,
602                                                GCallback       c_handler,
603                                                gpointer        gobject,
604                                                GConnectFlags   connect_flags);
605
606 /*< protected >*/
607 GLIB_AVAILABLE_IN_ALL
608 void        g_object_force_floating           (GObject        *object);
609 GLIB_AVAILABLE_IN_ALL
610 void        g_object_run_dispose              (GObject        *object);
611
612
613 GLIB_AVAILABLE_IN_ALL
614 void        g_value_take_object               (GValue         *value,
615                                                gpointer        v_object);
616 GLIB_DEPRECATED_FOR(g_value_take_object)
617 void        g_value_set_object_take_ownership (GValue         *value,
618                                                gpointer        v_object);
619
620 GLIB_DEPRECATED
621 gsize       g_object_compat_control           (gsize           what,
622                                                gpointer        data);
623
624 /* --- implementation macros --- */
625 #define G_OBJECT_WARN_INVALID_PSPEC(object, pname, property_id, pspec) \
626 G_STMT_START { \
627   GObject *_glib__object = (GObject*) (object); \
628   GParamSpec *_glib__pspec = (GParamSpec*) (pspec); \
629   guint _glib__property_id = (property_id); \
630   g_warning ("%s: invalid %s id %u for \"%s\" of type '%s' in '%s'", \
631              G_STRLOC, \
632              (pname), \
633              _glib__property_id, \
634              _glib__pspec->name, \
635              g_type_name (G_PARAM_SPEC_TYPE (_glib__pspec)), \
636              G_OBJECT_TYPE_NAME (_glib__object)); \
637 } G_STMT_END
638 /**
639  * G_OBJECT_WARN_INVALID_PROPERTY_ID:
640  * @object: the #GObject on which set_property() or get_property() was called
641  * @property_id: the numeric id of the property
642  * @pspec: the #GParamSpec of the property
643  * 
644  * This macro should be used to emit a standard warning about unexpected 
645  * properties in set_property() and get_property() implementations.
646  */
647 #define G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec) \
648     G_OBJECT_WARN_INVALID_PSPEC ((object), "property", (property_id), (pspec))
649
650 GLIB_AVAILABLE_IN_ALL
651 void    g_clear_object (volatile GObject **object_ptr);
652 #define g_clear_object(object_ptr) g_clear_pointer ((object_ptr), g_object_unref)
653
654 typedef struct {
655     /*<private>*/
656     union { gpointer p; } priv;
657 } GWeakRef;
658
659 GLIB_AVAILABLE_IN_ALL
660 void     g_weak_ref_init       (GWeakRef *weak_ref,
661                                 gpointer  object);
662 GLIB_AVAILABLE_IN_ALL
663 void     g_weak_ref_clear      (GWeakRef *weak_ref);
664 GLIB_AVAILABLE_IN_ALL
665 gpointer g_weak_ref_get        (GWeakRef *weak_ref);
666 GLIB_AVAILABLE_IN_ALL
667 void     g_weak_ref_set        (GWeakRef *weak_ref,
668                                 gpointer  object);
669
670 G_END_DECLS
671
672 #endif /* __G_OBJECT_H__ */