mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-23 10:42:11 +01:00
By renaming the variable holding the properties array (which can also conflict with existing code) we can avoid the lowercase type name.
1073 lines
44 KiB
C
1073 lines
44 KiB
C
/* gproperty.h: Property definitions for GObject
|
|
*
|
|
* Copyright © 2013 Emmanuele Bassi
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef __G_PROPERTY_H__
|
|
#define __G_PROPERTY_H__
|
|
|
|
#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
|
|
#error "Only <glib-object.h> can be included directly."
|
|
#endif
|
|
|
|
#include <glib.h>
|
|
#include <gobject/gparam.h>
|
|
#include <gobject/gobject.h>
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
#define G_TYPE_PROPERTY (g_property_get_type ())
|
|
#define G_PROPERTY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_PROPERTY, GProperty))
|
|
#define G_IS_PROPERTY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_PROPERTY))
|
|
|
|
/**
|
|
* GProperty:
|
|
*
|
|
* The <structname>GProperty</structname> structure is an opaque structure
|
|
* whose members cannot be directly accessed.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
typedef struct _GProperty GProperty;
|
|
|
|
/**
|
|
* GPropertyFlags:
|
|
* @G_PROPERTY_READABLE: Whether the property is readable
|
|
* @G_PROPERTY_WRITABLE: Whether the property is writable
|
|
* @G_PROPERTY_READWRITE: Whether the property is readable and writable
|
|
* @G_PROPERTY_COPY_SET: Whether the property will make a copy or
|
|
* take a reference when being set to a new value
|
|
* @G_PROPERTY_COPY_GET: Whether the property will make a copy or
|
|
* take a reference when the value is being retrieved
|
|
* @G_PROPERTY_COPY: Whether the property will make a copy, or take a
|
|
* reference, of the new value being set, and return a copy, or
|
|
* increase the reference count, of the value being retrieved
|
|
* @G_PROPERTY_DEPRECATED: Whether the property is deprecated and should
|
|
* not be accessed in newly written code.
|
|
* @G_PROPERTY_CONSTRUCT_ONLY: Whether the property is meant to be set
|
|
* only during construction. Implies %G_PROPERTY_WRITABLE.
|
|
*
|
|
* Flags for properties declared using #GProperty and relative macros.
|
|
*
|
|
* This enumeration might be extended at later date.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
typedef enum {
|
|
G_PROPERTY_READABLE = 1 << 0,
|
|
G_PROPERTY_WRITABLE = 1 << 1,
|
|
G_PROPERTY_READWRITE = (G_PROPERTY_READABLE | G_PROPERTY_WRITABLE),
|
|
|
|
G_PROPERTY_COPY_SET = 1 << 2,
|
|
G_PROPERTY_COPY_GET = 1 << 3,
|
|
G_PROPERTY_COPY = (G_PROPERTY_COPY_SET | G_PROPERTY_COPY_GET),
|
|
|
|
G_PROPERTY_DEPRECATED = 1 << 4,
|
|
G_PROPERTY_CONSTRUCT_ONLY = 1 << 5
|
|
} GPropertyFlags;
|
|
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GType g_property_get_type (void) G_GNUC_CONST;
|
|
|
|
/* general purpose API */
|
|
GLIB_AVAILABLE_IN_2_38
|
|
const gchar * g_property_canonicalize_name (const char *name);
|
|
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GType g_property_get_value_type (GProperty *property);
|
|
|
|
GLIB_AVAILABLE_IN_2_38
|
|
gboolean g_property_is_writable (GProperty *property);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
gboolean g_property_is_readable (GProperty *property);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
gboolean g_property_is_deprecated (GProperty *property);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
gboolean g_property_is_copy_set (GProperty *property);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
gboolean g_property_is_copy_get (GProperty *property);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
gboolean g_property_is_construct_only (GProperty *property);
|
|
|
|
GLIB_AVAILABLE_IN_2_38
|
|
void g_property_set_range_values (GProperty *property,
|
|
const GValue *min_value,
|
|
const GValue *max_value);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
gboolean g_property_get_range_values (GProperty *property,
|
|
GValue *min_value,
|
|
GValue *max_value);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
void g_property_set_range (GProperty *property,
|
|
...);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
gboolean g_property_get_range (GProperty *property,
|
|
...);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
void g_property_set_default_value (GProperty *property,
|
|
const GValue *value);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
void g_property_get_default_value (GProperty *property,
|
|
gpointer gobject,
|
|
GValue *value);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
void g_property_override_default_value (GProperty *property,
|
|
GType gtype,
|
|
const GValue *value);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
void g_property_set_default (GProperty *property,
|
|
...);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
void g_property_get_default (GProperty *property,
|
|
gpointer gobject,
|
|
...);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
void g_property_override_default (GProperty *property,
|
|
GType gtype,
|
|
...);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
void g_property_set_prerequisite (GProperty *property,
|
|
...);
|
|
|
|
GLIB_AVAILABLE_IN_2_38
|
|
gboolean g_property_validate (GProperty *property,
|
|
...);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
gboolean g_property_validate_value (GProperty *property,
|
|
GValue *value);
|
|
|
|
GLIB_AVAILABLE_IN_2_38
|
|
gboolean g_property_set_value (GProperty *property,
|
|
gpointer gobject,
|
|
const GValue *value);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
void g_property_get_value (GProperty *property,
|
|
gpointer gobject,
|
|
GValue *value);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
gboolean g_property_set (GProperty *property,
|
|
gpointer gobject,
|
|
...);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
gboolean g_property_get (GProperty *property,
|
|
gpointer gobject,
|
|
...);
|
|
|
|
/**
|
|
* GPropertyCollectFlags:
|
|
* @G_PROPERTY_COLLECT_NONE: No flags
|
|
* @G_PROPERTY_COLLECT_COPY: Make a copy when collecting pointer
|
|
* locations for boxed and string values
|
|
* @G_PROPERTY_COLLECT_REF: Take a reference when collecting
|
|
* pointer locations for object values
|
|
*
|
|
* Flags to pass to g_property_collect() and g_property_lcopy().
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
typedef enum { /*< prefix=G_PROPERTY_COLLECT >*/
|
|
G_PROPERTY_COLLECT_NONE = 0,
|
|
|
|
G_PROPERTY_COLLECT_COPY = 1 << 0,
|
|
G_PROPERTY_COLLECT_REF = 1 << 1
|
|
} GPropertyCollectFlags;
|
|
|
|
GLIB_AVAILABLE_IN_2_38
|
|
gboolean g_property_set_va (GProperty *property,
|
|
gpointer gobject,
|
|
GPropertyCollectFlags flags,
|
|
va_list *app);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
gboolean g_property_get_va (GProperty *property,
|
|
gpointer gobject,
|
|
GPropertyCollectFlags flags,
|
|
va_list *app);
|
|
|
|
/* per-type specific accessors */
|
|
typedef void (* GPropertyBooleanSet) (gpointer gobject,
|
|
gboolean value);
|
|
typedef gboolean (* GPropertyBooleanGet) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyIntSet) (gpointer gobject,
|
|
gint value);
|
|
typedef gint (* GPropertyIntGet) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyInt8Set) (gpointer gobject,
|
|
gint8 value);
|
|
typedef gint8 (* GPropertyInt8Get) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyInt16Set) (gpointer gobject,
|
|
gint16 value);
|
|
typedef gint16 (* GPropertyInt16Get) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyInt32Set) (gpointer gobject,
|
|
gint32 value);
|
|
typedef gint32 (* GPropertyInt32Get) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyInt64Set) (gpointer gobject,
|
|
gint64 value);
|
|
typedef gint64 (* GPropertyInt64Get) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyLongSet) (gpointer gobject,
|
|
glong value);
|
|
typedef glong (* GPropertyLongGet) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyUIntSet) (gpointer gobject,
|
|
guint value);
|
|
typedef guint (* GPropertyUIntGet) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyUInt8Set) (gpointer gobject,
|
|
guint8 value);
|
|
typedef guint8 (* GPropertyUInt8Get) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyUInt16Set) (gpointer gobject,
|
|
guint16 value);
|
|
typedef guint16 (* GPropertyUInt16Get) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyUInt32Set) (gpointer gobject,
|
|
guint32 value);
|
|
typedef guint32 (* GPropertyUInt32Get) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyUInt64Set) (gpointer gobject,
|
|
guint64 value);
|
|
typedef guint64 (* GPropertyUInt64Get) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyULongSet) (gpointer gobject,
|
|
gulong value);
|
|
typedef gulong (* GPropertyULongGet) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyEnumSet) (gpointer gobject,
|
|
gint value);
|
|
typedef gint (* GPropertyEnumGet) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyFlagsSet) (gpointer gobject,
|
|
guint value);
|
|
typedef guint (* GPropertyFlagsGet) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyFloatSet) (gpointer gobject,
|
|
gfloat value);
|
|
typedef gfloat (* GPropertyFloatGet) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyDoubleSet) (gpointer gobject,
|
|
gdouble value);
|
|
typedef gdouble (* GPropertyDoubleGet) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyStringSet) (gpointer gobject,
|
|
const char *value);
|
|
typedef const char * (* GPropertyStringGet) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyBoxedSet) (gpointer gobject,
|
|
gpointer value);
|
|
typedef gpointer (* GPropertyBoxedGet) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyObjectSet) (gpointer gobject,
|
|
gpointer value);
|
|
typedef gpointer (* GPropertyObjectGet) (gpointer gobject);
|
|
|
|
typedef void (* GPropertyPointerSet) (gpointer gobject,
|
|
gpointer value);
|
|
typedef gpointer (* GPropertyPointerGet) (gpointer gobject);
|
|
|
|
/* per-type specific constructors */
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_boolean_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyBooleanSet setter,
|
|
GPropertyBooleanGet getter);
|
|
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_int_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyIntSet setter,
|
|
GPropertyIntGet getter);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_int8_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyInt8Set setter,
|
|
GPropertyInt8Get getter);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_int16_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyInt16Set setter,
|
|
GPropertyInt16Get getter);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_int32_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyInt32Set setter,
|
|
GPropertyInt32Get getter);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_int64_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyInt64Set setter,
|
|
GPropertyInt64Get getter);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_long_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyLongSet setter,
|
|
GPropertyLongGet getter);
|
|
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_uint_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyUIntSet setter,
|
|
GPropertyUIntGet getter);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_uint8_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyUInt8Set setter,
|
|
GPropertyUInt8Get getter);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_uint16_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyUInt16Set setter,
|
|
GPropertyUInt16Get getter);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_uint32_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyUInt32Set setter,
|
|
GPropertyUInt32Get getter);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_uint64_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyUInt64Set setter,
|
|
GPropertyUInt64Get getter);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_ulong_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyULongSet setter,
|
|
GPropertyULongGet getter);
|
|
|
|
#define g_char_property_new g_int8_property_new
|
|
#define g_uchar_property_new g_uint8_property_new
|
|
#define g_unichar_property_new g_uint32_property_new
|
|
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_enum_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyEnumSet setter,
|
|
GPropertyEnumGet getter);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_flags_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyFlagsSet setter,
|
|
GPropertyFlagsGet getter);
|
|
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_float_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyFloatSet setter,
|
|
GPropertyFloatGet getter);
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_double_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyDoubleSet setter,
|
|
GPropertyDoubleGet getter);
|
|
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_string_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyStringSet setter,
|
|
GPropertyStringGet getter);
|
|
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_boxed_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyBoxedSet setter,
|
|
GPropertyBoxedGet getter);
|
|
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_object_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyObjectSet setter,
|
|
GPropertyObjectGet getter);
|
|
|
|
GLIB_AVAILABLE_IN_2_38
|
|
GParamSpec * g_pointer_property_new (const gchar *name,
|
|
GPropertyFlags flags,
|
|
gssize field_offset,
|
|
GPropertyPointerSet setter,
|
|
GPropertyPointerGet getter);
|
|
|
|
|
|
/* private API */
|
|
void g_property_set_installed (GProperty *property,
|
|
gpointer g_class,
|
|
GType class_gtype);
|
|
void g_property_init_default (GProperty *property,
|
|
gpointer object);
|
|
|
|
/* property generation */
|
|
|
|
/**
|
|
* G_PROPERTY_DESCRIBE:
|
|
* @p_nick: a human readable, translatable name for the property
|
|
* @p_blurb: a human readable, translatable description for the property
|
|
*
|
|
* Sets the property nick and blurb using two static strings.
|
|
*
|
|
* This macro can only be called inside %G_DEFINE_PROPERTY_EXTENDED.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_PROPERTY_DESCRIBE(p_nick, p_blurb) \
|
|
{ \
|
|
GParamSpec *__g_param_spec = (GParamSpec *) g_property; \
|
|
g_param_spec_set_static_nick (__g_param_spec, p_nick); \
|
|
g_param_spec_set_static_blurb (__g_param_spec, p_blurb); \
|
|
}
|
|
|
|
/**
|
|
* G_PROPERTY_DEFAULT:
|
|
* @p_val: the default value of the property
|
|
*
|
|
* Sets the default value for the property.
|
|
*
|
|
* This macro can only be called inside %G_DEFINE_PROPERTY_EXTENDED.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_PROPERTY_DEFAULT(p_val) \
|
|
g_property_set_default (g_property, p_val);
|
|
|
|
/**
|
|
* G_PROPERTY_RANGE:
|
|
* @p_min: the minimum value of the valid range for the property
|
|
* @p_max: the maximum value of the valid range for the property
|
|
*
|
|
* Sets the range of valid values for the property.
|
|
*
|
|
* This macro can only be called inside %G_DEFINE_PROPERTY_EXTENDED.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_PROPERTY_RANGE(p_min, p_max) \
|
|
g_property_set_range (g_property, p_min, p_max);
|
|
|
|
/**
|
|
* G_PROPERTY_PREREQUISITE:
|
|
* @type: the prerequisite type for the property
|
|
*
|
|
* Sets the prerequisite type for enumeration, flags, boxed,
|
|
* and object properties.
|
|
*
|
|
* This macro can only be called inside %G_DEFINE_PROPERTY_EXTENDED.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_PROPERTY_PREREQUISITE(type) \
|
|
g_property_set_prerequisite (g_property, type);
|
|
|
|
#define _G_DEFINE_PROPERTIES_BEGIN() \
|
|
{ \
|
|
GPtrArray *g_define_properties = g_ptr_array_new (); \
|
|
g_ptr_array_add (g_define_properties, NULL);
|
|
|
|
#define _G_DEFINE_PROPERTIES_END(TypeName, g_class) \
|
|
TypeName##_properties_len = g_define_properties->len; \
|
|
TypeName##_properties = (GParamSpec **) g_ptr_array_free (g_define_properties, FALSE); \
|
|
g_object_class_install_properties (G_OBJECT_CLASS (g_class), \
|
|
TypeName##_properties_len, \
|
|
TypeName##_properties); \
|
|
}
|
|
|
|
/**
|
|
* G_DEFINE_PROPERTIES:
|
|
* @T_N: the name of the type, in CamelCase
|
|
* @g_class: a pointer to the class structure of the type
|
|
* @_C_: a list of G_DEFINE_PROPERTY_EXTENDED calls
|
|
*
|
|
* Defines a list of properties and installs them on the class.
|
|
*
|
|
* Note that this macro can only be used with types defined using
|
|
* G_DEFINE_TYPE_* macros, as it depends on variables defined by
|
|
* those macros.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_DEFINE_PROPERTIES(T_N, g_class, _C_) \
|
|
_G_DEFINE_PROPERTIES_BEGIN() \
|
|
{ _C_; } \
|
|
_G_DEFINE_PROPERTIES_END(T_N, g_class)
|
|
|
|
#define _G_DEFINE_DIRECT_PROPERTY_EXTENDED_BEGIN(T_N, c_type, name, flags) \
|
|
{ \
|
|
GProperty *g_property = (GProperty *) \
|
|
g_##c_type##_property_new (#name, flags, \
|
|
G_PRIVATE_OFFSET (T_N, name), \
|
|
NULL, \
|
|
NULL);
|
|
#define _G_DEFINE_PROPERTY_EXTENDED_BEGIN(T_N, c_type, name, offset, setterFunc, getterFunc, flags) \
|
|
{ \
|
|
GProperty *g_property = (GProperty *) \
|
|
g_##c_type##_property_new (#name, flags, \
|
|
offset, \
|
|
setterFunc, \
|
|
getterFunc);
|
|
#define _G_DEFINE_PROPERTY_EXTENDED_END \
|
|
g_ptr_array_add (g_define_properties, g_property); \
|
|
}
|
|
|
|
/**
|
|
* G_DEFINE_PROPERTY_EXTENDED:
|
|
* @T_N: the name of the type, in CamelCase
|
|
* @c_type: the C type of the property, in lower case, minus the "g" if the type
|
|
* is defined by GLib; for instance "int" for "gint", "uint8" for "guint8",
|
|
* "boolean" for "gboolean"; strings stored in a gchar* are defined as "string"
|
|
* @name: the name of the property, in lower case, with '-' replaced by '_'
|
|
* @offset: the offset of the field in the structure that stores the property, or 0
|
|
* @setterFunc: the explicit setter function, or %NULL for direct access
|
|
* @getterFunc: the explicit getter function, or %NULL for direct access
|
|
* @flags: #GPropertyFlags for the property
|
|
* @_C_: custom code to be called after the property has been defined; the
|
|
* GProperty instance is available under the "g_property" variable
|
|
*
|
|
* The most generic property definition macro.
|
|
*
|
|
* |[
|
|
* G_DEFINE_PROPERTY_EXTENDED (GtkGadget,
|
|
* int,
|
|
* width,
|
|
* G_PRIVATE_OFFSET (GtkGadget, width),
|
|
* NULL, NULL,
|
|
* G_PROPERTY_READWRITE,
|
|
* G_PROPERTY_RANGE (0, G_MAXINT))
|
|
* ]|
|
|
* expands to
|
|
* |[
|
|
* {
|
|
* GProperty *g_property =
|
|
* g_int_property_new ("width", G_PROPERTY_READWRITE,
|
|
* G_PRIVATE_OFFSET (GtkGadget, width),
|
|
* NULL, NULL);
|
|
* g_property_set_range (g_property, 0, G_MAXINT);
|
|
* gtk_gadget_properties[PROP_GtkGadget_width] = g_property;
|
|
* }
|
|
* ]|
|
|
*
|
|
* This macro should only be used with G_DEFINE_PROPERTIES() as it depends
|
|
* on variables and functions defined by that macro.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_DEFINE_PROPERTY_EXTENDED(T_N, c_type, name, offset, setterFunc, getterFunc, flags, _C_) \
|
|
_G_DEFINE_PROPERTY_EXTENDED_BEGIN (T_N, c_type, name, offset, setterFunc, getterFunc, flags) \
|
|
{ _C_; } \
|
|
_G_DEFINE_PROPERTY_EXTENDED_END
|
|
|
|
/**
|
|
* G_DEFINE_PROPERTY_WITH_CODE:
|
|
* @T_N: the name of the type, in CamelCase
|
|
* @c_type: the C type of the property, in lower case, minus the "g" if the type
|
|
* is defined by GLib; for instance "int" for "gint", "uint8" for "guint8",
|
|
* "boolean" for "gboolean"; strings stored in a gchar* are defined as "string"
|
|
* @name: the name of the property, in lower case, with '-' replaced by '_'; the
|
|
* name of the property must exist as a member of the per-instance private data
|
|
* structure of the type name
|
|
* @flags: #GPropertyFlags for the property
|
|
* @_C_: custom code to be called after the property has been defined; the
|
|
* GProperty instance is available under the "g_property" variable
|
|
*
|
|
* A variant of G_DEFINE_PROPERTY_EXTENDED() that only allows properties
|
|
* with direct access, stored on the per-instance private data structure
|
|
* for the given type.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_DEFINE_PROPERTY_WITH_CODE(T_N, c_type, name, flags, _C_) \
|
|
_G_DEFINE_DIRECT_PROPERTY_EXTENDED_BEGIN (T_N, c_type, name, flags) \
|
|
{ _C_; } \
|
|
_G_DEFINE_PROPERTY_EXTENDED_END
|
|
|
|
/**
|
|
* G_DEFINE_PROPERTY_WITH_DEFAULT:
|
|
* @T_N: the name of the type, in CamelCase
|
|
* @c_type: the C type of the property, in lower case, minus the "g" if the type
|
|
* is defined by GLib; for instance "int" for "gint", "uint8" for "guint8",
|
|
* "boolean" for "gboolean"; strings stored in a gchar* are defined as "string"
|
|
* @name: the name of the property, in lower case, with '-' replaced by '_'; the
|
|
* name of the property must exist as a member of the per-instance private data
|
|
* structure of the type name
|
|
* @flags: #GPropertyFlags for the property
|
|
* @defVal: the default value of the property
|
|
*
|
|
* A convenience macro for defining a direct access property with a default
|
|
* value.
|
|
*
|
|
* See G_DEFINE_PROPERTY_WITH_CODE() and G_PROPERTY_DEFAULT().
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_DEFINE_PROPERTY_WITH_DEFAULT(T_N, c_type, name, flags, defVal) \
|
|
_G_DEFINE_DIRECT_PROPERTY_EXTENDED_BEGIN (T_N, c_type, name, flags) \
|
|
G_PROPERTY_DEFAULT (defVal) \
|
|
_G_DEFINE_PROPERTY_EXTENDED_END
|
|
|
|
/**
|
|
* G_DEFINE_PROPERTY_WITH_RANGE:
|
|
* @T_N: the name of the type, in CamelCase
|
|
* @c_type: the C type of the property, in lower case, minus the "g" if the type
|
|
* is defined by GLib; for instance "int" for "gint", "uint8" for "guint8",
|
|
* "boolean" for "gboolean"; strings stored in a gchar* are defined as "string"
|
|
* @name: the name of the property, in lower case, with '-' replaced by '_'; the
|
|
* name of the property must exist as a member of the per-instance private data
|
|
* structure of the type name
|
|
* @flags: #GPropertyFlags for the property
|
|
* @minVal: the minimum value of the property
|
|
* @maxVal: the maximum value of the property
|
|
*
|
|
* A convenience macro for defining a direct access property with a range
|
|
* of valid values.
|
|
*
|
|
* See G_DEFINE_PROPERTY_WITH_CODE() and G_PROPERTY_RANGE().
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_DEFINE_PROPERTY_WITH_RANGE(T_N, c_type, name, flags, minVal, maxVal) \
|
|
_G_DEFINE_DIRECT_PROPERTY_EXTENDED_BEGIN (T_N, c_type, name, flags) \
|
|
G_PROPERTY_RANGE (minVal, maxVal) \
|
|
_G_DEFINE_PROPERTY_EXTENDED_END
|
|
|
|
/**
|
|
* G_DEFINE_PROPERTY:
|
|
* @T_N: the name of the type, in CamelCase
|
|
* @c_type: the C type of the property, in lower case, minus the "g" if the type
|
|
* is defined by GLib; for instance "int" for "gint", "uint8" for "guint8",
|
|
* "boolean" for "gboolean"; strings stored in a gchar* are defined as "string"
|
|
* @name: the name of the property, in lower case, with '-' replaced by '_'; the
|
|
* name of the property must exist as a member of the per-instance private data
|
|
* structure of the type name
|
|
* @flags: #GPropertyFlags for the property
|
|
*
|
|
* A convenience macro for defining a direct access property.
|
|
*
|
|
* See G_DEFINE_PROPERTY_WITH_CODE() and G_DEFINE_PROPERTY_EXTENDED() if
|
|
* you need more flexibility.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_DEFINE_PROPERTY(T_N, c_type, name, flags) \
|
|
_G_DEFINE_DIRECT_PROPERTY_EXTENDED_BEGIN (T_N, c_type, name, flags) \
|
|
_G_DEFINE_PROPERTY_EXTENDED_END
|
|
|
|
/* accessors generation */
|
|
#define _G_DECLARE_PROPERTY_GETTER(T_n, t_n, f_t, f_n) f_t t_n##_get_##f_n (T_n *self)
|
|
|
|
#define _G_DEFINE_PROPERTY_DIRECT_GETTER_BEGIN(T_n, t_n, f_t, f_n) \
|
|
{ \
|
|
T_n##Private *priv; \
|
|
f_t retval; \
|
|
\
|
|
g_return_val_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (self, t_n##_get_type ()), (f_t) 0); \
|
|
\
|
|
priv = t_n##_get_instance_private (self); \
|
|
retval = priv->f_n; \
|
|
\
|
|
{ /* custom code follows */
|
|
|
|
#define _G_DEFINE_PROPERTY_INDIRECT_GETTER_BEGIN(T_n, t_n, f_t, f_n) \
|
|
{ \
|
|
GProperty *g_property = NULL; \
|
|
f_t retval; \
|
|
\
|
|
g_return_val_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (self, t_n##_get_type ()), (f_t) 0); \
|
|
\
|
|
{ \
|
|
const char *pname = g_property_canonicalize_name (#f_n); \
|
|
int i; \
|
|
\
|
|
for (i = 1; i < T_N##_properties_len; i++) \
|
|
{ \
|
|
GParamSpec *pspec = T_N##_properties[i]; \
|
|
if (pspec != NULL && pspec->name == pname) \
|
|
{ \
|
|
g_property = (GProperty *) pspec; \
|
|
break; \
|
|
} \
|
|
} \
|
|
\
|
|
if (G_UNLIKELY (g_property == NULL)) \
|
|
{ \
|
|
g_critical (G_STRLOC ": No property " #f_n " found for class %s", \
|
|
G_OBJECT_TYPE_NAME (self)); \
|
|
return (f_t) 0; \
|
|
} \
|
|
} \
|
|
\
|
|
if (!g_property_get (g_property, self, &retval)) \
|
|
{ \
|
|
g_property_get_default (g_property, self, &retval); \
|
|
return retval; \
|
|
} \
|
|
\
|
|
{ /* custom code follows */
|
|
#define _G_DEFINE_PROPERTY_GETTER_END \
|
|
} /* following custom code */ \
|
|
\
|
|
return retval; \
|
|
}
|
|
|
|
#define _G_DECLARE_PROPERTY_SETTER(T_n, t_n, f_t, f_n) void t_n##_set_##f_n (T_n *self, f_t value)
|
|
|
|
#define _G_DEFINE_PROPERTY_SETTER_BEGIN(T_n, t_n, f_t, f_n) \
|
|
{ \
|
|
GProperty *g_property = NULL; \
|
|
GObject *g_object; \
|
|
\
|
|
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (self, t_n##_get_type ())); \
|
|
\
|
|
{ \
|
|
const char *pname = g_property_canonicalize_name (#f_n); \
|
|
int i; \
|
|
\
|
|
for (i = 1; i < T_N##_properties_len; i++) \
|
|
{ \
|
|
GParamSpec *pspec = T_N##_properties[i]; \
|
|
if (pspec != NULL && pspec->name == pname) \
|
|
{ \
|
|
g_property = (GProperty *) pspec; \
|
|
break; \
|
|
} \
|
|
} \
|
|
\
|
|
if (G_UNLIKELY (g_property == NULL)) \
|
|
{ \
|
|
g_critical (G_STRLOC ": No property " #f_n " found for class %s", G_OBJECT_TYPE_NAME (self)); \
|
|
return; \
|
|
} \
|
|
} \
|
|
\
|
|
g_object = G_OBJECT (self); \
|
|
g_object_freeze_notify (g_object); \
|
|
\
|
|
if (!g_property_set (g_property, self, value)) \
|
|
{ \
|
|
g_object_thaw_notify (g_object); \
|
|
return; \
|
|
} \
|
|
\
|
|
{ /* custom code follows */
|
|
#define _G_DEFINE_PROPERTY_SETTER_END \
|
|
}/* following custom code */ \
|
|
\
|
|
g_object_thaw_notify (g_object); \
|
|
}
|
|
|
|
/**
|
|
* G_DECLARE_PROPERTY_GET_SET:
|
|
* @TypeName: the name of the type, in Camel case
|
|
* @type_name: the name of the type, in lowercase, with words separated by '_'
|
|
* @field_type: the type of the property, which must match the type of the
|
|
* field in the @TypeName<!-- -->Private structure
|
|
* @field_name: the name of the property, which must match the name of the
|
|
* field in the @TypeName<!-- -->Private structure
|
|
*
|
|
* Declares the accessor functions for a @field_name property in the
|
|
* class @TypeName. This macro should only be used in header files.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_DECLARE_PROPERTY_GET_SET(T_n, t_n, f_t, f_n) \
|
|
_G_DECLARE_PROPERTY_SETTER (T_n, t_n, f_t, f_n); \
|
|
_G_DECLARE_PROPERTY_GETTER (T_n, t_n, f_t, f_n);
|
|
|
|
/**
|
|
* G_DECLARE_PROPERTY_GET:
|
|
* @T_n: the name of the type, in Camel case
|
|
* @t_n: the name of the type, in lowercase, with words separated by '_'
|
|
* @f_t: the type of the property, which must match the type of the field
|
|
* @f_n: the name of the property, which must match the name of the field
|
|
*
|
|
* Declares the getter function for a @f_n property in the @T_n class.
|
|
*
|
|
* This macro should only be used in header files.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_DECLARE_PROPERTY_GET(T_n, t_n, f_t, f_n) _G_DECLARE_PROPERTY_GETTER (T_n, t_n, f_t, f_n);
|
|
|
|
/**
|
|
* G_DECLARE_PROPERTY_SET:
|
|
* @T_n: the name of the type, in Camel case
|
|
* @t_n: the name of the type, in lowercase, with words separated by '_'
|
|
* @f_t: the type of the property, which must match the type of the field
|
|
* @f_n: the name of the property, which must match the name of the field
|
|
*
|
|
* Declares the setter function for a @f_n property in the @T_n class.
|
|
*
|
|
* This macro should only be used in header files.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_DECLARE_PROPERTY_SET(T_n, t_n, f_t, f_n) _G_DECLARE_PROPERTY_SETTER (T_n, t_n, f_t, f_n);
|
|
|
|
/**
|
|
* G_DEFINE_PROPERTY_SET_WITH_CODE:
|
|
* @TypeName: the name of the type, in Camel case
|
|
* @type_name: the name of the type, in lowercase, with words separated by '_'
|
|
* @field_type: the type of the property, which must match the type of the
|
|
* field in the @TypeName<!-- -->Private structure
|
|
* @field_name: the name of the property, which must match the name of the
|
|
* field in the @TypeName<!-- -->Private structure
|
|
* @_C_: C code that should be called after the property has been set
|
|
*
|
|
* Defines the setter function for a @field_name property in the
|
|
* class @TypeName, with the possibility of calling custom code, for
|
|
* instance:
|
|
*
|
|
* |[
|
|
* G_DEFINE_PROPERTY_SET_WITH_CODE (ClutterActor, clutter_actor,
|
|
* int, margin_top,
|
|
* clutter_actor_queue_redraw (self))
|
|
* ]|
|
|
*
|
|
* This macro should only be used for properties defined using #GProperty.
|
|
*
|
|
* This macro should only be used in C source files.
|
|
*
|
|
* The code in @_C_ will only be called if the property was successfully
|
|
* updated to a new value.
|
|
*
|
|
* Note that this macro should be used with types defined using G_DEFINE_TYPE_*
|
|
* macros, as it depends on variables and functions defined by those macros.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
|
|
#define G_DEFINE_PROPERTY_SET_WITH_CODE(T_n, t_n, f_t, f_n, _C_) \
|
|
_G_DECLARE_PROPERTY_SETTER (T_n, t_n, f_t, f_n) \
|
|
_G_DEFINE_PROPERTY_SETTER_BEGIN (T_n, t_n, f_t, f_n) \
|
|
{ _C_; } \
|
|
_G_DEFINE_PROPERTY_SETTER_END
|
|
|
|
/**
|
|
* G_DEFINE_PROPERTY_GET_WITH_CODE:
|
|
* @T_n: the name of the type, in Camel case
|
|
* @t_n: the name of the type, in lowercase, with words separated by '_'
|
|
* @f_t: the type of the property, which must match the type of the
|
|
* field in the @T_n<!-- -->Private structure
|
|
* @f_n: the name of the property, which must match the name of the
|
|
* field in the @T_n<!-- -->Private structure
|
|
* @_C_: C code to be called after the property has been retrieved
|
|
*
|
|
* Defines the getter function for a @f_n property in the
|
|
* class @T_n, with the possibility of calling custom code.
|
|
*
|
|
* This macro will directly access the field on the private
|
|
* data structure, and should only be used if the property
|
|
* has been defined to use an offset instead of an explicit
|
|
* getter. Use G_DEFINE_PROPERTY_COMPUTED_GET_WITH_CODE() if
|
|
* you have an internal getter function.
|
|
*
|
|
* This macro should only be used in C source files.
|
|
*
|
|
* Note that this macro should be used with types defined using G_DEFINE_TYPE_*
|
|
* macros, as it depends on variables and functions defined by those macros.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_DEFINE_PROPERTY_GET_WITH_CODE(T_n, t_n, f_t, f_n, _C_) \
|
|
_G_DECLARE_PROPERTY_GETTER (T_n, t_n, f_t, f_n) \
|
|
_G_DEFINE_PROPERTY_DIRECT_GETTER_BEGIN (T_n, t_n, f_t, f_n) \
|
|
{ _C_; } \
|
|
_G_DEFINE_PROPERTY_GETTER_END
|
|
|
|
/**
|
|
* G_DEFINE_PROPERTY_INDIRECT_GET_WITH_CODE:
|
|
* @T_n: the name of the type, in Camel case
|
|
* @t_n: the name of the type, in lowercase, with words separated by '_'
|
|
* @f_t: the type of the property, which must match the type of the
|
|
* field in the @T_n<!-- -->Private structure
|
|
* @f_n: the name of the property, which must match the name of the
|
|
* field in the @T_n<!-- -->Private structure
|
|
* @_C_: C code to be called after the property has been retrieved
|
|
*
|
|
* Defines the getter function for a @f_n property in the
|
|
* class @T_n, with the possibility of calling custom code.
|
|
*
|
|
* This macro will call g_property_get().
|
|
*
|
|
* This macro should only be used in C source files.
|
|
*
|
|
* Note that this macro should be used with types defined using G_DEFINE_TYPE_*
|
|
* macros, as it depends on variables and functions defined by those macros.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_DEFINE_PROPERTY_INDIRECT_GET_WITH_CODE(T_n, t_n, f_t, f_n, _C_) \
|
|
_G_DECLARE_PROPERTY_GETTER (T_n, t_n, f_t, f_n) \
|
|
_G_DEFINE_PROPERTY_INDIRECT_GETTER_BEGIN (T_n, t_n, f_t, f_n) \
|
|
{ _C_; } \
|
|
_G_DEFINE_PROPERTY_GETTER_END
|
|
|
|
/**
|
|
* G_DEFINE_PROPERTY_SET:
|
|
* @TypeName: the name of the type, in Camel case
|
|
* @type_name: the name of the type, in lowercase, with words separated by '_'
|
|
* @field_type: the type of the property, which must match the type of the
|
|
* field in the @TypeName<!-- -->Private structure
|
|
* @field_name: the name of the property, which must match the name of the
|
|
* field in the @TypeName<!-- -->Private structure
|
|
*
|
|
* Defines the setter function for a @field_name property in the
|
|
* class @TypeName. This macro should only be used in C source files.
|
|
*
|
|
* Note that this macro should be used with types defined using G_DEFINE_TYPE_*
|
|
* macros, as it depends on variables and functions defined by those macros.
|
|
*
|
|
* See also: %G_DEFINE_PROPERTY_SET_WITH_CODE
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_DEFINE_PROPERTY_SET(T_n, t_n, f_t, f_n) G_DEFINE_PROPERTY_SET_WITH_CODE (T_n, t_n, f_t, f_n, ;)
|
|
|
|
/**
|
|
* G_DEFINE_PROPERTY_GET:
|
|
* @TypeName: the name of the type, in Camel case
|
|
* @type_name: the name of the type, in lowercase, with words separated by '_'
|
|
* @field_type: the type of the property, which must match the type of the
|
|
* field in the @TypeName<!-- -->Private structure
|
|
* @field_name: the name of the property, which must match the name of the
|
|
* field in the @TypeName<!-- -->Private structure
|
|
*
|
|
* Defines the getter function for a @field_name property in the
|
|
* class @TypeName. This macro should only be used in C source files.
|
|
*
|
|
* Note that this macro should be used with types defined using G_DEFINE_TYPE_*
|
|
* macros, as it depends on variables and functions defined by those macros.
|
|
*
|
|
* See also %G_DEFINE_PROPERTY_GET_WITH_CODE.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_DEFINE_PROPERTY_GET(T_n, t_n, f_t, f_n) G_DEFINE_PROPERTY_GET_WITH_CODE (T_n, t_n, f_t, f_n, ;)
|
|
|
|
/**
|
|
* G_DEFINE_PROPERTY_INDIRECT_GET:
|
|
* @TypeName: the name of the type, in Camel case
|
|
* @type_name: the name of the type, in lowercase, with words separated by '_'
|
|
* @field_type: the type of the property, which must match the type of the
|
|
* field in the @TypeName<!-- -->Private structure
|
|
* @field_name: the name of the property, which must match the name of the
|
|
* field in the @TypeName<!-- -->Private structure
|
|
*
|
|
* Defines the getter function for a @field_name property in the
|
|
* class @TypeName. This macro should only be used in C source files.
|
|
*
|
|
* Note that this macro should be used with types defined using G_DEFINE_TYPE_*
|
|
* macros, as it depends on variables and functions defined by those macros.
|
|
*
|
|
* See also %G_DEFINE_PROPERTY_COMPUTED_GET_WITH_CODE.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_DEFINE_PROPERTY_INDIRECT_GET(T_n, t_n, f_t, f_n) G_DEFINE_PROPERTY_INDIRECT_GET_WITH_CODE (T_n, t_n, f_t, f_n, ;)
|
|
|
|
/**
|
|
* G_DEFINE_PROPERTY_GET_SET:
|
|
* @T_n: the name of the type, in Camel case
|
|
* @t_n: the name of the type, in lowercase, with words separated by '_'
|
|
* @f_t: the type of the property, which must match the type of the
|
|
* field in the @TypeName<!-- -->Private structure
|
|
* @f_n: the name of the property, which must match the name of the
|
|
* field in the @TypeName<!-- -->Private structure
|
|
*
|
|
* Defines the accessor functions for a @f_n property in the class @T_n.
|
|
*
|
|
* This macro should only be used in C source files, for instance:
|
|
*
|
|
* |[
|
|
* G_DEFINE_PROPERTY_GET_SET (ClutterActor, clutter_actor, int, margin_top)
|
|
* ]|
|
|
*
|
|
* will synthesize the equivalent of the following code:
|
|
*
|
|
* |[
|
|
* void
|
|
* clutter_actor_set_margin_top (ClutterActor *self,
|
|
* int value)
|
|
* {
|
|
* ClutterActorPrivate *priv;
|
|
*
|
|
* g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (self, clutter_actor_get_type ()));
|
|
*
|
|
* priv = clutter_actor_get_instance_private (self);
|
|
*
|
|
* if (priv->margin_top != value)
|
|
* {
|
|
* priv->value = value;
|
|
*
|
|
* g_object_notify (G_OBJECT (self), "margin-top");
|
|
* }
|
|
* }
|
|
*
|
|
* int
|
|
* clutter_actor_get_margin_top (ClutterActor *self)
|
|
* {
|
|
* ClutterActorPrivate *priv;
|
|
*
|
|
* g_return_val_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (self, clutter_actor_get_type ()), 0);
|
|
*
|
|
* priv = clutter_actor_get_instance_private (self);
|
|
*
|
|
* return priv->margin_top;
|
|
* }
|
|
* ]|
|
|
*
|
|
* This macro will generate both the setter and getter functions; if the
|
|
* property is not readable and writable, the generated functions will
|
|
* warn at run-time.
|
|
*
|
|
* For greater control on the setter and getter implementation, see also the
|
|
* %G_DEFINE_PROPERTY_GET and %G_DEFINE_PROPERTY_SET macros, along with their
|
|
* %G_DEFINE_PROPERTY_GET_WITH_CODE and %G_DEFINE_PROPERTY_SET_WITH_CODE
|
|
* variants.
|
|
*
|
|
* Note that this macro should only be used with types defined using
|
|
* G_DEFINE_TYPE_* macros, as it depends on variable and functions defined
|
|
* by those macros.
|
|
*
|
|
* Since: 2.38
|
|
*/
|
|
#define G_DEFINE_PROPERTY_GET_SET(T_n, t_n, f_t, f_n) \
|
|
G_DEFINE_PROPERTY_GET (T_n, t_n, f_t, f_n) \
|
|
G_DEFINE_PROPERTY_SET (T_n, t_n, f_t, f_n)
|
|
|
|
G_END_DECLS
|
|
|
|
#endif /* __G_PROPERTY_H__ */
|