[telepathy-mission-control/master] McdHandlerMap: have a TpDBusDaemon

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


---
 src/mcd-dispatcher.c       |    4 +-
 src/mcd-handler-map-priv.h |    4 ++-
 src/mcd-handler-map.c      |   60 +++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 64 insertions(+), 4 deletions(-)

diff --git a/src/mcd-dispatcher.c b/src/mcd-dispatcher.c
index 074f693..161969e 100644
--- a/src/mcd-dispatcher.c
+++ b/src/mcd-dispatcher.c
@@ -1902,6 +1902,8 @@ mcd_dispatcher_constructed (GObject *object)
     McdDispatcherPrivate *priv = MCD_DISPATCHER_PRIV (object);
     GError *error = NULL;
 
+    priv->handler_map = _mcd_handler_map_new (priv->dbus_daemon);
+
     priv->clients = _mcd_client_registry_new (priv->dbus_daemon);
     g_signal_connect (priv->clients, "client-added",
                       G_CALLBACK (mcd_dispatcher_client_added_cb), object);
@@ -2079,8 +2081,6 @@ mcd_dispatcher_init (McdDispatcher * dispatcher)
 
     priv->operation_list_active = FALSE;
 
-    priv->handler_map = _mcd_handler_map_new ();
-
     priv->connections = g_hash_table_new (NULL, NULL);
 }
 
diff --git a/src/mcd-handler-map-priv.h b/src/mcd-handler-map-priv.h
index fdec51a..aa7d1f5 100644
--- a/src/mcd-handler-map-priv.h
+++ b/src/mcd-handler-map-priv.h
@@ -26,6 +26,8 @@
 #ifndef MCD_HANDLER_MAP_H_
 #define MCD_HANDLER_MAP_H_
 
+#include <telepathy-glib/dbus.h>
+
 #include "mcd-channel.h"
 
 G_BEGIN_DECLS
@@ -63,7 +65,7 @@ struct _McdHandlerMapClass
     GObjectClass parent_class;
 };
 
-McdHandlerMap *_mcd_handler_map_new (void);
+McdHandlerMap *_mcd_handler_map_new (TpDBusDaemon *dbus_daemon);
 
 const gchar *_mcd_handler_map_get_handler (McdHandlerMap *self,
                                            const gchar *channel_path);
diff --git a/src/mcd-handler-map.c b/src/mcd-handler-map.c
index bcacf8a..fec75be 100644
--- a/src/mcd-handler-map.c
+++ b/src/mcd-handler-map.c
@@ -42,6 +42,11 @@ struct _McdHandlerMapPrivate
     GHashTable *handled_channels;
 };
 
+enum {
+    PROP_0,
+    PROP_DBUS_DAEMON
+};
+
 static void
 slice_free_gsize (gpointer p)
 {
@@ -70,6 +75,46 @@ _mcd_handler_map_init (McdHandlerMap *self)
 }
 
 static void
+_mcd_handler_map_get_property (GObject *object,
+                               guint prop_id,
+                               GValue *value,
+                               GParamSpec *pspec)
+{
+    McdHandlerMap *self = MCD_HANDLER_MAP (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);
+    }
+}
+
+static void
+_mcd_handler_map_set_property (GObject *object,
+                               guint prop_id,
+                               const GValue *value,
+                               GParamSpec *pspec)
+{
+    McdHandlerMap *self = MCD_HANDLER_MAP (object);
+
+    switch (prop_id)
+    {
+        case PROP_DBUS_DAEMON:
+            g_assert (self->priv->dbus_daemon == NULL); /* 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);
+    }
+}
+
+static void
 _mcd_handler_map_dispose (GObject *object)
 {
     McdHandlerMap *self = MCD_HANDLER_MAP (object);
@@ -80,6 +125,12 @@ _mcd_handler_map_dispose (GObject *object)
         self->priv->handled_channels = NULL;
     }
 
+    if (self->priv->dbus_daemon != NULL)
+    {
+        g_object_unref (self->priv->dbus_daemon);
+        self->priv->dbus_daemon = NULL;
+    }
+
     G_OBJECT_CLASS (_mcd_handler_map_parent_class)->dispose (object);
 }
 
@@ -111,12 +162,19 @@ _mcd_handler_map_class_init (McdHandlerMapClass *klass)
     g_type_class_add_private (object_class, sizeof (McdHandlerMapPrivate));
     object_class->dispose = _mcd_handler_map_dispose;
     object_class->finalize = _mcd_handler_map_finalize;
+
+    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));
 }
 
 McdHandlerMap *
-_mcd_handler_map_new (void)
+_mcd_handler_map_new (TpDBusDaemon *dbus_daemon)
 {
     return g_object_new (MCD_TYPE_HANDLER_MAP,
+                         "dbus-daemon", dbus_daemon,
                          NULL);
 }
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list