diff options
| author | marklee <marklee@localhost> | 2009-03-22 22:11:09 +0000 |
|---|---|---|
| committer | marklee <marklee@localhost> | 2009-03-22 22:11:09 +0000 |
| commit | bdd3f376eba2184e915d0cc2440b95fb12d86080 (patch) | |
| tree | 9ba6fbde762f171697b4d7e5380a6fc9269b5ce5 /gobject | |
| parent | 04d307068875e640d7e5046951c44b1f78363272 (diff) | |
| download | pygobject-bdd3f376eba2184e915d0cc2440b95fb12d86080.tar.gz pygobject-bdd3f376eba2184e915d0cc2440b95fb12d86080.tar.xz pygobject-bdd3f376eba2184e915d0cc2440b95fb12d86080.zip | |
Bug 559001 – Allow setting pytype wrapper class
initial patch by: John Ehresman <jpe@wingware.com>
* gobject/pygtype.c (_wrap_g_type_wrapper__set_pytype): New function.
* tests/test_gtype.py (GTypeTest.assertPyType),
(GTypeTest.setInvalidPyType), (GTypeTest.testPyType),
(GTypeTest.testInvalidPyType): Two new testcases to test the above,
with accompanying helper methods.
svn path=/trunk/; revision=1030
Diffstat (limited to 'gobject')
| -rw-r--r-- | gobject/pygtype.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/gobject/pygtype.c b/gobject/pygtype.c index a5eb545..d5d3b98 100644 --- a/gobject/pygtype.c +++ b/gobject/pygtype.c @@ -83,6 +83,26 @@ _wrap_g_type_wrapper__get_pytype(PyGTypeWrapper *self, void *closure) return py_type; } +static int +_wrap_g_type_wrapper__set_pytype(PyGTypeWrapper *self, PyObject* value, void *closure) +{ + PyObject *py_type; + + py_type = g_type_get_qdata(self->type, pygobject_class_key); + Py_CLEAR(py_type); + if (value == Py_None) + g_type_set_qdata(self->type, pygobject_class_key, NULL); + else if (PyType_Check(value)) { + Py_INCREF(value); + g_type_set_qdata(self->type, pygobject_class_key, value); + } else { + PyErr_SetString(PyExc_TypeError, "Value must be None or a type object"); + return -1; + } + + return 0; +} + static PyObject * _wrap_g_type_wrapper__get_name(PyGTypeWrapper *self, void *closure) { @@ -143,7 +163,7 @@ _wrap_g_type_wrapper__get_depth(PyGTypeWrapper *self, void *closure) } static PyGetSetDef _PyGTypeWrapper_getsets[] = { - { "pytype", (getter)_wrap_g_type_wrapper__get_pytype, (setter)0 }, + { "pytype", (getter)_wrap_g_type_wrapper__get_pytype, (setter)_wrap_g_type_wrapper__set_pytype }, { "name", (getter)_wrap_g_type_wrapper__get_name, (setter)0 }, { "fundamental", (getter)_wrap_g_type_wrapper__get_fundamental, (setter)0 }, { "parent", (getter)_wrap_g_type_wrapper__get_parent, (setter)0 }, |
