[empathy: 1/2] Skip accounts which don't support rooms in "Manage Favorites" dialog



commit 98b73f3620f3b2f94e7d2ce3cfd2cd07cc637d13
Author: Chandni Verma <chandniverma2112 gmail com>
Date:   Mon Jan 3 21:25:43 2011 +0530

    Skip accounts which don't support rooms in "Manage Favorites" dialog
    
    Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=603027

 libempathy-gtk/empathy-account-chooser.c |   71 ++++++++++++++++++++++++++++++
 libempathy-gtk/empathy-account-chooser.h |    4 ++
 src/empathy-chatrooms-window.c           |    2 +-
 src/empathy-new-chatroom-dialog.c        |   71 +-----------------------------
 4 files changed, 77 insertions(+), 71 deletions(-)
---
diff --git a/libempathy-gtk/empathy-account-chooser.c b/libempathy-gtk/empathy-account-chooser.c
index f1c0ec6..809c293 100644
--- a/libempathy-gtk/empathy-account-chooser.c
+++ b/libempathy-gtk/empathy-account-chooser.c
@@ -957,6 +957,77 @@ empathy_account_chooser_filter_is_connected (
 	callback (is_connected, callback_data);
 }
 
+typedef struct {
+	EmpathyAccountChooserFilterResultCallback callback;
+	gpointer                                  user_data;
+} FilterCallbackData;
+
+static void
+conn_prepared_cb (GObject *conn,
+		GAsyncResult *result,
+		gpointer user_data)
+{
+	FilterCallbackData *data = user_data;
+	GError             *myerr = NULL;
+	TpCapabilities     *caps;
+
+	if (!tp_proxy_prepare_finish (conn, result, &myerr)) {
+		data->callback (FALSE, data->user_data);
+		g_slice_free (FilterCallbackData, data);
+		return;
+	}
+
+	caps = tp_connection_get_capabilities (TP_CONNECTION (conn));
+	data->callback (tp_capabilities_supports_text_chatrooms (caps),
+			data->user_data);
+
+	g_slice_free (FilterCallbackData, data);
+}
+
+/**
+ * empathy_account_chooser_filter_supports_multichat:
+ * @account: a #TpAccount
+ * @callback: an #EmpathyAccountChooserFilterResultCallback accepting the result
+ * @callback_data: data passed to the @callback
+ * @user_data: user data or %NULL
+ *
+ * An #EmpathyAccountChooserFilterFunc that returns accounts that both
+ * support multiuser text chat and are connected.
+ *
+ * Returns (via the callback) TRUE if @account both supports muc and is connected
+ */
+void
+empathy_account_chooser_filter_supports_chatrooms (
+	TpAccount                                 *account,
+	EmpathyAccountChooserFilterResultCallback  callback,
+	gpointer                                   callback_data,
+	gpointer                                   user_data)
+{
+	TpConnection       *connection;
+	FilterCallbackData *cb_data;
+	GQuark              features[] = { TP_CONNECTION_FEATURE_CAPABILITIES, 0 };
+
+	if (tp_account_get_connection_status (account, NULL) !=
+		TP_CONNECTION_STATUS_CONNECTED) {
+		callback (FALSE, callback_data);
+		return;
+	}
+
+	/* check if CM supports multiuser text chat */
+	connection = tp_account_get_connection (account);
+	if (connection == NULL) {
+		callback (FALSE, callback_data);
+		return;
+	}
+
+	cb_data = g_slice_new0 (FilterCallbackData);
+	cb_data->callback = callback;
+	cb_data->user_data = callback_data;
+
+	tp_proxy_prepare_async (connection, features, conn_prepared_cb,
+		cb_data);
+}
+
 gboolean
 empathy_account_chooser_is_ready (EmpathyAccountChooser *self)
 {
diff --git a/libempathy-gtk/empathy-account-chooser.h b/libempathy-gtk/empathy-account-chooser.h
index dfd372c..04e6230 100644
--- a/libempathy-gtk/empathy-account-chooser.h
+++ b/libempathy-gtk/empathy-account-chooser.h
@@ -91,6 +91,10 @@ void           empathy_account_chooser_filter_is_connected (TpAccount
 							   EmpathyAccountChooserFilterResultCallback callback,
 							   gpointer               callback_data,
 							   gpointer               user_data);
+void           empathy_account_chooser_filter_supports_chatrooms (TpAccount       *account,
+							   EmpathyAccountChooserFilterResultCallback callback,
+							   gpointer               callback_data,
+							   gpointer               user_data);
 gboolean       empathy_account_chooser_is_ready (EmpathyAccountChooser *chooser);
 
 G_END_DECLS
diff --git a/src/empathy-chatrooms-window.c b/src/empathy-chatrooms-window.c
index 35e3e8b..1b00548 100644
--- a/src/empathy-chatrooms-window.c
+++ b/src/empathy-chatrooms-window.c
@@ -139,7 +139,7 @@ empathy_chatrooms_window_show (GtkWindow *parent)
 	/* Account chooser for chat rooms */
 	window->account_chooser = empathy_account_chooser_new ();
 	empathy_account_chooser_set_filter (EMPATHY_ACCOUNT_CHOOSER (window->account_chooser),
-					    empathy_account_chooser_filter_is_connected,
+					    empathy_account_chooser_filter_supports_chatrooms,
 					    NULL);
 	g_object_set (window->account_chooser,
 		      "has-all-option", TRUE,
diff --git a/src/empathy-new-chatroom-dialog.c b/src/empathy-new-chatroom-dialog.c
index 58690d1..f0e58c7 100644
--- a/src/empathy-new-chatroom-dialog.c
+++ b/src/empathy-new-chatroom-dialog.c
@@ -73,11 +73,6 @@ typedef struct {
 	GtkWidget         *viewport_error;
 } EmpathyNewChatroomDialog;
 
-typedef struct {
-  EmpathyAccountChooserFilterResultCallback callback;
-  gpointer                                  user_data;
-} FilterCallbackData;
-
 enum {
 	COL_NEED_PASSWORD,
 	COL_INVITE_ONLY,
@@ -138,70 +133,6 @@ static void	new_chatroom_dialog_button_close_error_clicked_cb   (GtkButton
 static EmpathyNewChatroomDialog *dialog_p = NULL;
 
 
-static void
-conn_prepared_cb (GObject *conn,
-		  GAsyncResult *result,
-		  gpointer user_data)
-{
-	FilterCallbackData *data = user_data;
-	GError             *myerr = NULL;
-	TpCapabilities     *caps;
-
-	if (!tp_proxy_prepare_finish (conn, result, &myerr)) {
-		data->callback (FALSE, data->user_data);
-		g_slice_free (FilterCallbackData, data);
-	}
-
-	caps = tp_connection_get_capabilities (TP_CONNECTION (conn));
-	data->callback (tp_capabilities_supports_text_chatrooms (caps),
-			data->user_data);
-
-	g_slice_free (FilterCallbackData, data);
-}
-
-/**
- * empathy_account_chooser_filter_supports_multichat:
- * @account: a #TpAccount
- * @callback: an #EmpathyAccountChooserFilterResultCallback accepting the result
- * @callback_data: data passed to the @callback
- * @user_data: user data or %NULL
- *
- * An #EmpathyAccountChooserFilterFunc that returns accounts that both
- * support multiuser text chat and are connected.
- *
- * Returns (via the callback) TRUE if @account both supports muc and is connected
- */
-static void
-empathy_account_chooser_filter_supports_multichat (
-	TpAccount                                 *account,
-	EmpathyAccountChooserFilterResultCallback  callback,
-	gpointer                                   callback_data,
-	gpointer                                   user_data)
-{
-	TpConnection       *connection;
-	FilterCallbackData *cb_data;
-	GQuark              features[] = { TP_CONNECTION_FEATURE_CAPABILITIES, 0 };
-
-	if (tp_account_get_connection_status (account, NULL) !=
-	    TP_CONNECTION_STATUS_CONNECTED) {
-		callback (FALSE, callback_data);
-		return;
-	}
-
-	/* check if CM supports multiuser text chat */
-	connection = tp_account_get_connection (account);
-	if (connection == NULL) {
-		callback (FALSE, callback_data);
-		return;
-	}
-
-	cb_data = g_slice_new0 (FilterCallbackData);
-	cb_data->callback = callback;
-	cb_data->user_data = callback_data;
-        tp_proxy_prepare_async (connection, features, conn_prepared_cb,
-		cb_data);
-}
-
 void
 empathy_new_chatroom_dialog_show (GtkWindow *parent)
 {
@@ -270,7 +201,7 @@ empathy_new_chatroom_dialog_show (GtkWindow *parent)
 	/* Account chooser for custom */
 	dialog->account_chooser = empathy_account_chooser_new ();
 	empathy_account_chooser_set_filter (EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser),
-					    empathy_account_chooser_filter_supports_multichat,
+					    empathy_account_chooser_filter_supports_chatrooms,
 					    NULL);
 	gtk_table_attach_defaults (GTK_TABLE (dialog->table_info),
 				   dialog->account_chooser,



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