diff options
author | James Henstridge <james@daa.com.au> | 2002-05-15 16:19:25 +0000 |
---|---|---|
committer | James Henstridge <jamesh@src.gnome.org> | 2002-05-15 16:19:25 +0000 |
commit | 69553aeefcdfd7c591b402d6cc88631617e24c86 (patch) | |
tree | ce98913b47eb92679ec7012fc5c7064553900c7b /gobject | |
parent | a7fec9276589fa03c44d127d6dc3383d17b7be30 (diff) | |
download | pygtk-69553aeefcdfd7c591b402d6cc88631617e24c86.tar.gz |
add support for G_TYPE_INTERFACE, provided the interface has a prereq on
2002-05-16 James Henstridge <james@daa.com.au>
* pygtype.c (pyg_value_from_pyobject): add support for
G_TYPE_INTERFACE, provided the interface has a prereq on
G_TYPE_OBJECT.
(pyg_value_as_pyobject): same here.
Diffstat (limited to 'gobject')
-rw-r--r-- | gobject/pygtype.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/gobject/pygtype.c b/gobject/pygtype.c index 20756243..0051d25d 100644 --- a/gobject/pygtype.c +++ b/gobject/pygtype.c @@ -282,6 +282,21 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj) PyObject *tmp; switch (G_TYPE_FUNDAMENTAL(G_VALUE_TYPE(value))) { + case G_TYPE_INTERFACE: + /* we only handle interface types that have a GObject prereq */ + if (g_type_is_a(G_VALUE_TYPE(value), G_TYPE_OBJECT)) { + if (!PyObject_TypeCheck(obj, &PyGObject_Type)) { + return -1; + } + if (!G_TYPE_CHECK_INSTANCE_TYPE(pygobject_get(obj), + G_VALUE_TYPE(value))) { + return -1; + } + g_value_set_object(value, pygobject_get(obj)); + } else { + return -1; + } + break; case G_TYPE_CHAR: if ((tmp = PyObject_Str(obj))) g_value_set_char(value, PyString_AsString(tmp)[0]); @@ -446,13 +461,14 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj) return -1; break; case G_TYPE_OBJECT: - { - PyTypeObject *type = pygobject_lookup_class(G_VALUE_TYPE(value)); - if (!PyObject_TypeCheck(obj, type)) { - return -1; - } - g_value_set_object(value, pygobject_get(obj)); + if (!PyObject_TypeCheck(obj, &PyGObject_Type)) { + return -1; + } + if (!G_TYPE_CHECK_INSTANCE_TYPE(pygobject_get(obj), + G_VALUE_TYPE(value))) { + return -1; } + g_value_set_object(value, pygobject_get(obj)); break; default: break; @@ -466,6 +482,11 @@ pyg_value_as_pyobject(const GValue *value) gchar buf[128]; switch (G_TYPE_FUNDAMENTAL(G_VALUE_TYPE(value))) { + case G_TYPE_INTERFACE: + if (g_type_is_a(G_VALUE_TYPE(value), G_TYPE_OBJECT)) + return pygobject_new(g_value_get_object(value)); + else + break; case G_TYPE_CHAR: { gint8 val = g_value_get_char(value); |