aboutsummaryrefslogtreecommitdiffstats
path: root/generator
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2011-06-09 10:14:55 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:15:26 -0300
commit76c2be48edf50c573d1da94879d02c1b97f8c501 (patch)
treecb5b617f0ae288b879974de000c10c99e5bc3e97 /generator
parente71fba71859985a5fe9b81c016451ac090cfc145 (diff)
Fixed substitution of method calls from user custom code for Qt's metaObject() method.
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org> Reviewed by Renato Araújo <renato.filho@openbossa.org>
Diffstat (limited to 'generator')
-rw-r--r--generator/shibokengenerator.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/generator/shibokengenerator.cpp b/generator/shibokengenerator.cpp
index ec9a4a8ad..73383335c 100644
--- a/generator/shibokengenerator.cpp
+++ b/generator/shibokengenerator.cpp
@@ -1251,10 +1251,19 @@ void ShibokenGenerator::writeCodeSnips(QTextStream& s,
if (func->isVirtual() && !func->isAbstract() && (!avoidProtectedHack() || !func->isProtected())) {
QString methodCallArgs = getArgumentsFromMethodCall(code);
if (!methodCallArgs.isNull()) {
- code.replace(QString("%CPPSELF.%FUNCTION_NAME(%1)").arg(methodCallArgs),
- QString("(Shiboken::Object::hasCppWrapper(reinterpret_cast<SbkObject*>(%1))"
- " ? %CPPSELF->::%TYPE::%FUNCTION_NAME(%2)"
- " : %CPPSELF.%FUNCTION_NAME(%2))").arg(pySelf).arg(methodCallArgs));
+ if (func->name() == "metaObject") {
+ QString wrapperClassName = wrapperName(func->ownerClass());
+ QString cppSelfVar = avoidProtectedHack() ? QString("%CPPSELF") : QString("reinterpret_cast<%1*>(%CPPSELF)").arg(wrapperClassName);
+ code.replace(QString("%CPPSELF.%FUNCTION_NAME(%1)").arg(methodCallArgs),
+ QString("(Shiboken::Object::hasCppWrapper(reinterpret_cast<SbkObject*>(%1))"
+ " ? %2->::%3::%FUNCTION_NAME(%4)"
+ " : %CPPSELF.%FUNCTION_NAME(%4))").arg(pySelf).arg(cppSelfVar).arg(wrapperClassName).arg(methodCallArgs));
+ } else {
+ code.replace(QString("%CPPSELF.%FUNCTION_NAME(%1)").arg(methodCallArgs),
+ QString("(Shiboken::Object::hasCppWrapper(reinterpret_cast<SbkObject*>(%1))"
+ " ? %CPPSELF->::%TYPE::%FUNCTION_NAME(%2)"
+ " : %CPPSELF.%FUNCTION_NAME(%2))").arg(pySelf).arg(methodCallArgs));
+ }
}
}