diff options
author | John Ehresman <jpe@src.gnome.org> | 2005-08-24 22:21:03 +0000 |
---|---|---|
committer | John Ehresman <jpe@src.gnome.org> | 2005-08-24 22:21:03 +0000 |
commit | f0ea5354d8b616022928b45c6dd4d76e15301347 (patch) | |
tree | 19d66667fd41dd6c9dd0a273a85b37fec7214aff | |
parent | 844ff2b73c9f2529d65a5ca2e8b863549886e36e (diff) | |
download | pygobject-f0ea5354d8b616022928b45c6dd4d76e15301347.tar.gz |
In the meta-class __init__ method, register a class as a gtype iff
* gobject/pygobject.c: In the meta-class __init__ method,
register a class as a gtype iff __gsignals__, __gproperties__,
or __gtype_name__ is defined in the leaf class's tp_dict.
-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 957df395..84f6ef79 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); } |