81
81
} FilterResultCallbackData;
83
static FilterResultCallbackData *
84
filter_result_callback_data_new (EmpathyAccountChooser *chooser,
88
FilterResultCallbackData *data;
90
data = g_slice_new0 (FilterResultCallbackData);
91
data->chooser = g_object_ref (chooser);
92
data->account = g_object_ref (account);
93
data->iter = gtk_tree_iter_copy (iter);
99
filter_result_callback_data_free (FilterResultCallbackData *data)
101
g_object_unref (data->chooser);
102
g_object_unref (data->account);
103
gtk_tree_iter_free (data->iter);
104
g_slice_free (FilterResultCallbackData, data);
83
107
/* Distinguishes between store entries which are actually accounts, and special
84
108
* items like the "All" entry and the separator below it, so they can be sorted
85
109
* correctly. Higher-numbered entries will sort earlier.
157
182
GObjectClass *object_class = G_OBJECT_CLASS (klass);
184
object_class->constructed = account_chooser_constructed;
159
185
object_class->finalize = account_chooser_finalize;
160
186
object_class->get_property = account_chooser_get_property;
161
187
object_class->set_property = account_chooser_set_property;
206
232
g_signal_connect (priv->manager, "account-removed",
207
233
G_CALLBACK (account_chooser_account_removed_cb),
210
account_chooser_setup (EMPATHY_ACCOUNT_CHOOSER (chooser));
238
account_chooser_constructed (GObject *object)
240
EmpathyAccountChooser *self = (EmpathyAccountChooser *) object;
242
account_chooser_setup (self);
288
empathy_account_chooser_has_all_selected (EmpathyAccountChooser *chooser)
290
EmpathyAccountChooserPriv *priv;
295
g_return_val_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (chooser), FALSE);
297
priv = GET_PRIV (chooser);
299
g_return_val_if_fail (priv->has_all_option == TRUE, FALSE);
301
model = gtk_combo_box_get_model (GTK_COMBO_BOX (chooser));
302
if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (chooser), &iter)) {
306
gtk_tree_model_get (model, &iter, COL_ACCOUNT_ROW_TYPE, &type, -1);
308
return type == ROW_ALL;
312
316
* empathy_account_chooser_dup_account:
313
317
* @chooser: an #EmpathyAccountChooser
322
326
empathy_account_chooser_dup_account (EmpathyAccountChooser *chooser)
324
EmpathyAccountChooserPriv *priv;
325
328
TpAccount *account;
326
329
GtkTreeModel *model;
327
330
GtkTreeIter iter;
329
332
g_return_val_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (chooser), NULL);
331
priv = GET_PRIV (chooser);
333
334
model = gtk_combo_box_get_model (GTK_COMBO_BOX (chooser));
334
335
if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (chooser), &iter)) {
355
356
empathy_account_chooser_get_connection (EmpathyAccountChooser *chooser)
357
EmpathyAccountChooserPriv *priv;
358
358
TpAccount *account;
359
359
TpConnection *connection;
361
361
g_return_val_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (chooser), NULL);
363
priv = GET_PRIV (chooser);
365
363
account = empathy_account_chooser_dup_account (chooser);
367
365
/* if the returned account is NULL, then the account manager probably
491
489
gtk_list_store_prepend (store, &iter);
492
490
gtk_list_store_set (store, &iter,
493
COL_ACCOUNT_TEXT, _("All accounts"),
491
COL_ACCOUNT_TEXT, _("All"),
494
492
COL_ACCOUNT_ENABLED, TRUE,
495
493
COL_ACCOUNT_POINTER, NULL,
496
494
COL_ACCOUNT_ROW_TYPE, ROW_ALL,
816
812
if (account == NULL)
819
data = g_slice_new0 (FilterResultCallbackData);
820
data->chooser = chooser;
821
data->account = g_object_ref (account);
822
data->iter = g_memdup (iter, sizeof (GtkTreeIter));
815
data = filter_result_callback_data_new (chooser, account, iter);
824
817
if (priv->filter)
825
818
priv->filter (account, account_chooser_filter_ready_cb,
963
956
callback (is_connected, callback_data);
960
EmpathyAccountChooserFilterResultCallback callback;
962
} FilterCallbackData;
965
conn_prepared_cb (GObject *conn,
966
GAsyncResult *result,
969
FilterCallbackData *data = user_data;
970
GError *myerr = NULL;
971
TpCapabilities *caps;
973
if (!tp_proxy_prepare_finish (conn, result, &myerr)) {
974
data->callback (FALSE, data->user_data);
975
g_slice_free (FilterCallbackData, data);
979
caps = tp_connection_get_capabilities (TP_CONNECTION (conn));
980
data->callback (tp_capabilities_supports_text_chatrooms (caps),
983
g_slice_free (FilterCallbackData, data);
987
* empathy_account_chooser_filter_supports_multichat:
988
* @account: a #TpAccount
989
* @callback: an #EmpathyAccountChooserFilterResultCallback accepting the result
990
* @callback_data: data passed to the @callback
991
* @user_data: user data or %NULL
993
* An #EmpathyAccountChooserFilterFunc that returns accounts that both
994
* support multiuser text chat and are connected.
996
* Returns (via the callback) TRUE if @account both supports muc and is connected
999
empathy_account_chooser_filter_supports_chatrooms (
1001
EmpathyAccountChooserFilterResultCallback callback,
1002
gpointer callback_data,
1005
TpConnection *connection;
1006
FilterCallbackData *cb_data;
1007
GQuark features[] = { TP_CONNECTION_FEATURE_CAPABILITIES, 0 };
1009
if (tp_account_get_connection_status (account, NULL) !=
1010
TP_CONNECTION_STATUS_CONNECTED) {
1011
callback (FALSE, callback_data);
1015
/* check if CM supports multiuser text chat */
1016
connection = tp_account_get_connection (account);
1017
if (connection == NULL) {
1018
callback (FALSE, callback_data);
1022
cb_data = g_slice_new0 (FilterCallbackData);
1023
cb_data->callback = callback;
1024
cb_data->user_data = callback_data;
1026
tp_proxy_prepare_async (connection, features, conn_prepared_cb,
967
1031
empathy_account_chooser_is_ready (EmpathyAccountChooser *self)