diff options
author | James Henstridge <james@daa.com.au> | 2002-11-16 11:59:28 +0000 |
---|---|---|
committer | James Henstridge <jamesh@src.gnome.org> | 2002-11-16 11:59:28 +0000 |
commit | 59e783f24a4804f8064f8f31608d4d656a5f4fdd (patch) | |
tree | 8c69000384890442ba8919f93671896fbdfb585f | |
parent | a07c0ca51a88a9057815c5d9ee9be3cb072aae80 (diff) | |
download | pygobject-59e783f24a4804f8064f8f31608d4d656a5f4fdd.tar.gz pygobject-59e783f24a4804f8064f8f31608d4d656a5f4fdd.tar.xz pygobject-59e783f24a4804f8064f8f31608d4d656a5f4fdd.zip |
if python object is None, set GValue to NULL for boxed, pointer and
2002-11-16 James Henstridge <james@daa.com.au>
* pygtype.c (pyg_value_from_pyobject): if python object is None,
set GValue to NULL for boxed, pointer and GObject types.
(pyg_value_as_pyobject): convert G_TYPE_POINTER values to
gobject.GPointer python objects.
-rw-r--r-- | gobject/pygtype.c | 100 |
1 files changed, 53 insertions, 47 deletions
diff --git a/gobject/pygtype.c b/gobject/pygtype.c index bb99ed5..6a6659b 100644 --- a/gobject/pygtype.c +++ b/gobject/pygtype.c @@ -434,28 +434,34 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj) } break; case G_TYPE_POINTER: - if (PyCObject_Check(obj)) + if (obj == Py_None) + g_value_set_pointer(value, NULL); + else if (PyObject_TypeCheck(obj, &PyGPointer_Type) && + G_VALUE_HOLDS(value, ((PyGPointer *)obj)->gtype)) + g_value_set_pointer(value, pyg_pointer_get(obj, gpointer)); + else if (PyCObject_Check(obj)) g_value_set_pointer(value, PyCObject_AsVoidPtr(obj)); else return -1; break; - case G_TYPE_BOXED: - { - PyGBoxedMarshal *bm; - - if (G_VALUE_HOLDS(value, PY_TYPE_OBJECT)) { - g_value_set_boxed(value, obj); - } else if (PyObject_TypeCheck(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); - } else if (PyCObject_Check(obj)) { - g_value_set_boxed(value, PyCObject_AsVoidPtr(obj)); - } else - return -1; - } + case G_TYPE_BOXED: { + PyGBoxedMarshal *bm; + + if (obj == Py_None) + g_value_set_boxed(value, NULL); + if (G_VALUE_HOLDS(value, PY_TYPE_OBJECT)) + g_value_set_boxed(value, obj); + else if (PyObject_TypeCheck(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); + else if (PyCObject_Check(obj)) + g_value_set_boxed(value, PyCObject_AsVoidPtr(obj)); + else + return -1; break; + } case G_TYPE_PARAM: if (PyGParamSpec_Check(obj)) g_value_set_param(value, PyCObject_AsVoidPtr(obj)); @@ -463,14 +469,14 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj) return -1; break; case G_TYPE_OBJECT: - if (!PyObject_TypeCheck(obj, &PyGObject_Type)) { - return -1; - } - if (!G_TYPE_CHECK_INSTANCE_TYPE(pygobject_get(obj), - G_VALUE_TYPE(value))) { + if (obj == Py_None) { + g_value_set_object(value, NULL); + } else if (PyObject_TypeCheck(obj, &PyGObject_Type) && + G_TYPE_CHECK_INSTANCE_TYPE(pygobject_get(obj), + G_VALUE_TYPE(value))) { + g_value_set_object(value, pygobject_get(obj)); + } else return -1; - } - g_value_set_object(value, pygobject_get(obj)); break; default: break; @@ -572,32 +578,32 @@ pyg_value_as_pyobject(const GValue *value, gboolean copy_boxed) return Py_None; } case G_TYPE_POINTER: - return PyCObject_FromVoidPtr(g_value_get_pointer(value), NULL); - case G_TYPE_BOXED: - { - PyGBoxedMarshal *bm; - - if (G_VALUE_HOLDS(value, PY_TYPE_OBJECT)) { - PyObject *ret = (PyObject *)g_value_dup_boxed(value); - if (ret == NULL) { - Py_INCREF(Py_None); - return Py_None; - } - return ret; + return pyg_pointer_new(G_VALUE_TYPE(value), + g_value_get_pointer(value)); + case G_TYPE_BOXED: { + PyGBoxedMarshal *bm; + + if (G_VALUE_HOLDS(value, PY_TYPE_OBJECT)) { + PyObject *ret = (PyObject *)g_value_dup_boxed(value); + if (ret == NULL) { + Py_INCREF(Py_None); + return Py_None; } + return ret; + } - bm = pyg_boxed_lookup(G_VALUE_TYPE(value)); - if (bm) { - return bm->fromvalue(value); - } else { - if (copy_boxed) - return pyg_boxed_new(G_VALUE_TYPE(value), - g_value_get_boxed(value), TRUE, TRUE); - else - return pyg_boxed_new(G_VALUE_TYPE(value), - g_value_get_boxed(value),FALSE,FALSE); - } + bm = pyg_boxed_lookup(G_VALUE_TYPE(value)); + if (bm) { + return bm->fromvalue(value); + } else { + if (copy_boxed) + return pyg_boxed_new(G_VALUE_TYPE(value), + g_value_get_boxed(value), TRUE, TRUE); + else + return pyg_boxed_new(G_VALUE_TYPE(value), + g_value_get_boxed(value),FALSE,FALSE); } + } case G_TYPE_PARAM: return pyg_param_spec_new(g_value_get_param(value)); case G_TYPE_OBJECT: |