diff options
author | Tomeu Vizoso <tomeu@sugarlabs.org> | 2009-05-26 17:06:58 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@sugarlabs.org> | 2009-05-26 17:06:58 (GMT) |
commit | 26a58de791e8627b7416e79ee2d1d200ad25b28b (patch) | |
tree | d773e3ced1a9a8f107822b42b20e9005521bfb4c | |
parent | 639260dfc0dc25f2406fe3c493f958ef4bfe9272 (diff) |
Implement unwrapping of enums
-rw-r--r-- | bank/bank-argument.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/bank/bank-argument.c b/bank/bank-argument.c index 44495fb..0e64b79 100644 --- a/bank/bank-argument.c +++ b/bank/bank-argument.c @@ -26,6 +26,8 @@ pyg_argument_from_pyobject(PyObject *object, GITypeInfo *type_info) { GArgument arg; GITypeTag type_tag; + GIBaseInfo* interface_info; + GIInfoType interface_type; type_tag = g_type_info_get_tag((GITypeInfo*)type_info); switch (type_tag) { @@ -89,11 +91,15 @@ pyg_argument_from_pyobject(PyObject *object, GITypeInfo *type_info) arg.v_double = PyFloat_AsDouble(object); break; case GI_TYPE_TAG_INTERFACE: - if (object == Py_None) - arg.v_pointer = NULL; - else - arg.v_pointer = pygobject_get(object); - break; + interface_info = g_type_info_get_interface(type_info); + interface_type = g_base_info_get_type(interface_info); + if (interface_type == GI_INFO_TYPE_ENUM) { + arg.v_int = PyInt_AsLong(object); + } else if (object == Py_None) + arg.v_pointer = NULL; + else + arg.v_pointer = pygobject_get(object); + break; case GI_TYPE_TAG_ARRAY: arg.v_pointer = NULL; break; |