static PyObject * _wrap_pyg_flags_add (PyObject *self, PyObject *args, PyObject *kwargs) { static char *kwlist[] = { "g_type", NULL }; PyObject *py_g_type; GType g_type; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!:flags_add", kwlist, &PyGTypeWrapper_Type, &py_g_type)) { return NULL; } g_type = pyg_type_from_object(py_g_type); if (g_type == G_TYPE_INVALID) { return NULL; } return pyg_flags_add(NULL, g_type_name(g_type), NULL, g_type); }
PyObject* pyg_flags_from_gtype (GType gtype, guint value) { PyObject *pyclass, *values, *retval, *pyint; if (PyErr_Occurred()) return PYGLIB_PyLong_FromUnsignedLong(0); g_return_val_if_fail(gtype != G_TYPE_INVALID, NULL); /* Get a wrapper class by: * 1. check for one attached to the gtype * 2. lookup one in a typelib * 3. creating a new one */ pyclass = (PyObject*)g_type_get_qdata(gtype, pygflags_class_key); if (!pyclass) pyclass = pygi_type_import_by_g_type(gtype); if (!pyclass) pyclass = pyg_flags_add(NULL, g_type_name(gtype), NULL, gtype); if (!pyclass) return PYGLIB_PyLong_FromUnsignedLong(value); values = PyDict_GetItemString(((PyTypeObject *)pyclass)->tp_dict, "__flags_values__"); pyint = PYGLIB_PyLong_FromUnsignedLong(value); retval = PyDict_GetItem(values, pyint); if (!retval) { PyErr_Clear(); retval = pyg_flags_val_new(pyclass, gtype, pyint); g_assert(retval != NULL); } else { Py_INCREF(retval); } Py_DECREF(pyint); return retval; }