aboutsummaryrefslogtreecommitdiffstats
path: root/generator
diff options
context:
space:
mode:
authorHugo Parente Lima <hugo.pl@gmail.com>2011-03-16 18:26:35 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:15:18 -0300
commitb5bfa9837fd084edb5cc79b44760161d7d872c08 (patch)
tree2395bad1cbe15129225bf40656aa7ca343be5cd9 /generator
parent0909185b8f45bd72618dfeb00b20bf4305087d1c (diff)
Register class names without namespaces to fix the mess in Qt signal type names.
Reviewer: Renato Araújo <renato.filho@openbossa.org> Luciano Wolf <luciano.wolf@openbossa.org> Marcelo Lira <marcelo.lira@openbossa.org>
Diffstat (limited to 'generator')
-rw-r--r--generator/cppgenerator.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp
index c012b9e9a..77f156836 100644
--- a/generator/cppgenerator.cpp
+++ b/generator/cppgenerator.cpp
@@ -3499,6 +3499,16 @@ void CppGenerator::writeClassRegister(QTextStream& s, const AbstractMetaClass* m
void CppGenerator::writeInitQtMetaTypeFunctionBody(QTextStream& s, const AbstractMetaClass* metaClass) const
{
+ // Gets all class name variants used on different possible scopes
+ QStringList nameVariants;
+ nameVariants << metaClass->name();
+ const AbstractMetaClass* enclosingClass = metaClass->enclosingClass();
+ while (enclosingClass) {
+ if (enclosingClass->typeEntry()->generateCode())
+ nameVariants << (enclosingClass->name() + "::" + nameVariants.last());
+ enclosingClass = enclosingClass->enclosingClass();
+ }
+
const QString className = metaClass->qualifiedCppName();
if (!metaClass->isNamespace()) {
// Qt metatypes are registered only on their first use, so we do this now.
@@ -3513,12 +3523,15 @@ void CppGenerator::writeInitQtMetaTypeFunctionBody(QTextStream& s, const Abstrac
}
}
- s << INDENT << "qRegisterMetaType< ::" << className << star << " >(\"" << className << star << "\");" << endl;
+ foreach (QString name, nameVariants)
+ s << INDENT << "qRegisterMetaType< ::" << className << star << " >(\"" << name << star << "\");" << endl;
}
foreach (AbstractMetaEnum* metaEnum, metaClass->enums()) {
if (!metaEnum->isPrivate() && !metaEnum->isAnonymous()) {
QString n = className + "::" + metaEnum->name();
- s << INDENT << "qRegisterMetaType< ::" << n << " >(\"" << n << "\");" << endl;
+ foreach (QString name, nameVariants)
+ s << INDENT << "qRegisterMetaType< ::" << n << " >(\"" << name << "::" << metaEnum->name() << "\");" << endl;
+
if (metaEnum->typeEntry()->flags()) {
n = metaEnum->typeEntry()->flags()->originalName();
s << INDENT << "qRegisterMetaType< ::" << n << " >(\"" << n << "\");" << endl;