[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