diff options
Diffstat (limited to 'sources')
4 files changed, 17 insertions, 9 deletions
diff --git a/sources/shiboken6/generator/shiboken/cppgenerator.cpp b/sources/shiboken6/generator/shiboken/cppgenerator.cpp index b1b29d4d4..51764afc3 100644 --- a/sources/shiboken6/generator/shiboken/cppgenerator.cpp +++ b/sources/shiboken6/generator/shiboken/cppgenerator.cpp @@ -566,11 +566,10 @@ void CppGenerator::generateClass(TextStream &s, const GeneratorContext &classCon writeVirtualMethodNative(s, func, maxOverrides++); } - if (!avoidProtectedHack() || !metaClass->hasPrivateDestructor()) { - if (usePySideExtensions() && isQObject(metaClass)) - writeMetaObjectMethod(s, classContext); + if (shouldGenerateMetaObjectFunctions(metaClass)) + writeMetaObjectMethod(s, classContext); + if (!avoidProtectedHack() || !metaClass->hasPrivateDestructor()) writeDestructorNative(s, classContext); - } } StringStream smd(TextStream::Language::Cpp); diff --git a/sources/shiboken6/generator/shiboken/headergenerator.cpp b/sources/shiboken6/generator/shiboken/headergenerator.cpp index a4f273218..5bee1cb52 100644 --- a/sources/shiboken6/generator/shiboken/headergenerator.cpp +++ b/sources/shiboken6/generator/shiboken/headergenerator.cpp @@ -238,10 +238,10 @@ void HeaderGenerator::writeWrapperClassDeclaration(TextStream &s, TypeSystem::CodeSnipPositionDeclaration, TypeSystem::NativeCode, classContext); - if ((!avoidProtectedHack() || !metaClass->hasPrivateDestructor()) - && usePySideExtensions() && isQObject(metaClass)) { - s << outdent << "public:\n" << indent << - R"(int qt_metacall(QMetaObject::Call call, int id, void **args) override; + if (shouldGenerateMetaObjectFunctions(metaClass)) { + s << R"( +const ::QMetaObject * metaObject() const override; +int qt_metacall(QMetaObject::Call call, int id, void **args) override; void *qt_metacast(const char *_clname) override; )"; } @@ -328,7 +328,7 @@ void HeaderGenerator::writeFunction(TextStream &s, const AbstractMetaFunctionCPt } const bool isVirtual = generation.testFlag(FunctionGenerationFlag::VirtualMethod); - if (isVirtual || generation.testFlag(FunctionGenerationFlag::QMetaObjectMethod)) { + if (isVirtual) { s << functionSignature(func, {}, {}, Generator::OriginalTypeDescription) << " override;\n"; } diff --git a/sources/shiboken6/generator/shiboken/shibokengenerator.cpp b/sources/shiboken6/generator/shiboken/shibokengenerator.cpp index f2d9f0c9c..cdf067b8b 100644 --- a/sources/shiboken6/generator/shiboken/shibokengenerator.cpp +++ b/sources/shiboken6/generator/shiboken/shibokengenerator.cpp @@ -223,6 +223,13 @@ bool ShibokenGenerator::shouldGenerateCppWrapper(const AbstractMetaClassCPtr &me && wrapper.testFlag(AbstractMetaClass::CppProtectedHackWrapper)); } +bool ShibokenGenerator::shouldGenerateMetaObjectFunctions(const AbstractMetaClassCPtr &metaClass) +{ + return usePySideExtensions() + && (!avoidProtectedHack() || !metaClass->hasPrivateDestructor()) + && isQObject(metaClass); +} + ShibokenGenerator::FunctionGeneration ShibokenGenerator::functionGeneration( const AbstractMetaFunctionCPtr &func) { diff --git a/sources/shiboken6/generator/shiboken/shibokengenerator.h b/sources/shiboken6/generator/shiboken/shibokengenerator.h index d16394a0e..11983e922 100644 --- a/sources/shiboken6/generator/shiboken/shibokengenerator.h +++ b/sources/shiboken6/generator/shiboken/shibokengenerator.h @@ -202,6 +202,8 @@ protected: /// instead of only a Python wrapper. static bool shouldGenerateCppWrapper(const AbstractMetaClassCPtr &metaClass); + static bool shouldGenerateMetaObjectFunctions(const AbstractMetaClassCPtr &metaClass); + /// Returns which functions need to be generated into the wrapper class static FunctionGeneration functionGeneration(const AbstractMetaFunctionCPtr &func); |
