aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside2/libpyside/pyside.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2018-10-02 15:28:19 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2018-10-22 15:05:03 +0000
commitd1d08a134d2b22b91150a70a1ec23f576bb38398 (patch)
tree49d415e560b782a2faf78b5f03e69fb6960ea026 /sources/pyside2/libpyside/pyside.cpp
parent3d6fc64570024d6af11597bb2ee4d431600ec6e1 (diff)
libpyside: Port DynamicQMetaObject to QMetaObjectBuilder
Qt 5 introduces a new class QMetaObjectBuilder for generating dynamic meta objects for use cases like QML. It provides an API to add methods, properties and info and a factory method toMetaObject() to obtain a QMetaObject snapshot reflecting the changes. Replace the DynamicQMetaObject aggregated by TypeUserData by a class MetaObjectBuilder wrapping a QMetaObjectBuilder with dirty-handling. The code to create the binary data of the QMetaObject can then be removed. For plain Qt objects, the wrapped base meta object will be returned (which fixes the bug). Task-number: PYSIDE-784 Change-Id: Id8a54570aff36c75fe0f3bf2d297a12d02cd773a Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'sources/pyside2/libpyside/pyside.cpp')
-rw-r--r--sources/pyside2/libpyside/pyside.cpp11
1 files changed, 5 insertions, 6 deletions
diff --git a/sources/pyside2/libpyside/pyside.cpp b/sources/pyside2/libpyside/pyside.cpp
index 856e5b92c..6e4a3efd4 100644
--- a/sources/pyside2/libpyside/pyside.cpp
+++ b/sources/pyside2/libpyside/pyside.cpp
@@ -204,7 +204,7 @@ void initDynamicMetaObject(SbkObjectType* type, const QMetaObject* base, std::si
Shiboken::ObjectType::setTypeUserData(type, userData, Shiboken::callCppDestructor<TypeUserData>);
//initialize staticQMetaObject property
- void* metaObjectPtr = &userData->mo;
+ void *metaObjectPtr = const_cast<QMetaObject *>(userData->mo.update());
static SbkConverter* converter = Shiboken::Conversions::getConverter("QMetaObject");
if (!converter)
return;
@@ -229,13 +229,13 @@ TypeUserData *retrieveTypeUserData(PyObject *pyObj)
return retrieveTypeUserData(pyTypeObj);
}
-DynamicQMetaObject *retrieveMetaObject(PyTypeObject *pyTypeObj)
+const QMetaObject *retrieveMetaObject(PyTypeObject *pyTypeObj)
{
TypeUserData *userData = retrieveTypeUserData(pyTypeObj);
- return userData ? &(userData->mo) : nullptr;
+ return userData ? userData->mo.update() : nullptr;
}
-DynamicQMetaObject *retrieveMetaObject(PyObject *pyObj)
+const QMetaObject *retrieveMetaObject(PyObject *pyObj)
{
auto pyTypeObj = PyType_Check(pyObj)
? reinterpret_cast<PyTypeObject *>(pyObj) : Py_TYPE(pyObj);
@@ -268,8 +268,7 @@ void initQObjectSubType(SbkObjectType *type, PyObject *args, PyObject * /* kwds
qWarning("Sub class of QObject not inheriting QObject!? Crash will happen when using %s.", className.constData());
return;
}
- userData->mo.update();
- initDynamicMetaObject(type, &userData->mo, userData->cppObjSize);
+ initDynamicMetaObject(type, userData->mo.update(), userData->cppObjSize);
}
PyObject* getMetaDataFromQObject(QObject* cppSelf, PyObject* self, PyObject* name)