summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Henstridge <james@daa.com.au>2002-05-15 16:19:25 +0000
committerJames Henstridge <jamesh@src.gnome.org>2002-05-15 16:19:25 +0000
commita4fc09ec25ca1440fab5c662893f510cdcf3465e (patch)
tree87157b576ad4aa4c621b7e8b451f0f7b45242633
parent91e98c231a72293d9dbe3c8bf2f1f2dc7b45481a (diff)
downloadpygobject-a4fc09ec25ca1440fab5c662893f510cdcf3465e.tar.gz
pygobject-a4fc09ec25ca1440fab5c662893f510cdcf3465e.tar.xz
pygobject-a4fc09ec25ca1440fab5c662893f510cdcf3465e.zip
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.
-rw-r--r--gobject/pygtype.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/gobject/pygtype.c b/gobject/pygtype.c
index 2075624..0051d25 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);