Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@sugarlabs.org>2009-05-26 17:06:58 (GMT)
committer Tomeu Vizoso <tomeu@sugarlabs.org>2009-05-26 17:06:58 (GMT)
commit26a58de791e8627b7416e79ee2d1d200ad25b28b (patch)
treed773e3ced1a9a8f107822b42b20e9005521bfb4c
parent639260dfc0dc25f2406fe3c493f958ef4bfe9272 (diff)
Implement unwrapping of enums
-rw-r--r--bank/bank-argument.c16
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;