[empathy/gnome-2-30: 3/5] Don't wait longer than 5 seconds when trying to join chatrooms
- From: Guillaume Desmottes <gdesmott src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [empathy/gnome-2-30: 3/5] Don't wait longer than 5 seconds when trying to join chatrooms
- Date: Thu, 3 Jun 2010 12:53:37 +0000 (UTC)
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]