Mercurial > projects > qtd
changeset 301:4d8481385c71 signals
windows fix
author | eldar |
---|---|
date | Tue, 08 Dec 2009 21:13:24 +0000 |
parents | c2c70e501860 |
children | 55ee4603365d |
files | generator/cppimplgenerator.cpp generator/dgenerator.cpp include/qtd_core.h |
diffstat | 3 files changed, 15 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/generator/cppimplgenerator.cpp Sun Dec 06 22:21:22 2009 +0000 +++ b/generator/cppimplgenerator.cpp Tue Dec 08 21:13:24 2009 +0000 @@ -505,13 +505,9 @@ "(pf" << function->marshalledName() << "_dispatch) virts[" << pos << "];" << endl; } } - // D-side signal callbacks - AbstractMetaFunctionList signal_funcs = signalFunctions(java_class); - for(int i = 0; i < signal_funcs.size(); i++) - s << " emit_callbacks_" << java_class->name() << "[" << i << "] = (EmitCallback)" - "sigs[" << i << "];" << endl; - + if (java_class->isQObject()) + s << " qtd_" << java_class->name() << "_qt_metacall_dispatch = (QtMetacallCallback)sigs[0];" << endl; s << "}" << endl; } @@ -1353,9 +1349,12 @@ << "}" << endl << endl; */ - s << "extern \"C\" int qtd_" << java_class->name() << "_qt_metacall_dispatch(void *d_entity, QMetaObject::Call _c, int _id, void **_a);" << endl << endl - - << "int " << shellClassName(java_class) << "::qt_metacall(QMetaObject::Call _c, int _id, void **_a)" << endl + if(cpp_shared) + s << "QtMetacallCallback qtd_" << java_class->name() << "_qt_metacall_dispatch;" << endl; + else + s << "extern \"C\" int qtd_" << java_class->name() << "_qt_metacall_dispatch(void *d_entity, QMetaObject::Call _c, int _id, void **_a);" << endl << endl; + + s << "int " << shellClassName(java_class) << "::qt_metacall(QMetaObject::Call _c, int _id, void **_a)" << endl << "{" << endl << " return qtd_" << java_class->name() << "_qt_metacall_dispatch(this->dId, _c, _id, _a);" << endl << "}" << endl << endl
--- a/generator/dgenerator.cpp Sun Dec 06 22:21:22 2009 +0000 +++ b/generator/dgenerator.cpp Tue Dec 08 21:13:24 2009 +0000 @@ -2573,18 +2573,10 @@ initArgs = "virt_arr.ptr"; if (d_class->isQObject()) { - - // signals - AbstractMetaFunctionList signal_funcs = signalFunctions(d_class); - s << endl << INDENT << "void*[" << signal_funcs.size() << "] sign_arr;" << endl; - for(int i = 0; i < signal_funcs.size(); i++) { - AbstractMetaFunction *signal = signal_funcs.at(i); - s << INDENT << "sign_arr[" << i << "] = &" << signalExternName(d_class, signal) << "_handle;" << endl; - } - if(signal_funcs.size() == 0) - initArgs += ", null"; - else - initArgs += ", sign_arr.ptr"; + // qt_metacalls + s << endl << INDENT << "void*[1] sign_arr;" << endl; + s << INDENT << "sign_arr[0] = &qtd_" << d_class->name() << "_qt_metacall_dispatch;" << endl; + initArgs += ", sign_arr.ptr"; } s << INDENT << "qtd_" << d_class->name() << QString("_initCallBacks(%1);").arg(initArgs) << endl;
--- a/include/qtd_core.h Sun Dec 06 22:21:22 2009 +0000 +++ b/include/qtd_core.h Tue Dec 08 21:13:24 2009 +0000 @@ -81,6 +81,9 @@ extern "C" QModelIndex qtd_to_QModelIndex(QModelIndexAccessor mia); extern "C" QModelIndexAccessor qtd_from_QModelIndex(const QModelIndex &index); +extern "C" typedef void (*EmitCallback)(void*, void**); +extern "C" typedef int (*QtMetacallCallback)(void *d_entity, QMetaObject::Call _c, int _id, void **_a); + template <class T> void call_destructor(T *a) {