Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/girepository
diff options
context:
space:
mode:
Diffstat (limited to 'girepository')
-rw-r--r--girepository/ginfo.c40
-rw-r--r--girepository/girepository.h4
-rw-r--r--girepository/girnode.c19
-rw-r--r--girepository/girnode.h4
-rw-r--r--girepository/girparser.c15
-rw-r--r--girepository/gtypelib.c6
-rw-r--r--girepository/gtypelib.h9
7 files changed, 64 insertions, 33 deletions
diff --git a/girepository/ginfo.c b/girepository/ginfo.c
index 7ecfe63..1c34ee2 100644
--- a/girepository/ginfo.c
+++ b/girepository/ginfo.c
@@ -1182,22 +1182,22 @@ g_struct_info_get_alignment (GIStructInfo *info)
}
/**
- * g_struct_info_is_class_struct:
+ * g_struct_info_is_gtype_struct:
* @info: GIStructInfo
*
* Return true if this structure represents the "class structure" for some
- * GObject. This function is mainly useful to hide this kind of structure
- * from public APIs.
+ * #GObject or #GInterface. This function is mainly useful to hide this kind of structure
+ * from generated public APIs.
*
- * Returns: TRUE if it's a class struct, otherwise FALSE
+ * Returns: %TRUE if this is a class struct, %FALSE otherwise
*/
gboolean
-g_struct_info_is_class_struct (GIStructInfo *info)
+g_struct_info_is_gtype_struct (GIStructInfo *info)
{
GIBaseInfo *base = (GIBaseInfo *)info;
StructBlob *blob = (StructBlob *)&base->typelib->data[base->offset];
- return blob->is_class_struct;
+ return blob->is_gtype_struct;
}
gint
@@ -1495,10 +1495,10 @@ g_object_info_get_constant (GIObjectInfo *info,
* g_object_info_get_class_struct:
* @info: A #GIObjectInfo to query
*
- * Every GObject has two structures; an instance structure and a class
+ * Every #GObject has two structures; an instance structure and a class
* structure. This function returns the metadata for the class structure.
*
- * Returns: a GIStrucTInfo for the class struct or NULL if none found.
+ * Returns: a #GIStructInfo for the class struct or %NULL if none found.
*/
GIStructInfo *
g_object_info_get_class_struct (GIObjectInfo *info)
@@ -1506,9 +1506,9 @@ g_object_info_get_class_struct (GIObjectInfo *info)
GIBaseInfo *base = (GIBaseInfo *)info;
ObjectBlob *blob = (ObjectBlob *)&base->typelib->data[base->offset];
- if (blob->class_struct)
+ if (blob->gtype_struct)
return (GIStructInfo *) g_info_from_entry (base->repository,
- base->typelib, blob->class_struct);
+ base->typelib, blob->gtype_struct);
else
return NULL;
}
@@ -1691,8 +1691,26 @@ g_interface_info_get_constant (GIInterfaceInfo *info,
base->typelib, offset);
}
+/**
+ * g_interface_info_get_iface_struct:
+ * @info: A #GIInterfaceInfo to query
+ *
+ * Returns the layout C structure associated with this #GInterface.
+ *
+ * Returns: A #GIStructInfo for the class struct or %NULL if none found.
+ */
+GIStructInfo *
+g_interface_info_get_iface_struct (GIInterfaceInfo *info)
+{
+ GIBaseInfo *base = (GIBaseInfo *)info;
+ InterfaceBlob *blob = (InterfaceBlob *)&base->typelib->data[base->offset];
-
+ if (blob->gtype_struct)
+ return (GIStructInfo *) g_info_from_entry (base->repository,
+ base->typelib, blob->gtype_struct);
+ else
+ return NULL;
+}
/* GIPropertyInfo functions */
GParamFlags
diff --git a/girepository/girepository.h b/girepository/girepository.h
index 3508f4d..61a9116 100644
--- a/girepository/girepository.h
+++ b/girepository/girepository.h
@@ -417,7 +417,7 @@ GIFunctionInfo * g_struct_info_find_method (GIStructInfo *info,
const gchar *name);
gsize g_struct_info_get_size (GIStructInfo *info);
gsize g_struct_info_get_alignment (GIStructInfo *info);
-gboolean g_struct_info_is_class_struct (GIStructInfo *info);
+gboolean g_struct_info_is_gtype_struct (GIStructInfo *info);
/* GIRegisteredTypeInfo */
@@ -487,6 +487,8 @@ gint g_interface_info_get_n_constants (GIInterfaceInfo *in
GIConstantInfo * g_interface_info_get_constant (GIInterfaceInfo *info,
gint n);
+GIStructInfo * g_interface_info_get_iface_struct (GIInterfaceInfo *info);
+
/* GIPropertyInfo */
diff --git a/girepository/girnode.c b/girepository/girnode.c
index 0aafa44..7863c25 100644
--- a/girepository/girnode.c
+++ b/girepository/girnode.c
@@ -286,7 +286,8 @@ g_ir_node_free (GIrNode *node)
g_free (iface->gtype_name);
g_free (iface->gtype_init);
- g_free (iface->class_struct);
+
+ g_free (iface->glib_type_struct);
g_free (iface->parent);
for (l = iface->interfaces; l; l = l->next)
@@ -652,8 +653,8 @@ g_ir_node_get_full_size_internal (GIrNode *parent,
size = sizeof(ObjectBlob);
if (iface->parent)
size += ALIGN_VALUE (strlen (iface->parent) + 1, 4);
- if (iface->class_struct)
- size += ALIGN_VALUE (strlen (iface->class_struct) + 1, 4);
+ if (iface->glib_type_struct)
+ size += ALIGN_VALUE (strlen (iface->glib_type_struct) + 1, 4);
size += ALIGN_VALUE (strlen (node->name) + 1, 4);
size += ALIGN_VALUE (strlen (iface->gtype_name) + 1, 4);
if (iface->gtype_init)
@@ -1781,7 +1782,7 @@ g_ir_node_build_typelib (GIrNode *node,
blob->blob_type = BLOB_TYPE_STRUCT;
blob->deprecated = struct_->deprecated;
- blob->is_class_struct = struct_->is_gclass_struct;
+ blob->is_gtype_struct = struct_->is_gtype_struct;
blob->reserved = 0;
blob->name = write_string (node->name, strings, data, offset2);
blob->alignment = struct_->alignment;
@@ -1984,10 +1985,10 @@ g_ir_node_build_typelib (GIrNode *node,
blob->parent = find_entry (module, modules, object->parent);
else
blob->parent = 0;
- if (object->class_struct)
- blob->class_struct = find_entry (module, modules, object->class_struct);
+ if (object->glib_type_struct)
+ blob->gtype_struct = find_entry (module, modules, object->glib_type_struct);
else
- blob->class_struct = 0;
+ blob->gtype_struct = 0;
blob->n_interfaces = 0;
blob->n_fields = 0;
@@ -2049,6 +2050,10 @@ g_ir_node_build_typelib (GIrNode *node,
blob->name = write_string (node->name, strings, data, offset2);
blob->gtype_name = write_string (iface->gtype_name, strings, data, offset2);
blob->gtype_init = write_string (iface->gtype_init, strings, data, offset2);
+ if (iface->glib_type_struct)
+ blob->gtype_struct = find_entry (module, modules, iface->glib_type_struct);
+ else
+ blob->gtype_struct = 0;
blob->n_prerequisites = 0;
blob->n_properties = 0;
blob->n_methods = 0;
diff --git a/girepository/girnode.h b/girepository/girnode.h
index 33848db..7ea8a32 100644
--- a/girepository/girnode.h
+++ b/girepository/girnode.h
@@ -237,7 +237,7 @@ struct _GIrNodeInterface
gchar *gtype_init;
gchar *parent;
- gchar *class_struct; /* Only applies to classes */
+ gchar *glib_type_struct;
GList *interfaces;
GList *prerequisites;
@@ -302,7 +302,7 @@ struct _GIrNodeStruct
gboolean deprecated;
gboolean disguised;
- gboolean is_gclass_struct;
+ gboolean is_gtype_struct;
gchar *gtype_name;
gchar *gtype_init;
diff --git a/girepository/girparser.c b/girepository/girparser.c
index 795658e..e08b3fc 100644
--- a/girepository/girparser.c
+++ b/girepository/girparser.c
@@ -1482,10 +1482,12 @@ start_interface (GMarkupParseContext *context,
const gchar *typename;
const gchar *typeinit;
const gchar *deprecated;
+ const gchar *glib_type_struct;
name = find_attribute ("name", attribute_names, attribute_values);
typename = find_attribute ("glib:type-name", attribute_names, attribute_values);
typeinit = find_attribute ("glib:get-type", attribute_names, attribute_values);
+ glib_type_struct = find_attribute ("glib:type-struct", attribute_names, attribute_values);
deprecated = find_attribute ("deprecated", attribute_names, attribute_values);
if (name == NULL)
@@ -1502,6 +1504,7 @@ start_interface (GMarkupParseContext *context,
((GIrNode *)iface)->name = g_strdup (name);
iface->gtype_name = g_strdup (typename);
iface->gtype_init = g_strdup (typeinit);
+ iface->glib_type_struct = g_strdup (glib_type_struct);
if (deprecated)
iface->deprecated = TRUE;
else
@@ -1533,7 +1536,7 @@ start_class (GMarkupParseContext *context,
{
const gchar *name;
const gchar *parent;
- const gchar *class_struct;
+ const gchar *glib_type_struct;
const gchar *typename;
const gchar *typeinit;
const gchar *deprecated;
@@ -1541,7 +1544,7 @@ start_class (GMarkupParseContext *context,
name = find_attribute ("name", attribute_names, attribute_values);
parent = find_attribute ("parent", attribute_names, attribute_values);
- class_struct = find_attribute ("glib:class-struct", attribute_names, attribute_values);
+ glib_type_struct = find_attribute ("glib:type-struct", attribute_names, attribute_values);
typename = find_attribute ("glib:type-name", attribute_names, attribute_values);
typeinit = find_attribute ("glib:get-type", attribute_names, attribute_values);
deprecated = find_attribute ("deprecated", attribute_names, attribute_values);
@@ -1562,7 +1565,7 @@ start_class (GMarkupParseContext *context,
iface->gtype_name = g_strdup (typename);
iface->gtype_init = g_strdup (typeinit);
iface->parent = g_strdup (parent);
- iface->class_struct = g_strdup (class_struct);
+ iface->glib_type_struct = g_strdup (glib_type_struct);
if (deprecated)
iface->deprecated = TRUE;
else
@@ -2128,7 +2131,7 @@ start_struct (GMarkupParseContext *context,
const gchar *disguised;
const gchar *gtype_name;
const gchar *gtype_init;
- const gchar *gclass_struct;
+ const gchar *gtype_struct;
GIrNodeStruct *struct_;
name = find_attribute ("name", attribute_names, attribute_values);
@@ -2136,7 +2139,7 @@ start_struct (GMarkupParseContext *context,
disguised = find_attribute ("disguised", attribute_names, attribute_values);
gtype_name = find_attribute ("glib:type-name", attribute_names, attribute_values);
gtype_init = find_attribute ("glib:get-type", attribute_names, attribute_values);
- gclass_struct = find_attribute ("glib:is-class-struct-for", attribute_names, attribute_values);
+ gtype_struct = find_attribute ("glib:is-gtype-struct-for", attribute_names, attribute_values);
if (name == NULL && ctx->node_stack == NULL)
{
@@ -2165,7 +2168,7 @@ start_struct (GMarkupParseContext *context,
if (disguised && strcmp (disguised, "1") == 0)
struct_->disguised = TRUE;
- struct_->is_gclass_struct = gclass_struct != NULL;
+ struct_->is_gtype_struct = gtype_struct != NULL;
struct_->gtype_name = g_strdup (gtype_name);
struct_->gtype_init = g_strdup (gtype_init);
diff --git a/girepository/gtypelib.c b/girepository/gtypelib.c
index 673436a..6ff00bf 100644
--- a/girepository/gtypelib.c
+++ b/girepository/gtypelib.c
@@ -183,7 +183,7 @@ g_typelib_check_sanity (void)
CHECK_SIZE (SignalBlob, 16);
CHECK_SIZE (VFuncBlob, 20);
CHECK_SIZE (ObjectBlob, 44);
- CHECK_SIZE (InterfaceBlob, 36);
+ CHECK_SIZE (InterfaceBlob, 40);
CHECK_SIZE (ConstantBlob, 24);
CHECK_SIZE (AnnotationBlob, 12);
CHECK_SIZE (UnionBlob, 40);
@@ -1458,11 +1458,11 @@ validate_object_blob (ValidateContext *ctx,
}
}
- if (blob->class_struct != 0)
+ if (blob->gtype_struct != 0)
{
DirEntry *entry;
- entry = get_dir_entry_checked (typelib, blob->class_struct, error);
+ entry = get_dir_entry_checked (typelib, blob->gtype_struct, error);
if (!entry)
return FALSE;
if (entry->blob_type != BLOB_TYPE_STRUCT && entry->local)
diff --git a/girepository/gtypelib.h b/girepository/gtypelib.h
index 9a78873..7a2838f 100644
--- a/girepository/gtypelib.h
+++ b/girepository/gtypelib.h
@@ -72,6 +72,7 @@ G_BEGIN_DECLS
TYPELIB HISTORY
-----
Version 1.0
+- Rename class_struct to gtype_struct, add to interfaces
Changes since 0.9:
- Add padding to structures
@@ -651,7 +652,7 @@ typedef struct {
* @deprecated: Whether this structure is deprecated
* @unregistered: If this is set, the type is not registered with GType.
* @alignment: The byte boundary that the struct is aligned to in memory
- * @is_class_struct: Whether this structure is the "class structure" for a GObject
+ * @is_gtype_struct: Whether this structure is the class or interface layout for a GObject
* @size: The size of the struct in bytes.
* @gtype_name: String name of the associated #GType
* @gtype_init: String naming the symbol which gets the runtime #GType
@@ -666,7 +667,7 @@ typedef struct {
guint16 deprecated : 1;
guint16 unregistered : 1;
- guint16 is_class_struct : 1;
+ guint16 is_gtype_struct : 1;
guint16 alignment : 6;
guint16 reserved : 7;
@@ -900,7 +901,7 @@ typedef struct {
guint32 gtype_init;
guint16 parent;
- guint16 class_struct;
+ guint16 gtype_struct;
guint16 n_interfaces;
guint16 n_fields;
@@ -929,6 +930,7 @@ typedef struct {
/**
* InterfaceBlob:
+ * @gtype_struct: Name of the interface "class" C structure
* @n_prerequisites: Number of prerequisites
* @n_properties: Number of properties
* @n_methods: Number of methods
@@ -952,6 +954,7 @@ typedef struct {
guint32 gtype_name;
guint32 gtype_init;
+ guint16 gtype_struct;
guint16 n_prerequisites;
guint16 n_properties;