From d3c594c382761241742cd6713f249abeb538ffaa Mon Sep 17 00:00:00 2001 From: Milian Wolff Date: Tue, 21 Jun 2016 11:30:03 +0200 Subject: Properly unwrap QObject signal parameters on the JavaScript side. This enables you to pass `QObject*` parameters via signals to the JavaScript side. The object will be serialized and then unwrapped as needed now. Task-number: QTBUG-54243 Change-Id: Ie8a6d14eb1351f14f1855d242ceb3b3f8262152d Reviewed-by: Andreas Holzammer --- src/webchannel/qwebchannel.js | 2 +- tests/auto/qml/tst_webchannel.qml | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/webchannel/qwebchannel.js b/src/webchannel/qwebchannel.js index 148e70d..b1722df 100644 --- a/src/webchannel/qwebchannel.js +++ b/src/webchannel/qwebchannel.js @@ -313,7 +313,7 @@ function QObject(name, data, webChannel) this.signalEmitted = function(signalName, signalArgs) { - invokeSignalCallbacks(signalName, signalArgs); + invokeSignalCallbacks(signalName, this.unwrapQObject(signalArgs)); } function addMethod(methodData) diff --git a/tests/auto/qml/tst_webchannel.qml b/tests/auto/qml/tst_webchannel.qml index f1042ca..6cb24b0 100644 --- a/tests/auto/qml/tst_webchannel.qml +++ b/tests/auto/qml/tst_webchannel.qml @@ -51,7 +51,7 @@ TestCase { id: myObj property int myProperty: 1 - signal mySignal(var arg) + signal mySignal(var arg, QtObject object) function myMethod(arg) { @@ -174,9 +174,11 @@ TestCase { function test_signal() { var signalReceivedArg; + var signalReceivedObject; var channel = client.createChannel(function(channel) { - channel.objects.myObj.mySignal.connect(function(arg) { + channel.objects.myObj.mySignal.connect(function(arg, object) { signalReceivedArg = arg; + signalReceivedObject = object; }); }); client.awaitInit(); @@ -187,9 +189,16 @@ TestCase { client.awaitIdle(); // initialization - myObj.mySignal("test"); + myObj.mySignal("test", myObj); compare(signalReceivedArg, "test"); + compare(signalReceivedObject.__id__, "myObj"); + + var newObj = myFactory.create("newObj"); + myObj.mySignal(newObj, newObj); + + compare(signalReceivedArg.objectName, newObj.objectName); + compare(signalReceivedObject.objectName, newObj.objectName); } function test_grouping() @@ -393,14 +402,14 @@ TestCase { client.awaitIdle(); - myObj.mySignal(42); + myObj.mySignal(42, myObj); compare(signalArg, 42); msg = client.awaitMessage(); compare(msg.type, JSClient.QWebChannelMessageTypes.disconnectFromSignal); compare(msg.object, "myObj"); - myObj.mySignal(0); + myObj.mySignal(0, myObj); compare(signalArg, 42); } } -- cgit v1.2.1