diff --git a/src/qpython.cpp b/src/qpython.cpp index 236cfff..d9ea810 100644 --- a/src/qpython.cpp +++ b/src/qpython.cpp @@ -45,15 +45,15 @@ QPython::QPython(QObject *parent) QObject::connect(priv, SIGNAL(receive(QVariant)), this, SLOT(receive(QVariant))); - QObject::connect(this, SIGNAL(process(QString,QVariant,QJSValue)), - worker, SLOT(process(QString,QVariant,QJSValue))); - QObject::connect(worker, SIGNAL(finished(QVariant,QJSValue)), - this, SLOT(finished(QVariant,QJSValue))); + QObject::connect(this, SIGNAL(process(QString,QVariant,QJSValue *)), + worker, SLOT(process(QString,QVariant,QJSValue *))); + QObject::connect(worker, SIGNAL(finished(QVariant,QJSValue *)), + this, SLOT(finished(QVariant,QJSValue *))); - QObject::connect(this, SIGNAL(import(QString,QJSValue)), - worker, SLOT(import(QString,QJSValue))); - QObject::connect(worker, SIGNAL(imported(bool,QJSValue)), - this, SLOT(imported(bool,QJSValue))); + QObject::connect(this, SIGNAL(import(QString,QJSValue *)), + worker, SLOT(import(QString,QJSValue *))); + QObject::connect(worker, SIGNAL(imported(bool,QJSValue *)), + this, SLOT(imported(bool,QJSValue *))); thread.setObjectName("QPythonWorker"); thread.start(); @@ -84,7 +84,11 @@ QPython::addImportPath(QString path) void QPython::importModule(QString name, QJSValue callback) { - emit import(name, callback); + QJSValue *cb = 0; + if (!callback.isNull() && !callback.isUndefined() && callback.isCallable()) { + cb = new QJSValue(callback); + } + emit import(name, cb); } bool @@ -168,7 +172,11 @@ QPython::evaluate(QString expr) void QPython::call(QString func, QVariant args, QJSValue callback) { - emit process(func, args, callback); + QJSValue *cb = 0; + if (!callback.isNull() && !callback.isUndefined() && callback.isCallable()) { + cb = new QJSValue(callback); + } + emit process(func, args, cb); } QVariant @@ -220,23 +228,21 @@ QPython::call_sync(QString func, QVariant args) } void -QPython::finished(QVariant result, QJSValue callback) +QPython::finished(QVariant result, QJSValue *callback) { - if (!callback.isNull() && !callback.isUndefined() && callback.isCallable()) { - QJSValueList args; - QJSValue v = callback.engine()->toScriptValue(result); - args << v; - callback.call(args); - } + QJSValueList args; + QJSValue v = callback->engine()->toScriptValue(result); + args << v; + callback->call(args); + delete callback; } void -QPython::imported(bool result, QJSValue callback) +QPython::imported(bool result, QJSValue *callback) { - if (!callback.isNull() && !callback.isUndefined() && callback.isCallable()) { - QJSValueList args; - QJSValue v = callback.engine()->toScriptValue(QVariant(result)); - args << v; - callback.call(args); - } + QJSValueList args; + QJSValue v = callback->engine()->toScriptValue(QVariant(result)); + args << v; + callback->call(args); + delete callback; } diff --git a/src/qpython.h b/src/qpython.h index aba8af7..f05a4b6 100644 --- a/src/qpython.h +++ b/src/qpython.h @@ -260,14 +260,14 @@ class QPython : public QObject { void error(QString traceback); /* For internal use only */ - void process(QString func, QVariant args, QJSValue callback); - void import(QString name, QJSValue callback); + void process(QString func, QVariant args, QJSValue *callback); + void import(QString name, QJSValue *callback); private slots: void receive(QVariant data); - void finished(QVariant result, QJSValue callback); - void imported(bool result, QJSValue callback); + void finished(QVariant result, QJSValue *callback); + void imported(bool result, QJSValue *callback); private: static QPythonPriv *priv; diff --git a/src/qpython_worker.cpp b/src/qpython_worker.cpp index cce3322..dab6a84 100644 --- a/src/qpython_worker.cpp +++ b/src/qpython_worker.cpp @@ -32,15 +32,19 @@ QPythonWorker::~QPythonWorker() } void -QPythonWorker::process(QString func, QVariant args, QJSValue callback) +QPythonWorker::process(QString func, QVariant args, QJSValue *callback) { QVariant result = qpython->call_sync(func, args); - emit finished(result, callback); + if (callback) { + emit finished(result, callback); + } } void -QPythonWorker::import(QString name, QJSValue callback) +QPythonWorker::import(QString name, QJSValue *callback) { bool result = qpython->importModule_sync(name); - emit imported(result, callback); + if (callback) { + emit imported(result, callback); + } } diff --git a/src/qpython_worker.h b/src/qpython_worker.h index 3fce88c..a8076b8 100644 --- a/src/qpython_worker.h +++ b/src/qpython_worker.h @@ -34,12 +34,12 @@ class QPythonWorker : public QObject { ~QPythonWorker(); public slots: - void process(QString func, QVariant args, QJSValue callback); - void import(QString func, QJSValue callback); + void process(QString func, QVariant args, QJSValue *callback); + void import(QString func, QJSValue *callback); signals: - void finished(QVariant result, QJSValue callback); - void imported(bool result, QJSValue callback); + void finished(QVariant result, QJSValue *callback); + void imported(bool result, QJSValue *callback); private: QPython *qpython;