[darcs-to-svn @ Connect accounts in empathy-launcher, not in empathy-contact-list]
authorXavier Claessens <xclaesse@src.gnome.org>
Tue, 1 May 2007 12:18:26 +0000 (12:18 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Tue, 1 May 2007 12:18:26 +0000 (12:18 +0000)
svn path=/trunk/; revision=14

12 files changed:
README
chat/empathy-chat-main.c
contact-list/empathy-contact-list-main.c
launcher/empathy-launcher.c
libempathy-gtk/gossip-account-widget-jabber.c
libempathy-gtk/gossip-accounts-dialog.c
libempathy-gtk/gossip-chat-window.c
libempathy/empathy-contact-list.c
libempathy/empathy-contact-manager.c
libempathy/empathy-session.c
libempathy/empathy-session.h
libempathy/empathy-tp-chat.c

diff --git a/README b/README
index ef16e2c..db1535d 100644 (file)
--- a/README
+++ b/README
@@ -7,9 +7,12 @@ $ make && make install
 2) Setup and enable some accounts
 $ empathy-accounts
 
-3) Get your contact list
-$ empathy-contact-list
+3) Start the MC
+$ empathy-launcher
 This will start MC and connect all enabled accounts. If you start a private chat
 or someone is saying something to you, empathy-chat will be started
 automagicaly and display a chat UI for your conversation.
 
+4) To see the contact list
+$ empathy-contact-list
+
index 36cf385..864e506 100644 (file)
@@ -29,6 +29,7 @@
 
 #include <libtelepathy/tp-conn.h>
 #include <libtelepathy/tp-chan.h>
+#include <libtelepathy/tp-helpers.h>
 #include <libmissioncontrol/mc-account.h>
 
 #include <libempathy/gossip-contact.h>
@@ -57,7 +58,7 @@ new_channel_cb (EmpathyChandler *chandler,
                GossipPrivateChat     *chat;
 
                /* We have a private chat channel */
-               mc = empathy_session_get_mission_control ();
+               mc = mission_control_new (tp_get_bus ());
                account = mission_control_get_account_for_connection (mc, tp_conn, NULL);
                manager = empathy_session_get_contact_manager ();
                list = empathy_contact_manager_get_list (manager, account);
@@ -66,6 +67,7 @@ new_channel_cb (EmpathyChandler *chandler,
                chat = gossip_private_chat_new_with_channel (contact, tp_chan);
                gossip_chat_present (GOSSIP_CHAT (chat));
 
+               g_object_unref (mc);
                g_object_unref (account);
                g_object_unref (contact);
                g_object_unref (chat);
index 8be108b..1aba204 100644 (file)
 #include <glib.h>
 #include <gtk/gtk.h>
 
-#include <libempathy/gossip-contact.h>
+#include <libtelepathy/tp-helpers.h>
+#include <libmissioncontrol/mission-control.h>
+
 #include <libempathy/empathy-session.h>
+#include <libempathy/gossip-contact.h>
 #include <libempathy-gtk/gossip-contact-list.h>
 #include <libempathy-gtk/gossip-private-chat.h>
 #include <libempathy-gtk/gossip-stock.h>
@@ -43,11 +46,11 @@ destroy_cb (GtkWidget *window,
 }
 
 static void
-contact_chat_cb (GtkWidget     *list,
-                GossipContact *contact,
-                gpointer       user_data)
+contact_chat_cb (GtkWidget      *list,
+                GossipContact  *contact,
+                MissionControl *mc)
 {
-       mission_control_request_channel (empathy_session_get_mission_control (),
+       mission_control_request_channel (mc,
                                         gossip_contact_get_account (contact),
                                         TP_IFACE_CHANNEL_TYPE_TEXT,
                                         gossip_contact_get_handle (contact),
@@ -64,8 +67,6 @@ main (int argc, char *argv[])
 
        gtk_init (&argc, &argv);
 
-       empathy_session_connect ();
-
        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gossip_stock_init (window);
 
@@ -84,7 +85,7 @@ main (int argc, char *argv[])
                          NULL);
        g_signal_connect (list, "contact-chat",
                          G_CALLBACK (contact_chat_cb),
-                         NULL);
+                         mission_control_new (tp_get_bus ()));
 
        gtk_widget_show_all (window);
 
index 3f58be9..f6851f9 100644 (file)
  */
 
 #include <config.h>
-
 #include <stdlib.h>
-
 #include <glib.h>
 
-#include <libempathy/empathy-session.h>
+#include <libtelepathy/tp-helpers.h>
+#include <libmissioncontrol/mc-account-monitor.h>
+#include <libmissioncontrol/mission-control.h>
+
 #include <libempathy/gossip-debug.h>
 
 #define DEBUG_DOMAIN "Launcher"
 
+static void error_cb              (MissionControl *mc,
+                                  GError         *error,
+                                  gpointer        data);
+static void service_ended_cb      (MissionControl *mc,
+                                  gpointer        user_data);
+static void start_mission_control (MissionControl *mc);
+
+
+
+
+static void
+error_cb (MissionControl *mc,
+         GError         *error,
+         gpointer        data)
+{
+       if (error) {
+               gossip_debug (DEBUG_DOMAIN, "Error: %s", error->message);
+       }
+}
+
+static void
+service_ended_cb (MissionControl *mc,
+                 gpointer        user_data)
+{
+       gossip_debug (DEBUG_DOMAIN, "Mission Control stopped");
+}
+
+static void
+account_enabled_cb (McAccountMonitor *monitor,
+                   gchar            *unique_name,
+                   MissionControl   *mc)
+{
+       gossip_debug (DEBUG_DOMAIN, "Account enabled: %s", unique_name);
+       start_mission_control (mc);
+}
+
+static void
+start_mission_control (MissionControl *mc)
+{
+       McPresence presence;
+
+       presence = mission_control_get_presence_actual (mc, NULL);
+
+       if (presence != MC_PRESENCE_UNSET &&
+           presence != MC_PRESENCE_OFFLINE) {
+               /* MC is already running and online, nothing to do */
+               return;
+       }
+
+       gossip_debug (DEBUG_DOMAIN, "Starting Mission Control...");
+
+       /* FIXME: Save/Restore status message */
+       mission_control_set_presence (mc, MC_PRESENCE_AVAILABLE,
+                                     NULL,
+                                     (McCallback) error_cb,
+                                     NULL);
+
+       mission_control_connect_all_with_default_presence (mc,
+                                                          (McCallback) error_cb,
+                                                          NULL);
+}
+
 int
 main (int argc, char *argv[])
 {
-       GMainLoop *main_loop;
+       GMainLoop        *main_loop;
+       MissionControl   *mc;
+       McAccountMonitor *monitor;
 
        g_type_init ();
 
-       empathy_session_connect ();
-
        main_loop = g_main_loop_new (NULL, FALSE);
+       monitor = mc_account_monitor_new ();
+       mc = mission_control_new (tp_get_bus ());
+
+       g_signal_connect (monitor, "account-enabled",
+                         G_CALLBACK (account_enabled_cb),
+                         mc);
+       g_signal_connect (mc, "ServiceEnded",
+                         G_CALLBACK (service_ended_cb),
+                         NULL);
+
+       start_mission_control (mc);
+
        g_main_loop_run (main_loop);
 
+       g_object_unref (monitor);
+       g_object_unref (mc);
+
        return 0;
 }
 
index e9b393c..b5cf4ce 100644 (file)
@@ -173,12 +173,12 @@ account_widget_jabber_destroy_cb (GtkWidget                 *widget,
 static void
 account_widget_jabber_setup (GossipAccountWidgetJabber *settings)
 {
-       gint      port;
-       gchar    *id;
-       gchar    *resource;
-       gchar    *server;
-       gchar    *password;
-       gboolean  old_ssl;
+       gint      port = 0;
+       gchar    *id = NULL;
+       gchar    *resource = NULL;
+       gchar    *server = NULL;
+       gchar    *password = NULL;
+       gboolean  old_ssl = FALSE;
 
        mc_account_get_param_int (settings->account, "port", &port);
        mc_account_get_param_string (settings->account, "account", &id);
index 6f61dfb..c4aa020 100644 (file)
@@ -37,8 +37,8 @@
 #include <libmissioncontrol/mission-control.h>
 #include <libmissioncontrol/mc-account-monitor.h>
 #include <libtelepathy/tp-constants.h>
+#include <libtelepathy/tp-helpers.h>
 
-#include <libempathy/empathy-session.h>
 #include <libempathy/gossip-debug.h>
 #include <libempathy/gossip-paths.h>
 #include <libempathy/gossip-utils.h>
 #define FLASH_TIMEOUT 500
 
 typedef struct {
-       GtkWidget *window;
+       GtkWidget        *window;
 
-       GtkWidget *alignment_settings;
+       GtkWidget        *alignment_settings;
 
-       GtkWidget *vbox_details;
-       GtkWidget *frame_no_account;
-       GtkWidget *label_no_account;
-       GtkWidget *label_no_account_blurb;
+       GtkWidget        *vbox_details;
+       GtkWidget        *frame_no_account;
+       GtkWidget        *label_no_account;
+       GtkWidget        *label_no_account_blurb;
 
-       GtkWidget *treeview;
+       GtkWidget        *treeview;
 
-       GtkWidget *button_remove;
-       GtkWidget *button_connect;
+       GtkWidget        *button_remove;
+       GtkWidget        *button_connect;
 
-       GtkWidget *frame_new_account;
-       GtkWidget *combobox_profile;
-       GtkWidget *entry_name;
-       GtkWidget *table_new_account;
-       GtkWidget *button_create;
-       GtkWidget *button_cancel;
+       GtkWidget        *frame_new_account;
+       GtkWidget        *combobox_profile;
+       GtkWidget        *entry_name;
+       GtkWidget        *table_new_account;
+       GtkWidget        *button_create;
+       GtkWidget        *button_cancel;
 
-       GtkWidget *image_type;
-       GtkWidget *label_name;
-       GtkWidget *label_type;
-       GtkWidget *settings_widget;
+       GtkWidget        *image_type;
+       GtkWidget        *label_name;
+       GtkWidget        *label_type;
+       GtkWidget        *settings_widget;
 
-       gboolean   connecting_show;
-       guint      connecting_id;
-       gboolean   account_changed;
+       gboolean          connecting_show;
+       guint             connecting_id;
+       gboolean          account_changed;
+
+       MissionControl   *mc;
+       McAccountMonitor *monitor;
 } GossipAccountsDialog;
 
 enum {
@@ -162,13 +165,11 @@ accounts_dialog_setup (GossipAccountsDialog *dialog)
        GtkTreeSelection *selection;
        GtkTreeIter       iter;
        GList            *accounts, *l;
-       MissionControl   *mc;
 
        view = GTK_TREE_VIEW (dialog->treeview);
        store = GTK_LIST_STORE (gtk_tree_view_get_model (view));
        selection = gtk_tree_view_get_selection (view);
 
-       mc = empathy_session_get_mission_control ();
        accounts = mc_accounts_list ();
 
        for (l = accounts; l; l = l->next) {
@@ -183,7 +184,7 @@ accounts_dialog_setup (GossipAccountsDialog *dialog)
                        continue;
                }
 
-               status = mission_control_get_connection_status (mc, account, NULL);
+               status = mission_control_get_connection_status (dialog->mc, account, NULL);
 
                gtk_list_store_append (store, &iter);
                gtk_list_store_set (store, &iter,
@@ -192,7 +193,7 @@ accounts_dialog_setup (GossipAccountsDialog *dialog)
                                    COL_ACCOUNT_POINTER, account,
                                    -1);
 
-               accounts_dialog_status_changed_cb (mc,
+               accounts_dialog_status_changed_cb (dialog->mc,
                                                   status,
                                                   MC_PRESENCE_UNSET,
                                                   TP_CONN_STATUS_REASON_NONE_SPECIFIED,
@@ -554,7 +555,6 @@ static void
 accounts_dialog_add_account (GossipAccountsDialog *dialog,
                             McAccount            *account)
 {
-       MissionControl            *mc;
        TelepathyConnectionStatus  status;
        const gchar               *name;
        GtkTreeView               *view;
@@ -585,8 +585,7 @@ accounts_dialog_add_account (GossipAccountsDialog *dialog,
                }
        }
 
-       mc = empathy_session_get_mission_control ();
-       status = mission_control_get_connection_status (mc, account, NULL);
+       status = mission_control_get_connection_status (dialog->mc, account, NULL);
        name = mc_account_get_display_name (account);
 
        g_return_if_fail (name != NULL);
@@ -618,10 +617,8 @@ accounts_dialog_account_removed_cb (McAccountMonitor     *monitor,
                                    gchar                *unique_name,
                                    GossipAccountsDialog *dialog)
 {
-       MissionControl *mc;
-       McAccount      *account;
+       McAccount *account;
 
-       mc = empathy_session_get_mission_control ();
        account = mc_account_lookup (unique_name);
 
        accounts_dialog_model_set_selected (dialog, account);
@@ -902,23 +899,19 @@ static void
 accounts_dialog_destroy_cb (GtkWidget            *widget,
                            GossipAccountsDialog *dialog)
 {
-       MissionControl   *mc;
-       McAccountMonitor *monitor;
-       GList            *accounts, *l;
-
-       mc = empathy_session_get_mission_control ();
-       monitor = mc_account_monitor_new ();
+       GList *accounts, *l;
 
        /* Disconnect signals */
-       g_signal_handlers_disconnect_by_func (monitor,
+       g_signal_handlers_disconnect_by_func (dialog->monitor,
                                              accounts_dialog_account_added_cb,
                                              dialog);
-       g_signal_handlers_disconnect_by_func (monitor,
+       g_signal_handlers_disconnect_by_func (dialog->monitor,
                                              accounts_dialog_account_removed_cb,
                                              dialog);
-       dbus_g_proxy_disconnect_signal (DBUS_G_PROXY (mc), "AccountStatusChanged",
-                                    G_CALLBACK (accounts_dialog_status_changed_cb),
-                                    dialog);
+       dbus_g_proxy_disconnect_signal (DBUS_G_PROXY (dialog->mc),
+                                       "AccountStatusChanged",
+                                       G_CALLBACK (accounts_dialog_status_changed_cb),
+                                       dialog);
 
        /* Delete incomplete accounts */
        accounts = mc_accounts_list ();
@@ -940,6 +933,9 @@ accounts_dialog_destroy_cb (GtkWidget            *widget,
                g_source_remove (dialog->connecting_id);
        }
 
+       g_object_unref (dialog->mc);
+       g_object_unref (dialog->monitor);
+       
        g_free (dialog);
 }
 
@@ -947,8 +943,6 @@ GtkWidget *
 gossip_accounts_dialog_show (void)
 {
        static GossipAccountsDialog *dialog = NULL;
-       MissionControl              *mc;
-       McAccountMonitor            *monitor;
        GladeXML                    *glade;
        GtkWidget                   *bbox;
        GtkWidget                   *button_close;
@@ -1010,17 +1004,17 @@ gossip_accounts_dialog_show (void)
        gtk_widget_show (dialog->combobox_profile);
 
        /* Set up signalling */
-       mc = empathy_session_get_mission_control ();
-       monitor = mc_account_monitor_new ();
+       dialog->mc = mission_control_new (tp_get_bus ());
+       dialog->monitor = mc_account_monitor_new ();
 
        /* FIXME: connect account-enabled/disabled too */
-       g_signal_connect (monitor, "account-created",
+       g_signal_connect (dialog->monitor, "account-created",
                          G_CALLBACK (accounts_dialog_account_added_cb),
                          dialog);
-       g_signal_connect (monitor, "account-deleted",
+       g_signal_connect (dialog->monitor, "account-deleted",
                          G_CALLBACK (accounts_dialog_account_removed_cb),
                          dialog);
-       dbus_g_proxy_connect_signal (DBUS_G_PROXY (mc), "AccountStatusChanged",
+       dbus_g_proxy_connect_signal (DBUS_G_PROXY (dialog->mc), "AccountStatusChanged",
                                     G_CALLBACK (accounts_dialog_status_changed_cb),
                                     dialog, NULL);
 
index 76b1c59..9f6f1a3 100644 (file)
@@ -275,7 +275,7 @@ gossip_chat_window_init (GossipChatWindow *window)
        priv->tooltips = g_object_ref (gtk_tooltips_new ());
        gtk_object_sink (GTK_OBJECT (priv->tooltips));
 
-       glade = gossip_glade_get_file ("empathy-chat.glade",
+       glade = gossip_glade_get_file ("gossip-chat.glade",
                                       "chat_window",
                                       NULL,
                                       "chat_window", &priv->dialog,
index 02d0c17..1a86400 100644 (file)
@@ -312,7 +312,7 @@ empathy_contact_list_new (McAccount *account)
 
        g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
 
-       mc = empathy_session_get_mission_control ();
+       mc = mission_control_new (tp_get_bus ());
 
        if (mission_control_get_connection_status (mc, account, NULL) != 0) {
                /* The account is not connected, nothing to do. */
@@ -320,6 +320,7 @@ empathy_contact_list_new (McAccount *account)
        }
 
        tp_conn = mission_control_get_connection (mc, account, NULL);
+       g_object_unref (mc);
        g_return_val_if_fail (tp_conn != NULL, NULL);
 
        list = g_object_new (EMPATHY_TYPE_CONTACT_LIST, NULL);
index 4246a03..cf5a81f 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <string.h>
 
+#include <libtelepathy/tp-helpers.h>
 #include <libtelepathy/tp-constants.h>
 
 #include "empathy-contact-manager.h"
@@ -37,8 +38,9 @@
 #define DEBUG_DOMAIN "ContactManager"
 
 struct _EmpathyContactManagerPriv {
-       GHashTable *lists;
-       gboolean    setup;
+       GHashTable     *lists;
+       MissionControl *mc;
+       gboolean        setup;
 };
 
 typedef struct {
@@ -130,7 +132,6 @@ static void
 empathy_contact_manager_init (EmpathyContactManager *manager)
 {
        EmpathyContactManagerPriv *priv;
-       MissionControl            *mc;
        GSList                    *accounts, *l;
 
        priv = GET_PRIV (manager);
@@ -140,14 +141,15 @@ empathy_contact_manager_init (EmpathyContactManager *manager)
                                             (GDestroyNotify) g_object_unref,
                                             (GDestroyNotify) g_object_unref);
 
-       mc = empathy_session_get_mission_control ();
+       priv->mc = mission_control_new (tp_get_bus ());
 
-       dbus_g_proxy_connect_signal (DBUS_G_PROXY (mc), "AccountStatusChanged",
+       dbus_g_proxy_connect_signal (DBUS_G_PROXY (priv->mc),
+                                    "AccountStatusChanged",
                                     G_CALLBACK (contact_manager_status_changed_cb),
                                     manager, NULL);
 
        /* Get ContactList for existing connections */
-       accounts = mission_control_get_online_connections (mc, NULL);
+       accounts = mission_control_get_online_connections (priv->mc, NULL);
        for (l = accounts; l; l = l->next) {
                McAccount *account;
 
@@ -167,6 +169,7 @@ contact_manager_finalize (GObject *object)
        priv = GET_PRIV (object);
 
        g_hash_table_destroy (priv->lists);
+       g_object_unref (priv->mc);
 }
 
 EmpathyContactManager *
index 1a46a9c..86ac1e1 100644 (file)
 
 #define DEBUG_DOMAIN "Session"
 
-static void session_start_mission_control (void);
-static void session_error_cb              (MissionControl   *mc,
-                                          GError           *error,
-                                          gpointer          data);
-static void session_account_enabled_cb    (McAccountMonitor *monitor,
-                                          gchar            *unique_name,
-                                          gpointer          user_data);
-static void session_service_ended_cb      (MissionControl   *mc,
-                                          gpointer          user_data);
-
-static MissionControl        *mission_control = NULL;
 static EmpathyContactManager *contact_manager = NULL;
 
-void
-empathy_session_connect (void)
-{
-       MissionControl   *mc;
-       McAccountMonitor *monitor;
-       static gboolean   started = FALSE;
-
-       if (started) {
-               return;
-       }
-
-       mc = empathy_session_get_mission_control ();
-       monitor = mc_account_monitor_new ();
-
-       g_signal_connect (monitor, "account-enabled",
-                         G_CALLBACK (session_account_enabled_cb),
-                         NULL);
-       g_signal_connect (mc, "ServiceEnded",
-                         G_CALLBACK (session_service_ended_cb),
-                         NULL);
-
-       g_object_unref (monitor);
-       session_start_mission_control ();
-
-       started = TRUE;
-}
-
 void
 empathy_session_finalize (void)
 {
-       if (mission_control) {
-               g_object_unref (mission_control);
-               mission_control = NULL;
-       }
-
        if (contact_manager) {
                g_object_unref (contact_manager);
                contact_manager = NULL;
        }
 }
 
-MissionControl *
-empathy_session_get_mission_control (void)
-{
-       if (!mission_control) {
-               mission_control = mission_control_new (tp_get_bus ());
-       }
-
-       return mission_control;
-}
-
 EmpathyContactManager *
 empathy_session_get_contact_manager (void)
 {
@@ -107,57 +54,3 @@ empathy_session_get_contact_manager (void)
        return contact_manager;
 }
 
-static void
-session_start_mission_control (void)
-{
-       MissionControl *mc;
-       McPresence      presence;
-
-       mc = empathy_session_get_mission_control ();
-       presence = mission_control_get_presence_actual (mc, NULL);
-
-       if (presence != MC_PRESENCE_UNSET &&
-           presence != MC_PRESENCE_OFFLINE) {
-               /* MC is already running and online, nothing to do */
-               return;
-       }
-
-       gossip_debug (DEBUG_DOMAIN, "Starting Mission Control...");
-
-       /* FIXME: Save/Restore status message */
-       mission_control_set_presence (mc, MC_PRESENCE_AVAILABLE,
-                                     NULL,
-                                     (McCallback) session_error_cb,
-                                     NULL);
-
-       mission_control_connect_all_with_default_presence (mc,
-                                                          (McCallback) session_error_cb,
-                                                          NULL);
-}
-
-static void
-session_error_cb (MissionControl *mc,
-                 GError         *error,
-                 gpointer        data)
-{
-       if (error) {
-               gossip_debug (DEBUG_DOMAIN, "Error: %s", error->message);
-       }
-}
-
-static void
-session_account_enabled_cb (McAccountMonitor *monitor,
-                           gchar            *unique_name,
-                           gpointer          user_data)
-{
-       gossip_debug (DEBUG_DOMAIN, "Account enabled: %s", unique_name);
-       session_start_mission_control ();
-}
-
-static void
-session_service_ended_cb (MissionControl *mc,
-                         gpointer        user_data)
-{
-       gossip_debug (DEBUG_DOMAIN, "Mission Control stopped");
-}
-
index 0a08cce..af843a5 100644 (file)
@@ -30,9 +30,7 @@
 
 G_BEGIN_DECLS
 
-void                   empathy_session_connect             (void);
 void                   empathy_session_finalize            (void);
-MissionControl *       empathy_session_get_mission_control (void);
 EmpathyContactManager *empathy_session_get_contact_manager (void);
 
 G_END_DECLS
index 36ac8a7..f72655e 100644 (file)
@@ -44,6 +44,7 @@ struct _EmpathyTpChatPriv {
        EmpathyContactList *list;
        McAccount          *account;
        gchar              *id;
+       MissionControl     *mc;
 
        TpChan             *tp_chan;
        DBusGProxy         *text_iface;
@@ -167,6 +168,9 @@ tp_chat_finalize (GObject *object)
        if (priv->account) {
                g_object_unref (priv->account);
        }
+       if (priv->mc) {
+               g_object_unref (priv->mc);
+       }
        g_free (priv->id);
 
        G_OBJECT_CLASS (empathy_tp_chat_parent_class)->finalize (object);
@@ -190,6 +194,7 @@ empathy_tp_chat_new (McAccount *account,
        priv->list = empathy_contact_manager_get_list (manager, account);
        priv->tp_chan = g_object_ref (tp_chan);
        priv->account = g_object_ref (account);
+       priv->mc = mission_control_new (tp_get_bus ());
        g_object_ref (priv->list);
 
        priv->text_iface = tp_chan_get_interface (tp_chan,
@@ -230,7 +235,7 @@ empathy_tp_chat_new_with_contact (GossipContact *contact)
 
        g_return_val_if_fail (GOSSIP_IS_CONTACT (contact), NULL);
 
-       mc = empathy_session_get_mission_control ();
+       mc = mission_control_new (tp_get_bus ());
        account = gossip_contact_get_account (contact);
 
        if (mission_control_get_connection_status (mc, account, NULL) != 0) {
@@ -255,6 +260,7 @@ empathy_tp_chat_new_with_contact (GossipContact *contact)
 
        g_object_unref (tp_conn);
        g_object_unref (text_chan);
+       g_object_unref (mc);
 
        return chat;
 }
@@ -373,7 +379,6 @@ const gchar *
 empathy_tp_chat_get_id (EmpathyTpChat *chat)
 {
        EmpathyTpChatPriv  *priv;
-       MissionControl     *mc;
        TpConn             *tp_conn;
        GArray             *handles;
        gchar             **names;
@@ -387,8 +392,7 @@ empathy_tp_chat_get_id (EmpathyTpChat *chat)
                return priv->id;
        }
 
-       mc = empathy_session_get_mission_control ();
-       tp_conn = mission_control_get_connection (mc, priv->account, NULL);
+       tp_conn = mission_control_get_connection (priv->mc, priv->account, NULL);
        handles = g_array_new (FALSE, FALSE, sizeof (guint));
        g_array_append_val (handles, priv->tp_chan->handle);