[telepathy-qt4/master] ClientRegistrar: create method will return the same ClientRegistrar instance for a given QDBusConnection if the registrar already exists.

Andre Moreira Magalhaes (andrunko) andre.magalhaes at collabora.co.uk
Thu May 7 08:15:02 PDT 2009


---
 TelepathyQt4/client-registrar.cpp |   16 ++++++++++------
 TelepathyQt4/client-registrar.h   |    3 ++-
 2 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/TelepathyQt4/client-registrar.cpp b/TelepathyQt4/client-registrar.cpp
index 66e9461..eae75bd 100644
--- a/TelepathyQt4/client-registrar.cpp
+++ b/TelepathyQt4/client-registrar.cpp
@@ -370,30 +370,34 @@ struct ClientRegistrar::Private
     QSet<QString> services;
 };
 
+QHash<QString, ClientRegistrar*> ClientRegistrar::registrarForConnection;
+
 ClientRegistrarPtr ClientRegistrar::create(const QString &clientName)
 {
-    return ClientRegistrarPtr(new ClientRegistrar(clientName));
+    QDBusConnection bus = QDBusConnection::sessionBus();
+    return create(bus, clientName);
 }
 
 ClientRegistrarPtr ClientRegistrar::create(const QDBusConnection &bus,
         const QString &clientName)
 {
+    if (registrarForConnection.contains(bus.baseService())) {
+        return ClientRegistrarPtr(
+                registrarForConnection.value(bus.baseService()));
+    }
     return ClientRegistrarPtr(new ClientRegistrar(bus, clientName));
 }
 
-ClientRegistrar::ClientRegistrar(const QString &clientName)
-    : mPriv(new Private(QDBusConnection::sessionBus(), clientName))
-{
-}
-
 ClientRegistrar::ClientRegistrar(const QDBusConnection &bus,
         const QString &clientName)
     : mPriv(new Private(bus, clientName))
 {
+    registrarForConnection.insert(bus.baseService(), this);
 }
 
 ClientRegistrar::~ClientRegistrar()
 {
+    registrarForConnection.remove(mPriv->bus.baseService());
     unregisterClients();
     delete mPriv;
 }
diff --git a/TelepathyQt4/client-registrar.h b/TelepathyQt4/client-registrar.h
index f14ebdc..12eb6ec 100644
--- a/TelepathyQt4/client-registrar.h
+++ b/TelepathyQt4/client-registrar.h
@@ -56,12 +56,13 @@ public:
     void unregisterClients();
 
 private:
-    ClientRegistrar(const QString &clientName);
     ClientRegistrar(const QDBusConnection &bus, const QString &clientName);
 
     struct Private;
     friend struct Private;
     Private *mPriv;
+
+    static QHash<QString, ClientRegistrar *> registrarForConnection;
 };
 
 } // Tp
-- 
1.5.6.5




More information about the telepathy-commits mailing list