[Telepathy-commits] [telepathy-mission-control/master] Let derived objects reimplement manager creation

Alberto Mardegan alberto.mardegan at nokia.com
Mon Nov 17 01:03:30 PST 2008


Virtualize the manager creation, so that subclasses of McdMaster can change it.
---
 src/mcd-master.c |   16 +++++++++++++---
 src/mcd-master.h |    2 ++
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/mcd-master.c b/src/mcd-master.c
index 009f572..c753546 100644
--- a/src/mcd-master.c
+++ b/src/mcd-master.c
@@ -700,6 +700,15 @@ mcd_master_constructor (GType type, guint n_params,
     return (GObject *) master;
 }
 
+static McdManager *
+mcd_master_create_manager (McdMaster *master, const gchar *unique_name)
+{
+    McdMasterPrivate *priv = MCD_MASTER_PRIV (master);
+
+    return mcd_manager_new (unique_name, priv->presence_frame,
+                            priv->dispatcher, priv->dbus_daemon);
+}
+
 static void
 mcd_master_class_init (McdMasterClass * klass)
 {
@@ -717,6 +726,8 @@ mcd_master_class_init (McdMasterClass * klass)
     mission_class->disconnect = _mcd_master_disconnect;
     mission_class->set_flags = _mcd_master_set_flags;
 
+    klass->create_manager = mcd_master_create_manager;
+
     /* Properties */
     g_object_class_install_property
         (object_class, PROP_PRESENCE_FRAME,
@@ -1183,7 +1194,6 @@ McdManager *
 mcd_master_lookup_manager (McdMaster *master,
 			   const gchar *unique_name)
 {
-    McdMasterPrivate *priv = MCD_MASTER_PRIV (master);
     const GList *managers, *list;
     McdManager *manager;
 
@@ -1196,8 +1206,8 @@ mcd_master_lookup_manager (McdMaster *master,
 	    return manager;
     }
 
-    manager = mcd_manager_new (unique_name, priv->presence_frame,
-			       priv->dispatcher, priv->dbus_daemon);
+    manager = MCD_MASTER_GET_CLASS (master)->create_manager
+        (master, unique_name);
     if (G_UNLIKELY (!manager))
 	g_warning ("Manager %s not created", unique_name);
     else
diff --git a/src/mcd-master.h b/src/mcd-master.h
index d50389e..d61a2af 100644
--- a/src/mcd-master.h
+++ b/src/mcd-master.h
@@ -53,6 +53,8 @@ struct _McdMaster
 struct _McdMasterClass
 {
     McdControllerClass parent_class;
+    McdManager *(*create_manager) (McdMaster *master,
+                                   const gchar *unique_name);
 };
 
 struct mcd_channel_request;
-- 
1.5.6.5




More information about the Telepathy-commits mailing list