summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gobject/gobjectmodule.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/gobject/gobjectmodule.c b/gobject/gobjectmodule.c
index 05565e99..861a03ca 100644
--- a/gobject/gobjectmodule.c
+++ b/gobject/gobjectmodule.c
@@ -642,13 +642,16 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj)
return -1;
g_value_set_flags(value, val);
} else if (G_VALUE_HOLDS_BOXED(value)) {
- PyGBoxedMarshal *bm = pyg_boxed_lookup(G_VALUE_TYPE(value));
+ PyGBoxedMarshal *bm;
- if (bm)
+ if (pyg_boxed_check(obj, &PyGBoxed_Type) &&
+ G_VALUE_HOLDS(value, ((PyGBoxed *)obj)->gtype)) {
+ g_value_set_boxed(value, pyg_boxed_get(obj, gpointer));
+ } else if ((bm = pyg_boxed_lookup(G_VALUE_TYPE(value))) != NULL) {
return bm->tovalue(value, obj);
- if (PyCObject_Check(obj))
+ } else if (PyCObject_Check(obj)) {
g_value_set_boxed(value, PyCObject_AsVoidPtr(obj));
- else
+ } else
return -1;
} else if (G_VALUE_HOLDS_POINTER(value)) {
if (PyCObject_Check(obj))
@@ -696,7 +699,8 @@ pyg_value_as_pyobject(const GValue *value)
if (bm)
return bm->fromvalue(value);
else
- return PyCObject_FromVoidPtr(g_value_get_boxed(value), NULL);
+ return pyg_boxed_new(G_VALUE_TYPE(value), g_value_get_boxed(value),
+ TRUE, TRUE);
} else if (G_VALUE_HOLDS_POINTER(value)) {
return PyCObject_FromVoidPtr(g_value_get_pointer(value), NULL);
}