* qt/qdbusreply.h: Add default constructor and operator=
authorThiago Macieira <thiago@kde.org>
Sun, 23 Apr 2006 15:17:28 +0000 (15:17 +0000)
committerThiago Macieira <thiago@kde.org>
Sun, 23 Apr 2006 15:17:28 +0000 (15:17 +0000)
          (r532625)
* qt/qdbustypehelper_p.h: Use a clean namespace: no foreach()
          in public headers (r532952)
* qt/qdbusabstractinterface.cpp:
* qt/qdbusabstractinterface_p.h: Add the AutoDetect mode and
          make it the default (r532951)

ChangeLog
qt/qdbusabstractinterface.cpp
qt/qdbusabstractinterface.h
qt/qdbusreply.h
qt/qdbustypehelper_p.h

index 3a7bfa0..baf1390 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2006-04-23  Thiago Macieira  <thiago.macieira@trolltech.com
+
+       * qt/qdbusreply.h: Add default constructor and operator=
+          (r532625)
+       * qt/qdbustypehelper_p.h: Use a clean namespace: no foreach()
+          in public headers (r532952)
+       * qt/qdbusabstractinterface.cpp:
+       * qt/qdbusabstractinterface_p.h: Add the AutoDetect mode and
+          make it the default (r532951)
+
 2006-04-19  John (J5) Palmieri  <johnp@redhat.com>
 
        * dbus/dbus-connection.c: Fix asserts
index 127b161..291888f 100644 (file)
@@ -146,6 +146,28 @@ QDBusMessage QDBusAbstractInterface::callWithArgs(const QString& method, const Q
         sig = method.mid(pos + 1);
     }
 
+    if (mode == AutoDetect) {
+        // determine if this a sync or async call
+        mode = UseEventLoop;
+        const QMetaObject *mo = metaObject();
+        QByteArray match = method.toLatin1() + '(';
+
+        for (int i = staticMetaObject.methodCount(); i < mo->methodCount(); ++i) {
+            QMetaMethod mm = mo->method(i);
+            if (QByteArray(mm.signature()).startsWith(match)) {
+                // found a method with the same name as what we're looking for
+                // hopefully, nobody is overloading asynchronous and synchronous methods with
+                // the same name
+
+                QList<QByteArray> tags = QByteArray(mm.tag()).split(' ');
+                if (tags.contains("async") || tags.contains("Q_ASYNC"))
+                    mode = NoWaitForReply;
+
+                break;
+            }
+        }
+    }
+
     QDBusMessage msg = QDBusMessage::methodCall(service(), path(), interface(), m);
     msg.setSignature(sig);
     msg.QList<QVariant>::operator=(args);
index 5c34677..ae80b0a 100644 (file)
@@ -45,7 +45,8 @@ public:
     enum CallMode {
         NoWaitForReply,
         UseEventLoop,
-        NoUseEventLoop
+        NoUseEventLoop,
+        AutoDetect
     };
 
 public:
@@ -60,7 +61,7 @@ public:
     QDBusError lastError() const;
 
     QDBusMessage callWithArgs(const QString &method, const QList<QVariant> &args = QList<QVariant>(),
-                              CallMode mode = UseEventLoop);
+                              CallMode mode = AutoDetect);
     bool callWithArgs(const QString &method, QObject *receiver, const char *slot,
                       const QList<QVariant> &args = QList<QVariant>());
 
index f22082c..ff0d5d5 100644 (file)
@@ -39,15 +39,37 @@ class QDBUS_EXPORT QDBusReply
     typedef T Type;
 public:
     inline QDBusReply(const QDBusMessage &reply)
-        : m_error(reply), m_data(Type())
+        : m_data(Type())
     {
+        *this = reply;
+    }
+    inline QDBusReply& operator=(const QDBusMessage& reply)
+    {
+        m_error = reply;
         if (isSuccess())
             m_data = QDBusTypeHelper<Type>::fromVariant(reply.at(0));
+        else
+            m_data = Type();
+        return *this;
     }
-    inline QDBusReply(const QDBusError &error)
+
+    inline QDBusReply(const QDBusError &error = QDBusError())
         : m_error(error), m_data(Type())
     {
-    }    
+    }
+    inline QDBusReply& operator=(const QDBusError& error)
+    {
+        m_error = error;
+        m_data = Type();
+        return *this;
+    }
+
+    inline QDBusReply& operator=(const QDBusReply& other)
+    {
+        m_error = other.m_error;
+        m_data = other.m_data;
+        return *this;
+    }
 
     inline bool isError() const { return m_error.isValid(); }
     inline bool isSuccess() const { return !m_error.isValid(); }
index bcb0896..72d5bbe 100644 (file)
@@ -122,7 +122,7 @@ struct QDBusTypeHelper
     static inline QVariantList toVariantList(const List &list)
     {
         QVariantList tmp;
-        foreach (const Type &t, list)
+        Q_FOREACH (const Type &t, list)
             tmp.append(toVariant(t));
         return tmp;
     }
@@ -135,7 +135,7 @@ struct QDBusTypeHelper
     static inline List fromVariantList(const QVariantList &list)
     {
         List tmp;
-        foreach (const QVariant &v, list)
+        Q_FOREACH (const QVariant &v, list)
             tmp.append(fromVariant(v));
         return tmp;
     }