aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChandni Verma <chandniverma2112@gmail.com>2011-01-03 23:55:43 +0800
committerChandni Verma <chandniverma2112@gmail.com>2011-01-03 23:55:43 +0800
commit98b73f3620f3b2f94e7d2ce3cfd2cd07cc637d13 (patch)
tree8f99ad647fc286c54b3afd7707a490376c5b5ac8
parentceff90e7c349418ed74c3bc2346fdb9270d534c0 (diff)
downloadgsoc2013-empathy-98b73f3620f3b2f94e7d2ce3cfd2cd07cc637d13.tar
gsoc2013-empathy-98b73f3620f3b2f94e7d2ce3cfd2cd07cc637d13.tar.gz
gsoc2013-empathy-98b73f3620f3b2f94e7d2ce3cfd2cd07cc637d13.tar.bz2
gsoc2013-empathy-98b73f3620f3b2f94e7d2ce3cfd2cd07cc637d13.tar.lz
gsoc2013-empathy-98b73f3620f3b2f94e7d2ce3cfd2cd07cc637d13.tar.xz
gsoc2013-empathy-98b73f3620f3b2f94e7d2ce3cfd2cd07cc637d13.tar.zst
gsoc2013-empathy-98b73f3620f3b2f94e7d2ce3cfd2cd07cc637d13.zip
Skip accounts which don't support rooms in "Manage Favorites" dialog
Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=603027
-rw-r--r--libempathy-gtk/empathy-account-chooser.c71
-rw-r--r--libempathy-gtk/empathy-account-chooser.h4
-rw-r--r--src/empathy-chatrooms-window.c2
-rw-r--r--src/empathy-new-chatroom-dialog.c71
4 files changed, 77 insertions, 71 deletions
diff --git a/libempathy-gtk/empathy-account-chooser.c b/libempathy-gtk/empathy-account-chooser.c
index f1c0ec6b4..809c2933a 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 dfd372c3e..04e6230bd 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 35e3e8b9d..1b00548f5 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 58690d139..f0e58c749 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,