mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-24 19:22:11 +01:00
g_object_info_find_method_using_interfaces: New function
Pull this down into introspection from gjs; this will allow us to cache this better in the future (for example, by caching the infos for interfaces in the info for the object). https://bugzilla.gnome.org/show_bug.cgi?id=632924
This commit is contained in:
parent
a1d7beda01
commit
eb153575a4
@ -413,6 +413,63 @@ g_object_info_find_method (GIObjectInfo *info,
|
||||
return _g_base_info_find_method ((GIBaseInfo*)info, offset, blob->n_methods, name);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_object_info_find_method_using_interfaces:
|
||||
* @info: a #GIObjectInfo
|
||||
* @name: name of method to obtain
|
||||
* @implementor: (out) (transfer full): The implementor of the interface
|
||||
*
|
||||
* Obtain a method of the object given a @name, searching both the
|
||||
* object @info and any interfaces it implements. %NULL will be
|
||||
* returned if there's no method available with that name.
|
||||
*
|
||||
* Note that this function does *not* search parent classes; you will have
|
||||
* to chain up if that's desired.
|
||||
*
|
||||
* Returns: (transfer full): the #GIFunctionInfo. Free the struct by calling
|
||||
* g_base_info_unref() when done.
|
||||
*/
|
||||
GIFunctionInfo *
|
||||
g_object_info_find_method_using_interfaces (GIObjectInfo *info,
|
||||
const gchar *name,
|
||||
GIObjectInfo **implementor)
|
||||
{
|
||||
GIFunctionInfo *result = NULL;
|
||||
GIObjectInfo *implementor_result = NULL;
|
||||
|
||||
result = g_object_info_find_method (info, name);
|
||||
if (result)
|
||||
implementor_result = g_base_info_ref ((GIBaseInfo*) info);
|
||||
|
||||
if (result == NULL)
|
||||
{
|
||||
int n_interfaces;
|
||||
int i;
|
||||
|
||||
n_interfaces = g_object_info_get_n_interfaces (info);
|
||||
for (i = 0; i < n_interfaces; ++i)
|
||||
{
|
||||
GIInterfaceInfo *iface_info;
|
||||
|
||||
iface_info = g_object_info_get_interface (info, i);
|
||||
|
||||
result = g_interface_info_find_method (iface_info, name);
|
||||
|
||||
if (result != NULL)
|
||||
{
|
||||
implementor_result = iface_info;
|
||||
break;
|
||||
}
|
||||
g_base_info_unref ((GIBaseInfo*) iface_info);
|
||||
}
|
||||
}
|
||||
if (implementor)
|
||||
*implementor = implementor_result;
|
||||
else
|
||||
g_base_info_unref ((GIBaseInfo*) implementor_result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_object_info_get_n_signals:
|
||||
* @info: a #GIObjectInfo
|
||||
|
@ -91,6 +91,11 @@ GIFunctionInfo * g_object_info_get_method (GIObjectInfo *info,
|
||||
gint n);
|
||||
GIFunctionInfo * g_object_info_find_method (GIObjectInfo *info,
|
||||
const gchar *name);
|
||||
|
||||
GIFunctionInfo * g_object_info_find_method_using_interfaces (GIObjectInfo *info,
|
||||
const gchar *name,
|
||||
GIObjectInfo **implementor);
|
||||
|
||||
gint g_object_info_get_n_signals (GIObjectInfo *info);
|
||||
GISignalInfo * g_object_info_get_signal (GIObjectInfo *info,
|
||||
gint n);
|
||||
|
Loading…
x
Reference in New Issue
Block a user