plugins/gevolution/gevolution.c

Tue, 17 Jan 2006 23:22:19 +0000

author
Etan Reisner <deryni@pidgin.im>
date
Tue, 17 Jan 2006 23:22:19 +0000
changeset 12919
519199cca273
parent 12219
2265c26be232
child 13091
b5ed878998dd
permissions
-rw-r--r--

[gaim-migrate @ 15272]
Replace GaimBlistNodeAction with the more generic GaimMenuAction, this is in
preparation for letting the chat room user list have extensible menus like the
blist entries do. (I know it's not exactly the prettiest, and the callback
isn't exactly type-safe, when we eventually gobjectify everything we can get
some safety back by using (GObject, gpointer) but that's for later.)

I'm planning to look into merging GaimPluginActions into GaimMenuActions as
well.

8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1 /*
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
2 * Evolution integration plugin for Gaim
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
3 *
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
4 * Copyright (C) 2003 Christian Hammond.
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
5 *
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
7 * modify it under the terms of the GNU General Public License as
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
8 * published by the Free Software Foundation; either version 2 of the
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
9 * License, or (at your option) any later version.
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
10 *
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful, but
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
14 * General Public License for more details.
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
15 *
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
19 * 02111-1307, USA.
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
20 */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
21 #include "internal.h"
9821
d02520c59822 [gaim-migrate @ 10692]
Mark Doliner <markdoliner@pidgin.im>
parents: 9354
diff changeset
22 #include "gtkgaim.h"
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
23
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
24 #include "connection.h"
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
25 #include "debug.h"
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
26 #include "prefs.h"
11117
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
27 #include "notify.h"
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
28 #include "signals.h"
10831
fbe1ff83d5a9 [gaim-migrate @ 12499]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10662
diff changeset
29 #include "util.h"
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9821
diff changeset
30 #include "version.h"
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
31
9821
d02520c59822 [gaim-migrate @ 10692]
Mark Doliner <markdoliner@pidgin.im>
parents: 9354
diff changeset
32 #include "gtkblist.h"
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
33 #include "gtkconv.h"
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
34 #include "gtkplugin.h"
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
35 #include "gtkutils.h"
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
36
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
37 #include "gevolution.h"
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
38
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
39 #include <libedata-book/Evolution-DataServer-Addressbook.h>
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
40
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
41 #include <libebook/e-book-listener.h>
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
42 #include <libedata-book/e-data-book-factory.h>
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
43 #include <bonobo/bonobo-main.h>
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
44
11117
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
45 #include <glib.h>
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
46
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
47 #define GEVOLUTION_PLUGIN_ID "gtk-x11-gevolution"
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
48
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
49 #define E_DATA_BOOK_FACTORY_OAF_ID \
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
50 "OAFIID:GNOME_Evolution_DataServer_BookFactory"
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
51
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
52 enum
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
53 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
54 COLUMN_AUTOADD,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
55 COLUMN_ICON,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
56 COLUMN_SCREENNAME,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
57 COLUMN_DATA,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
58 NUM_COLUMNS
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
59 };
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
60
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
61 static GaimBlistUiOps *backup_blist_ui_ops = NULL;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
62 static GaimBlistUiOps *blist_ui_ops = NULL;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
63 static EBook *book = NULL;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
64 static gulong timer = 0;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
65 static gulong book_view_tag = 0;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
66 static EBookView *book_view = NULL;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
67
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
68 static void
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
69 update_ims_from_contact(EContact *contact, const char *name,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
70 const char *prpl_id, EContactField field)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
71 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
72 GList *ims = e_contact_get(contact, field);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
73 GList *l, *l2;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
74
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
75 if (ims == NULL)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
76 return;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
77
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
78 for (l = gaim_connections_get_all(); l != NULL; l = l->next)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
79 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
80 GaimConnection *gc = (GaimConnection *)l->data;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
81 GaimAccount *account = gaim_connection_get_account(gc);
10831
fbe1ff83d5a9 [gaim-migrate @ 12499]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10662
diff changeset
82 char *me = g_strdup(gaim_normalize(account, gaim_account_get_username(account)));
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
83
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
84 if (strcmp(gaim_account_get_protocol_id(account), prpl_id))
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
85 continue;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
86
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
87 if (!gaim_account_get_bool(account, "gevo-autoadd", FALSE))
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
88 continue;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
89
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
90 for (l2 = ims; l2 != NULL; l2 = l2->next)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
91 {
10831
fbe1ff83d5a9 [gaim-migrate @ 12499]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10662
diff changeset
92 if (gaim_find_buddy(account, l2->data) != NULL ||
fbe1ff83d5a9 [gaim-migrate @ 12499]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10662
diff changeset
93 !strcmp(me, gaim_normalize(account, l2->data)))
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
94 continue;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
95
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
96 gevo_add_buddy(account, _("Buddies"), l2->data, name);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
97 }
10831
fbe1ff83d5a9 [gaim-migrate @ 12499]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10662
diff changeset
98 g_free(me);
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
99 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
100
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
101 g_list_foreach(ims, (GFunc)g_free, NULL);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
102 g_list_free(ims);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
103 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
104
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
105 static void
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
106 update_buddies_from_contact(EContact *contact)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
107 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
108 const char *name;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
109
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
110 name = e_contact_get_const(contact, E_CONTACT_FULL_NAME);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
111
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
112 update_ims_from_contact(contact, name, "prpl-oscar", E_CONTACT_IM_AIM);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
113 update_ims_from_contact(contact, name, "prpl-jabber", E_CONTACT_IM_JABBER);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
114 update_ims_from_contact(contact, name, "prpl-yahoo", E_CONTACT_IM_YAHOO);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
115 update_ims_from_contact(contact, name, "prpl-msn", E_CONTACT_IM_MSN);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
116 update_ims_from_contact(contact, name, "prpl-oscar", E_CONTACT_IM_ICQ);
11054
ba2440c5ee48 [gaim-migrate @ 12992]
Stanislav Brabec <sbrabec@suse.cz>
parents: 11033
diff changeset
117 update_ims_from_contact(contact, name, "prpl-novell", E_CONTACT_IM_GROUPWISE);
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
118 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
119
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
120 static void
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
121 contacts_changed_cb(EBookView *book_view, const GList *contacts)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
122 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
123 const GList *l;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
124
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
125 if (gaim_connections_get_all() == NULL)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
126 return;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
127
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
128 for (l = contacts; l != NULL; l = l->next)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
129 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
130 EContact *contact = (EContact *)l->data;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
131
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
132 update_buddies_from_contact(contact);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
133 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
134 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
135
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
136 static void
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
137 request_add_buddy(GaimAccount *account, const char *username,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
138 const char *group, const char *alias)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
139 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
140 if (book == NULL)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
141 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
142 backup_blist_ui_ops->request_add_buddy(account, username, group,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
143 alias);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
144 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
145 else
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
146 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
147 gevo_add_buddy_dialog_show(account, username, group, alias);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
148 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
149 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
150
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
151 static void
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
152 got_book_view_cb(EBook *book, EBookStatus status, EBookView *view,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
153 gpointer user_data)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
154 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
155 book_view_tag = 0;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
156
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
157 if (status != E_BOOK_ERROR_OK)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
158 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
159 gaim_debug_error("evolution", "Unable to retrieve book view! :(\n");
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
160
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
161 return;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
162 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
163
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
164 book_view = view;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
165
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
166 g_object_ref(book_view);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
167
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
168 g_signal_connect(G_OBJECT(book_view), "contacts_changed",
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
169 G_CALLBACK(contacts_changed_cb), book);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
170
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
171 g_signal_connect(G_OBJECT(book_view), "contacts_added",
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
172 G_CALLBACK(contacts_changed_cb), book);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
173
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
174 e_book_view_start(view);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
175 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
176
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
177 static void
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
178 signed_on_cb(GaimConnection *gc)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
179 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
180 EBookQuery *query;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
181 gboolean status;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
182 GList *contacts;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
183 GList *l;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
184
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
185 if (book == NULL)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
186 return;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
187
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
188 query = e_book_query_any_field_contains("");
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
189
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
190 status = e_book_get_contacts(book, query, &contacts, NULL);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
191
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
192 e_book_query_unref(query);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
193
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
194 if (!status)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
195 return;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
196
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
197 for (l = contacts; l != NULL; l = l->next)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
198 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
199 EContact *contact = E_CONTACT(l->data);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
200
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
201 update_buddies_from_contact(contact);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
202
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
203 g_object_unref(contact);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
204 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
205
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
206 g_list_free(contacts);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
207 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
208
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
209 static void
9055
586712a62e16 [gaim-migrate @ 9831]
Christian Hammond <chipx86@chipx86.com>
parents: 9051
diff changeset
210 menu_item_activate_cb(GaimBlistNode *node, gpointer user_data)
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
211 {
9051
aebb592d4529 [gaim-migrate @ 9827]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8993
diff changeset
212 GaimBuddy *buddy = (GaimBuddy *)node;
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
213 gevo_associate_buddy_dialog_new(buddy);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
214 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
215
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
216 static void
11117
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
217 menu_item_send_mail_activate_cb(GaimBlistNode *node, gpointer user_data)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
218 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
219 GaimBuddy *buddy = (GaimBuddy *)node;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
220 EContact *contact;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
221 char *mail = NULL;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
222
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
223 contact = gevo_search_buddy_in_contacts(buddy, NULL);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
224
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
225 if (contact != NULL)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
226 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
227 mail = g_strdup(e_contact_get(contact, E_CONTACT_EMAIL_1));
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
228 g_object_unref(contact);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
229 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
230 else
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
231 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
232 GaimAccount *account = gaim_buddy_get_account(buddy);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
233 const char *prpl_id = gaim_account_get_protocol_id(account);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
234
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
235 if (!strcmp(prpl_id, "prpl-msn"))
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
236 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
237 mail = g_strdup(gaim_normalize(account,
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
238 gaim_buddy_get_name(buddy)));
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
239 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
240 else if (!strcmp(prpl_id, "prpl-yahoo"))
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
241 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
242 mail = g_strdup_printf("%s@yahoo.com",
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
243 gaim_normalize(account,
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
244 gaim_buddy_get_name(buddy)));
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
245 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
246 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
247
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
248 if (mail != NULL)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
249 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
250 char *app = g_find_program_in_path("evolution");
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
251 if (app != NULL)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
252 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
253 char *command_line = g_strdup_printf("%s mailto:%s", app, mail);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
254 g_free(app);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
255 g_free(mail);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
256
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
257 g_spawn_command_line_async(command_line, NULL);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
258 g_free(command_line);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
259 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
260 else
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
261 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
262 gaim_notify_error(NULL, NULL, _("Unable to send e-mail"),
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
263 _("The evolution executable was not found in the PATH."));
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
264 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
265 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
266 else
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
267 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
268 gaim_notify_error(NULL, NULL, _("Unable to send e-mail"),
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
269 _("The specified buddy was not found in the Evolution Contacts."));
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
270 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
271 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
272
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
273 static void
9051
aebb592d4529 [gaim-migrate @ 9827]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8993
diff changeset
274 blist_node_extended_menu_cb(GaimBlistNode *node, GList **menu)
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
275 {
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12219
diff changeset
276 GaimMenuAction *act;
9051
aebb592d4529 [gaim-migrate @ 9827]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8993
diff changeset
277 GaimBuddy *buddy;
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
278
9051
aebb592d4529 [gaim-migrate @ 9827]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8993
diff changeset
279 if (!GAIM_BLIST_NODE_IS_BUDDY(node))
aebb592d4529 [gaim-migrate @ 9827]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8993
diff changeset
280 return;
aebb592d4529 [gaim-migrate @ 9827]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8993
diff changeset
281
aebb592d4529 [gaim-migrate @ 9827]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8993
diff changeset
282 buddy = (GaimBuddy *)node;
aebb592d4529 [gaim-migrate @ 9827]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8993
diff changeset
283
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
284 if (gevo_prpl_is_supported(buddy->account, buddy))
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
285 {
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12219
diff changeset
286 act = gaim_menu_action_new(_("Add to Address Book"),
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12219
diff changeset
287 GAIM_CALLBACK(menu_item_activate_cb),
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12219
diff changeset
288 NULL, NULL);
9051
aebb592d4529 [gaim-migrate @ 9827]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8993
diff changeset
289 *menu = g_list_append(*menu, act);
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12219
diff changeset
290 act = gaim_menu_action_new(_("Send E-Mail"),
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12219
diff changeset
291 GAIM_CALLBACK(menu_item_send_mail_activate_cb),
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12219
diff changeset
292 NULL, NULL);
11117
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
293 *menu = g_list_append(*menu, act);
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
294 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
295 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
296
11919
64764637df2a [gaim-migrate @ 14210]
Mark Doliner <markdoliner@pidgin.im>
parents: 11256
diff changeset
297 /* TODO: Something in here leaks 1 reference to a bonobo object! */
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
298 static gboolean
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
299 load_timeout(gpointer data)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
300 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
301 GaimPlugin *plugin = (GaimPlugin *)data;
8127
da683b4a5dc0 [gaim-migrate @ 8832]
Christian Hammond <chipx86@chipx86.com>
parents: 8089
diff changeset
302 EBookQuery *query;
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
303
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
304 timer = 0;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
305
11919
64764637df2a [gaim-migrate @ 14210]
Mark Doliner <markdoliner@pidgin.im>
parents: 11256
diff changeset
306 /* Maybe this is it? */
10081
64e398f0eaa3 [gaim-migrate @ 11071]
Christian Hammond <chipx86@chipx86.com>
parents: 10055
diff changeset
307 if (!gevo_load_addressbook(NULL, &book, NULL))
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
308 return FALSE;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
309
8127
da683b4a5dc0 [gaim-migrate @ 8832]
Christian Hammond <chipx86@chipx86.com>
parents: 8089
diff changeset
310 query = e_book_query_any_field_contains("");
da683b4a5dc0 [gaim-migrate @ 8832]
Christian Hammond <chipx86@chipx86.com>
parents: 8089
diff changeset
311
11919
64764637df2a [gaim-migrate @ 14210]
Mark Doliner <markdoliner@pidgin.im>
parents: 11256
diff changeset
312 /* Is it this? */
8127
da683b4a5dc0 [gaim-migrate @ 8832]
Christian Hammond <chipx86@chipx86.com>
parents: 8089
diff changeset
313 book_view_tag = e_book_async_get_book_view(book, query, NULL, -1,
da683b4a5dc0 [gaim-migrate @ 8832]
Christian Hammond <chipx86@chipx86.com>
parents: 8089
diff changeset
314 got_book_view_cb, NULL);
da683b4a5dc0 [gaim-migrate @ 8832]
Christian Hammond <chipx86@chipx86.com>
parents: 8089
diff changeset
315
da683b4a5dc0 [gaim-migrate @ 8832]
Christian Hammond <chipx86@chipx86.com>
parents: 8089
diff changeset
316 e_book_query_unref(query);
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
317
9051
aebb592d4529 [gaim-migrate @ 9827]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8993
diff changeset
318 gaim_signal_connect(gaim_blist_get_handle(), "blist-node-extended-menu",
aebb592d4529 [gaim-migrate @ 9827]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 8993
diff changeset
319 plugin, GAIM_CALLBACK(blist_node_extended_menu_cb), NULL);
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
320
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
321 return FALSE;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
322 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
323
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
324 static gboolean
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
325 plugin_load(GaimPlugin *plugin)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
326 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
327 bonobo_activate();
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
328
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
329 backup_blist_ui_ops = gaim_blist_get_ui_ops();
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
330
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
331 blist_ui_ops = g_memdup(backup_blist_ui_ops, sizeof(GaimBlistUiOps));
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
332 blist_ui_ops->request_add_buddy = request_add_buddy;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
333
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
334 gaim_blist_set_ui_ops(blist_ui_ops);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
335
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
336 gaim_signal_connect(gaim_connections_get_handle(), "signed-on",
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
337 plugin, GAIM_CALLBACK(signed_on_cb), NULL);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
338
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
339 timer = g_timeout_add(1, load_timeout, plugin);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
340
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
341 return TRUE;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
342 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
343
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
344 static gboolean
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
345 plugin_unload(GaimPlugin *plugin)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
346 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
347 gaim_blist_set_ui_ops(backup_blist_ui_ops);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
348
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
349 g_free(blist_ui_ops);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
350
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
351 backup_blist_ui_ops = NULL;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
352 blist_ui_ops = NULL;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
353
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
354 if (book_view != NULL)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
355 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
356 e_book_view_stop(book_view);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
357 g_object_unref(book_view);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
358 book_view = NULL;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
359 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
360
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
361 if (book != NULL)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
362 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
363 g_object_unref(book);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
364 book = NULL;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
365 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
366
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
367 return TRUE;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
368 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
369
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
370 static void
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
371 plugin_destroy(GaimPlugin *plugin)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
372 {
10055
adfef6aa8643 [gaim-migrate @ 11020]
Henry Jen
parents: 9954
diff changeset
373 bonobo_debug_shutdown();
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
374 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
375
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
376 static void
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
377 autoadd_toggled_cb(GtkCellRendererToggle *renderer, gchar *path_str,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
378 gpointer data)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
379 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
380 GaimAccount *account;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
381 GtkTreeModel *model = (GtkTreeModel *)data;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
382 GtkTreeIter iter;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
383 gboolean autoadd;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
384
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
385 gtk_tree_model_get_iter_from_string(model, &iter, path_str);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
386 gtk_tree_model_get(model, &iter,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
387 COLUMN_DATA, &account,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
388 COLUMN_AUTOADD, &autoadd,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
389 -1);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
390
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
391 gaim_account_set_bool(account, "gevo-autoadd", !autoadd);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
392
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
393 gtk_list_store_set(GTK_LIST_STORE(model), &iter,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
394 COLUMN_AUTOADD, !autoadd,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
395 -1);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
396 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
397
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
398 static GtkWidget *
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
399 get_config_frame(GaimPlugin *plugin)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
400 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
401 GtkWidget *ret;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
402 GtkWidget *vbox;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
403 GtkWidget *label;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
404 GtkWidget *sw;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
405 GtkWidget *treeview;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
406 GtkTreeViewColumn *column;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
407 GtkCellRenderer *renderer;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
408 GdkPixbuf *pixbuf, *scale = NULL;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
409 GtkListStore *model;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
410 GList *l;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
411
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
412 /* Outside container */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
413 ret = gtk_vbox_new(FALSE, 18);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
414 gtk_container_set_border_width(GTK_CONTAINER(ret), 12);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
415
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
416 /* Configuration frame */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
417 vbox = gaim_gtk_make_frame(ret, _("Evolution Integration Configuration"));
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
418
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
419 /* Label */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
420 label = gtk_label_new(_("Select all accounts that buddies should be "
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
421 "auto-added to."));
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
422 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
423 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
424 gtk_widget_show(label);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
425
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
426 /* Scrolled window */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
427 sw = gtk_scrolled_window_new(0, 0);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
428 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
429 GTK_POLICY_AUTOMATIC,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
430 GTK_POLICY_ALWAYS);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
431 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw),
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
432 GTK_SHADOW_IN);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
433 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
434 gtk_widget_set_size_request(sw, 300, 300);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
435 gtk_widget_show(sw);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
436
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
437 /* Create the list model for the treeview. */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
438 model = gtk_list_store_new(NUM_COLUMNS,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
439 G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
440 G_TYPE_STRING, G_TYPE_POINTER);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
441
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
442 /* Setup the treeview */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
443 treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model));
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
444 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
445 gtk_container_add(GTK_CONTAINER(sw), treeview);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
446 gtk_widget_show(treeview);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
447
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
448 /* Setup the column */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
449 column = gtk_tree_view_column_new();
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
450 gtk_tree_view_column_set_title(column, _("Account"));
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
451 gtk_tree_view_insert_column(GTK_TREE_VIEW(treeview), column, -1);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
452
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
453 /* Checkbox */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
454 renderer = gtk_cell_renderer_toggle_new();
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
455
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
456 g_signal_connect(G_OBJECT(renderer), "toggled",
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
457 G_CALLBACK(autoadd_toggled_cb), model);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
458
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
459 gtk_tree_view_column_pack_start(column, renderer, FALSE);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
460 gtk_tree_view_column_add_attribute(column, renderer,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
461 "active", COLUMN_AUTOADD);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
462
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
463 /* Icon */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
464 renderer = gtk_cell_renderer_pixbuf_new();
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
465 gtk_tree_view_column_pack_start(column, renderer, FALSE);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
466 gtk_tree_view_column_add_attribute(column, renderer,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
467 "pixbuf", COLUMN_ICON);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
468
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
469 /* Screenname */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
470 renderer = gtk_cell_renderer_text_new();
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
471 gtk_tree_view_column_pack_start(column, renderer, TRUE);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
472 gtk_tree_view_column_add_attribute(column, renderer,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
473 "text", COLUMN_SCREENNAME);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
474
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
475
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
476 /* Populate */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
477 for (l = gaim_accounts_get_all(); l != NULL; l = l->next)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
478 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
479 GaimAccount *account = (GaimAccount *)l->data;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
480 GtkTreeIter iter;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
481
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
482 gaim_debug_info("evolution", "Adding account\n");
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
483
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
484 gtk_list_store_append(model, &iter);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
485
10884
672f44600655 [gaim-migrate @ 12582]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10831
diff changeset
486 pixbuf = gaim_gtk_create_prpl_icon(account);
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
487
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
488 if (pixbuf != NULL)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
489 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
490 scale = gdk_pixbuf_scale_simple(pixbuf, 16, 16,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
491 GDK_INTERP_BILINEAR);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
492
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
493 if (!gaim_account_is_connected(account))
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
494 gdk_pixbuf_saturate_and_pixelate(scale, scale, 0.0, FALSE);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
495 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
496
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
497 gtk_list_store_set(model, &iter,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
498 COLUMN_AUTOADD,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
499 gaim_account_get_bool(account, "gevo-autoadd",
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
500 FALSE),
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
501 COLUMN_ICON, scale,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
502 COLUMN_SCREENNAME,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
503 gaim_account_get_username(account),
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
504 COLUMN_DATA, account,
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
505 -1);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
506
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
507 if (pixbuf != NULL) g_object_unref(G_OBJECT(pixbuf));
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
508 if (scale != NULL) g_object_unref(G_OBJECT(scale));
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
509 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
510
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
511 gtk_widget_show_all(ret);
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
512
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
513 return ret;
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
514 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
515
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
516 static GaimGtkPluginUiInfo ui_info =
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
517 {
12219
2265c26be232 [gaim-migrate @ 14521]
Richard Laager <rlaager@pidgin.im>
parents: 11919
diff changeset
518 get_config_frame, /**< get_config_frame */
2265c26be232 [gaim-migrate @ 14521]
Richard Laager <rlaager@pidgin.im>
parents: 11919
diff changeset
519 0 /**< page_num */
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
520 };
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
521
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
522 static GaimPluginInfo info =
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
523 {
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9821
diff changeset
524 GAIM_PLUGIN_MAGIC,
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9821
diff changeset
525 GAIM_MAJOR_VERSION,
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9821
diff changeset
526 GAIM_MINOR_VERSION,
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
527 GAIM_PLUGIN_STANDARD, /**< type */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
528 GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
529 0, /**< flags */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
530 NULL, /**< dependencies */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
531 GAIM_PRIORITY_DEFAULT, /**< priority */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
532
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
533 GEVOLUTION_PLUGIN_ID, /**< id */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
534 N_("Evolution Integration"), /**< name */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
535 VERSION, /**< version */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
536 /** summary */
11117
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
537 N_("Provides integration with Evolution."),
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
538 /** description */
11117
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 11054
diff changeset
539 N_("Provides integration with Evolution."),
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
540 "Christian Hammond <chipx86@gnupdate.org>", /**< author */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
541 GAIM_WEBSITE, /**< homepage */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
542
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
543 plugin_load, /**< load */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
544 plugin_unload, /**< unload */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
545 plugin_destroy, /**< destroy */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
546
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
547 &ui_info, /**< ui_info */
8993
41f67bceab41 [gaim-migrate @ 9768]
Luke Schierer <lschiere@pidgin.im>
parents: 8749
diff changeset
548 NULL, /**< extra_info */
41f67bceab41 [gaim-migrate @ 9768]
Luke Schierer <lschiere@pidgin.im>
parents: 8749
diff changeset
549 NULL,
41f67bceab41 [gaim-migrate @ 9768]
Luke Schierer <lschiere@pidgin.im>
parents: 8749
diff changeset
550 NULL
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
551 };
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
552
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
553 static void
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
554 init_plugin(GaimPlugin *plugin)
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
555 {
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
556 /* TODO: Change to core-remote when possible. */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
557 /* info.dependencies = g_list_append(info.dependencies, "gtk-remote"); */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
558
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
559 /*
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
560 * I'm going to rant a little bit here...
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
561 *
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
562 * For some reason, when we init bonobo from inside a plugin, it will
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
563 * segfault when destroyed. The backtraces are within gmodule somewhere.
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
564 * There's not much I can do, and I'm not sure where the bug lies.
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
565 * However, plugins are only destroyed when Gaim is shutting down. After
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
566 * destroying the plugins, gaim ends, and anything else is of course
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
567 * freed. That includes this, if we make the module resident, which
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
568 * prevents us from being able to actually unload it.
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
569 *
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
570 * So, in conclusion, this is an evil hack, but it doesn't harm anything
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
571 * and it works.
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
572 */
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
573 g_module_make_resident(plugin->handle);
10055
adfef6aa8643 [gaim-migrate @ 11020]
Henry Jen
parents: 9954
diff changeset
574
adfef6aa8643 [gaim-migrate @ 11020]
Henry Jen
parents: 9954
diff changeset
575 if (!bonobo_init_full(NULL, NULL, bonobo_activation_orb_get(),
adfef6aa8643 [gaim-migrate @ 11020]
Henry Jen
parents: 9954
diff changeset
576 CORBA_OBJECT_NIL, CORBA_OBJECT_NIL))
adfef6aa8643 [gaim-migrate @ 11020]
Henry Jen
parents: 9954
diff changeset
577 {
adfef6aa8643 [gaim-migrate @ 11020]
Henry Jen
parents: 9954
diff changeset
578 gaim_debug_error("evolution", "Unable to initialize bonobo.\n");
adfef6aa8643 [gaim-migrate @ 11020]
Henry Jen
parents: 9954
diff changeset
579 }
8089
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
580 }
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
581
0adbe5c66985 [gaim-migrate @ 8788]
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
582 GAIM_INIT_PLUGIN(gevolution, init_plugin, info)

mercurial