summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Ehresman <jpe@src.gnome.org>2005-08-24 22:21:03 +0000
committerJohn Ehresman <jpe@src.gnome.org>2005-08-24 22:21:03 +0000
commitf0ea5354d8b616022928b45c6dd4d76e15301347 (patch)
tree19d66667fd41dd6c9dd0a273a85b37fec7214aff
parent844ff2b73c9f2529d65a5ca2e8b863549886e36e (diff)
downloadpygobject-f0ea5354d8b616022928b45c6dd4d76e15301347.tar.gz
pygobject-f0ea5354d8b616022928b45c6dd4d76e15301347.tar.xz
pygobject-f0ea5354d8b616022928b45c6dd4d76e15301347.zip
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.c26
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);
}