diff options
Diffstat (limited to 'gobject/pygflags.c')
-rw-r--r-- | gobject/pygflags.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/gobject/pygflags.c b/gobject/pygflags.c index 936f314e..8c00f150 100644 --- a/gobject/pygflags.c +++ b/gobject/pygflags.c @@ -161,7 +161,7 @@ pyg_flags_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) return NULL; } - if (!PyDict_Check(values) || PyDict_Size(values) != eclass->n_values) { + if (!PyDict_Check(values)) { PyErr_SetString(PyExc_TypeError, "__flags_values__ badly formed"); Py_DECREF(values); g_type_class_unref(eclass); @@ -172,13 +172,18 @@ pyg_flags_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) pyint = PYGLIB_PyLong_FromLong(value); ret = PyDict_GetItem(values, pyint); + if (!ret) { + PyErr_Clear(); + + ret = pyg_flags_val_new((PyObject *)type, gtype, pyint); + g_assert(ret != NULL); + } else { + Py_INCREF(ret); + } + Py_DECREF(pyint); Py_DECREF(values); - if (ret) - Py_INCREF(ret); - else - PyErr_Format(PyExc_ValueError, "invalid flag value: %ld", value); return ret; } |