summaryrefslogtreecommitdiffstats
path: root/gi
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@sugarlabs.org>2009-11-24 15:52:47 +0100
committerTomeu Vizoso <tomeu@sugarlabs.org>2009-11-24 15:52:54 +0100
commitfc3dca018e85aee34ade79d104ebd8cdd1dd5968 (patch)
tree0da699542761d6861787d474831455db50f140b1 /gi
parent33081c29a1c2fdec2b8bfe17ae0a72b8db7a8d84 (diff)
downloadpygi-fc3dca018e85aee34ade79d104ebd8cdd1dd5968.tar.gz
pygi-fc3dca018e85aee34ade79d104ebd8cdd1dd5968.tar.xz
pygi-fc3dca018e85aee34ade79d104ebd8cdd1dd5968.zip
Accept 0 as a valid value for flag and enum arguments
https://bugzilla.gnome.org/show_bug.cgi?id=602638
Diffstat (limited to 'gi')
-rw-r--r--gi/pygi-argument.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/gi/pygi-argument.c b/gi/pygi-argument.c
index 3a9e207..7f66b1f 100644
--- a/gi/pygi-argument.c
+++ b/gi/pygi-argument.c
@@ -384,8 +384,25 @@ check_number_release:
PyErr_SetString(PyExc_NotImplementedError, "callback marshalling is not supported yet");
break;
case GI_INFO_TYPE_ENUM:
+ retval = _pygi_g_registered_type_info_check_object(
+ (GIRegisteredTypeInfo *)info, TRUE, object);
+ break;
case GI_INFO_TYPE_FLAGS:
- retval = _pygi_g_registered_type_info_check_object((GIRegisteredTypeInfo *)info, TRUE, object);
+ if (PyNumber_Check(object)) {
+ /* Accept 0 as a valid flag value */
+ PyObject *number = PyNumber_Int(object);
+ if (number == NULL)
+ PyErr_Clear();
+ else {
+ long value = PyInt_AsLong(number);
+ if (value == 0)
+ break;
+ else if (value == -1)
+ PyErr_Clear();
+ }
+ }
+ retval = _pygi_g_registered_type_info_check_object(
+ (GIRegisteredTypeInfo *)info, TRUE, object);
break;
case GI_INFO_TYPE_STRUCT:
{