diff generator/cppimplgenerator.cpp @ 183:d3f4f14d43a5

fixes with QObjects
author eldar
date Fri, 03 Jul 2009 20:53:07 +0000
parents ae06da58ec25
children 7dd099050621
line wrap: on
line diff
--- a/generator/cppimplgenerator.cpp	Fri Jul 03 16:07:26 2009 +0000
+++ b/generator/cppimplgenerator.cpp	Fri Jul 03 20:53:07 2009 +0000
@@ -1321,6 +1321,13 @@
 {
     QString linkName = java_class->name() + "_Link";
     QString className = java_class->name();
+
+    if (cpp_shared)
+        s << "extern \"C\" typedef void (*qtd_pf_D_" << java_class->name() << "_delete)(void *d_ptr);" << endl
+          << "qtd_pf_D_" << java_class->name() << "_delete qtd_D_" << java_class->name() << "_delete;" << endl << endl;
+    else
+        s << "extern \"C\" void qtd_D_" << java_class->name() << "_delete(void *d_ptr);" << endl << endl;
+
     s << "class " << linkName << " : public QObject, public QObjectUserData" << endl
       << "{" << endl
       << "public:" << endl
@@ -1328,6 +1335,7 @@
       << "    virtual int qt_metacall(QMetaObject::Call, int, void **);" << endl << endl
 
       << "    " << linkName << "(QObject *parent, void *d_ptr) : QObject() { _d_ptr = d_ptr; }" << endl
+      << "    ~" << linkName << "() { qtd_D_" << className << "_delete(_d_ptr); }" << endl
       << "    void *d_entity() const { return _d_ptr; }" << endl << endl
 
       << "private:" << endl
@@ -1463,24 +1471,13 @@
 
 void CppImplGenerator::writeShellDestructor(QTextStream &s, const AbstractMetaClass *java_class)
 {
-
-    if (java_class->isQObject())
-    if (cpp_shared)
-        s << "extern \"C\" typedef void (*qtd_pf_D_" << java_class->name() << "_delete)(void *d_ptr);" << endl
-          << "qtd_pf_D_" << java_class->name() << "_delete qtd_D_" << java_class->name() << "_delete;" << endl << endl;
-    else
-        s << "extern \"C\" void qtd_D_" << java_class->name() << "_delete(void *d_ptr);" << endl << endl;
-
     s << shellClassName(java_class) << "::~"
       << shellClassName(java_class) << "()" << endl
       << "{" << endl;
     {
+/* qtd
         Indentation indent(INDENT);
-        if (java_class->isQObject())
-            s << INDENT << "if (QObject::parent())" << endl
-              << INDENT << "    qtd_D_" << java_class->name() << "_delete(this->d_entity());" << endl;
-
-/* qtd
+
         s << "#ifdef QT_DEBUG" << endl
           << INDENT << "if (m_vtable)" << endl
           << INDENT << "    m_vtable->deref();" << endl