summaryrefslogtreecommitdiff
path: root/gtk/gtkobject-support.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkobject-support.c')
-rw-r--r--gtk/gtkobject-support.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/gtk/gtkobject-support.c b/gtk/gtkobject-support.c
index 408cb95e..092094a1 100644
--- a/gtk/gtkobject-support.c
+++ b/gtk/gtkobject-support.c
@@ -136,6 +136,19 @@ pygtk_no_constructor(PyObject *self, PyObject *args)
return NULL;
}
+static PyExtensionClass *
+pygtk_lookup_class(GtkType type)
+{
+ PyExtensionClass *ec;
+
+ /* find the python type for this object. If not found, use parent. */
+ while ((ec = g_hash_table_lookup(class_hash, gtk_type_name(type))) == NULL
+ && type != 0)
+ type = gtk_type_parent(type);
+ g_assert(ec != NULL);
+ return ec;
+}
+
PyObject *
PyGtk_New(GtkObject *obj)
{
@@ -160,10 +173,7 @@ PyGtk_New(GtkObject *obj)
return (PyObject *)self;
}
- type = GTK_OBJECT_TYPE(obj);
- /* find the python type for this object. If not found, use parent. */
- while ((tp = g_hash_table_lookup(class_hash, gtk_type_name(type))) == NULL)
- type = gtk_type_parent(type);
+ tp = (PyTypeObject *)pygtk_lookup_class(GTK_OBJECT_TYPE(obj));
/* can't use PyObject_NEW, as we want to create a slightly larger struct */
self = malloc(sizeof(PyGtk_Object));
@@ -287,6 +297,7 @@ int
pygtk_arg_from_pyobject(GtkArg *arg, PyObject *obj)
{
PyObject *tmp;
+
switch (GTK_FUNDAMENTAL_TYPE(arg->type)) {
case GTK_TYPE_NONE:
case GTK_TYPE_INVALID:
@@ -383,7 +394,7 @@ pygtk_arg_from_pyobject(GtkArg *arg, PyObject *obj)
Py_DECREF(tmp);
break;
case GTK_TYPE_OBJECT:
- if (PyGtk_Check(obj, &PyGtkObject_Type))
+ if (PyGtk_Check(obj, pygtk_lookup_class(arg->type)))
GTK_VALUE_OBJECT(*arg) = PyGtk_Get(obj);
else
return -1;
@@ -704,7 +715,7 @@ pygtk_ret_from_pyobject(GtkArg *ret, PyObject *py_ret)
}
break;
case GTK_TYPE_OBJECT:
- if (PyGtk_Check(py_ret, &PyGtkObject_Type))
+ if (PyGtk_Check(py_ret, pygtk_lookup_class(ret->type)))
*GTK_RETLOC_OBJECT(*ret) = PyGtk_Get(py_ret);
else
*GTK_RETLOC_OBJECT(*ret) = NULL;