summaryrefslogtreecommitdiffstats
path: root/gobject
diff options
context:
space:
mode:
Diffstat (limited to 'gobject')
-rw-r--r--gobject/pygtype.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/gobject/pygtype.c b/gobject/pygtype.c
index 782e998..5550ce8 100644
--- a/gobject/pygtype.c
+++ b/gobject/pygtype.c
@@ -740,13 +740,20 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj)
Py_DECREF(tmp);
break;
case G_TYPE_UCHAR:
- if ((tmp = PyObject_Str(obj)))
- g_value_set_char(value, _PyUnicode_AsString(tmp)[0]);
- else {
+ if (_PyLong_Check(obj)) {
+ glong val;
+ val = _PyLong_AsLong(obj);
+ if (val >= 0 && val <= 255)
+ g_value_set_uchar(value, (guchar)_PyLong_AsLong (obj));
+ else
+ return -1;
+ } else if ((tmp = PyObject_Str(obj))) {
+ g_value_set_uchar(value, _PyUnicode_AsString(tmp)[0]);
+ Py_DECREF(tmp);
+ } else {
PyErr_Clear();
return -1;
}
- Py_DECREF(tmp);
break;
case G_TYPE_BOOLEAN:
g_value_set_boolean(value, PyObject_IsTrue(obj));