pidgin/pidginaddbuddydialog.c

changeset 41864
6f490dec468f
parent 41854
c1d7e7445b0f
child 41981
e2d8eb34ebe7
equal deleted inserted replaced
41863:0067a0ff5b74 41864:6f490dec468f
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

mercurial