diff options
author | Tomeu Vizoso <tomeu.vizoso@collabora.co.uk> | 2010-07-15 13:31:33 +0200 |
---|---|---|
committer | Tomeu Vizoso <tomeu.vizoso@collabora.co.uk> | 2010-07-15 13:31:33 +0200 |
commit | e65275bc57f345c111eb12a6b4476ff1ddc3bc24 (patch) | |
tree | 955069677264766b015e9659e95fcb58a118b55b /gi/pygi-invoke.c | |
parent | 3b3bd4da3fbc993fa7f7cfb46ed4e67671c94cc0 (diff) | |
download | pygobject-e65275bc57f345c111eb12a6b4476ff1ddc3bc24.tar.gz |
Add foreign struct support for GVariant
* gi/pygi-invoke.c: Wrap foreign structs returned by constructors
* gi/pygi-foreign.c: Register foreign support for GVariant
* gi/pygi-struct.c: properly release foreign structs
* gi/pygi-argument.c, gi/pygi-foreign-cairo.c, gi/pygi.h: Adapt to API changes
* tests/test_everything.py: Add basic tests for GVariant
https://bugzilla.gnome.org/show_bug.cgi?id=619501
Diffstat (limited to 'gi/pygi-invoke.c')
-rw-r--r-- | gi/pygi-invoke.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/gi/pygi-invoke.c b/gi/pygi-invoke.c index a4700035..022874e5 100644 --- a/gi/pygi-invoke.c +++ b/gi/pygi-invoke.c @@ -639,6 +639,11 @@ _process_invocation_state (struct invocation_state *state, GIInfoType info_type; GITransfer transfer; + if (state->return_arg.v_pointer == NULL) { + PyErr_SetString (PyExc_TypeError, "constructor returned NULL"); + return FALSE; + } + g_assert (state->n_py_args > 0); py_type = (PyTypeObject *) PyTuple_GET_ITEM (py_args, 0); @@ -662,18 +667,13 @@ _process_invocation_state (struct invocation_state *state, type = g_registered_type_info_get_g_type ( (GIRegisteredTypeInfo *) info); if (g_type_is_a (type, G_TYPE_BOXED)) { - if (state->return_arg.v_pointer == NULL) { - PyErr_SetString (PyExc_TypeError, "constructor returned NULL"); - break; - } g_warn_if_fail (transfer == GI_TRANSFER_EVERYTHING); state->return_value = _pygi_boxed_new (py_type, state->return_arg.v_pointer, transfer == GI_TRANSFER_EVERYTHING); + } else if (type == G_TYPE_NONE && g_struct_info_is_foreign (info)) { + state->return_value = + pygi_struct_foreign_convert_from_g_argument ( + state->return_type_info, state->return_arg.v_pointer); } else if (g_type_is_a (type, G_TYPE_POINTER) || type == G_TYPE_NONE) { - if (state->return_arg.v_pointer == NULL) { - PyErr_SetString (PyExc_TypeError, "constructor returned NULL"); - break; - } - if (transfer != GI_TRANSFER_NOTHING) g_warning ("Transfer mode should be set to None for " "struct types as there is no way to free " |