summaryrefslogtreecommitdiff
path: root/gi/pygi-invoke.c
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-07-15 13:31:33 +0200
committerTomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-07-15 13:31:33 +0200
commite65275bc57f345c111eb12a6b4476ff1ddc3bc24 (patch)
tree955069677264766b015e9659e95fcb58a118b55b /gi/pygi-invoke.c
parent3b3bd4da3fbc993fa7f7cfb46ed4e67671c94cc0 (diff)
downloadpygobject-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.c18
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 "