hook gvariant vectors up to kdbus
[platform/upstream/glib.git] / gobject / gobject.h
index 751e5f2..522011f 100644 (file)
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
+#ifndef __G_OBJECT_H__
+#define __G_OBJECT_H__
+
 #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 #error "Only <glib-object.h> can be included directly."
 #endif
 
-#ifndef __G_OBJECT_H__
-#define __G_OBJECT_H__
-
 #include        <gobject/gtype.h>
 #include        <gobject/gvalue.h>
 #include        <gobject/gparam.h>
 #include        <gobject/gclosure.h>
 #include        <gobject/gsignal.h>
+#include        <gobject/gboxed.h>
 
 G_BEGIN_DECLS
 
@@ -63,7 +62,11 @@ G_BEGIN_DECLS
  * 
  * Checks whether a valid #GTypeInstance pointer is of type %G_TYPE_OBJECT.
  */
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_42
+#define G_IS_OBJECT(object)         (G_TYPE_CHECK_INSTANCE_FUNDAMENTAL_TYPE ((object), G_TYPE_OBJECT))
+#else
 #define G_IS_OBJECT(object)         (G_TYPE_CHECK_INSTANCE_TYPE ((object), G_TYPE_OBJECT))
+#endif
 /**
  * G_IS_OBJECT_CLASS:
  * @class: a #GObjectClass
@@ -229,14 +232,14 @@ typedef void (*GObjectFinalizeFunc)     (GObject      *object);
  * A #GWeakNotify function can be added to an object as a callback that gets
  * triggered when the object is finalized. Since the object is already being
  * finalized when the #GWeakNotify is called, there's not much you could do 
- * with the object, apart from e.g. using its adress as hash-index or the like. 
+ * with the object, apart from e.g. using its address as hash-index or the like. 
  */
 typedef void (*GWeakNotify)            (gpointer      data,
                                         GObject      *where_the_object_was);
 /**
  * GObject:
  * 
- * All the fields in the <structname>GObject</structname> structure are private 
+ * All the fields in the GObject structure are private 
  * to the #GObject implementation and should never be accessed directly.
  */
 struct  _GObject
@@ -256,9 +259,10 @@ struct  _GObject
  *  @constructor of the parent class. Overriding @constructor should be rarely 
  *  needed, e.g. to handle construct properties, or to implement singletons.
  * @set_property: the generic setter for all properties of this type. Should be
- *  overridden for every type with properties. Implementations of @set_property
- *  don't need to emit property change notification explicitly, this is handled
- *  by the type system.
+ *  overridden for every type with properties. If implementations of
+ *  @set_property don't emit property change notification explicitly, this will
+ *  be done implicitly by the type system. However, if the notify signal is
+ *  emitted explicitly, the type system will not emit it a second time.
  * @get_property: the generic getter for all properties of this type. Should be
  *  overridden for every type with properties.
  * @dispose: the @dispose function is supposed to drop all references to other 
@@ -281,7 +285,7 @@ struct  _GObject
  *  should chain up to the @constructed call of their parent class to allow it
  *  to complete its initialisation.
  * 
- * The class structure for the <structname>GObject</structname> type.
+ * The class structure for the GObject type.
  * 
  * <example>
  * <title>Implementing singletons using a constructor</title>
@@ -317,7 +321,7 @@ struct  _GObjectClass
   GSList      *construct_properties;
 
   /*< public >*/
-  /* seldomly overidden */
+  /* seldom overidden */
   GObject*   (*constructor)     (GType                  type,
                                  guint                  n_construct_properties,
                                  GObjectConstructParam *construct_properties);
@@ -332,7 +336,7 @@ struct  _GObjectClass
                                          GParamSpec     *pspec);
   void       (*dispose)                        (GObject        *object);
   void       (*finalize)               (GObject        *object);
-  /* seldomly overidden */
+  /* seldom overidden */
   void       (*dispatch_properties_changed) (GObject      *object,
                                             guint         n_pspecs,
                                             GParamSpec  **pspecs);
@@ -354,7 +358,7 @@ struct  _GObjectClass
  * @pspec: the #GParamSpec of the construct parameter
  * @value: the value to set the parameter to
  * 
- * The <structname>GObjectConstructParam</structname> struct is an auxiliary 
+ * The GObjectConstructParam struct is an auxiliary 
  * structure used to hand #GParamSpec/#GValue pairs to the @constructor of
  * a #GObjectClass.
  */
@@ -367,87 +371,125 @@ struct _GObjectConstructParam
 /**
  * GInitiallyUnowned:
  * 
- * All the fields in the <structname>GInitiallyUnowned</structname> structure 
+ * All the fields in the GInitiallyUnowned structure 
  * are private to the #GInitiallyUnowned implementation and should never be 
  * accessed directly.
  */
 /**
  * GInitiallyUnownedClass:
  * 
- * The class structure for the <structname>GInitiallyUnowned</structname> type.
+ * The class structure for the GInitiallyUnowned type.
  */
 
 
 /* --- prototypes --- */
+GLIB_AVAILABLE_IN_ALL
 GType       g_initially_unowned_get_type      (void);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_class_install_property   (GObjectClass   *oclass,
                                               guint           property_id,
                                               GParamSpec     *pspec);
+GLIB_AVAILABLE_IN_ALL
 GParamSpec* g_object_class_find_property      (GObjectClass   *oclass,
                                               const gchar    *property_name);
+GLIB_AVAILABLE_IN_ALL
 GParamSpec**g_object_class_list_properties    (GObjectClass   *oclass,
                                               guint          *n_properties);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_class_override_property  (GObjectClass   *oclass,
                                               guint           property_id,
                                               const gchar    *name);
+GLIB_AVAILABLE_IN_ALL
+void        g_object_class_install_properties (GObjectClass   *oclass,
+                                               guint           n_pspecs,
+                                               GParamSpec    **pspecs);
 
+GLIB_AVAILABLE_IN_ALL
 void        g_object_interface_install_property (gpointer     g_iface,
                                                 GParamSpec  *pspec);
+GLIB_AVAILABLE_IN_ALL
 GParamSpec* g_object_interface_find_property    (gpointer     g_iface,
                                                 const gchar *property_name);
+GLIB_AVAILABLE_IN_ALL
 GParamSpec**g_object_interface_list_properties  (gpointer     g_iface,
                                                 guint       *n_properties_p);
 
+GLIB_AVAILABLE_IN_ALL
 GType       g_object_get_type                 (void) G_GNUC_CONST;
+GLIB_AVAILABLE_IN_ALL
 gpointer    g_object_new                      (GType           object_type,
                                               const gchar    *first_property_name,
                                               ...);
+GLIB_AVAILABLE_IN_ALL
 gpointer    g_object_newv                    (GType           object_type,
                                               guint           n_parameters,
                                               GParameter     *parameters);
+GLIB_AVAILABLE_IN_ALL
 GObject*    g_object_new_valist               (GType           object_type,
                                               const gchar    *first_property_name,
                                               va_list         var_args);
+GLIB_AVAILABLE_IN_ALL
 void       g_object_set                      (gpointer        object,
                                               const gchar    *first_property_name,
                                               ...) G_GNUC_NULL_TERMINATED;
+GLIB_AVAILABLE_IN_ALL
 void        g_object_get                      (gpointer        object,
                                               const gchar    *first_property_name,
                                               ...) G_GNUC_NULL_TERMINATED;
+GLIB_AVAILABLE_IN_ALL
 gpointer    g_object_connect                  (gpointer               object,
                                               const gchar    *signal_spec,
                                               ...) G_GNUC_NULL_TERMINATED;
+GLIB_AVAILABLE_IN_ALL
 void       g_object_disconnect               (gpointer        object,
                                               const gchar    *signal_spec,
                                               ...) G_GNUC_NULL_TERMINATED;
+GLIB_AVAILABLE_IN_ALL
 void        g_object_set_valist               (GObject        *object,
                                               const gchar    *first_property_name,
                                               va_list         var_args);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_get_valist               (GObject        *object,
                                               const gchar    *first_property_name,
                                               va_list         var_args);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_set_property             (GObject        *object,
                                               const gchar    *property_name,
                                               const GValue   *value);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_get_property             (GObject        *object,
                                               const gchar    *property_name,
                                               GValue         *value);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_freeze_notify            (GObject        *object);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_notify                   (GObject        *object,
                                               const gchar    *property_name);
+GLIB_AVAILABLE_IN_ALL
+void        g_object_notify_by_pspec          (GObject        *object,
+                                              GParamSpec     *pspec);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_thaw_notify              (GObject        *object);
+GLIB_AVAILABLE_IN_ALL
 gboolean    g_object_is_floating             (gpointer        object);
+GLIB_AVAILABLE_IN_ALL
 gpointer    g_object_ref_sink                (gpointer        object);
+GLIB_AVAILABLE_IN_ALL
 gpointer    g_object_ref                      (gpointer        object);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_unref                    (gpointer        object);
+GLIB_AVAILABLE_IN_ALL
 void       g_object_weak_ref                 (GObject        *object,
                                               GWeakNotify     notify,
                                               gpointer        data);
+GLIB_AVAILABLE_IN_ALL
 void       g_object_weak_unref               (GObject        *object,
                                               GWeakNotify     notify,
                                               gpointer        data);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_add_weak_pointer         (GObject        *object, 
                                                gpointer       *weak_pointer_location);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_remove_weak_pointer      (GObject        *object, 
                                                gpointer       *weak_pointer_location);
 
@@ -467,47 +509,94 @@ typedef void (*GToggleNotify) (gpointer      data,
                               GObject      *object,
                               gboolean      is_last_ref);
 
+GLIB_AVAILABLE_IN_ALL
 void g_object_add_toggle_ref    (GObject       *object,
                                 GToggleNotify  notify,
                                 gpointer       data);
+GLIB_AVAILABLE_IN_ALL
 void g_object_remove_toggle_ref (GObject       *object,
                                 GToggleNotify  notify,
                                 gpointer       data);
 
+GLIB_AVAILABLE_IN_ALL
 gpointer    g_object_get_qdata                (GObject        *object,
                                               GQuark          quark);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_set_qdata                (GObject        *object,
                                               GQuark          quark,
                                               gpointer        data);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_set_qdata_full           (GObject        *object,
                                               GQuark          quark,
                                               gpointer        data,
                                               GDestroyNotify  destroy);
+GLIB_AVAILABLE_IN_ALL
 gpointer    g_object_steal_qdata              (GObject        *object,
                                               GQuark          quark);
+
+GLIB_AVAILABLE_IN_2_34
+gpointer    g_object_dup_qdata                (GObject        *object,
+                                               GQuark          quark,
+                                               GDuplicateFunc  dup_func,
+                                              gpointer         user_data);
+GLIB_AVAILABLE_IN_2_34
+gboolean    g_object_replace_qdata            (GObject        *object,
+                                               GQuark          quark,
+                                               gpointer        oldval,
+                                               gpointer        newval,
+                                               GDestroyNotify  destroy,
+                                              GDestroyNotify *old_destroy);
+
+GLIB_AVAILABLE_IN_ALL
 gpointer    g_object_get_data                 (GObject        *object,
                                               const gchar    *key);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_set_data                 (GObject        *object,
                                               const gchar    *key,
                                               gpointer        data);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_set_data_full            (GObject        *object,
                                               const gchar    *key,
                                               gpointer        data,
                                               GDestroyNotify  destroy);
+GLIB_AVAILABLE_IN_ALL
 gpointer    g_object_steal_data               (GObject        *object,
                                               const gchar    *key);
+
+GLIB_AVAILABLE_IN_2_34
+gpointer    g_object_dup_data                 (GObject        *object,
+                                               const gchar    *key,
+                                               GDuplicateFunc  dup_func,
+                                              gpointer         user_data);
+GLIB_AVAILABLE_IN_2_34
+gboolean    g_object_replace_data             (GObject        *object,
+                                               const gchar    *key,
+                                               gpointer        oldval,
+                                               gpointer        newval,
+                                               GDestroyNotify  destroy,
+                                              GDestroyNotify *old_destroy);
+
+
+GLIB_AVAILABLE_IN_ALL
 void        g_object_watch_closure            (GObject        *object,
                                               GClosure       *closure);
+GLIB_AVAILABLE_IN_ALL
 GClosure*   g_cclosure_new_object             (GCallback       callback_func,
                                               GObject        *object);
+GLIB_AVAILABLE_IN_ALL
 GClosure*   g_cclosure_new_object_swap        (GCallback       callback_func,
                                               GObject        *object);
+GLIB_AVAILABLE_IN_ALL
 GClosure*   g_closure_new_object              (guint           sizeof_closure,
                                               GObject        *object);
+GLIB_AVAILABLE_IN_ALL
 void        g_value_set_object                (GValue         *value,
                                               gpointer        v_object);
+GLIB_AVAILABLE_IN_ALL
 gpointer    g_value_get_object                (const GValue   *value);
+GLIB_AVAILABLE_IN_ALL
 gpointer    g_value_dup_object                (const GValue   *value);
+GLIB_AVAILABLE_IN_ALL
 gulong     g_signal_connect_object           (gpointer        instance,
                                               const gchar    *detailed_signal,
                                               GCallback       c_handler,
@@ -515,35 +604,36 @@ gulong        g_signal_connect_object           (gpointer        instance,
                                               GConnectFlags   connect_flags);
 
 /*< protected >*/
+GLIB_AVAILABLE_IN_ALL
 void        g_object_force_floating           (GObject        *object);
+GLIB_AVAILABLE_IN_ALL
 void        g_object_run_dispose             (GObject        *object);
 
 
+GLIB_AVAILABLE_IN_ALL
 void        g_value_take_object               (GValue         *value,
                                               gpointer        v_object);
-#ifndef G_DISABLE_DEPRECATED
+GLIB_DEPRECATED_FOR(g_value_take_object)
 void        g_value_set_object_take_ownership (GValue         *value,
-                                              gpointer        v_object);
-#endif
+                                               gpointer        v_object);
 
-#if !defined(G_DISABLE_DEPRECATED) || defined(GTK_COMPILATION)
+GLIB_DEPRECATED
 gsize      g_object_compat_control           (gsize           what,
                                               gpointer        data);
-#endif
 
 /* --- implementation macros --- */
 #define G_OBJECT_WARN_INVALID_PSPEC(object, pname, property_id, pspec) \
 G_STMT_START { \
-  GObject *_object = (GObject*) (object); \
-  GParamSpec *_pspec = (GParamSpec*) (pspec); \
-  guint _property_id = (property_id); \
-  g_warning ("%s: invalid %s id %u for \"%s\" of type `%s' in `%s'", \
+  GObject *_glib__object = (GObject*) (object); \
+  GParamSpec *_glib__pspec = (GParamSpec*) (pspec); \
+  guint _glib__property_id = (property_id); \
+  g_warning ("%s: invalid %s id %u for \"%s\" of type '%s' in '%s'", \
              G_STRLOC, \
              (pname), \
-             _property_id, \
-             _pspec->name, \
-             g_type_name (G_PARAM_SPEC_TYPE (_pspec)), \
-             G_OBJECT_TYPE_NAME (_object)); \
+             _glib__property_id, \
+             _glib__pspec->name, \
+             g_type_name (G_PARAM_SPEC_TYPE (_glib__pspec)), \
+             G_OBJECT_TYPE_NAME (_glib__object)); \
 } G_STMT_END
 /**
  * G_OBJECT_WARN_INVALID_PROPERTY_ID:
@@ -557,6 +647,26 @@ G_STMT_START { \
 #define G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec) \
     G_OBJECT_WARN_INVALID_PSPEC ((object), "property", (property_id), (pspec))
 
+GLIB_AVAILABLE_IN_ALL
+void    g_clear_object (volatile GObject **object_ptr);
+#define g_clear_object(object_ptr) g_clear_pointer ((object_ptr), g_object_unref)
+
+typedef struct {
+    /*<private>*/
+    union { gpointer p; } priv;
+} GWeakRef;
+
+GLIB_AVAILABLE_IN_ALL
+void     g_weak_ref_init       (GWeakRef *weak_ref,
+                                gpointer  object);
+GLIB_AVAILABLE_IN_ALL
+void     g_weak_ref_clear      (GWeakRef *weak_ref);
+GLIB_AVAILABLE_IN_ALL
+gpointer g_weak_ref_get        (GWeakRef *weak_ref);
+GLIB_AVAILABLE_IN_ALL
+void     g_weak_ref_set        (GWeakRef *weak_ref,
+                                gpointer  object);
+
 G_END_DECLS
 
 #endif /* __G_OBJECT_H__ */