[empathy/gnome-2-30: 2/5] Join chatroom favorites once the account is connected (#620439)
- From: Guillaume Desmottes <gdesmott src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [empathy/gnome-2-30: 2/5] Join chatroom favorites once the account is connected (#620439)
- Date: Thu, 3 Jun 2010 12:53:32 +0000 (UTC)
commit 82a42a7fdd617397d3846675f336b409808747e6
Author: Guillaume Desmottes <guillaume desmottes collabora co uk>
Date: Thu Jun 3 11:14:45 2010 +0200
Join chatroom favorites once the account is connected (#620439)
src/empathy-main-window.c | 69 ++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 68 insertions(+), 1 deletions(-)
---
diff --git a/src/empathy-main-window.c b/src/empathy-main-window.c
index 427f525..7fc7cc6 100644
--- a/src/empathy-main-window.c
+++ b/src/empathy-main-window.c
@@ -892,6 +892,64 @@ join_chatroom (EmpathyChatroom *chatroom,
empathy_dispatcher_join_muc (connection, room, NULL, NULL);
}
+typedef struct
+{
+ EmpathyChatroom *chatroom;
+ gint64 timestamp;
+ glong sig_id;
+} join_fav_account_sig_ctx;
+
+static join_fav_account_sig_ctx *
+join_fav_account_sig_ctx_new (EmpathyChatroom *chatroom,
+ gint64 timestamp)
+{
+ join_fav_account_sig_ctx *ctx = g_slice_new0 (
+ join_fav_account_sig_ctx);
+
+ ctx->chatroom = g_object_ref (chatroom);
+ ctx->timestamp = timestamp;
+ return ctx;
+}
+
+static void
+join_fav_account_sig_ctx_free (join_fav_account_sig_ctx *ctx)
+{
+ g_object_unref (ctx->chatroom);
+ g_slice_free (join_fav_account_sig_ctx, ctx);
+}
+
+static void
+account_status_changed_cb (TpAccount *account,
+ TpConnectionStatus old_status,
+ TpConnectionStatus new_status,
+ guint reason,
+ gchar *dbus_error_name,
+ GHashTable *details,
+ gpointer user_data)
+{
+ join_fav_account_sig_ctx *ctx = user_data;
+
+ switch (new_status) {
+ case TP_CONNECTION_STATUS_DISCONNECTED:
+ /* Don't wait any longer */
+ goto disconnect;
+ break;
+
+ case TP_CONNECTION_STATUS_CONNECTING:
+ /* Wait a bit */
+ return;
+
+ case TP_CONNECTION_STATUS_CONNECTED:
+ /* We can join the room */
+ break;
+ }
+
+ join_chatroom (ctx->chatroom, ctx->timestamp);
+
+disconnect:
+ g_signal_handler_disconnect (account, ctx->sig_id);
+}
+
static void
main_window_favorite_chatroom_join (EmpathyChatroom *chatroom)
{
@@ -899,8 +957,17 @@ main_window_favorite_chatroom_join (EmpathyChatroom *chatroom)
account = empathy_chatroom_get_account (chatroom);
if (tp_account_get_connection_status (account, NULL) !=
- TP_CONNECTION_STATUS_CONNECTED)
+ TP_CONNECTION_STATUS_CONNECTED) {
+ join_fav_account_sig_ctx *ctx;
+
+ ctx = join_fav_account_sig_ctx_new (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);
return;
+ }
join_chatroom (chatroom, gtk_get_current_event_time ());
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]