[empathy/gnome-2-30: 3/5] Don't wait longer than 5 seconds when trying to join chatrooms



commit 31516cb326bf0a21f913626ad945d8f36b68912c
Author: Guillaume Desmottes <guillaume desmottes collabora co uk>
Date:   Thu Jun 3 11:27:16 2010 +0200

    Don't wait longer than 5 seconds when trying to join chatrooms
    
    If the accounts takes ages to connect or was disabled, it would be weird to
    automatically join the room a long time after the user asked to join
    favorite rooms.

 src/empathy-main-window.c |   25 +++++++++++++++++++++++--
 1 files changed, 23 insertions(+), 2 deletions(-)
---
diff --git a/src/empathy-main-window.c b/src/empathy-main-window.c
index 7fc7cc6..dbf0ee5 100644
--- a/src/empathy-main-window.c
+++ b/src/empathy-main-window.c
@@ -894,18 +894,22 @@ join_chatroom (EmpathyChatroom *chatroom,
 
 typedef struct
 {
+	TpAccount *account;
 	EmpathyChatroom *chatroom;
 	gint64 timestamp;
 	glong sig_id;
+	guint timeout;
 } join_fav_account_sig_ctx;
 
 static join_fav_account_sig_ctx *
-join_fav_account_sig_ctx_new (EmpathyChatroom *chatroom,
+join_fav_account_sig_ctx_new (TpAccount *account,
+			     EmpathyChatroom *chatroom,
 			      gint64 timestamp)
 {
 	join_fav_account_sig_ctx *ctx = g_slice_new0 (
 		join_fav_account_sig_ctx);
 
+	ctx->account = g_object_ref (account);
 	ctx->chatroom = g_object_ref (chatroom);
 	ctx->timestamp = timestamp;
 	return ctx;
@@ -914,6 +918,7 @@ join_fav_account_sig_ctx_new (EmpathyChatroom *chatroom,
 static void
 join_fav_account_sig_ctx_free (join_fav_account_sig_ctx *ctx)
 {
+	g_object_unref (ctx->account);
 	g_object_unref (ctx->chatroom);
 	g_slice_free (join_fav_account_sig_ctx, ctx);
 }
@@ -947,9 +952,22 @@ account_status_changed_cb (TpAccount  *account,
 	join_chatroom (ctx->chatroom, ctx->timestamp);
 
 disconnect:
+	g_source_remove (ctx->timeout);
 	g_signal_handler_disconnect (account, ctx->sig_id);
 }
 
+#define JOIN_FAVORITE_TIMEOUT 5
+
+static gboolean
+join_favorite_timeout_cb (gpointer data)
+{
+	join_fav_account_sig_ctx *ctx = data;
+
+	/* stop waiting for joining the favorite room */
+	g_signal_handler_disconnect (ctx->account, ctx->sig_id);
+	return FALSE;
+}
+
 static void
 main_window_favorite_chatroom_join (EmpathyChatroom *chatroom)
 {
@@ -960,12 +978,15 @@ main_window_favorite_chatroom_join (EmpathyChatroom *chatroom)
 					     TP_CONNECTION_STATUS_CONNECTED) {
 		join_fav_account_sig_ctx *ctx;
 
-		ctx = join_fav_account_sig_ctx_new (chatroom,
+		ctx = join_fav_account_sig_ctx_new (account, chatroom,
 			gtk_get_current_event_time ());
 
 		ctx->sig_id = g_signal_connect_data (account, "status-changed",
 			G_CALLBACK (account_status_changed_cb), ctx,
 			(GClosureNotify) join_fav_account_sig_ctx_free, 0);
+
+		ctx->timeout = g_timeout_add_seconds (JOIN_FAVORITE_TIMEOUT,
+			join_favorite_timeout_cb, ctx);
 		return;
 	}
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]