~thomir-deactivatedaccount/autopilot-qt/trunk-add-version-print

« back to all changes in this revision

Viewing changes to driver/dbus_object.cpp

  • Committer: Tarmac
  • Author(s): Alexandre Abreu
  • Date: 2013-06-27 18:17:46 UTC
  • mfrom: (64.1.1 latest)
  • Revision ID: tarmac-20130627181746-uocsy2movnv2l0mh
Fix invoking of slots with arguments. So far only no arguments, or arguments of type QVariant are supported. Fixes: https://bugs.launchpad.net/bugs/1195379.

Approved by PS Jenkins bot, Michael Zanetti.

Show diffs side-by-side

added added

removed removed

Lines of Context:
199
199
 
200
200
void DBusObject::InvokeMethod(int object_id, QString method_name, QVariantList args, const QDBusMessage &message)
201
201
{
 
202
    Q_UNUSED(message);
 
203
 
202
204
    QtNode::Ptr node = GetNodeWithId(object_id);
203
205
    if (! node)
204
206
    {
251
253
        QVariant passed_value = args.at(i);
252
254
        QByteArray passed_type_name = passed_value.typeName();
253
255
        QByteArray required_type_name = parameterTypes.at(i);
 
256
 
 
257
        // Special treatment for QVariants as the target type
 
258
        if (required_type_name == "QVariant")
 
259
        {
 
260
            generic_args[i] = Q_ARG(QVariant, args.at(i));
 
261
            continue;
 
262
        }
 
263
 
254
264
        if (passed_type_name != required_type_name)
255
265
        {
256
266
            // TODO - try and convert to correct type... if it's needed.
259
269
            qCritical() << "    Got:" << passed_type_name;
260
270
            break;
261
271
        }
262
 
        generic_args[i] = QGenericArgument(passed_value.typeName(), passed_value.constData());
 
272
        generic_args[i] = QGenericArgument(passed_type_name, passed_value.constData());
263
273
    }
264
274
 
265
275
    // method.invoke(...) takes between 0 and 10 parameters. Since We can't convert a QVector into