[telepathy-mission-control/master] McdClientRegistry: store a ref to a TpDBusDaemon, and a string pool

Simon McVittie simon.mcvittie at collabora.co.uk
Mon Oct 19 07:01:03 PDT 2009


---
 src/client-registry.c |  114 ++++++++++++++++++++++++++++++++++++++++++++++++-
 src/client-registry.h |    5 ++
 2 files changed, 118 insertions(+), 1 deletions(-)

diff --git a/src/client-registry.c b/src/client-registry.c
index 0ce6670..12ae6bb 100644
--- a/src/client-registry.c
+++ b/src/client-registry.c
@@ -21,11 +21,22 @@
 
 #include "client-registry.h"
 
+#include <telepathy-glib/handle-repo-dynamic.h>
+
 G_DEFINE_TYPE (McdClientRegistry, _mcd_client_registry, G_TYPE_OBJECT)
 
+enum
+{
+  PROP_0,
+  PROP_DBUS_DAEMON
+};
+
 struct _McdClientRegistryPrivate
 {
-  int dummy;
+  TpDBusDaemon *dbus_daemon;
+  /* Not really handles as such, but TpHandleRepoIface gives us a convenient
+   * reference-counted string pool */
+  TpHandleRepoIface *string_pool;
 };
 
 static void
@@ -36,7 +47,108 @@ _mcd_client_registry_init (McdClientRegistry *self)
 }
 
 static void
+mcd_client_registry_constructed (GObject *object)
+{
+  McdClientRegistry *self = MCD_CLIENT_REGISTRY (object);
+  void (*chain_up) (GObject *) =
+    G_OBJECT_CLASS (_mcd_client_registry_parent_class)->constructed;
+
+  if (chain_up != NULL)
+    chain_up (object);
+
+  g_return_if_fail (self->priv->dbus_daemon != NULL);
+
+  /* Dummy handle type, we're just using this as a string pool */
+  self->priv->string_pool = tp_dynamic_handle_repo_new (TP_HANDLE_TYPE_CONTACT,
+      NULL, NULL);
+}
+
+static void
+mcd_client_registry_set_property (GObject *object,
+    guint prop_id,
+    const GValue *value,
+    GParamSpec *pspec)
+{
+  McdClientRegistry *self = MCD_CLIENT_REGISTRY (object);
+
+  switch (prop_id)
+    {
+    case PROP_DBUS_DAEMON:
+      g_assert (self->priv->dbus_daemon == NULL); /* it's construct-only */
+      self->priv->dbus_daemon = TP_DBUS_DAEMON (g_value_dup_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+mcd_client_registry_get_property (GObject *object,
+    guint prop_id,
+    GValue *value,
+    GParamSpec *pspec)
+{
+  McdClientRegistry *self = MCD_CLIENT_REGISTRY (object);
+
+  switch (prop_id)
+    {
+    case PROP_DBUS_DAEMON:
+      g_value_set_object (value, self->priv->dbus_daemon);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+mcd_client_registry_dispose (GObject *object)
+{
+  McdClientRegistry *self = MCD_CLIENT_REGISTRY (object);
+  void (*chain_up) (GObject *) =
+    G_OBJECT_CLASS (_mcd_client_registry_parent_class)->dispose;
+
+  if (self->priv->dbus_daemon != NULL)
+    {
+      g_object_unref (self->priv->dbus_daemon);
+      self->priv->dbus_daemon = NULL;
+    }
+
+  if (self->priv->string_pool != NULL)
+    {
+      g_object_unref (self->priv->string_pool);
+      self->priv->string_pool = NULL;
+    }
+
+  if (chain_up != NULL)
+    chain_up (object);
+}
+
+static void
 _mcd_client_registry_class_init (McdClientRegistryClass *cls)
 {
+  GObjectClass *object_class = G_OBJECT_CLASS (cls);
+
   g_type_class_add_private (cls, sizeof (McdClientRegistryPrivate));
+
+  object_class->constructed = mcd_client_registry_constructed;
+  object_class->get_property = mcd_client_registry_get_property;
+  object_class->set_property = mcd_client_registry_set_property;
+  object_class->dispose = mcd_client_registry_dispose;
+
+  g_object_class_install_property (object_class, PROP_DBUS_DAEMON,
+      g_param_spec_object ("dbus-daemon", "D-Bus daemon", "D-Bus daemon",
+        TP_TYPE_DBUS_DAEMON,
+        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+}
+
+McdClientRegistry *
+_mcd_client_registry_new (TpDBusDaemon *dbus_daemon)
+{
+  return g_object_new (MCD_TYPE_CLIENT_REGISTRY,
+      "dbus-daemon", dbus_daemon,
+      NULL);
 }
diff --git a/src/client-registry.h b/src/client-registry.h
index a5116d4..1bc2c85 100644
--- a/src/client-registry.h
+++ b/src/client-registry.h
@@ -23,6 +23,8 @@
 #define MCD_CLIENT_REGISTRY_H
 
 #include <glib-object.h>
+#include <telepathy-glib/dbus.h>
+#include <telepathy-glib/handle-repo.h>
 
 G_BEGIN_DECLS
 
@@ -59,6 +61,9 @@ GType _mcd_client_registry_get_type (void);
   (G_TYPE_INSTANCE_GET_CLASS ((obj), MCD_TYPE_CLIENT_REGISTRY, \
                               McdClientRegistryClass))
 
+G_GNUC_INTERNAL McdClientRegistry *_mcd_client_registry_new (
+    TpDBusDaemon *dbus_daemon);
+
 G_END_DECLS
 
 #endif
-- 
1.5.6.5




More information about the telepathy-commits mailing list