| 24 |
24 |
| 25 #include "pidginaddbuddydialog.h" |
25 #include "pidginaddbuddydialog.h" |
| 26 |
26 |
| 27 #include "gtkaccount.h" |
27 #include "gtkaccount.h" |
| 28 #include "pidginaccountchooser.h" |
28 #include "pidginaccountchooser.h" |
| 29 #include "pidginaccountstore.h" |
|
| 30 #include "pidgincore.h" |
29 #include "pidgincore.h" |
| 31 |
30 |
| 32 struct _PidginAddBuddyDialog { |
31 struct _PidginAddBuddyDialog { |
| 33 GtkDialog parent; |
32 GtkDialog parent; |
| 34 |
33 |
| 35 GtkTreeModel *filter; |
34 GtkCustomFilter *filter; |
| 36 |
35 |
| 37 GtkWidget *account; |
36 GtkWidget *account; |
| 38 GtkWidget *username; |
37 GtkWidget *username; |
| 39 GtkWidget *alias; |
38 GtkWidget *alias; |
| 40 GtkWidget *message; |
39 GtkWidget *message; |
| 45 |
44 |
| 46 /****************************************************************************** |
45 /****************************************************************************** |
| 47 * Helpers |
46 * Helpers |
| 48 *****************************************************************************/ |
47 *****************************************************************************/ |
| 49 static gboolean |
48 static gboolean |
| 50 pidgin_add_buddy_dialog_filter_accounts(GtkTreeModel *model, GtkTreeIter *iter, |
49 pidgin_add_buddy_dialog_filter_accounts(gpointer item, |
| 51 gpointer data) |
50 G_GNUC_UNUSED gpointer data) |
| 52 { |
51 { |
| 53 PurpleAccount *account = NULL; |
|
| 54 PurpleProtocol *protocol = NULL; |
|
| 55 gboolean ret = FALSE; |
52 gboolean ret = FALSE; |
| 56 |
53 |
| 57 g_return_val_if_fail(GTK_IS_TREE_MODEL(model), FALSE); |
54 if(PURPLE_IS_ACCOUNT(item)) { |
| 58 g_return_val_if_fail(iter != NULL, FALSE); |
55 PurpleAccount *account = PURPLE_ACCOUNT(item); |
| 59 |
56 PurpleProtocol *protocol = purple_account_get_protocol(account); |
| 60 gtk_tree_model_get(model, iter, PIDGIN_ACCOUNT_STORE_COLUMN_ACCOUNT, |
57 |
| 61 &account, -1); |
58 if(PURPLE_IS_PROTOCOL(protocol)) { |
| 62 |
59 ret = PURPLE_PROTOCOL_IMPLEMENTS(protocol, SERVER, add_buddy); |
| 63 if(!PURPLE_IS_ACCOUNT(account)) { |
60 } |
| 64 return FALSE; |
61 } |
| 65 } |
|
| 66 |
|
| 67 protocol = purple_account_get_protocol(account); |
|
| 68 if(PURPLE_IS_PROTOCOL(protocol)) { |
|
| 69 ret = PURPLE_PROTOCOL_IMPLEMENTS(protocol, SERVER, add_buddy); |
|
| 70 } |
|
| 71 |
|
| 72 g_object_unref(G_OBJECT(account)); |
|
| 73 |
62 |
| 74 return ret; |
63 return ret; |
| 75 } |
64 } |
| 76 |
65 |
| 77 static void |
66 static void |
| 246 pidgin_add_buddy_dialog_init(PidginAddBuddyDialog *dialog) { |
235 pidgin_add_buddy_dialog_init(PidginAddBuddyDialog *dialog) { |
| 247 gtk_widget_init_template(GTK_WIDGET(dialog)); |
236 gtk_widget_init_template(GTK_WIDGET(dialog)); |
| 248 |
237 |
| 249 gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); |
238 gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); |
| 250 |
239 |
| 251 gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(dialog->filter), |
240 gtk_custom_filter_set_filter_func(dialog->filter, |
| 252 pidgin_add_buddy_dialog_filter_accounts, |
241 pidgin_add_buddy_dialog_filter_accounts, |
| 253 NULL, NULL); |
242 NULL, NULL); |
| 254 gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(dialog->filter)); |
|
| 255 |
|
| 256 gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->account), 0); |
|
| 257 |
243 |
| 258 purple_blist_walk(pidgin_add_buddy_dialog_group_cb, NULL, NULL, NULL, |
244 purple_blist_walk(pidgin_add_buddy_dialog_group_cb, NULL, NULL, NULL, |
| 259 dialog); |
245 dialog); |
| 260 } |
246 } |
| 261 |
247 |