diff options
| -rw-r--r-- | gobject/pygobject.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/gobject/pygobject.c b/gobject/pygobject.c index 957df39..84f6ef7 100644 --- a/gobject/pygobject.c +++ b/gobject/pygobject.c @@ -1607,31 +1607,30 @@ PyTypeObject PyGObject_Type = { static int -pygobjectmeta_register(PyTypeObject *subtype, PyObject *instance_dict) +pygobjectmeta_register(PyTypeObject *subtype) { PyObject *pytype_name; char *type_name = NULL; int retval = 0; - if (!instance_dict) { - PyErr_Clear(); - goto out; - } - /* Maybe the type doesn't really need to registered? */ - if (!(PyDict_GetItemString(instance_dict, "__gtype_name__") - || PyDict_GetItemString(instance_dict, "__gproperties__") - || PyDict_GetItemString(instance_dict, "__gsignals__"))) + if (subtype->tp_dict == NULL) + goto out; + + if (!(PyDict_GetItemString(subtype->tp_dict, "__gtype_name__") + || PyDict_GetItemString(subtype->tp_dict, "__gproperties__") + || PyDict_GetItemString(subtype->tp_dict, "__gsignals__"))) goto out; /* If it's already registered, skip registration */ - if (PyDict_GetItemString(instance_dict, "__gtype__")) + if (PyDict_GetItemString(subtype->tp_dict, "__gtype__")) goto out; - pytype_name = PyDict_GetItemString(instance_dict, "__gtype_name__"); + pytype_name = PyDict_GetItemString(subtype->tp_dict, "__gtype_name__"); if (pytype_name) type_name = g_strdup(PyString_AsString(pytype_name)); retval = pyg_type_register(subtype, type_name); + g_free(type_name); out: return retval; @@ -1641,13 +1640,10 @@ out: static int pygobjectmeta_init(PyTypeObject *subtype, PyObject *args, PyObject *kwargs) { - PyObject *instance_dict; - if (PyType_Type.tp_init((PyObject *) subtype, args, kwargs)) return -1; - instance_dict = PyTuple_GetItem(args, 2); - return pygobjectmeta_register(subtype, instance_dict); + return pygobjectmeta_register(subtype); } |
