X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=girepository%2Fgirparser.c;h=4b4d1be73183e9427414d46e797798b7a06205e4;hb=ca4822f1d93c4666982eef9fc3e37d8122575cf5;hp=c45ac78dca87fdabe6f8fd8823b603c66def86d1;hpb=e01555d743ee408c356ca766257af4d29aa6f385;p=gnome.gobject-introspection diff --git a/girepository/girparser.c b/girepository/girparser.c index c45ac78..4b4d1be 100644 --- a/girepository/girparser.c +++ b/girepository/girparser.c @@ -3264,6 +3264,46 @@ post_filter_varargs_functions (GList *list, GList ** varargs_callbacks_out) } } } + + if (node->type == G_IR_NODE_FIELD) + { + /* + this is a field, if the member is a blacklisted callback, + then we need to flag it as to be generated as a void* + */ + GIrNodeField *fnode = (GIrNodeField *)node; + GIrNodeType * tnode; + GList *match; + + if (!fnode->type) + continue; + + tnode = (GIrNodeType *)fnode->type; + /* field is not an interface. */ + if (!tnode->is_interface) + continue; + + match = node_find_in_list( + varargs_callbacks, tnode->interface); + + if (!match) + continue; + + /* + we now have a field which is pointing to an blacklisted callback. + so need modify the type so it points to void* and + is not read/or writable. + */ + fnode->readable = FALSE; + fnode->writable = FALSE; + + tnode->tag = GI_TYPE_TAG_VOID; + tnode->is_interface = FALSE; + tnode->is_pointer = TRUE; + tnode->is_basic = TRUE; + } + + } *varargs_callbacks_out = varargs_callbacks;