diff options
-rw-r--r-- | generator/cppgenerator.cpp | 39 | ||||
-rw-r--r-- | generator/headergenerator.cpp | 2 |
2 files changed, 11 insertions, 30 deletions
diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp index 3be74c3e3..00aa85876 100644 --- a/generator/cppgenerator.cpp +++ b/generator/cppgenerator.cpp @@ -173,7 +173,6 @@ void CppGenerator::generateClass(QTextStream &s, const AbstractMetaClass *metaCl if (usePySideExtensions()) { if (metaClass->isQObject()) { s << "#include <signalmanager.h>" << endl; - s << "#include <dynamicqmetaobject.h>" << endl; s << "#include <pysidemetafunction.h>" << endl; } } @@ -452,9 +451,6 @@ void CppGenerator::writeConstructorNative(QTextStream& s, const AbstractMetaFunc OriginalTypeDescription | SkipDefaultValues); s << " : "; writeFunctionCall(s, func); - if (usePySideExtensions() && func->ownerClass()->isQObject()) - s << ", m_metaObject(0)"; - s << " {" << endl; const AbstractMetaArgument* lastArg = func->arguments().isEmpty() ? 0 : func->arguments().last(); writeCodeSnips(s, func->injectedCodeSnips(), CodeSnip::Beginning, TypeSystem::NativeCode, func, lastArg); @@ -779,31 +775,13 @@ void CppGenerator::writeMetaObjectMethod(QTextStream& s, const AbstractMetaClass { Indentation indentation(INDENT); QString wrapperClassName = wrapperName(metaClass); - QString prefix = wrapperClassName + "::"; - s << "const QMetaObject* " << wrapperClassName << "::metaObject() const\n{\n"; - s << INDENT << "if (!m_metaObject) {\n"; - { - Indentation indentation(INDENT); - s << INDENT << "SbkObject* pySelf = Shiboken::BindingManager::instance().retrieveWrapper(this);\n" - << INDENT << "void* typeData = Shiboken::Object::getTypeUserData(pySelf);" << endl - << INDENT << "if (!typeData) {" << endl; - { - Indentation indentation2(INDENT); - s << INDENT << "m_metaObject = PySide::DynamicQMetaObject::createBasedOn((PyObject*)pySelf, pySelf->ob_type, &" - << metaClass->qualifiedCppName() << "::staticMetaObject);" << endl - << INDENT << "Shiboken::Object::setTypeUserData(pySelf, m_metaObject, Shiboken::callCppDestructor<PySide::DynamicQMetaObject>);" << endl; - } - s << INDENT << "} else {" << endl; - { - Indentation indentation2(INDENT); - s << INDENT << "m_metaObject = reinterpret_cast<PySide::DynamicQMetaObject*>(typeData);" << endl; - } - s << INDENT << "}" << endl; - } - s << INDENT << "}" << endl; - s << INDENT << "return m_metaObject;\n"; - s << "}\n\n"; + s << "const QMetaObject* " << wrapperClassName << "::metaObject() const" << endl; + s << '{' << endl; + s << INDENT << "SbkObject* pySelf = Shiboken::BindingManager::instance().retrieveWrapper(this);" << endl; + s << INDENT << "return reinterpret_cast<QMetaObject*>(Shiboken::Object::getTypeUserData(pySelf));" << endl; + s << '}' << endl << endl; + // qt_metacall function s << "int " << wrapperClassName << "::qt_metacall(QMetaObject::Call call, int id, void** args)\n"; s << "{\n"; s << INDENT << "int result = " << metaClass->qualifiedCppName() << "::qt_metacall(call, id, args);\n"; @@ -3216,6 +3194,11 @@ void CppGenerator::writeClassRegister(QTextStream& s, const AbstractMetaClass* m // alloc private data s << INDENT << "Shiboken::ObjectType::initPrivateData(&" << cpythonTypeName(metaClass->typeEntry()) << ");" << endl; + if (usePySideExtensions() && metaClass->isQObject()) { + s << INDENT << "Shiboken::ObjectType::setSubTypeInitHook(&" << cpythonTypeName(metaClass->typeEntry()) << ", &PySide::initQObjectSubType);" << endl; + s << INDENT << "PySide::initDynamicMetaObject(&" << cpythonTypeName(metaClass->typeEntry()) << ", &" << metaClass->qualifiedCppName() << "::staticMetaObject);"; + } + // class inject-code target/beginning if (!metaClass->typeEntry()->codeSnips().isEmpty()) { writeCodeSnips(s, metaClass->typeEntry()->codeSnips(), CodeSnip::Beginning, TypeSystem::TargetLangCode, 0, 0, metaClass); diff --git a/generator/headergenerator.cpp b/generator/headergenerator.cpp index 76206d32a..7a49a8c41 100644 --- a/generator/headergenerator.cpp +++ b/generator/headergenerator.cpp @@ -123,8 +123,6 @@ void HeaderGenerator::generateClass(QTextStream& s, const AbstractMetaClass* met if (usePySideExtensions() && metaClass->isQObject()) { s << "public:\n"; s << INDENT << "virtual int qt_metacall(QMetaObject::Call call, int id, void** args);\n"; - s << "private:\n"; - s << INDENT << "mutable PySide::DynamicQMetaObject* m_metaObject;\n"; } #ifdef AVOID_PROTECTED_HACK |