diff options
Diffstat (limited to 'sources/shiboken6')
-rw-r--r-- | sources/shiboken6/libshiboken/basewrapper.cpp | 7 | ||||
-rw-r--r-- | sources/shiboken6/libshiboken/basewrapper.h | 5 |
2 files changed, 9 insertions, 3 deletions
diff --git a/sources/shiboken6/libshiboken/basewrapper.cpp b/sources/shiboken6/libshiboken/basewrapper.cpp index ce6b0bacf..62e2df2cf 100644 --- a/sources/shiboken6/libshiboken/basewrapper.cpp +++ b/sources/shiboken6/libshiboken/basewrapper.cpp @@ -474,9 +474,11 @@ PyObject *MakeQAppWrapper(PyTypeObject *type) // SbkObject_GenericSetAttr PyObject_GenericSetAttr // -void initSelectableFeature(SelectableFeatureHook func) +SelectableFeatureHook initSelectableFeature(SelectableFeatureHook func) { + auto ret = SelectFeatureSet; SelectFeatureSet = func; + return ret; } static PyObject *mangled_type_getattro(PyTypeObject *type, PyObject *name) @@ -629,10 +631,13 @@ static PyObject *SbkObjectTypeTpNew(PyTypeObject *metatype, PyObject *args, PyOb sotp->d_func = nullptr; sotp->is_user_type = 1; + // PYSIDE-1463: Prevent feature switching while in the creation process + auto saveFeature = initSelectableFeature(nullptr); for (SbkObjectType *base : bases) { if (PepType_SOTP(base)->subtype_init) PepType_SOTP(base)->subtype_init(newType, args, kwds); } + initSelectableFeature(saveFeature); return reinterpret_cast<PyObject *>(newType); } diff --git a/sources/shiboken6/libshiboken/basewrapper.h b/sources/shiboken6/libshiboken/basewrapper.h index fedd143c2..364f6c5cb 100644 --- a/sources/shiboken6/libshiboken/basewrapper.h +++ b/sources/shiboken6/libshiboken/basewrapper.h @@ -93,9 +93,10 @@ typedef void (*ObjectDestructor)(void *); typedef void (*SubTypeInitHook)(SbkObjectType *, PyObject *, PyObject *); -// PYSIDE-1019: Set the function to select the current feature. +/// PYSIDE-1019: Set the function to select the current feature. +/// Return value is the previous content. typedef PyObject *(*SelectableFeatureHook)(PyTypeObject *); -LIBSHIBOKEN_API void initSelectableFeature(SelectableFeatureHook func); +LIBSHIBOKEN_API SelectableFeatureHook initSelectableFeature(SelectableFeatureHook func); // PYSIDE-1019: Get access to PySide reserved bits. LIBSHIBOKEN_API int SbkObjectType_GetReserved(PyTypeObject *type); |