diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2021-06-16 19:15:05 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2021-08-05 17:47:29 +0100 |
commit | 700e8776b7942b204b86748d266c895b08d59823 (patch) | |
tree | 591923a3afb57702c561b37f8ebcfbc2cfa0c4bd /girepository | |
parent | 702fe967667e304373a8332d95422187783dab92 (diff) | |
download | gobject-introspection-700e8776b7942b204b86748d266c895b08d59823.tar.gz |
Property accessors work for interfaces and objects
We need to check the container type before trying to obtain a
GIPropertyInfo for GIFunctionInfos that have a SETTER or a GETTER flag
set.
Diffstat (limited to 'girepository')
-rw-r--r-- | girepository/gifunctioninfo.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/girepository/gifunctioninfo.c b/girepository/gifunctioninfo.c index 366850d5..b042b4e1 100644 --- a/girepository/gifunctioninfo.c +++ b/girepository/gifunctioninfo.c @@ -165,18 +165,30 @@ g_function_info_get_flags (GIFunctionInfo *info) GIPropertyInfo * g_function_info_get_property (GIFunctionInfo *info) { - GIRealInfo *rinfo; + GIRealInfo *rinfo, *container_rinfo; FunctionBlob *blob; - GIInterfaceInfo *container; g_return_val_if_fail (info != NULL, NULL); g_return_val_if_fail (GI_IS_FUNCTION_INFO (info), NULL); rinfo = (GIRealInfo *)info; blob = (FunctionBlob *)&rinfo->typelib->data[rinfo->offset]; - container = (GIInterfaceInfo *)rinfo->container; + container_rinfo = (GIRealInfo *)rinfo->container; + + if (container_rinfo->type == GI_INFO_TYPE_INTERFACE) + { + GIInterfaceInfo *container = (GIInterfaceInfo *)rinfo->container; - return g_interface_info_get_property (container, blob->index); + return g_interface_info_get_property (container, blob->index); + } + else if (container_rinfo->type == GI_INFO_TYPE_OBJECT) + { + GIObjectInfo *container = (GIObjectInfo *)rinfo->container; + + return g_object_info_get_property (container, blob->index); + } + else + return NULL; } /** |