]> git.0d.be Git - empathy.git/commitdiff
Let the chat dialog directly grab the channel on reconnect
authorSjoerd Simons <sjoerd.simons@collabora.co.uk>
Mon, 13 Apr 2009 08:21:26 +0000 (08:21 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Mon, 13 Apr 2009 08:21:26 +0000 (08:21 +0000)
When reconnecting open chat dialogs requests a new channel. It can grab this
directly when it is opened, no need to go through the dispatcher. Fixes issue
with stealing focus

From: Sjoerd Simons <sjoerd.simons@collabora.co.uk>

svn path=/trunk/; revision=2814

libempathy-gtk/empathy-chat.c

index 5f54c12ebb3d123d0231ae76abaa8af67f0ba050..99d4d4c090058d0f8e4462a6e8c77f88c0038306 100644 (file)
@@ -167,6 +167,28 @@ chat_set_property (GObject      *object,
        };
 }
 
+static void
+chat_connect_channel_reconnected (EmpathyDispatchOperation *dispatch,
+                                 const GError             *error,
+                                 gpointer                  user_data)
+{
+       EmpathyChat *chat = EMPATHY_CHAT (user_data);
+       EmpathyTpChat *tpchat;
+
+       if (error != NULL) {
+               empathy_chat_view_append_event (chat->view,
+                       _("Failed to reconnect this chat"));
+               return;
+       }
+
+       tpchat = EMPATHY_TP_CHAT (
+               empathy_dispatch_operation_get_channel_wrapper (dispatch));
+
+       if (empathy_dispatch_operation_claim (dispatch)) {
+               empathy_chat_set_tp_chat (chat, tpchat);
+       }
+}
+
 static void
 chat_connection_changed_cb (EmpathyAccountManager *manager,
                            McAccount *account,
@@ -187,10 +209,13 @@ chat_connection_changed_cb (EmpathyAccountManager *manager,
                switch (priv->handle_type) {
                        case TP_HANDLE_TYPE_CONTACT:
                                empathy_dispatcher_chat_with_contact_id (account, priv->id,
-                                       NULL, NULL);
+                                       chat_connect_channel_reconnected,
+                                       chat);
                                break;
                        case TP_HANDLE_TYPE_ROOM:
-                               empathy_dispatcher_join_muc (account, priv->id, NULL, NULL);
+                               empathy_dispatcher_join_muc (account, priv->id,
+                                       chat_connect_channel_reconnected,
+                                       chat);
                                break;
                        default:
                                g_assert_not_reached ();