summaryrefslogtreecommitdiffstats
path: root/gobject/pygenum.c
diff options
context:
space:
mode:
Diffstat (limited to 'gobject/pygenum.c')
-rw-r--r--gobject/pygenum.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/gobject/pygenum.c b/gobject/pygenum.c
index 5df360b..5c6bf89 100644
--- a/gobject/pygenum.c
+++ b/gobject/pygenum.c
@@ -89,7 +89,7 @@ pyg_enum_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
if (!pytc)
return NULL;
- if (!PyObject_TypeCheck(pytc, &PyGEnum_Type)) {
+ if (!PyObject_TypeCheck(pytc, &PyGTypeWrapper_Type)) {
Py_DECREF(pytc);
PyErr_SetString(PyExc_TypeError,
"__gtype__ attribute not a typecode");
@@ -166,7 +166,7 @@ pyg_enum_add (PyObject * module,
GType gtype)
{
PyGILState_STATE state;
- PyObject *instance_dict, *stub, *values;
+ PyObject *instance_dict, *stub, *values, *o;
GEnumClass *eclass;
int i;
@@ -186,6 +186,9 @@ pyg_enum_add (PyObject * module,
return NULL;
}
+ ((PyTypeObject *)stub)->tp_flags &= ~Py_TPFLAGS_BASETYPE;
+ ((PyTypeObject *)stub)->tp_new = pyg_enum_new;
+
if (module)
PyDict_SetItemString(((PyTypeObject *)stub)->tp_dict,
"__module__",
@@ -196,6 +199,10 @@ pyg_enum_add (PyObject * module,
g_type_set_qdata(gtype, pygenum_class_key, stub);
+ o = pyg_type_wrapper_new(gtype);
+ PyDict_SetItemString(((PyTypeObject *)stub)->tp_dict, "__gtype__", o);
+ Py_DECREF(o);
+
if (module) {
/* Add it to the module name space */
PyModule_AddObject(module, (char*)typename, stub);
@@ -270,6 +277,7 @@ pyg_enum_get_value_nick(PyGEnum *self, void *closure)
return retval;
}
+
static PyGetSetDef pyg_enum_getsets[] = {
{ "value_name", (getter)pyg_enum_get_value_name, (setter)0 },
{ "value_nick", (getter)pyg_enum_get_value_nick, (setter)0 },
@@ -313,7 +321,7 @@ PyTypeObject PyGEnum_Type = {
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
- 0, /* tp_init */
+ 0, /* tp_init */
0, /* tp_alloc */
pyg_enum_new, /* tp_new */
};