Blame gobject/gobject.h

Packit Service d3d246
/* GObject - GLib Type, Object, Parameter and Signal Library
Packit Service d3d246
 * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc.
Packit Service d3d246
 *
Packit Service d3d246
 * This library is free software; you can redistribute it and/or
Packit Service d3d246
 * modify it under the terms of the GNU Lesser General Public
Packit Service d3d246
 * License as published by the Free Software Foundation; either
Packit Service d3d246
 * version 2.1 of the License, or (at your option) any later version.
Packit Service d3d246
 *
Packit Service d3d246
 * This library is distributed in the hope that it will be useful,
Packit Service d3d246
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service d3d246
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service d3d246
 * Lesser General Public License for more details.
Packit Service d3d246
 *
Packit Service d3d246
 * You should have received a copy of the GNU Lesser General
Packit Service d3d246
 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
Packit Service d3d246
 */
Packit Service d3d246
#ifndef __G_OBJECT_H__
Packit Service d3d246
#define __G_OBJECT_H__
Packit Service d3d246
Packit Service d3d246
#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
Packit Service d3d246
#error "Only <glib-object.h> can be included directly."
Packit Service d3d246
#endif
Packit Service d3d246
Packit Service d3d246
#include        <gobject/gtype.h>
Packit Service d3d246
#include        <gobject/gvalue.h>
Packit Service d3d246
#include        <gobject/gparam.h>
Packit Service d3d246
#include        <gobject/gclosure.h>
Packit Service d3d246
#include        <gobject/gsignal.h>
Packit Service d3d246
#include        <gobject/gboxed.h>
Packit Service d3d246
Packit Service d3d246
G_BEGIN_DECLS
Packit Service d3d246
Packit Service d3d246
/* --- type macros --- */
Packit Service d3d246
/**
Packit Service d3d246
 * G_TYPE_IS_OBJECT:
Packit Service d3d246
 * @type: Type id to check
Packit Service d3d246
 * 
Packit Service d3d246
 * Check if the passed in type id is a %G_TYPE_OBJECT or derived from it.
Packit Service d3d246
 * 
Packit Service d3d246
 * Returns: %FALSE or %TRUE, indicating whether @type is a %G_TYPE_OBJECT.
Packit Service d3d246
 */
Packit Service d3d246
#define G_TYPE_IS_OBJECT(type)      (G_TYPE_FUNDAMENTAL (type) == G_TYPE_OBJECT)
Packit Service d3d246
/**
Packit Service d3d246
 * G_OBJECT:
Packit Service d3d246
 * @object: Object which is subject to casting.
Packit Service d3d246
 * 
Packit Service d3d246
 * Casts a #GObject or derived pointer into a (GObject*) pointer.
Packit Service d3d246
 * Depending on the current debugging level, this function may invoke
Packit Service d3d246
 * certain runtime checks to identify invalid casts.
Packit Service d3d246
 */
Packit Service d3d246
#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
Packit Service d3d246
/**
Packit Service d3d246
 * G_OBJECT_CLASS:
Packit Service d3d246
 * @class: a valid #GObjectClass
Packit Service d3d246
 * 
Packit Service d3d246
 * Casts a derived #GObjectClass structure into a #GObjectClass structure.
Packit Service d3d246
 */
Packit Service d3d246
#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
Packit Service d3d246
/**
Packit Service d3d246
 * G_IS_OBJECT:
Packit Service d3d246
 * @object: Instance to check for being a %G_TYPE_OBJECT.
Packit Service d3d246
 * 
Packit Service d3d246
 * Checks whether a valid #GTypeInstance pointer is of type %G_TYPE_OBJECT.
Packit Service d3d246
 */
Packit Service d3d246
#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_42
Packit Service d3d246
#define G_IS_OBJECT(object)         (G_TYPE_CHECK_INSTANCE_FUNDAMENTAL_TYPE ((object), G_TYPE_OBJECT))
Packit Service d3d246
#else
Packit Service d3d246
#define G_IS_OBJECT(object)         (G_TYPE_CHECK_INSTANCE_TYPE ((object), G_TYPE_OBJECT))
Packit Service d3d246
#endif
Packit Service d3d246
/**
Packit Service d3d246
 * G_IS_OBJECT_CLASS:
Packit Service d3d246
 * @class: a #GObjectClass
Packit Service d3d246
 * 
Packit Service d3d246
 * Checks whether @class "is a" valid #GObjectClass structure of type
Packit Service d3d246
 * %G_TYPE_OBJECT or derived.
Packit Service d3d246
 */
Packit Service d3d246
#define G_IS_OBJECT_CLASS(class)    (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_OBJECT))
Packit Service d3d246
/**
Packit Service d3d246
 * G_OBJECT_GET_CLASS:
Packit Service d3d246
 * @object: a #GObject instance.
Packit Service d3d246
 * 
Packit Service d3d246
 * Get the class structure associated to a #GObject instance.
Packit Service d3d246
 *
Packit Service d3d246
 * Returns: pointer to object class structure.
Packit Service d3d246
 */
Packit Service d3d246
#define G_OBJECT_GET_CLASS(object)  (G_TYPE_INSTANCE_GET_CLASS ((object), G_TYPE_OBJECT, GObjectClass))
Packit Service d3d246
/**
Packit Service d3d246
 * G_OBJECT_TYPE:
Packit Service d3d246
 * @object: Object to return the type id for.
Packit Service d3d246
 * 
Packit Service d3d246
 * Get the type id of an object.
Packit Service d3d246
 * 
Packit Service d3d246
 * Returns: Type id of @object.
Packit Service d3d246
 */
Packit Service d3d246
#define G_OBJECT_TYPE(object)       (G_TYPE_FROM_INSTANCE (object))
Packit Service d3d246
/**
Packit Service d3d246
 * G_OBJECT_TYPE_NAME:
Packit Service d3d246
 * @object: Object to return the type name for.
Packit Service d3d246
 * 
Packit Service d3d246
 * Get the name of an object's type.
Packit Service d3d246
 * 
Packit Service d3d246
 * Returns: Type name of @object. The string is owned by the type system and 
Packit Service d3d246
 *  should not be freed.
Packit Service d3d246
 */
Packit Service d3d246
#define G_OBJECT_TYPE_NAME(object)  (g_type_name (G_OBJECT_TYPE (object)))
Packit Service d3d246
/**
Packit Service d3d246
 * G_OBJECT_CLASS_TYPE:
Packit Service d3d246
 * @class: a valid #GObjectClass
Packit Service d3d246
 * 
Packit Service d3d246
 * Get the type id of a class structure.
Packit Service d3d246
 * 
Packit Service d3d246
 * Returns: Type id of @class.
Packit Service d3d246
 */
Packit Service d3d246
#define G_OBJECT_CLASS_TYPE(class)  (G_TYPE_FROM_CLASS (class))
Packit Service d3d246
/**
Packit Service d3d246
 * G_OBJECT_CLASS_NAME:
Packit Service d3d246
 * @class: a valid #GObjectClass
Packit Service d3d246
 * 
Packit Service d3d246
 * Return the name of a class structure's type.
Packit Service d3d246
 * 
Packit Service d3d246
 * Returns: Type name of @class. The string is owned by the type system and 
Packit Service d3d246
 *  should not be freed.
Packit Service d3d246
 */
Packit Service d3d246
#define G_OBJECT_CLASS_NAME(class)  (g_type_name (G_OBJECT_CLASS_TYPE (class)))
Packit Service d3d246
/**
Packit Service d3d246
 * G_VALUE_HOLDS_OBJECT:
Packit Service d3d246
 * @value: a valid #GValue structure
Packit Service d3d246
 * 
Packit Service d3d246
 * Checks whether the given #GValue can hold values derived from type %G_TYPE_OBJECT.
Packit Service d3d246
 * 
Packit Service d3d246
 * Returns: %TRUE on success.
Packit Service d3d246
 */
Packit Service d3d246
#define G_VALUE_HOLDS_OBJECT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_OBJECT))
Packit Service d3d246
Packit Service d3d246
/* --- type macros --- */
Packit Service d3d246
/**
Packit Service d3d246
 * G_TYPE_INITIALLY_UNOWNED:
Packit Service d3d246
 * 
Packit Service d3d246
 * The type for #GInitiallyUnowned.
Packit Service d3d246
 */
Packit Service d3d246
#define G_TYPE_INITIALLY_UNOWNED	      (g_initially_unowned_get_type())
Packit Service d3d246
/**
Packit Service d3d246
 * G_INITIALLY_UNOWNED:
Packit Service d3d246
 * @object: Object which is subject to casting.
Packit Service d3d246
 * 
Packit Service d3d246
 * Casts a #GInitiallyUnowned or derived pointer into a (GInitiallyUnowned*) 
Packit Service d3d246
 * pointer. Depending on the current debugging level, this function may invoke
Packit Service d3d246
 * certain runtime checks to identify invalid casts.
Packit Service d3d246
 */
Packit Service d3d246
#define G_INITIALLY_UNOWNED(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnowned))
Packit Service d3d246
/**
Packit Service d3d246
 * G_INITIALLY_UNOWNED_CLASS:
Packit Service d3d246
 * @class: a valid #GInitiallyUnownedClass
Packit Service d3d246
 * 
Packit Service d3d246
 * Casts a derived #GInitiallyUnownedClass structure into a
Packit Service d3d246
 * #GInitiallyUnownedClass structure.
Packit Service d3d246
 */
Packit Service d3d246
#define G_INITIALLY_UNOWNED_CLASS(class)      (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnownedClass))
Packit Service d3d246
/**
Packit Service d3d246
 * G_IS_INITIALLY_UNOWNED:
Packit Service d3d246
 * @object: Instance to check for being a %G_TYPE_INITIALLY_UNOWNED.
Packit Service d3d246
 * 
Packit Service d3d246
 * Checks whether a valid #GTypeInstance pointer is of type %G_TYPE_INITIALLY_UNOWNED.
Packit Service d3d246
 */
Packit Service d3d246
#define G_IS_INITIALLY_UNOWNED(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), G_TYPE_INITIALLY_UNOWNED))
Packit Service d3d246
/**
Packit Service d3d246
 * G_IS_INITIALLY_UNOWNED_CLASS:
Packit Service d3d246
 * @class: a #GInitiallyUnownedClass
Packit Service d3d246
 * 
Packit Service d3d246
 * Checks whether @class "is a" valid #GInitiallyUnownedClass structure of type
Packit Service d3d246
 * %G_TYPE_INITIALLY_UNOWNED or derived.
Packit Service d3d246
 */
Packit Service d3d246
#define G_IS_INITIALLY_UNOWNED_CLASS(class)   (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_INITIALLY_UNOWNED))
Packit Service d3d246
/**
Packit Service d3d246
 * G_INITIALLY_UNOWNED_GET_CLASS:
Packit Service d3d246
 * @object: a #GInitiallyUnowned instance.
Packit Service d3d246
 * 
Packit Service d3d246
 * Get the class structure associated to a #GInitiallyUnowned instance.
Packit Service d3d246
 *
Packit Service d3d246
 * Returns: pointer to object class structure.
Packit Service d3d246
 */
Packit Service d3d246
#define G_INITIALLY_UNOWNED_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnownedClass))
Packit Service d3d246
/* GInitiallyUnowned ia a GObject with initially floating reference count */
Packit Service d3d246
Packit Service d3d246
Packit Service d3d246
/* --- typedefs & structures --- */
Packit Service d3d246
typedef struct _GObject                  GObject;
Packit Service d3d246
typedef struct _GObjectClass             GObjectClass;
Packit Service d3d246
typedef struct _GObject                  GInitiallyUnowned;
Packit Service d3d246
typedef struct _GObjectClass             GInitiallyUnownedClass;
Packit Service d3d246
typedef struct _GObjectConstructParam    GObjectConstructParam;
Packit Service d3d246
/**
Packit Service d3d246
 * GObjectGetPropertyFunc:
Packit Service d3d246
 * @object: a #GObject
Packit Service d3d246
 * @property_id: the numeric id under which the property was registered with
Packit Service d3d246
 *  g_object_class_install_property().
Packit Service d3d246
 * @value: a #GValue to return the property value in
Packit Service d3d246
 * @pspec: the #GParamSpec describing the property
Packit Service d3d246
 * 
Packit Service d3d246
 * The type of the @get_property function of #GObjectClass. 
Packit Service d3d246
 */
Packit Service d3d246
typedef void (*GObjectGetPropertyFunc)  (GObject      *object,
Packit Service d3d246
                                         guint         property_id,
Packit Service d3d246
                                         GValue       *value,
Packit Service d3d246
                                         GParamSpec   *pspec);
Packit Service d3d246
/**
Packit Service d3d246
 * GObjectSetPropertyFunc:
Packit Service d3d246
 * @object: a #GObject
Packit Service d3d246
 * @property_id: the numeric id under which the property was registered with
Packit Service d3d246
 *  g_object_class_install_property().
Packit Service d3d246
 * @value: the new value for the property
Packit Service d3d246
 * @pspec: the #GParamSpec describing the property
Packit Service d3d246
 * 
Packit Service d3d246
 * The type of the @set_property function of #GObjectClass. 
Packit Service d3d246
 */
Packit Service d3d246
typedef void (*GObjectSetPropertyFunc)  (GObject      *object,
Packit Service d3d246
                                         guint         property_id,
Packit Service d3d246
                                         const GValue *value,
Packit Service d3d246
                                         GParamSpec   *pspec);
Packit Service d3d246
/**
Packit Service d3d246
 * GObjectFinalizeFunc:
Packit Service d3d246
 * @object: the #GObject being finalized
Packit Service d3d246
 * 
Packit Service d3d246
 * The type of the @finalize function of #GObjectClass.
Packit Service d3d246
 */
Packit Service d3d246
typedef void (*GObjectFinalizeFunc)     (GObject      *object);
Packit Service d3d246
/**
Packit Service d3d246
 * GWeakNotify:
Packit Service d3d246
 * @data: data that was provided when the weak reference was established
Packit Service d3d246
 * @where_the_object_was: the object being finalized
Packit Service d3d246
 * 
Packit Service d3d246
 * A #GWeakNotify function can be added to an object as a callback that gets
Packit Service d3d246
 * triggered when the object is finalized. Since the object is already being
Packit Service d3d246
 * finalized when the #GWeakNotify is called, there's not much you could do 
Packit Service d3d246
 * with the object, apart from e.g. using its address as hash-index or the like. 
Packit Service d3d246
 */
Packit Service d3d246
typedef void (*GWeakNotify)		(gpointer      data,
Packit Service d3d246
					 GObject      *where_the_object_was);
Packit Service d3d246
/**
Packit Service d3d246
 * GObject:
Packit Service d3d246
 * 
Packit Service d3d246
 * All the fields in the GObject structure are private 
Packit Service d3d246
 * to the #GObject implementation and should never be accessed directly.
Packit Service d3d246
 */
Packit Service d3d246
struct  _GObject
Packit Service d3d246
{
Packit Service d3d246
  GTypeInstance  g_type_instance;
Packit Service d3d246
  
Packit Service d3d246
  /*< private >*/
Packit Service d3d246
  volatile guint ref_count;
Packit Service d3d246
  GData         *qdata;
Packit Service d3d246
};
Packit Service d3d246
/**
Packit Service d3d246
 * GObjectClass:
Packit Service d3d246
 * @g_type_class: the parent class
Packit Service d3d246
 * @constructor: the @constructor function is called by g_object_new () to 
Packit Service d3d246
 *  complete the object initialization after all the construction properties are
Packit Service d3d246
 *  set. The first thing a @constructor implementation must do is chain up to the
Packit Service d3d246
 *  @constructor of the parent class. Overriding @constructor should be rarely 
Packit Service d3d246
 *  needed, e.g. to handle construct properties, or to implement singletons.
Packit Service d3d246
 * @set_property: the generic setter for all properties of this type. Should be
Packit Service d3d246
 *  overridden for every type with properties. If implementations of
Packit Service d3d246
 *  @set_property don't emit property change notification explicitly, this will
Packit Service d3d246
 *  be done implicitly by the type system. However, if the notify signal is
Packit Service d3d246
 *  emitted explicitly, the type system will not emit it a second time.
Packit Service d3d246
 * @get_property: the generic getter for all properties of this type. Should be
Packit Service d3d246
 *  overridden for every type with properties.
Packit Service d3d246
 * @dispose: the @dispose function is supposed to drop all references to other 
Packit Service d3d246
 *  objects, but keep the instance otherwise intact, so that client method 
Packit Service d3d246
 *  invocations still work. It may be run multiple times (due to reference 
Packit Service d3d246
 *  loops). Before returning, @dispose should chain up to the @dispose method 
Packit Service d3d246
 *  of the parent class.
Packit Service d3d246
 * @finalize: instance finalization function, should finish the finalization of 
Packit Service d3d246
 *  the instance begun in @dispose and chain up to the @finalize method of the 
Packit Service d3d246
 *  parent class.
Packit Service d3d246
 * @dispatch_properties_changed: emits property change notification for a bunch
Packit Service d3d246
 *  of properties. Overriding @dispatch_properties_changed should be rarely 
Packit Service d3d246
 *  needed.
Packit Service d3d246
 * @notify: the class closure for the notify signal
Packit Service d3d246
 * @constructed: the @constructed function is called by g_object_new() as the
Packit Service d3d246
 *  final step of the object creation process.  At the point of the call, all
Packit Service d3d246
 *  construction properties have been set on the object.  The purpose of this
Packit Service d3d246
 *  call is to allow for object initialisation steps that can only be performed
Packit Service d3d246
 *  after construction properties have been set.  @constructed implementors
Packit Service d3d246
 *  should chain up to the @constructed call of their parent class to allow it
Packit Service d3d246
 *  to complete its initialisation.
Packit Service d3d246
 * 
Packit Service d3d246
 * The class structure for the GObject type.
Packit Service d3d246
 * 
Packit Service d3d246
 * |[
Packit Service d3d246
 * // Example of implementing a singleton using a constructor.
Packit Service d3d246
 * static MySingleton *the_singleton = NULL;
Packit Service d3d246
 * 
Packit Service d3d246
 * static GObject*
Packit Service d3d246
 * my_singleton_constructor (GType                  type,
Packit Service d3d246
 *                           guint                  n_construct_params,
Packit Service d3d246
 *                           GObjectConstructParam *construct_params)
Packit Service d3d246
 * {
Packit Service d3d246
 *   GObject *object;
Packit Service d3d246
 *   
Packit Service d3d246
 *   if (!the_singleton)
Packit Service d3d246
 *     {
Packit Service d3d246
 *       object = G_OBJECT_CLASS (parent_class)->constructor (type,
Packit Service d3d246
 *                                                            n_construct_params,
Packit Service d3d246
 *                                                            construct_params);
Packit Service d3d246
 *       the_singleton = MY_SINGLETON (object);
Packit Service d3d246
 *     }
Packit Service d3d246
 *   else
Packit Service d3d246
 *     object = g_object_ref (G_OBJECT (the_singleton));
Packit Service d3d246
 * 
Packit Service d3d246
 *   return object;
Packit Service d3d246
 * }
Packit Service d3d246
 * ]|
Packit Service d3d246
 */
Packit Service d3d246
struct  _GObjectClass
Packit Service d3d246
{
Packit Service d3d246
  GTypeClass   g_type_class;
Packit Service d3d246
Packit Service d3d246
  /*< private >*/
Packit Service d3d246
  GSList      *construct_properties;
Packit Service d3d246
Packit Service d3d246
  /*< public >*/
Packit Service d3d246
  /* seldom overidden */
Packit Service d3d246
  GObject*   (*constructor)     (GType                  type,
Packit Service d3d246
                                 guint                  n_construct_properties,
Packit Service d3d246
                                 GObjectConstructParam *construct_properties);
Packit Service d3d246
  /* overridable methods */
Packit Service d3d246
  void       (*set_property)		(GObject        *object,
Packit Service d3d246
                                         guint           property_id,
Packit Service d3d246
                                         const GValue   *value,
Packit Service d3d246
                                         GParamSpec     *pspec);
Packit Service d3d246
  void       (*get_property)		(GObject        *object,
Packit Service d3d246
                                         guint           property_id,
Packit Service d3d246
                                         GValue         *value,
Packit Service d3d246
                                         GParamSpec     *pspec);
Packit Service d3d246
  void       (*dispose)			(GObject        *object);
Packit Service d3d246
  void       (*finalize)		(GObject        *object);
Packit Service d3d246
  /* seldom overidden */
Packit Service d3d246
  void       (*dispatch_properties_changed) (GObject      *object,
Packit Service d3d246
					     guint	   n_pspecs,
Packit Service d3d246
					     GParamSpec  **pspecs);
Packit Service d3d246
  /* signals */
Packit Service d3d246
  void	     (*notify)			(GObject	*object,
Packit Service d3d246
					 GParamSpec	*pspec);
Packit Service d3d246
Packit Service d3d246
  /* called when done constructing */
Packit Service d3d246
  void	     (*constructed)		(GObject	*object);
Packit Service d3d246
Packit Service d3d246
  /*< private >*/
Packit Service d3d246
  gsize		flags;
Packit Service d3d246
Packit Service d3d246
  /* padding */
Packit Service d3d246
  gpointer	pdummy[6];
Packit Service d3d246
};
Packit Service d3d246
/**
Packit Service d3d246
 * GObjectConstructParam:
Packit Service d3d246
 * @pspec: the #GParamSpec of the construct parameter
Packit Service d3d246
 * @value: the value to set the parameter to
Packit Service d3d246
 * 
Packit Service d3d246
 * The GObjectConstructParam struct is an auxiliary 
Packit Service d3d246
 * structure used to hand #GParamSpec/#GValue pairs to the @constructor of
Packit Service d3d246
 * a #GObjectClass.
Packit Service d3d246
 */
Packit Service d3d246
struct _GObjectConstructParam
Packit Service d3d246
{
Packit Service d3d246
  GParamSpec *pspec;
Packit Service d3d246
  GValue     *value;
Packit Service d3d246
};
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * GInitiallyUnowned:
Packit Service d3d246
 * 
Packit Service d3d246
 * All the fields in the GInitiallyUnowned structure 
Packit Service d3d246
 * are private to the #GInitiallyUnowned implementation and should never be 
Packit Service d3d246
 * accessed directly.
Packit Service d3d246
 */
Packit Service d3d246
/**
Packit Service d3d246
 * GInitiallyUnownedClass:
Packit Service d3d246
 * 
Packit Service d3d246
 * The class structure for the GInitiallyUnowned type.
Packit Service d3d246
 */
Packit Service d3d246
Packit Service d3d246
Packit Service d3d246
/* --- prototypes --- */
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
GType       g_initially_unowned_get_type      (void);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_class_install_property   (GObjectClass   *oclass,
Packit Service d3d246
					       guint           property_id,
Packit Service d3d246
					       GParamSpec     *pspec);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
GParamSpec* g_object_class_find_property      (GObjectClass   *oclass,
Packit Service d3d246
					       const gchar    *property_name);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
GParamSpec**g_object_class_list_properties    (GObjectClass   *oclass,
Packit Service d3d246
					       guint	      *n_properties);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_class_override_property  (GObjectClass   *oclass,
Packit Service d3d246
					       guint           property_id,
Packit Service d3d246
					       const gchar    *name);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_class_install_properties (GObjectClass   *oclass,
Packit Service d3d246
                                               guint           n_pspecs,
Packit Service d3d246
                                               GParamSpec    **pspecs);
Packit Service d3d246
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_interface_install_property (gpointer     g_iface,
Packit Service d3d246
						 GParamSpec  *pspec);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
GParamSpec* g_object_interface_find_property    (gpointer     g_iface,
Packit Service d3d246
						 const gchar *property_name);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
GParamSpec**g_object_interface_list_properties  (gpointer     g_iface,
Packit Service d3d246
						 guint       *n_properties_p);
Packit Service d3d246
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
GType       g_object_get_type                 (void) G_GNUC_CONST;
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
gpointer    g_object_new                      (GType           object_type,
Packit Service d3d246
					       const gchar    *first_property_name,
Packit Service d3d246
					       ...);
Packit Service d3d246
GLIB_AVAILABLE_IN_2_54
Packit Service d3d246
GObject*    g_object_new_with_properties      (GType           object_type,
Packit Service d3d246
                                               guint           n_properties,
Packit Service d3d246
                                               const char     *names[],
Packit Service d3d246
                                               const GValue    values[]);
Packit Service d3d246
GLIB_DEPRECATED_IN_2_54_FOR(g_object_new_with_properties)
Packit Service d3d246
gpointer    g_object_newv		      (GType           object_type,
Packit Service d3d246
					       guint	       n_parameters,
Packit Service d3d246
					       GParameter     *parameters);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
GObject*    g_object_new_valist               (GType           object_type,
Packit Service d3d246
					       const gchar    *first_property_name,
Packit Service d3d246
					       va_list         var_args);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void	    g_object_set                      (gpointer	       object,
Packit Service d3d246
					       const gchar    *first_property_name,
Packit Service d3d246
					       ...) G_GNUC_NULL_TERMINATED;
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_get                      (gpointer        object,
Packit Service d3d246
					       const gchar    *first_property_name,
Packit Service d3d246
					       ...) G_GNUC_NULL_TERMINATED;
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
gpointer    g_object_connect                  (gpointer	       object,
Packit Service d3d246
					       const gchar    *signal_spec,
Packit Service d3d246
					       ...) G_GNUC_NULL_TERMINATED;
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void	    g_object_disconnect               (gpointer	       object,
Packit Service d3d246
					       const gchar    *signal_spec,
Packit Service d3d246
					       ...) G_GNUC_NULL_TERMINATED;
Packit Service d3d246
GLIB_AVAILABLE_IN_2_54
Packit Service d3d246
void        g_object_setv                     (GObject        *object,
Packit Service d3d246
                                               guint           n_properties,
Packit Service d3d246
                                               const gchar    *names[],
Packit Service d3d246
                                               const GValue    values[]);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_set_valist               (GObject        *object,
Packit Service d3d246
					       const gchar    *first_property_name,
Packit Service d3d246
					       va_list         var_args);
Packit Service d3d246
GLIB_AVAILABLE_IN_2_54
Packit Service d3d246
void        g_object_getv                     (GObject        *object,
Packit Service d3d246
                                               guint           n_properties,
Packit Service d3d246
                                               const gchar    *names[],
Packit Service d3d246
                                               GValue          values[]);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_get_valist               (GObject        *object,
Packit Service d3d246
					       const gchar    *first_property_name,
Packit Service d3d246
					       va_list         var_args);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_set_property             (GObject        *object,
Packit Service d3d246
					       const gchar    *property_name,
Packit Service d3d246
					       const GValue   *value);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_get_property             (GObject        *object,
Packit Service d3d246
					       const gchar    *property_name,
Packit Service d3d246
					       GValue         *value);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_freeze_notify            (GObject        *object);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_notify                   (GObject        *object,
Packit Service d3d246
					       const gchar    *property_name);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_notify_by_pspec          (GObject        *object,
Packit Service d3d246
					       GParamSpec     *pspec);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_thaw_notify              (GObject        *object);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
gboolean    g_object_is_floating    	      (gpointer        object);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
gpointer    g_object_ref_sink       	      (gpointer	       object);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
gpointer    g_object_ref                      (gpointer        object);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_unref                    (gpointer        object);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void	    g_object_weak_ref		      (GObject	      *object,
Packit Service d3d246
					       GWeakNotify     notify,
Packit Service d3d246
					       gpointer	       data);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void	    g_object_weak_unref		      (GObject	      *object,
Packit Service d3d246
					       GWeakNotify     notify,
Packit Service d3d246
					       gpointer	       data);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_add_weak_pointer         (GObject        *object, 
Packit Service d3d246
                                               gpointer       *weak_pointer_location);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_remove_weak_pointer      (GObject        *object, 
Packit Service d3d246
                                               gpointer       *weak_pointer_location);
Packit Service d3d246
Packit Service d3d246
#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) && !defined(__cplusplus) && GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_56
Packit Service d3d246
/* Make reference APIs type safe with macros */
Packit Service d3d246
#define g_object_ref(Obj)      ((__typeof__(Obj)) (g_object_ref) (Obj))
Packit Service d3d246
#define g_object_ref_sink(Obj) ((__typeof__(Obj)) (g_object_ref_sink) (Obj))
Packit Service d3d246
#endif
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * GToggleNotify:
Packit Service d3d246
 * @data: Callback data passed to g_object_add_toggle_ref()
Packit Service d3d246
 * @object: The object on which g_object_add_toggle_ref() was called.
Packit Service d3d246
 * @is_last_ref: %TRUE if the toggle reference is now the
Packit Service d3d246
 *  last reference to the object. %FALSE if the toggle
Packit Service d3d246
 *  reference was the last reference and there are now other
Packit Service d3d246
 *  references.
Packit Service d3d246
 * 
Packit Service d3d246
 * A callback function used for notification when the state
Packit Service d3d246
 * of a toggle reference changes. See g_object_add_toggle_ref().
Packit Service d3d246
 */
Packit Service d3d246
typedef void (*GToggleNotify) (gpointer      data,
Packit Service d3d246
			       GObject      *object,
Packit Service d3d246
			       gboolean      is_last_ref);
Packit Service d3d246
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void g_object_add_toggle_ref    (GObject       *object,
Packit Service d3d246
				 GToggleNotify  notify,
Packit Service d3d246
				 gpointer       data);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void g_object_remove_toggle_ref (GObject       *object,
Packit Service d3d246
				 GToggleNotify  notify,
Packit Service d3d246
				 gpointer       data);
Packit Service d3d246
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
gpointer    g_object_get_qdata                (GObject        *object,
Packit Service d3d246
					       GQuark          quark);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_set_qdata                (GObject        *object,
Packit Service d3d246
					       GQuark          quark,
Packit Service d3d246
					       gpointer        data);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_set_qdata_full           (GObject        *object,
Packit Service d3d246
					       GQuark          quark,
Packit Service d3d246
					       gpointer        data,
Packit Service d3d246
					       GDestroyNotify  destroy);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
gpointer    g_object_steal_qdata              (GObject        *object,
Packit Service d3d246
					       GQuark          quark);
Packit Service d3d246
Packit Service d3d246
GLIB_AVAILABLE_IN_2_34
Packit Service d3d246
gpointer    g_object_dup_qdata                (GObject        *object,
Packit Service d3d246
                                               GQuark          quark,
Packit Service d3d246
                                               GDuplicateFunc  dup_func,
Packit Service d3d246
					       gpointer         user_data);
Packit Service d3d246
GLIB_AVAILABLE_IN_2_34
Packit Service d3d246
gboolean    g_object_replace_qdata            (GObject        *object,
Packit Service d3d246
                                               GQuark          quark,
Packit Service d3d246
                                               gpointer        oldval,
Packit Service d3d246
                                               gpointer        newval,
Packit Service d3d246
                                               GDestroyNotify  destroy,
Packit Service d3d246
					       GDestroyNotify *old_destroy);
Packit Service d3d246
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
gpointer    g_object_get_data                 (GObject        *object,
Packit Service d3d246
					       const gchar    *key);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_set_data                 (GObject        *object,
Packit Service d3d246
					       const gchar    *key,
Packit Service d3d246
					       gpointer        data);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_set_data_full            (GObject        *object,
Packit Service d3d246
					       const gchar    *key,
Packit Service d3d246
					       gpointer        data,
Packit Service d3d246
					       GDestroyNotify  destroy);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
gpointer    g_object_steal_data               (GObject        *object,
Packit Service d3d246
					       const gchar    *key);
Packit Service d3d246
Packit Service d3d246
GLIB_AVAILABLE_IN_2_34
Packit Service d3d246
gpointer    g_object_dup_data                 (GObject        *object,
Packit Service d3d246
                                               const gchar    *key,
Packit Service d3d246
                                               GDuplicateFunc  dup_func,
Packit Service d3d246
					       gpointer         user_data);
Packit Service d3d246
GLIB_AVAILABLE_IN_2_34
Packit Service d3d246
gboolean    g_object_replace_data             (GObject        *object,
Packit Service d3d246
                                               const gchar    *key,
Packit Service d3d246
                                               gpointer        oldval,
Packit Service d3d246
                                               gpointer        newval,
Packit Service d3d246
                                               GDestroyNotify  destroy,
Packit Service d3d246
					       GDestroyNotify *old_destroy);
Packit Service d3d246
Packit Service d3d246
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_watch_closure            (GObject        *object,
Packit Service d3d246
					       GClosure       *closure);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
GClosure*   g_cclosure_new_object             (GCallback       callback_func,
Packit Service d3d246
					       GObject	      *object);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
GClosure*   g_cclosure_new_object_swap        (GCallback       callback_func,
Packit Service d3d246
					       GObject	      *object);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
GClosure*   g_closure_new_object              (guint           sizeof_closure,
Packit Service d3d246
					       GObject        *object);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_value_set_object                (GValue         *value,
Packit Service d3d246
					       gpointer        v_object);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
gpointer    g_value_get_object                (const GValue   *value);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
gpointer    g_value_dup_object                (const GValue   *value);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
gulong	    g_signal_connect_object           (gpointer	       instance,
Packit Service d3d246
					       const gchar    *detailed_signal,
Packit Service d3d246
					       GCallback       c_handler,
Packit Service d3d246
					       gpointer	       gobject,
Packit Service d3d246
					       GConnectFlags   connect_flags);
Packit Service d3d246
Packit Service d3d246
/*< protected >*/
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_force_floating           (GObject        *object);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_object_run_dispose	      (GObject	      *object);
Packit Service d3d246
Packit Service d3d246
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void        g_value_take_object               (GValue         *value,
Packit Service d3d246
					       gpointer        v_object);
Packit Service d3d246
GLIB_DEPRECATED_FOR(g_value_take_object)
Packit Service d3d246
void        g_value_set_object_take_ownership (GValue         *value,
Packit Service d3d246
                                               gpointer        v_object);
Packit Service d3d246
Packit Service d3d246
GLIB_DEPRECATED
Packit Service d3d246
gsize	    g_object_compat_control	      (gsize	       what,
Packit Service d3d246
					       gpointer	       data);
Packit Service d3d246
Packit Service d3d246
/* --- implementation macros --- */
Packit Service d3d246
#define G_OBJECT_WARN_INVALID_PSPEC(object, pname, property_id, pspec) \
Packit Service d3d246
G_STMT_START { \
Packit Service d3d246
  GObject *_glib__object = (GObject*) (object); \
Packit Service d3d246
  GParamSpec *_glib__pspec = (GParamSpec*) (pspec); \
Packit Service d3d246
  guint _glib__property_id = (property_id); \
Packit Service d3d246
  g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'", \
Packit Service d3d246
             __FILE__, __LINE__, \
Packit Service d3d246
             (pname), \
Packit Service d3d246
             _glib__property_id, \
Packit Service d3d246
             _glib__pspec->name, \
Packit Service d3d246
             g_type_name (G_PARAM_SPEC_TYPE (_glib__pspec)), \
Packit Service d3d246
             G_OBJECT_TYPE_NAME (_glib__object)); \
Packit Service d3d246
} G_STMT_END
Packit Service d3d246
/**
Packit Service d3d246
 * G_OBJECT_WARN_INVALID_PROPERTY_ID:
Packit Service d3d246
 * @object: the #GObject on which set_property() or get_property() was called
Packit Service d3d246
 * @property_id: the numeric id of the property
Packit Service d3d246
 * @pspec: the #GParamSpec of the property
Packit Service d3d246
 * 
Packit Service d3d246
 * This macro should be used to emit a standard warning about unexpected 
Packit Service d3d246
 * properties in set_property() and get_property() implementations.
Packit Service d3d246
 */
Packit Service d3d246
#define G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec) \
Packit Service d3d246
    G_OBJECT_WARN_INVALID_PSPEC ((object), "property", (property_id), (pspec))
Packit Service d3d246
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void    g_clear_object (volatile GObject **object_ptr);
Packit Service d3d246
#define g_clear_object(object_ptr) g_clear_pointer ((object_ptr), g_object_unref)
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * g_set_object: (skip)
Packit Service d3d246
 * @object_ptr: a pointer to a #GObject reference
Packit Service d3d246
 * @new_object: (nullable) (transfer none): a pointer to the new #GObject to
Packit Service d3d246
 *   assign to it, or %NULL to clear the pointer
Packit Service d3d246
 *
Packit Service d3d246
 * Updates a #GObject pointer to refer to @new_object. It increments the
Packit Service d3d246
 * reference count of @new_object (if non-%NULL), decrements the reference
Packit Service d3d246
 * count of the current value of @object_ptr (if non-%NULL), and assigns
Packit Service d3d246
 * @new_object to @object_ptr. The assignment is not atomic.
Packit Service d3d246
 *
Packit Service d3d246
 * @object_ptr must not be %NULL.
Packit Service d3d246
 *
Packit Service d3d246
 * A macro is also included that allows this function to be used without
Packit Service d3d246
 * pointer casts. The function itself is static inline, so its address may vary
Packit Service d3d246
 * between compilation units.
Packit Service d3d246
 *
Packit Service d3d246
 * One convenient usage of this function is in implementing property setters:
Packit Service d3d246
 * |[
Packit Service d3d246
 *   void
Packit Service d3d246
 *   foo_set_bar (Foo *foo,
Packit Service d3d246
 *                Bar *new_bar)
Packit Service d3d246
 *   {
Packit Service d3d246
 *     g_return_if_fail (IS_FOO (foo));
Packit Service d3d246
 *     g_return_if_fail (new_bar == NULL || IS_BAR (new_bar));
Packit Service d3d246
 *
Packit Service d3d246
 *     if (g_set_object (&foo->bar, new_bar))
Packit Service d3d246
 *       g_object_notify (foo, "bar");
Packit Service d3d246
 *   }
Packit Service d3d246
 * ]|
Packit Service d3d246
 *
Packit Service d3d246
 * Returns: %TRUE if the value of @object_ptr changed, %FALSE otherwise
Packit Service d3d246
 *
Packit Service d3d246
 * Since: 2.44
Packit Service d3d246
 */
Packit Service d3d246
static inline gboolean
Packit Service d3d246
(g_set_object) (GObject **object_ptr,
Packit Service d3d246
                GObject  *new_object)
Packit Service d3d246
{
Packit Service d3d246
  GObject *old_object = *object_ptr;
Packit Service d3d246
Packit Service d3d246
  /* rely on g_object_[un]ref() to check the pointers are actually GObjects;
Packit Service d3d246
   * elide a (object_ptr != NULL) check because most of the time we will be
Packit Service d3d246
   * operating on struct members with a constant offset, so a NULL check would
Packit Service d3d246
   * not catch bugs
Packit Service d3d246
   */
Packit Service d3d246
Packit Service d3d246
  if (old_object == new_object)
Packit Service d3d246
    return FALSE;
Packit Service d3d246
Packit Service d3d246
  if (new_object != NULL)
Packit Service d3d246
    g_object_ref (new_object);
Packit Service d3d246
Packit Service d3d246
  *object_ptr = new_object;
Packit Service d3d246
Packit Service d3d246
  if (old_object != NULL)
Packit Service d3d246
    g_object_unref (old_object);
Packit Service d3d246
Packit Service d3d246
  return TRUE;
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
#define g_set_object(object_ptr, new_object) \
Packit Service d3d246
 (/* Check types match. */ \
Packit Service d3d246
  0 ? *(object_ptr) = (new_object), FALSE : \
Packit Service d3d246
  (g_set_object) ((GObject **) (object_ptr), (GObject *) (new_object)) \
Packit Service d3d246
 )
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * g_clear_weak_pointer: (skip)
Packit Service d3d246
 * @weak_pointer_location: The memory address of a pointer
Packit Service d3d246
 *
Packit Service d3d246
 * Clears a weak reference to a #GObject.
Packit Service d3d246
 *
Packit Service d3d246
 * @weak_pointer_location must not be %NULL.
Packit Service d3d246
 *
Packit Service d3d246
 * If the weak reference is %NULL then this function does nothing.
Packit Service d3d246
 * Otherwise, the weak reference to the object is removed for that location
Packit Service d3d246
 * and the pointer is set to %NULL.
Packit Service d3d246
 *
Packit Service d3d246
 * A macro is also included that allows this function to be used without
Packit Service d3d246
 * pointer casts. The function itself is static inline, so its address may vary
Packit Service d3d246
 * between compilation units.
Packit Service d3d246
 *
Packit Service d3d246
 * Since: 2.56
Packit Service d3d246
 */
Packit Service d3d246
static inline void
Packit Service d3d246
(g_clear_weak_pointer) (gpointer *weak_pointer_location)
Packit Service d3d246
{
Packit Service d3d246
  GObject *object = (GObject *) *weak_pointer_location;
Packit Service d3d246
Packit Service d3d246
  if (object != NULL)
Packit Service d3d246
    {
Packit Service d3d246
      g_object_remove_weak_pointer (object, weak_pointer_location);
Packit Service d3d246
      *weak_pointer_location = NULL;
Packit Service d3d246
    }
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
#define g_clear_weak_pointer(weak_pointer_location) \
Packit Service d3d246
 (/* Check types match. */ \
Packit Service d3d246
  (g_clear_weak_pointer) ((gpointer *) (weak_pointer_location)) \
Packit Service d3d246
 )
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * g_set_weak_pointer: (skip)
Packit Service d3d246
 * @weak_pointer_location: the memory address of a pointer
Packit Service d3d246
 * @new_object: (nullable) (transfer none): a pointer to the new #GObject to
Packit Service d3d246
 *   assign to it, or %NULL to clear the pointer
Packit Service d3d246
 *
Packit Service d3d246
 * Updates a pointer to weakly refer to @new_object. It assigns @new_object
Packit Service d3d246
 * to @weak_pointer_location and ensures that @weak_pointer_location will
Packit Service d3d246
 * automaticaly be set to %NULL if @new_object gets destroyed. The assignment
Packit Service d3d246
 * is not atomic. The weak reference is not thread-safe, see
Packit Service d3d246
 * g_object_add_weak_pointer() for details.
Packit Service d3d246
 *
Packit Service d3d246
 * @weak_pointer_location must not be %NULL.
Packit Service d3d246
 *
Packit Service d3d246
 * A macro is also included that allows this function to be used without
Packit Service d3d246
 * pointer casts. The function itself is static inline, so its address may vary
Packit Service d3d246
 * between compilation units.
Packit Service d3d246
 *
Packit Service d3d246
 * One convenient usage of this function is in implementing property setters:
Packit Service d3d246
 * |[
Packit Service d3d246
 *   void
Packit Service d3d246
 *   foo_set_bar (Foo *foo,
Packit Service d3d246
 *                Bar *new_bar)
Packit Service d3d246
 *   {
Packit Service d3d246
 *     g_return_if_fail (IS_FOO (foo));
Packit Service d3d246
 *     g_return_if_fail (new_bar == NULL || IS_BAR (new_bar));
Packit Service d3d246
 *
Packit Service d3d246
 *     if (g_set_weak_pointer (&foo->bar, new_bar))
Packit Service d3d246
 *       g_object_notify (foo, "bar");
Packit Service d3d246
 *   }
Packit Service d3d246
 * ]|
Packit Service d3d246
 *
Packit Service d3d246
 * Returns: %TRUE if the value of @weak_pointer_location changed, %FALSE otherwise
Packit Service d3d246
 *
Packit Service d3d246
 * Since: 2.56
Packit Service d3d246
 */
Packit Service d3d246
static inline gboolean
Packit Service d3d246
(g_set_weak_pointer) (gpointer *weak_pointer_location,
Packit Service d3d246
                      GObject  *new_object)
Packit Service d3d246
{
Packit Service d3d246
  GObject *old_object = (GObject *) *weak_pointer_location;
Packit Service d3d246
Packit Service d3d246
  /* elide a (weak_pointer_location != NULL) check because most of the time we
Packit Service d3d246
   * will be operating on struct members with a constant offset, so a NULL
Packit Service d3d246
   * check would not catch bugs
Packit Service d3d246
   */
Packit Service d3d246
Packit Service d3d246
  if (old_object == new_object)
Packit Service d3d246
    return FALSE;
Packit Service d3d246
Packit Service d3d246
  if (old_object != NULL)
Packit Service d3d246
    g_object_remove_weak_pointer (old_object, weak_pointer_location);
Packit Service d3d246
Packit Service d3d246
  *weak_pointer_location = new_object;
Packit Service d3d246
Packit Service d3d246
  if (new_object != NULL)
Packit Service d3d246
    g_object_add_weak_pointer (new_object, weak_pointer_location);
Packit Service d3d246
Packit Service d3d246
  return TRUE;
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
#define g_set_weak_pointer(weak_pointer_location, new_object) \
Packit Service d3d246
 (/* Check types match. */ \
Packit Service d3d246
  0 ? *(weak_pointer_location) = (new_object), FALSE : \
Packit Service d3d246
  (g_set_weak_pointer) ((gpointer *) (weak_pointer_location), (GObject *) (new_object)) \
Packit Service d3d246
 )
Packit Service d3d246
Packit Service d3d246
typedef struct {
Packit Service d3d246
    /*<private>*/
Packit Service d3d246
    union { gpointer p; } priv;
Packit Service d3d246
} GWeakRef;
Packit Service d3d246
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void     g_weak_ref_init       (GWeakRef *weak_ref,
Packit Service d3d246
                                gpointer  object);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void     g_weak_ref_clear      (GWeakRef *weak_ref);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
gpointer g_weak_ref_get        (GWeakRef *weak_ref);
Packit Service d3d246
GLIB_AVAILABLE_IN_ALL
Packit Service d3d246
void     g_weak_ref_set        (GWeakRef *weak_ref,
Packit Service d3d246
                                gpointer  object);
Packit Service d3d246
Packit Service d3d246
G_END_DECLS
Packit Service d3d246
Packit Service d3d246
#endif /* __G_OBJECT_H__ */