summaryrefslogtreecommitdiffstats
path: root/gobject
diff options
context:
space:
mode:
authormarklee <marklee@localhost>2009-03-22 22:11:09 +0000
committermarklee <marklee@localhost>2009-03-22 22:11:09 +0000
commitbdd3f376eba2184e915d0cc2440b95fb12d86080 (patch)
tree9ba6fbde762f171697b4d7e5380a6fc9269b5ce5 /gobject
parent04d307068875e640d7e5046951c44b1f78363272 (diff)
downloadpygobject-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.c22
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 },