[telepathy-mission-control/master] McdMaster: now that we've removed the old D-Bus APIs we can remove the concept of "offline on idle" too

Simon McVittie simon.mcvittie at collabora.co.uk
Thu Apr 2 13:41:16 PDT 2009


---
 src/mcd-master.c |  106 ++---------------------------------------------------
 1 files changed, 4 insertions(+), 102 deletions(-)

diff --git a/src/mcd-master.c b/src/mcd-master.c
index 58131d5..09c2d23 100644
--- a/src/mcd-master.c
+++ b/src/mcd-master.c
@@ -88,11 +88,6 @@ typedef struct _McdMasterPrivate
 
     /* We create this for our member objects */
     TpDBusDaemon *dbus_daemon;
-    
-    /* if this flag is set, presence should go offline when all conversations
-     * are closed */
-    gboolean offline_on_idle;
-    GHashTable *clients_needing_presence;
 
     GHashTable *extra_parameters;
 
@@ -334,60 +329,6 @@ mcd_master_load_plugins (McdMaster *master)
     g_dir_close (dir);
 }
 
-static DBusHandlerResult
-dbus_filter_func (DBusConnection *connection,
-		  DBusMessage    *message,
-		  gpointer        data)
-{
-    DBusHandlerResult result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-    McdMasterPrivate *priv = (McdMasterPrivate *)data;
-
-    if (dbus_message_is_signal (message,
-				"org.freedesktop.DBus",
-				"NameOwnerChanged")) {
-	const gchar *name = NULL;
-	const gchar *prev_owner = NULL;
-	const gchar *new_owner = NULL;
-	DBusError error = {0};
-
-	dbus_error_init (&error);
-
-	if (!dbus_message_get_args (message,
-				    &error,
-				    DBUS_TYPE_STRING,
-				    &name,
-				    DBUS_TYPE_STRING,
-				    &prev_owner,
-				    DBUS_TYPE_STRING,
-				    &new_owner,
-				    DBUS_TYPE_INVALID)) {
-
-            DEBUG ("error: %s", error.message);
-	    dbus_error_free (&error);
-
-	    return result;
-	}
-
-	if (name && prev_owner && prev_owner[0] != '\0')
-	{
-	    if (g_hash_table_lookup (priv->clients_needing_presence, prev_owner))
-	    {
-                DEBUG ("Process %s which requested default presence is dead", prev_owner);
-		g_hash_table_remove (priv->clients_needing_presence, prev_owner);
-		if (g_hash_table_size (priv->clients_needing_presence) == 0 &&
-		    priv->offline_on_idle)
-		{
-		    mcd_presence_frame_request_presence (priv->presence_frame,
-							 TP_CONNECTION_PRESENCE_TYPE_OFFLINE,
-							 "No active processes");
-		}
-	    }
-	}
-    }
-
-    return result;
-}
-
 static void
 _mcd_master_connect (McdMission * mission)
 {
@@ -526,8 +467,6 @@ _mcd_master_dispose (GObject * object)
     }
     priv->is_disposed = TRUE;
 
-    g_hash_table_destroy (priv->clients_needing_presence);
-
     if (priv->transport_plugins)
     {
 	guint i;
@@ -558,12 +497,6 @@ _mcd_master_dispose (GObject * object)
 
     if (priv->dbus_daemon)
     {
-	DBusGConnection *dbus_connection;
-
-	dbus_connection = TP_PROXY (priv->dbus_daemon)->dbus_connection;
-	dbus_connection_remove_filter (dbus_g_connection_get_connection
-				       (dbus_connection),
-				       dbus_filter_func, priv);
 	g_object_unref (priv->dbus_daemon);
 	priv->dbus_daemon = NULL;
     }
@@ -577,36 +510,6 @@ _mcd_master_dispose (GObject * object)
     G_OBJECT_CLASS (mcd_master_parent_class)->dispose (object);
 }
 
-static void
-install_dbus_filter (McdMasterPrivate *priv)
-{
-    DBusGConnection *dbus_connection;
-    DBusConnection *dbus_conn;
-    DBusError error;
-
-    /* set up the NameOwnerChange filter */
-
-    dbus_connection = TP_PROXY (priv->dbus_daemon)->dbus_connection;
-    dbus_conn = dbus_g_connection_get_connection (dbus_connection);
-    dbus_error_init (&error);
-    dbus_connection_add_filter (dbus_conn,
-				dbus_filter_func,
-				priv, NULL);
-    dbus_bus_add_match (dbus_conn,
-			"type='signal'," "interface='org.freedesktop.DBus',"
-			"member='NameOwnerChanged'", &error);
-    if (dbus_error_is_set (&error))
-    {
-	g_warning ("Match rule adding failed");
-	dbus_error_free (&error);
-    }
-
-    /* FIXME: it doesn't really belong here, but for now it's OK. Move it when
-     * we switch to TpDBusDaemon APIs for monitoring D-Bus names */
-    /* There's no point in MC to stay alive if it's disconnected from the bus */
-    dbus_connection_set_exit_on_disconnect (dbus_conn, TRUE);
-}
-
 static GObject *
 mcd_master_constructor (GType type, guint n_params,
 			GObjectConstructParam *params)
@@ -628,7 +531,10 @@ mcd_master_constructor (GType type, guint n_params,
 
     _mcd_account_manager_setup (priv->account_manager);
 
-    install_dbus_filter (priv);
+    dbus_connection_set_exit_on_disconnect (
+        dbus_g_connection_get_connection (
+            TP_PROXY (priv->dbus_daemon)->dbus_connection),
+        TRUE);
 
     priv->presence_frame = mcd_presence_frame_new ();
     /* propagate the signals to dispatcher and presence_frame, too */
@@ -739,10 +645,6 @@ mcd_master_init (McdMaster * master)
     if (!default_master)
 	default_master = master;
 
-    priv->clients_needing_presence = g_hash_table_new_full (g_str_hash,
-							    g_str_equal,
-							    g_free, NULL);
-
     priv->extra_parameters = g_hash_table_new_full (g_str_hash, g_str_equal,
 						    g_free, _g_value_free);
 
-- 
1.5.6.5



More information about the telepathy-commits mailing list