diff options
Diffstat (limited to 'girepository/gifunctioninfo.c')
-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; } /** |