summaryrefslogtreecommitdiff
path: root/gobject/pygflags.c
diff options
context:
space:
mode:
Diffstat (limited to 'gobject/pygflags.c')
-rw-r--r--gobject/pygflags.c15
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;
}