mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-10 03:16:17 +01:00
closure: Support generic marshals for interface returns
Use the newly added g_type_interface_instantiable_prerequisite() to allow closure return values being interfaces by looking up the instantiable type for the interface and usings its GValue accessors.
This commit is contained in:
parent
eb20dec144
commit
e994d45352
@ -1258,8 +1258,12 @@ static void
|
||||
value_from_ffi_type (GValue *gvalue, gpointer *value)
|
||||
{
|
||||
ffi_arg *int_val = (ffi_arg*) value;
|
||||
GType type;
|
||||
|
||||
switch (g_type_fundamental (G_VALUE_TYPE (gvalue)))
|
||||
type = G_VALUE_TYPE (gvalue);
|
||||
|
||||
restart:
|
||||
switch (g_type_fundamental (type))
|
||||
{
|
||||
case G_TYPE_INT:
|
||||
g_value_set_int (gvalue, (gint) *int_val);
|
||||
@ -1318,9 +1322,15 @@ value_from_ffi_type (GValue *gvalue, gpointer *value)
|
||||
case G_TYPE_VARIANT:
|
||||
g_value_take_variant (gvalue, *(gpointer*)value);
|
||||
break;
|
||||
case G_TYPE_INTERFACE:
|
||||
type = g_type_interface_instantiable_prerequisite (G_VALUE_TYPE (gvalue));
|
||||
if (type)
|
||||
goto restart;
|
||||
G_GNUC_FALLTHROUGH;
|
||||
default:
|
||||
g_warning ("value_from_ffi_type: Unsupported fundamental type: %s",
|
||||
g_type_name (g_type_fundamental (G_VALUE_TYPE (gvalue))));
|
||||
g_warning ("value_from_ffi_type: Unsupported fundamental type %s for type %s",
|
||||
g_type_name (g_type_fundamental (G_VALUE_TYPE (gvalue))),
|
||||
g_type_name (G_VALUE_TYPE (gvalue)));
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user