diff options
Diffstat (limited to 'sources/pyside2/libpyside/pysideqflags.cpp')
-rw-r--r-- | sources/pyside2/libpyside/pysideqflags.cpp | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/sources/pyside2/libpyside/pysideqflags.cpp b/sources/pyside2/libpyside/pysideqflags.cpp index fd0ed005f..b141ce157 100644 --- a/sources/pyside2/libpyside/pysideqflags.cpp +++ b/sources/pyside2/libpyside/pysideqflags.cpp @@ -86,6 +86,11 @@ extern "C" { return PyLong_AsLong(number); } + static PyObject *qflag_int(PyObject *self) + { + return PyLong_FromLong(reinterpret_cast<PySideQFlagsObject*>(self)->ob_value); + } + PyObject *PySideQFlagsRichCompare(PyObject *self, PyObject *other, int op) { int result = 0; @@ -146,13 +151,14 @@ namespace QFlags {Py_nb_and, 0}, {Py_nb_xor, 0}, {Py_nb_or, 0}, - {Py_nb_int, 0}, + {Py_nb_int, reinterpret_cast<void*>(qflag_int)}, + {Py_nb_index, reinterpret_cast<void*>(qflag_int)}, #ifndef IS_PY3K {Py_nb_long, 0}, #endif {Py_tp_new, (void *)PySideQFlagsNew}, {Py_tp_richcompare, (void *)PySideQFlagsRichCompare}, - {Py_tp_dealloc, (void *)object_dealloc}, + {Py_tp_dealloc, (void *)Sbk_object_dealloc}, {0, 0} }; static PyType_Spec SbkNewQFlagsType_spec = { @@ -168,19 +174,19 @@ namespace QFlags char qualname[200]; // PYSIDE-747: Here we insert now the full class name. strcpy(qualname, name); - // Careful: PyType_FromSpec does not allocate the string. - PyType_Spec *newspec = new PyType_Spec; - newspec->name = strdup(qualname); - newspec->basicsize = SbkNewQFlagsType_spec.basicsize; - newspec->itemsize = SbkNewQFlagsType_spec.itemsize; - newspec->flags = SbkNewQFlagsType_spec.flags; + // Careful: SbkType_FromSpec does not allocate the string. + PyType_Spec newspec; + newspec.name = strdup(qualname); + newspec.basicsize = SbkNewQFlagsType_spec.basicsize; + newspec.itemsize = SbkNewQFlagsType_spec.itemsize; + newspec.flags = SbkNewQFlagsType_spec.flags; int idx = -1; while (numberMethods[++idx].slot) { assert(SbkNewQFlagsType_slots[idx].slot == numberMethods[idx].slot); SbkNewQFlagsType_slots[idx].pfunc = numberMethods[idx].pfunc; } - newspec->slots = SbkNewQFlagsType_spec.slots; - PyTypeObject *type = (PyTypeObject *)PyType_FromSpec(newspec); + newspec.slots = SbkNewQFlagsType_spec.slots; + PyTypeObject *type = (PyTypeObject *)SbkType_FromSpec(&newspec); Py_TYPE(type) = &PyType_Type; PySideQFlagsType *flagsType = reinterpret_cast<PySideQFlagsType *>(type); |