summaryrefslogtreecommitdiffstats
path: root/qt/src/qdbusinterface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt/src/qdbusinterface.cpp')
-rw-r--r--qt/src/qdbusinterface.cpp203
1 files changed, 0 insertions, 203 deletions
diff --git a/qt/src/qdbusinterface.cpp b/qt/src/qdbusinterface.cpp
deleted file mode 100644
index 72097077..00000000
--- a/qt/src/qdbusinterface.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-/* -*- C++ -*-
- *
- * Copyright (C) 2006 Trolltech AS. All rights reserved.
- * Author: Thiago Macieira <thiago.macieira@trolltech.com>
- *
- * Licensed under the Academic Free License version 2.1
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "qdbusinterface.h"
-
-#include <dbus/dbus.h>
-#include <QtCore/qpointer.h>
-
-#include "qdbusinterface_p.h"
-#include "qdbusconnection_p.h"
-
-/*!
- \class QDBusInterface
- \brief Proxy class for interfaces on remote objects.
-
- QDBusInterface is a generic accessor class that is used to place calls to remote objects,
- connect to signals exported by remote objects and get/set the value of remote properties. This
- class is useful for dynamic access to remote objects: that is, when you do not have a generated
- code that represents the remote interface.
-
- Calls are usually placed by using the call() function, which constructs the message, sends it
- over the bus, waits for the reply and decodes the reply. Signals are connected to by using the
- normal QObject::connect() function. Finally, properties are accessed using the
- QObject::property() and QObject::setProperty() functions.
-*/
-
-QDBusInterface::QDBusInterface(QDBusInterfacePrivate *p)
- : QDBusAbstractInterface(p)
-{
-}
-
-/*!
- Destroy the object interface and frees up any resource used.
-*/
-QDBusInterface::~QDBusInterface()
-{
- // resources are freed in QDBusInterfacePrivate::~QDBusInterfacePrivate()
-}
-
-/*!
- \internal
- Overrides QObject::metaObject to return our own copy.
-*/
-const QMetaObject *QDBusInterface::metaObject() const
-{
- return d_func()->isValid ? d_func()->metaObject : &QDBusAbstractInterface::staticMetaObject;
-}
-
-/*!
- \internal
- Override QObject::qt_metacast to catch the interface name too.
-*/
-void *QDBusInterface::qt_metacast(const char *_clname)
-{
- if (!_clname) return 0;
- if (!strcmp(_clname, "QDBusInterface"))
- return static_cast<void*>(const_cast<QDBusInterface*>(this));
- if (d_func()->interface.toLatin1() == _clname)
- return static_cast<void*>(const_cast<QDBusInterface*>(this));
- return QDBusAbstractInterface::qt_metacast(_clname);
-}
-
-/*!
- \internal
- Dispatch the call through the private.
-*/
-int QDBusInterface::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
-{
- _id = QDBusAbstractInterface::qt_metacall(_c, _id, _a);
- if (_id < 0 || !d_func()->isValid)
- return _id;
- return d_func()->metacall(_c, _id, _a);
-}
-
-int QDBusInterfacePrivate::metacall(QMetaObject::Call c, int id, void **argv)
-{
- Q_Q(QDBusInterface);
-
- if (c == QMetaObject::InvokeMetaMethod) {
- int offset = metaObject->methodOffset();
- QMetaMethod mm = metaObject->method(id + offset);
-
- if (mm.methodType() == QMetaMethod::Signal) {
- // signal relay from D-Bus world to Qt world
- QMetaObject::activate(q, metaObject, id, argv);
-
- } else if (mm.methodType() == QMetaMethod::Slot) {
- // method call relay from Qt world to D-Bus world
- // get D-Bus equivalent signature
- QString methodName = QLatin1String(metaObject->dbusNameForMethod(id));
- const int *inputTypes = metaObject->inputTypesForMethod(id);
- const int *outputTypes = metaObject->outputTypesForMethod(id);
-
- int inputTypesCount = *inputTypes;
- int outputTypesCount = *outputTypes++;
-
- // we will assume that the input arguments were passed correctly
- QVariantList args;
- for (int i = 1; i <= inputTypesCount; ++i)
- args << QVariant(inputTypes[i], argv[i]);
-
- // make the call
- QPointer<QDBusInterface> qq = q;
- QDBusMessage reply = q->callWithArgs(methodName, args);
- args.clear();
-
- // access to "this" or to "q" below this point must check for "qq"
- // we may have been deleted!
-
- // check if we got the right number of parameters back:
- bool success = false;
- if (reply.count() == outputTypesCount) {
- // copy the values out
- for (int i = 0; i < outputTypesCount; ++i) {
- // treat the return value specially, since it may be null:
- if (i == 0 && argv[0] == 0)
- continue;
-
- // ensure that the types are correct:
- const QVariant &item = reply.at(i);
- if (outputTypes[i] != item.userType()) {
- success = false;
- break;
- }
-
- if (i == 0)
- QDBusMetaObject::assign(argv[0], item);
- else
- QDBusMetaObject::assign(argv[inputTypesCount + i], item);
- }
- }
-
- // bail out, something weird happened
- if (!success && !qq.isNull()) {
- QString errmsg = QLatin1String("Invalid signature `%1' in return from call to %2.%3");
- lastError = QDBusError(QDBusError::InvalidSignature,
- errmsg.arg(reply.signature(), interface, methodName));
- }
-
- // done
- return -1;
- }
- } else if (c == QMetaObject::ReadProperty) {
- // Qt doesn't support non-readable properties
- // we have to re-check
- QMetaProperty mp = metaObject->property(id + metaObject->propertyOffset());
- if (!mp.isReadable())
- return -1; // don't read
-
- QVariant value = property(mp);
- if (value.type() == QVariant::Invalid)
- // an error occurred -- property already set lastError
- return -1;
- else if (mp.type() == QVariant::LastType)
- // QVariant is special in this context
- *reinterpret_cast<QVariant *>(argv[0]) = value;
- else
- QDBusMetaObject::assign(argv[0], value);
-
- return -1; // handled
- } else if (c == QMetaObject::WriteProperty) {
- // QMetaProperty::write has already checked that we're writable
- // it has also checked that the type is right
- QVariant value(metaObject->propertyMetaType(id), argv[0]);
- QMetaProperty mp = metaObject->property(id + metaObject->propertyOffset());
-
- setProperty(mp, value);
- return -1;
- }
- return id;
-}
-
-QDBusInterfacePtr::QDBusInterfacePtr(QDBusConnection &conn, const QString &service, const QString &path,
- const QString &iface)
- : d(conn.findInterface(service, path, iface))
-{
-}
-
-QDBusInterfacePtr::QDBusInterfacePtr(const QString &service, const QString &path, const QString &iface)
- : d(QDBus::sessionBus().findInterface(service, path, iface))
-{
-}
-