-
Bug
-
Resolution: Unresolved
-
P2: Important
-
None
-
1.2.x
-
None
-
This has been verified on the a recent master branch (pulled today) of (commit d8b39d905bb5f604e5bbc6b39fdee9d6b917f696) on KUbuntu and Harmattan.
When using QtDbus as an IPC mechanism some methods types can not be called. For example the method:
ContextInfo ContextClient::contextTypeInfo(const QString& contextId) const
will not work, leading to a "can not be called" warning on the server side. It appears that only user-type arguments are considered during argument processing in the "int QServiceMetaObjectDBus::qt_metacall(QMetaObject::Call c, int id, void **a)" method. The first part of the attached patch is a hack that works around that issue.
Furthermore, in some cases (standard) return types appear to be ignored. For instance the following method:
RecordingInfoId ContextClient::addScheduledRecording(RecordingInfo recordinginfo);
leads to an "Internal error: Failed to deliver message" on the server side. Note that RecordingInfoId and QueryId are typedefs of QString so they are handled as standard return types. It seems that that QMetamethod::invoke(...) is called without the QGenericReturnArgument argument and hence the return value is not considered. The second and third part of the patch illustrate this. Obviously this is just a workaround for QString based return values and not suggested as a generic solution for this problem.