diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2010-06-03 17:27:16 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2010-06-03 20:47:52 +0800 |
commit | 31516cb326bf0a21f913626ad945d8f36b68912c (patch) | |
tree | 8804af842009ea1e16c7818ccc1ea234097b84a4 | |
parent | 82a42a7fdd617397d3846675f336b409808747e6 (diff) | |
download | gsoc2013-empathy-31516cb326bf0a21f913626ad945d8f36b68912c.tar gsoc2013-empathy-31516cb326bf0a21f913626ad945d8f36b68912c.tar.gz gsoc2013-empathy-31516cb326bf0a21f913626ad945d8f36b68912c.tar.bz2 gsoc2013-empathy-31516cb326bf0a21f913626ad945d8f36b68912c.tar.lz gsoc2013-empathy-31516cb326bf0a21f913626ad945d8f36b68912c.tar.xz gsoc2013-empathy-31516cb326bf0a21f913626ad945d8f36b68912c.tar.zst gsoc2013-empathy-31516cb326bf0a21f913626ad945d8f36b68912c.zip |
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.
-rw-r--r-- | 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 7fc7cc62c..dbf0ee5a0 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; } |