Mercurial > pidgin.yaz
annotate src/gtkdialogs.c @ 10738:55af3fa46329
[gaim-migrate @ 12340]
Lots of changes here. A lot of it stems from chaning
gaim_account_connect() so that it DOES NOT have the GaimStatus
parameter. It will attempt to use the GaimStatus of your
account from the last time it was connected (which doesn't
work quite right yet).
My goal here was to save and load each account's GaimStatuses
to accounts.xml, so if you were "away" when you signed off then
you'll be "away" when you sign back on. Not quite there yet.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sat, 26 Mar 2005 20:08:43 +0000 |
parents | 4cfc6bebeb5f |
children | d83f745c997b |
rev | line source |
---|---|
9709 | 1 /* |
10297
ec140184437b
[gaim-migrate @ 11480]
Luke Schierer <lschiere@pidgin.im>
parents:
10266
diff
changeset
|
2 * @file gtkdialogs.c GTK+ Dialogs |
ec140184437b
[gaim-migrate @ 11480]
Luke Schierer <lschiere@pidgin.im>
parents:
10266
diff
changeset
|
3 * @ingroup gtkui |
ec140184437b
[gaim-migrate @ 11480]
Luke Schierer <lschiere@pidgin.im>
parents:
10266
diff
changeset
|
4 * |
9709 | 5 * gaim |
6 * | |
7 * Gaim is the legal property of its developers, whose names are too numerous | |
8 * to list here. Please refer to the COPYRIGHT file distributed with this | |
9 * source distribution. | |
10 * | |
11 * This program is free software; you can redistribute it and/or modify | |
12 * it under the terms of the GNU General Public License as published by | |
13 * the Free Software Foundation; either version 2 of the License, or | |
14 * (at your option) any later version. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
20 * | |
21 * You should have received a copy of the GNU General Public License | |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
24 */ | |
9791 | 25 #include "internal.h" |
26 #include "gtkgaim.h" | |
9709 | 27 |
28 #include "debug.h" | |
29 #include "notify.h" | |
30 #include "prpl.h" | |
31 #include "request.h" | |
32 #include "util.h" | |
33 | |
34 #include "gtkdialogs.h" | |
35 #include "gtkimhtml.h" | |
36 #include "gtkimhtmltoolbar.h" | |
37 #include "gtklog.h" | |
38 #include "gtkutils.h" | |
10297
ec140184437b
[gaim-migrate @ 11480]
Luke Schierer <lschiere@pidgin.im>
parents:
10266
diff
changeset
|
39 #include "gtkstock.h" |
9709 | 40 |
9753 | 41 static GList *dialogwindows = NULL; |
9709 | 42 |
9753 | 43 static GtkWidget *about = NULL; |
9709 | 44 |
45 struct warning { | |
46 GtkWidget *window; | |
47 GtkWidget *anon; | |
48 char *who; | |
49 GaimConnection *gc; | |
50 }; | |
51 | |
9758 | 52 struct developer { |
53 char *name; | |
54 char *role; | |
55 char *email; | |
56 }; | |
57 | |
58 struct translator { | |
59 char *language; | |
60 char *abbr; | |
61 char *name; | |
62 char *email; | |
63 }; | |
64 | |
65 static struct developer developers[] = { | |
66 {"Sean Egan", N_("lead developer"), "sean.egan@binghamton.edu"}, | |
10508
4cc999cc6718
[gaim-migrate @ 11802]
Luke Schierer <lschiere@pidgin.im>
parents:
10493
diff
changeset
|
67 {"Daniel 'datallah' Atallah", N_("developer"), NULL}, |
9758 | 68 {"Christian 'ChipX86' Hammond", N_("developer & webmaster"), NULL}, |
10095
b28f9be379b3
[gaim-migrate @ 11114]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
9991
diff
changeset
|
69 {"Herman Bloggs", N_("win32 port"), "herman@bluedigits.com"}, |
9758 | 70 {"Nathan 'faceprint' Walp", N_("developer"), NULL}, |
71 {"Mark 'KingAnt' Doliner", N_("developer"), NULL}, | |
72 {"Ethan 'Paco-Paco' Blanton", N_("developer"), NULL}, | |
10370
acd5b7af0409
[gaim-migrate @ 11590]
Luke Schierer <lschiere@pidgin.im>
parents:
10369
diff
changeset
|
73 {"Etan 'deryni' Reisner", N_("developer"), NULL}, |
9758 | 74 {"Tim 'marv' Ringenbach", N_("developer"), NULL}, |
10369
584c792dd15c
[gaim-migrate @ 11588]
Luke Schierer <lschiere@pidgin.im>
parents:
10324
diff
changeset
|
75 {"Luke 'LSchiere' Schierer", N_("support"), "lschiere@users.sf.net"}, |
10116 | 76 {"Stu 'nosnilmot' Tomlinson", N_("developer"), NULL}, |
9758 | 77 {NULL, NULL, NULL} |
78 }; | |
79 | |
10372
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
80 static struct developer patch_writers[] = { |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
81 {"Ka-Hing 'javabsp' Cheung", NULL, NULL}, |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
82 {"Felipe 'shx' Contreras", NULL, NULL}, |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
83 {"Decklin Foster", NULL, NULL}, |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
84 {"Gary 'grim' Kramlich", NULL, NULL}, |
10677
4cfc6bebeb5f
[gaim-migrate @ 12219]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10668
diff
changeset
|
85 {"Richard 'rlaager' Laager", NULL, NULL}, |
10372
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
86 {"Robert 'Robot101' McQueen", NULL, NULL}, |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
87 {"Benjamin Miller", NULL, NULL}, |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
88 {"Kevin 'SimGuy' Stange", NULL, NULL}, |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
89 {NULL, NULL, NULL} |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
90 }; |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
91 |
9758 | 92 static struct developer retired_developers[] = { |
10615 | 93 {"Rob Flynn", N_("maintainer"), "gaim@robflynn.com"}, |
9758 | 94 {"Adam Fritzler", N_("former libfaim maintainer"), NULL}, |
95 {"Eric Warmenhoven", N_("former lead developer"), "warmenhoven@yahoo.com"}, | |
96 {"Jim Duchek", N_("former maintainer"), NULL}, | |
97 {"Jim Seymour", N_("former Jabber developer"), NULL}, | |
98 {"Mark Spencer", N_("original author"), "markster@marko.net"}, | |
99 {"Syd Logan", N_("hacker and designated driver [lazy bum]"), NULL}, | |
100 {NULL, NULL, NULL} | |
101 }; | |
102 | |
103 static struct translator current_translators[] = { | |
104 {N_("Bulgarian"), "bg", "Alexander Shopov", "al_shopov@users.sf.net"}, | |
10131 | 105 {N_("Catalan"), "ca", "Josep Puigdemont", "tradgnome@softcatala.org"}, |
9758 | 106 {N_("Czech"), "cs", "Miloslav Trmac", "mitr@volny.cz"}, |
107 {N_("Danish"), "da", "Morten Brix Pedersen", "morten@wtf.dk"}, | |
10131 | 108 {N_("Australian English"), "en_AU", "Peter Lawler", "trans@six-by-nine.com.au"}, |
9758 | 109 {N_("British English"), "en_GB", "Luke Ross", "lukeross@sys3175.co.uk"}, |
110 {N_("Canadian English"), "en_CA", "Adam Weinberger", "adamw@gnome.org"}, | |
111 {N_("German"), "de", "Björn Voigt", "bjoern@cs.tu-berlin.de"}, | |
112 {N_("Spanish"), "es", "Javier Fernández-Sanguino Peña", "jfs@debian.org"}, | |
113 {N_("Finnish"), "fi", "Arto Alakulju", "arto@alakulju.net"}, | |
114 {N_("French"), "fr", "Éric Boumaour", "zongo_fr@users.sourceforge.net"}, | |
115 {N_("Hebrew"), "he", "Pavel Bibergal", "cyberkm203@hotmail.com"}, | |
116 {N_("Hindi"), "hi", "Ravishankar Shrivastava", "raviratlami@yahoo.com"}, | |
117 {N_("Hungarian"), "hu", "Zoltan Sutto", "suttozoltan@chello.hu"}, | |
118 {N_("Italian"), "it", "Claudio Satriano", "satriano@na.infn.it"}, | |
119 {N_("Japanese"), "ja", "Takashi Aihana", "aihana@gnome.gr.jp"}, | |
120 {N_("Lithuanian"), "lt", "Gediminas Čičinskas", "gediminas@parok.lt"}, | |
121 {N_("Korean"), "ko", "Kyung-uk Son", "vvs740@chol.com"}, | |
122 {N_("Dutch; Flemish"), "nl", "Vincent van Adrighem", "V.vanAdrighem@dirck.mine.nu"}, | |
123 {N_("Macedonian"), "mk", "Tomislav Markovski", "herrera@users.sf.net"}, | |
124 {N_("Norwegian"), "no", "Petter Johan Olsen", "petter.olsen@cc.uit.no"}, | |
125 {N_("Polish"), "pl", "Krzysztof Foltman, Emil Nowak", "krzysztof@foltman.com;emil5@go2.pl"}, | |
126 {N_("Portuguese"), "pt", "Duarte Henriques", "duarte_henriques@myrealbox.com"}, | |
127 {N_("Portuguese-Brazil"), "pt_BR", "Maurício de Lemos Rodrigues Collares Neto", "mauricioc@gmail.com"}, | |
128 {N_("Romanian"), "ro", "Mişu Moldovan", "dumol@go.ro"}, | |
129 {N_("Russian"), "ru", "Dmitry Beloglazov", "dmaa@users.sf.net"}, | |
130 {N_("Serbian"), "sr", "Danilo Šegan, Aleksandar Urosevic", "dsegan@gmx.net;urke@users.sourceforge.net"}, | |
131 {N_("Slovenian"), "sl", "Matjaz Horvat", "matjaz@owca.info"}, | |
132 {N_("Swedish"), "sv", "Tore Lundqvist", "tlt@mima.x.se"}, | |
133 {N_("Vietnamese"), "vi", N_("T.M.Thanh and the Gnome-Vi Team"), "gnomevi-list@lists.sf.net"}, | |
134 {N_("Simplified Chinese"), "zh_CN", "Funda Wang", "fundawang@linux.net.cn"}, | |
135 {N_("Traditional Chinese"), "zh_TW", "Ambrose C. Li, Paladin R. Liu", "acli@ada.dhs.org;paladin@ms1.hinet.net"}, | |
136 {NULL, NULL, NULL, NULL} | |
137 }; | |
138 | |
139 | |
140 static struct translator past_translators[] = { | |
141 {N_("Amharic"), "am", "Daniel Yacob", NULL}, | |
142 {N_("Bulgarian"), "bg", "Hristo Todorov", NULL}, | |
143 {N_("Catalan"), "ca", "JM Pérez Cáncer", NULL}, | |
10131 | 144 {N_("Catalan"), "ca", "Robert Millan", NULL}, |
9758 | 145 {N_("Czech"), "cs", "Honza Král", NULL}, |
146 {N_("German"), "de", "Daniel Seifert, Karsten Weiss", NULL}, | |
147 {N_("Spanish"), "es", "Amaya Rodrigo, Alejandro G Villar, Nicolás Lichtmaier, JM Pérez Cáncer", NULL}, | |
148 {N_("Finnish"), "fi", "Tero Kuusela", NULL}, | |
149 {N_("French"), "fr", "Sébastien François, Stéphane Pontier, Stéphane Wirtel, Loïc Jeannin", NULL}, | |
150 {N_("Italian"), "it", "Salvatore di Maggio", NULL}, | |
151 {N_("Japanese"), "ja", "Ryosuke Kutsuna, Taku Yasui, Junichi Uekawa", NULL}, | |
152 {N_("Korean"), "ko", "Sang-hyun S, A Ho-seok Lee", NULL}, | |
153 {N_("Polish"), "pl", "Przemysław Sułek", NULL}, | |
154 {N_("Russian"), "ru", "Sergey Volozhanin", NULL}, | |
155 {N_("Russian"), "ru", "Alexandre Prokoudine", NULL}, | |
156 {N_("Slovak"), "sk", "Daniel Režný", NULL}, | |
157 {N_("Swedish"), "sv", "Christian Rose", NULL}, | |
158 {N_("Chinese"), "zh_CN, zh_TW", "Hashao, Rocky S. Lee", NULL}, | |
159 {NULL, NULL, NULL, NULL} | |
160 }; | |
161 | |
9730 | 162 void |
163 gaim_gtkdialogs_destroy_all() | |
9709 | 164 { |
9753 | 165 while (dialogwindows) { |
166 gtk_widget_destroy(dialogwindows->data); | |
167 dialogwindows = g_list_remove(dialogwindows, dialogwindows->data); | |
168 } | |
169 } | |
170 | |
171 static void destroy_about() | |
172 { | |
173 if (about != NULL) | |
174 gtk_widget_destroy(about); | |
175 about = NULL; | |
176 } | |
177 | |
178 void gaim_gtkdialogs_about(GtkWidget *w, void *data) | |
179 { | |
180 GtkWidget *hbox; | |
181 GtkWidget *vbox; | |
182 GtkWidget *logo; | |
10175 | 183 GtkWidget *frame; |
9753 | 184 GtkWidget *text; |
185 GtkWidget *bbox; | |
186 GtkWidget *button; | |
187 GtkTextIter iter; | |
9758 | 188 GString *str; |
189 int i; | |
10266 | 190 AtkObject *obj; |
9753 | 191 |
192 if (about != NULL) { | |
193 gtk_window_present(GTK_WINDOW(about)); | |
194 return; | |
195 } | |
196 | |
197 GAIM_DIALOG(about); | |
198 gtk_window_set_default_size(GTK_WINDOW(about), 450, -1); | |
199 gtk_window_set_title(GTK_WINDOW(about), _("About Gaim")); | |
200 gtk_window_set_role(GTK_WINDOW(about), "about"); | |
201 gtk_window_set_resizable(GTK_WINDOW(about), TRUE); | |
9778 | 202 gtk_window_set_default_size(GTK_WINDOW(about), 340, 550); /* Golden ratio in da hizzy */ |
9753 | 203 |
204 hbox = gtk_hbox_new(FALSE, 12); | |
205 gtk_container_set_border_width(GTK_CONTAINER(hbox), 12); | |
206 gtk_container_add(GTK_CONTAINER(about), hbox); | |
207 | |
208 vbox = gtk_vbox_new(FALSE, 12); | |
209 gtk_container_add(GTK_CONTAINER(hbox), vbox); | |
210 | |
211 logo = gtk_image_new_from_stock(GAIM_STOCK_LOGO, gtk_icon_size_from_name(GAIM_ICON_SIZE_LOGO)); | |
10266 | 212 obj = gtk_widget_get_accessible(logo); |
213 atk_object_set_description(obj, "Gaim " VERSION); | |
9753 | 214 gtk_box_pack_start(GTK_BOX(vbox), logo, FALSE, FALSE, 0); |
215 | |
10175 | 216 frame = gaim_gtk_create_imhtml(FALSE, &text, NULL); |
10522 | 217 gtk_imhtml_set_format_functions(GTK_IMHTML(text), GTK_IMHTML_ALL ^ GTK_IMHTML_SMILEY); |
10175 | 218 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); |
9753 | 219 |
9758 | 220 str = g_string_sized_new(4096); |
9753 | 221 |
10153 | 222 g_string_append(str, |
9758 | 223 _("Gaim is a modular messaging client capable of using " |
224 "AIM, MSN, Yahoo!, Jabber, ICQ, IRC, SILC, " | |
225 "Novell GroupWise, Napster, Zephyr, and Gadu-Gadu " | |
226 "all at once. It is written using " | |
227 "Gtk+ and is licensed under the GPL.<BR><BR>")); | |
9753 | 228 |
9758 | 229 g_string_append(str, "<FONT SIZE=\"4\">URL:</FONT> <A HREF=\"" |
230 GAIM_WEBSITE "\">" GAIM_WEBSITE "</A><BR/><BR/>"); | |
10493 | 231 #ifdef _WIN32 |
232 g_string_append_printf(str, _("<FONT SIZE=\"4\">IRC:</FONT> " | |
233 "#wingaim on irc.freenode.net<BR><BR>")); | |
234 #else | |
9758 | 235 g_string_append_printf(str, _("<FONT SIZE=\"4\">IRC:</FONT> " |
236 "#gaim on irc.freenode.net<BR><BR>")); | |
10493 | 237 #endif |
9753 | 238 |
239 /* Active Developers */ | |
9758 | 240 g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>", |
241 _("Active Developers")); | |
242 for (i = 0; developers[i].name != NULL; i++) { | |
243 if (developers[i].email != NULL) { | |
10116 | 244 g_string_append_printf(str, " %s (%s) <<a href=\"mailto:%s\">%s</a>><br/>", |
9758 | 245 developers[i].name, _(developers[i].role), |
246 developers[i].email, developers[i].email); | |
247 } else { | |
248 g_string_append_printf(str, " %s (%s)<br/>", | |
249 developers[i].name, _(developers[i].role)); | |
250 } | |
251 } | |
252 g_string_append(str, "<BR/>"); | |
9709 | 253 |
9753 | 254 /* Crazy Patch Writers */ |
9758 | 255 g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>", |
256 _("Crazy Patch Writers")); | |
10372
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
257 for (i = 0; patch_writers[i].name != NULL; i++) { |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
258 if (patch_writers[i].email != NULL) { |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
259 g_string_append_printf(str, " %s <<a href=\"mailto:%s\">%s</a>><br/>", |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
260 patch_writers[i].name, |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
261 patch_writers[i].email, patch_writers[i].email); |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
262 } else { |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
263 g_string_append_printf(str, " %s<br/>", |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
264 patch_writers[i].name); |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
265 } |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
266 } |
618a330c0260
[gaim-migrate @ 11595]
Luke Schierer <lschiere@pidgin.im>
parents:
10371
diff
changeset
|
267 g_string_append(str, "<BR/>"); |
9753 | 268 |
269 /* Retired Developers */ | |
9758 | 270 g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>", |
271 _("Retired Developers")); | |
272 for (i = 0; retired_developers[i].name != NULL; i++) { | |
273 if (retired_developers[i].email != NULL) { | |
10116 | 274 g_string_append_printf(str, " %s (%s) <<a href=\"mailto:%s\">%s</a>><br/>", |
9758 | 275 retired_developers[i].name, _(retired_developers[i].role), |
276 retired_developers[i].email, retired_developers[i].email); | |
277 } else { | |
278 g_string_append_printf(str, " %s (%s)<br/>", | |
279 retired_developers[i].name, _(retired_developers[i].role)); | |
280 } | |
281 } | |
282 g_string_append(str, "<BR/>"); | |
9753 | 283 |
284 /* Current Translators */ | |
9758 | 285 g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>", |
286 _("Current Translators")); | |
287 for (i = 0; current_translators[i].language != NULL; i++) { | |
288 if (current_translators[i].email != NULL) { | |
10116 | 289 g_string_append_printf(str, " <b>%s (%s)</b> - %s <<a href=\"mailto:%s\">%s</a>><br/>", |
9758 | 290 _(current_translators[i].language), |
291 current_translators[i].abbr, | |
292 _(current_translators[i].name), | |
293 current_translators[i].email, | |
294 current_translators[i].email); | |
295 } else { | |
296 g_string_append_printf(str, " <b>%s (%s)</b> - %s<br/>", | |
297 _(current_translators[i].language), | |
298 current_translators[i].abbr, | |
299 _(current_translators[i].name)); | |
300 } | |
301 } | |
302 g_string_append(str, "<BR/>"); | |
9753 | 303 |
304 /* Past Translators */ | |
9758 | 305 g_string_append_printf(str, "<FONT SIZE=\"4\">%s:</FONT><BR/>", |
306 _("Past Translators")); | |
307 for (i = 0; past_translators[i].language != NULL; i++) { | |
308 if (past_translators[i].email != NULL) { | |
10116 | 309 g_string_append_printf(str, " <b>%s (%s)</b> - %s <<a href=\"mailto:%s\">%s</a>><br/>", |
9758 | 310 _(past_translators[i].language), |
311 past_translators[i].abbr, | |
312 _(past_translators[i].name), | |
313 past_translators[i].email, | |
314 past_translators[i].email); | |
315 } else { | |
316 g_string_append_printf(str, " <b>%s (%s)</b> - %s<br/>", | |
317 _(past_translators[i].language), | |
318 past_translators[i].abbr, | |
319 _(past_translators[i].name)); | |
320 } | |
321 } | |
322 g_string_append(str, "<BR/>"); | |
323 | |
10411 | 324 /* The following primarly intented for user/developer interaction and thus |
325 ought not be translated */ | |
326 g_string_append(str, "<b>Gaim was compiled with the following:</b><br/>"); | |
327 #ifdef CONFIG_ARGS /* win32 build doesn't use configure */ | |
328 g_string_append(str, "Arguments to <i>./configure</i>: " CONFIG_ARGS "<br/>"); | |
329 #endif | |
330 #ifdef DEBUG | |
331 g_string_append(str, "Print debugging messages: Yes<br/>"); | |
332 #else | |
333 g_string_append(str, "Print debugging messages: No<br/>"); | |
334 #endif /* DEBUG */ | |
335 #ifdef ENABLE_BINRELOC | |
336 g_string_append(str, "Binary relocation: Enabled<br/>"); | |
337 #else | |
338 g_string_append(str, "Binary relocation: Disabled<br/>"); | |
339 #endif /* ENABLE_BINRELOC */ | |
340 #ifdef GAIM_PLUGINS | |
341 g_string_append(str, "Plugins: Enabled<br/>"); | |
342 #else | |
343 g_string_append(str, "Plugins: Disabled<br/>"); | |
344 #endif /* GAIM_PLUGINS */ | |
345 #ifdef HAVE_SSL | |
346 g_string_append(str, "SSL: Gaim was compiled with SSL support<br/>"); | |
347 #else | |
348 g_string_append(str, "SSL: Gaim was <b><i>NOT</i></b> compiled with any SSL support!<br/>"); | |
349 #endif | |
350 #ifdef HAVE_GNUTLS | |
351 g_string_append(str, "GNUTLS: Enabled<br/>"); | |
352 #else | |
353 g_string_append(str, "GNUTLS: Disabled<br/>"); | |
354 #endif | |
355 #ifdef HAVE_NSS | |
356 g_string_append(str, "NSS: Enabled<br/>"); | |
357 #else | |
358 g_string_append(str, "NSS: Disabled<br/>"); | |
359 #endif | |
360 #ifdef HAVE_TK | |
361 g_string_append(str, "TK: Yes<br/>"); | |
362 #else | |
363 g_string_append(str, "TK: No<br/>"); | |
364 #endif | |
365 #ifdef LIBZEPHYR_EXT | |
366 g_string_append(str, "External libzephyr: Yes<br/>"); | |
367 #else | |
368 g_string_append(str, "External libzephyr: No<br/>"); | |
369 #endif | |
370 #ifdef ZEPHYR_USES_KERBEROS | |
371 g_string_append(str, "Zephyr uses Kerberos: Yes<br/>"); | |
372 #else | |
373 g_string_append(str, "Zephyr uses Kerberos: No<br/>"); | |
374 #endif | |
375 #ifdef USE_AO | |
376 g_string_append(str, "AO: Yes<br/>"); | |
377 #else | |
378 g_string_append(str, "AO: No<br/>"); | |
379 #endif | |
380 #ifdef USE_NAS_AUDIO | |
381 g_string_append(str, "NAS Audio: Yes<br/>"); | |
382 #else | |
383 g_string_append(str, "NAS Audio: No<br/>"); | |
384 #endif | |
385 #ifdef USE_GTKSPELL | |
386 g_string_append(str, "GtkSpell: Enabled<br/>"); | |
387 #else | |
388 g_string_append(str, "GtkSpell: Disabled<br/>"); | |
389 #endif | |
390 #ifdef USE_SCREENSAVER | |
391 g_string_append(str, "XScreenSaver support: Yes<br/>"); | |
392 #else | |
393 g_string_append(str, "XScreenSaver support: No<br/>"); | |
394 #endif | |
395 #ifdef USE_SM | |
396 g_string_append(str, "X SM support: Yes<br/>"); | |
397 #else | |
398 g_string_append(str, "X SM support: No<br/>"); | |
399 #endif | |
400 | |
401 /* End of not to be translated section */ | |
402 | |
9758 | 403 gtk_imhtml_append_text(GTK_IMHTML(text), str->str, GTK_IMHTML_NO_SCROLL); |
404 g_string_free(str, TRUE); | |
9753 | 405 |
406 gtk_text_buffer_get_start_iter(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), &iter); | |
407 gtk_text_buffer_place_cursor(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)), &iter); | |
10153 | 408 |
9753 | 409 /* Close Button */ |
410 bbox = gtk_hbutton_box_new(); | |
411 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); | |
412 gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); | |
413 | |
414 button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); | |
415 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); | |
416 | |
417 g_signal_connect_swapped(G_OBJECT(button), "clicked", | |
418 G_CALLBACK(destroy_about), G_OBJECT(about)); | |
419 g_signal_connect(G_OBJECT(about), "destroy", | |
420 G_CALLBACK(destroy_about), G_OBJECT(about)); | |
421 | |
422 /* this makes the sizes not work? */ | |
423 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); | |
424 gtk_widget_grab_default(button); | |
425 | |
426 /* Let's give'em something to talk about -- woah woah woah */ | |
427 gtk_widget_show_all(about); | |
428 gtk_window_present(GTK_WINDOW(about)); | |
9709 | 429 } |
430 | |
9730 | 431 static void |
432 gaim_gtkdialogs_im_cb(gpointer data, GaimRequestFields *fields) | |
9709 | 433 { |
9730 | 434 GaimAccount *account; |
435 const char *username; | |
9709 | 436 |
9730 | 437 account = gaim_request_fields_get_account(fields, "account"); |
438 username = gaim_request_fields_get_string(fields, "screenname"); | |
9709 | 439 |
9730 | 440 gaim_gtkdialogs_im_with_user(account, username); |
9709 | 441 } |
442 | |
9730 | 443 void |
444 gaim_gtkdialogs_im(void) | |
9709 | 445 { |
9730 | 446 GaimRequestFields *fields; |
447 GaimRequestFieldGroup *group; | |
448 GaimRequestField *field; | |
9709 | 449 |
9730 | 450 fields = gaim_request_fields_new(); |
9709 | 451 |
9730 | 452 group = gaim_request_field_group_new(NULL); |
453 gaim_request_fields_add_group(fields, group); | |
9709 | 454 |
10668 | 455 field = gaim_request_field_string_new("screenname", _("_Name"), NULL, FALSE); |
456 gaim_request_field_set_type_hint(field, "screenname"); | |
9730 | 457 gaim_request_field_set_required(field, TRUE); |
458 gaim_request_field_group_add_field(group, field); | |
9709 | 459 |
9730 | 460 field = gaim_request_field_account_new("account", _("_Account"), NULL); |
461 gaim_request_field_set_visible(field, | |
462 (gaim_connections_get_all() != NULL && | |
463 gaim_connections_get_all()->next != NULL)); | |
464 gaim_request_field_set_required(field, TRUE); | |
465 gaim_request_field_group_add_field(group, field); | |
466 | |
467 gaim_request_fields(gaim_get_blist(), _("New Instant Message"), | |
468 NULL, | |
10668 | 469 _("Please enter the screen name or alias of the person " |
470 "you would like to IM."), | |
9730 | 471 fields, |
472 _("OK"), G_CALLBACK(gaim_gtkdialogs_im_cb), | |
473 _("Cancel"), NULL, | |
474 NULL); | |
9709 | 475 } |
476 | |
9730 | 477 void |
478 gaim_gtkdialogs_im_with_user(GaimAccount *account, const char *username) | |
9709 | 479 { |
9730 | 480 GaimConversation *conv; |
481 GaimConvWindow *win; | |
482 GaimGtkWindow *gtkwin; | |
9709 | 483 |
9753 | 484 g_return_if_fail(account != NULL); |
485 g_return_if_fail(username != NULL); | |
486 | |
10246 | 487 conv = gaim_find_conversation_with_account(GAIM_CONV_IM, username, account); |
9709 | 488 |
9730 | 489 if (conv == NULL) |
490 conv = gaim_conversation_new(GAIM_CONV_IM, account, username); | |
9709 | 491 |
9730 | 492 win = gaim_conversation_get_window(conv); |
493 gtkwin = GAIM_GTK_WINDOW(win); | |
9709 | 494 |
9730 | 495 gtk_window_present(GTK_WINDOW(gtkwin->window)); |
496 gaim_conv_window_switch_conversation(win, gaim_conversation_get_index(conv)); | |
9709 | 497 } |
498 | |
9730 | 499 static gboolean |
500 gaim_gtkdialogs_ee(const char *ee) | |
9709 | 501 { |
502 GtkWidget *window; | |
503 GtkWidget *hbox; | |
504 GtkWidget *label; | |
10219 | 505 GtkWidget *img; |
9709 | 506 gchar *norm = gaim_strreplace(ee, "rocksmyworld", ""); |
507 | |
508 label = gtk_label_new(NULL); | |
509 if (!strcmp(norm, "zilding")) | |
510 gtk_label_set_markup(GTK_LABEL(label), | |
511 "<span weight=\"bold\" size=\"large\" foreground=\"purple\">Amazing! Simply Amazing!</span>"); | |
512 else if (!strcmp(norm, "robflynn")) | |
513 gtk_label_set_markup(GTK_LABEL(label), | |
514 "<span weight=\"bold\" size=\"large\" foreground=\"#1f6bad\">Pimpin\' Penguin Style! *Waddle Waddle*</span>"); | |
515 else if (!strcmp(norm, "flynorange")) | |
516 gtk_label_set_markup(GTK_LABEL(label), | |
517 "<span weight=\"bold\" size=\"large\" foreground=\"blue\">You should be me. I'm so cute!</span>"); | |
518 else if (!strcmp(norm, "ewarmenhoven")) | |
519 gtk_label_set_markup(GTK_LABEL(label), | |
520 "<span weight=\"bold\" size=\"large\" foreground=\"orange\">Now that's what I like!</span>"); | |
521 else if (!strcmp(norm, "markster97")) | |
522 gtk_label_set_markup(GTK_LABEL(label), | |
523 "<span weight=\"bold\" size=\"large\" foreground=\"brown\">Ahh, and excellent choice!</span>"); | |
524 else if (!strcmp(norm, "seanegn")) | |
525 gtk_label_set_markup(GTK_LABEL(label), | |
526 "<span weight=\"bold\" size=\"large\" foreground=\"#009900\">Everytime you click my name, an angel gets its wings.</span>"); | |
527 else if (!strcmp(norm, "chipx86")) | |
528 gtk_label_set_markup(GTK_LABEL(label), | |
529 "<span weight=\"bold\" size=\"large\" foreground=\"red\">This sunflower seed taste like pizza.</span>"); | |
530 else if (!strcmp(norm, "markdoliner")) | |
531 gtk_label_set_markup(GTK_LABEL(label), | |
532 "<span weight=\"bold\" size=\"large\" foreground=\"#6364B1\">Hey! I was in that tumbleweed!</span>"); | |
533 else if (!strcmp(norm, "lschiere")) | |
534 gtk_label_set_markup(GTK_LABEL(label), | |
535 "<span weight=\"bold\" size=\"large\" foreground=\"gray\">I'm not anything.</span>"); | |
536 g_free(norm); | |
537 | |
538 if (strlen(gtk_label_get_label(GTK_LABEL(label))) <= 0) | |
539 return FALSE; | |
540 | |
541 window = gtk_dialog_new_with_buttons(GAIM_ALERT_TITLE, NULL, 0, GTK_STOCK_CLOSE, GTK_RESPONSE_OK, NULL); | |
542 gtk_dialog_set_default_response (GTK_DIALOG(window), GTK_RESPONSE_OK); | |
543 g_signal_connect(G_OBJECT(window), "response", G_CALLBACK(gtk_widget_destroy), NULL); | |
544 | |
545 gtk_container_set_border_width (GTK_CONTAINER(window), 6); | |
546 gtk_window_set_resizable(GTK_WINDOW(window), FALSE); | |
547 gtk_dialog_set_has_separator(GTK_DIALOG(window), FALSE); | |
548 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(window)->vbox), 12); | |
549 gtk_container_set_border_width (GTK_CONTAINER(GTK_DIALOG(window)->vbox), 6); | |
550 | |
551 hbox = gtk_hbox_new(FALSE, 12); | |
552 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(window)->vbox), hbox); | |
10219 | 553 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_COOL, gtk_icon_size_from_name(GAIM_ICON_SIZE_DIALOG_COOL)); |
9709 | 554 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
555 | |
556 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
557 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
558 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | |
559 | |
560 gtk_widget_show_all(window); | |
561 return TRUE; | |
562 } | |
563 | |
564 static void | |
9730 | 565 gaim_gtkdialogs_info_cb(gpointer data, GaimRequestFields *fields) |
9709 | 566 { |
567 char *username; | |
568 gboolean found = FALSE; | |
569 GaimAccount *account; | |
570 | |
571 account = gaim_request_fields_get_account(fields, "account"); | |
572 | |
573 username = g_strdup(gaim_normalize(account, | |
574 gaim_request_fields_get_string(fields, "screenname"))); | |
575 | |
576 if (username != NULL && gaim_str_has_suffix(username, "rocksmyworld")) | |
9730 | 577 found = gaim_gtkdialogs_ee(username); |
9709 | 578 |
579 if (!found && username != NULL && *username != '\0' && account != NULL) | |
580 serv_get_info(gaim_account_get_connection(account), username); | |
581 | |
582 g_free(username); | |
583 } | |
584 | |
585 void | |
9714 | 586 gaim_gtkdialogs_info(void) |
9709 | 587 { |
588 GaimRequestFields *fields; | |
589 GaimRequestFieldGroup *group; | |
590 GaimRequestField *field; | |
591 | |
592 fields = gaim_request_fields_new(); | |
593 | |
594 group = gaim_request_field_group_new(NULL); | |
595 gaim_request_fields_add_group(fields, group); | |
596 | |
10668 | 597 field = gaim_request_field_string_new("screenname", _("_Name"), NULL, FALSE); |
9709 | 598 gaim_request_field_set_type_hint(field, "screenname"); |
599 gaim_request_field_set_required(field, TRUE); | |
600 gaim_request_field_group_add_field(group, field); | |
601 | |
602 field = gaim_request_field_account_new("account", _("_Account"), NULL); | |
603 gaim_request_field_set_visible(field, | |
604 (gaim_connections_get_all() != NULL && | |
605 gaim_connections_get_all()->next != NULL)); | |
606 gaim_request_field_set_required(field, TRUE); | |
607 gaim_request_field_group_add_field(group, field); | |
608 | |
609 gaim_request_fields(gaim_get_blist(), _("Get User Info"), | |
610 NULL, | |
10668 | 611 _("Please enter the screen name or alias of the person " |
612 "whose info you would like to view."), | |
9709 | 613 fields, |
9730 | 614 _("OK"), G_CALLBACK(gaim_gtkdialogs_info_cb), |
9709 | 615 _("Cancel"), NULL, |
616 NULL); | |
617 } | |
618 | |
619 static void | |
9730 | 620 gaim_gtkdialogs_log_cb(gpointer data, GaimRequestFields *fields) |
9709 | 621 { |
622 char *username; | |
623 GaimAccount *account; | |
624 | |
625 account = gaim_request_fields_get_account(fields, "account"); | |
626 | |
627 username = g_strdup(gaim_normalize(account, | |
628 gaim_request_fields_get_string(fields, "screenname"))); | |
629 | |
9917 | 630 if(username != NULL && *username != '\0' && account != NULL ) |
631 gaim_gtk_log_show(GAIM_LOG_IM, username, account); | |
9709 | 632 |
633 g_free(username); | |
634 } | |
635 | |
9991 | 636 /* |
637 * TODO - This needs to deal with logs of all types, not just IM logs. | |
638 */ | |
9709 | 639 void |
9714 | 640 gaim_gtkdialogs_log(void) |
9709 | 641 { |
642 GaimRequestFields *fields; | |
643 GaimRequestFieldGroup *group; | |
644 GaimRequestField *field; | |
645 | |
646 fields = gaim_request_fields_new(); | |
647 | |
648 group = gaim_request_field_group_new(NULL); | |
649 gaim_request_fields_add_group(fields, group); | |
650 | |
10668 | 651 field = gaim_request_field_string_new("screenname", _("_Name"), NULL, FALSE); |
9709 | 652 gaim_request_field_set_type_hint(field, "screenname"); |
653 gaim_request_field_set_required(field, TRUE); | |
654 gaim_request_field_group_add_field(group, field); | |
655 | |
656 field = gaim_request_field_account_new("account", _("_Account"), NULL); | |
657 gaim_request_field_account_set_show_all(field, TRUE); | |
658 gaim_request_field_set_visible(field, | |
659 (gaim_accounts_get_all() != NULL && | |
660 gaim_accounts_get_all()->next != NULL)); | |
661 gaim_request_field_set_required(field, TRUE); | |
662 gaim_request_field_group_add_field(group, field); | |
663 | |
664 gaim_request_fields(gaim_get_blist(), _("Get User Log"), | |
665 NULL, | |
10668 | 666 _("Please enter the screen name or alias of the person " |
667 "whose log you would like to view."), | |
9709 | 668 fields, |
9730 | 669 _("OK"), G_CALLBACK(gaim_gtkdialogs_log_cb), |
9709 | 670 _("Cancel"), NULL, |
671 NULL); | |
672 } | |
673 | |
9730 | 674 static void |
675 gaim_gtkdialogs_warn_cb(GtkWidget *widget, gint resp, struct warning *w) | |
9709 | 676 { |
9730 | 677 if (resp == GTK_RESPONSE_OK) |
9753 | 678 serv_warn(w->gc, w->who, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w->anon))); |
9709 | 679 |
9753 | 680 dialogwindows = g_list_remove(dialogwindows, w->window); |
681 gtk_widget_destroy(w->window); | |
682 | |
9730 | 683 g_free(w->who); |
684 g_free(w); | |
9709 | 685 } |
686 | |
9753 | 687 /* |
9991 | 688 * TODO - Make this use the request API, if possible. |
9753 | 689 */ |
9730 | 690 void |
691 gaim_gtkdialogs_warn(GaimConnection *gc, const char *who) | |
9709 | 692 { |
9753 | 693 gchar *labeltext; |
9730 | 694 GtkWidget *hbox, *vbox; |
9709 | 695 GtkWidget *label; |
9753 | 696 GtkWidget *img; |
697 struct warning *w; | |
9730 | 698 |
9753 | 699 g_return_if_fail(gc != NULL); |
700 g_return_if_fail(who != NULL); | |
701 | |
702 w = g_new0(struct warning, 1); | |
9730 | 703 w->who = g_strdup(who); |
704 w->gc = gc; | |
705 | |
9753 | 706 w->window = gtk_dialog_new_with_buttons(_("Warn User"), NULL, 0, |
9730 | 707 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
708 GAIM_STOCK_WARN, GTK_RESPONSE_OK, NULL); | |
709 gtk_dialog_set_default_response (GTK_DIALOG(w->window), GTK_RESPONSE_OK); | |
710 g_signal_connect(G_OBJECT(w->window), "response", G_CALLBACK(gaim_gtkdialogs_warn_cb), w); | |
711 | |
712 gtk_container_set_border_width (GTK_CONTAINER(w->window), 6); | |
713 gtk_window_set_resizable(GTK_WINDOW(w->window), FALSE); | |
714 gtk_dialog_set_has_separator(GTK_DIALOG(w->window), FALSE); | |
715 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(w->window)->vbox), 12); | |
716 gtk_container_set_border_width (GTK_CONTAINER(GTK_DIALOG(w->window)->vbox), 6); | |
9709 | 717 |
718 hbox = gtk_hbox_new(FALSE, 12); | |
9730 | 719 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(w->window)->vbox), hbox); |
9753 | 720 |
721 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG); | |
722 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
9730 | 723 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
9709 | 724 |
9730 | 725 vbox = gtk_vbox_new(FALSE, 0); |
726 gtk_container_add(GTK_CONTAINER(hbox), vbox); | |
727 labeltext = g_strdup_printf(_("<span weight=\"bold\" size=\"larger\">Warn %s?</span>\n\n" | |
728 "This will increase %s's warning level and he or she will be subject to harsher rate limiting.\n"), who, who); | |
729 label = gtk_label_new(NULL); | |
730 gtk_label_set_markup(GTK_LABEL(label), labeltext); | |
731 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
732 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
733 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); | |
734 g_free(labeltext); | |
9709 | 735 |
9730 | 736 w->anon = gtk_check_button_new_with_mnemonic(_("Warn _anonymously?")); |
737 gtk_box_pack_start(GTK_BOX(vbox), w->anon, FALSE, FALSE, 0); | |
738 | |
739 hbox = gtk_hbox_new(FALSE, 6); | |
740 gtk_container_add(GTK_CONTAINER(vbox), hbox); | |
741 img = gtk_image_new_from_stock(GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_MENU); | |
742 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | |
743 labeltext = _("<b>Anonymous warnings are less severe.</b>"); | |
744 label = gtk_label_new(NULL); | |
745 gtk_label_set_markup(GTK_LABEL(label), labeltext); | |
746 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
9709 | 747 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
748 | |
9730 | 749 dialogwindows = g_list_prepend(dialogwindows, w->window); |
750 gtk_widget_show_all(w->window); | |
9709 | 751 } |
752 | |
753 static void | |
9730 | 754 gaim_gtkdialogs_alias_contact_cb(GaimContact *contact, const char *new_alias) |
755 { | |
756 gaim_contact_set_alias(contact, new_alias); | |
757 } | |
758 | |
759 void | |
760 gaim_gtkdialogs_alias_contact(GaimContact *contact) | |
761 { | |
9753 | 762 g_return_if_fail(contact != NULL); |
763 | |
9730 | 764 gaim_request_input(NULL, _("Alias Contact"), NULL, |
765 _("Enter an alias for this contact."), | |
766 contact->alias, FALSE, FALSE, NULL, | |
767 _("Alias"), G_CALLBACK(gaim_gtkdialogs_alias_contact_cb), | |
768 _("Cancel"), NULL, contact); | |
769 } | |
770 | |
771 static void | |
772 gaim_gtkdialogs_alias_buddy_cb(GaimBuddy *buddy, const char *new_alias) | |
773 { | |
774 gaim_blist_alias_buddy(buddy, new_alias); | |
775 serv_alias_buddy(buddy); | |
776 } | |
777 | |
778 void | |
9753 | 779 gaim_gtkdialogs_alias_buddy(GaimBuddy *buddy) |
9730 | 780 { |
9753 | 781 gchar *secondary; |
782 | |
783 g_return_if_fail(buddy != NULL); | |
784 | |
785 secondary = g_strdup_printf(_("Enter an alias for %s."), buddy->name); | |
9730 | 786 |
787 gaim_request_input(NULL, _("Alias Buddy"), NULL, | |
9753 | 788 secondary, buddy->alias, FALSE, FALSE, NULL, |
9730 | 789 _("Alias"), G_CALLBACK(gaim_gtkdialogs_alias_buddy_cb), |
9753 | 790 _("Cancel"), NULL, buddy); |
9730 | 791 |
792 g_free(secondary); | |
793 } | |
794 | |
795 static void | |
796 gaim_gtkdialogs_alias_chat_cb(GaimChat *chat, const char *new_alias) | |
9709 | 797 { |
798 gaim_blist_alias_chat(chat, new_alias); | |
799 } | |
800 | |
801 void | |
9730 | 802 gaim_gtkdialogs_alias_chat(GaimChat *chat) |
9709 | 803 { |
9753 | 804 g_return_if_fail(chat != NULL); |
805 | |
9709 | 806 gaim_request_input(NULL, _("Alias Chat"), NULL, |
807 _("Enter an alias for this chat."), | |
808 chat->alias, FALSE, FALSE, NULL, | |
9730 | 809 _("Alias"), G_CALLBACK(gaim_gtkdialogs_alias_chat_cb), |
9709 | 810 _("Cancel"), NULL, chat); |
811 } | |
812 | |
813 static void | |
9753 | 814 gaim_gtkdialogs_remove_contact_cb(GaimContact *contact) |
9709 | 815 { |
9730 | 816 GaimBlistNode *bnode, *cnode; |
817 GaimGroup *group; | |
818 | |
819 cnode = (GaimBlistNode *)contact; | |
820 group = (GaimGroup*)cnode->parent; | |
821 for (bnode = cnode->child; bnode; bnode = bnode->next) { | |
822 GaimBuddy *buddy = (GaimBuddy*)bnode; | |
823 if (gaim_account_is_connected(buddy->account)) | |
824 serv_remove_buddy(buddy->account->gc, buddy, group); | |
825 } | |
826 gaim_blist_remove_contact(contact); | |
827 } | |
828 | |
829 void | |
830 gaim_gtkdialogs_remove_contact(GaimContact *contact) | |
831 { | |
832 GaimBuddy *buddy = gaim_contact_get_priority_buddy(contact); | |
833 | |
9753 | 834 g_return_if_fail(contact != NULL); |
835 g_return_if_fail(buddy != NULL); | |
9730 | 836 |
837 if (((GaimBlistNode*)contact)->child == (GaimBlistNode*)buddy && | |
838 !((GaimBlistNode*)buddy)->next) { | |
839 gaim_gtkdialogs_remove_buddy(buddy); | |
840 } else { | |
10324 | 841 gchar *text; |
842 text = g_strdup_printf( | |
843 ngettext( | |
844 "You are about to remove the contact containing %s " | |
845 "and %d other buddy from your buddy list. Do you " | |
846 "want to continue?", | |
847 "You are about to remove the contact containing %s " | |
848 "and %d other buddies from your buddy list. Do you " | |
849 "want to continue?", contact->totalsize - 1), | |
850 buddy->name, contact->totalsize - 1); | |
9730 | 851 |
10222 | 852 gaim_request_action(contact, NULL, _("Remove Contact"), text, 0, contact, 2, |
9753 | 853 _("Remove Contact"), G_CALLBACK(gaim_gtkdialogs_remove_contact_cb), |
9730 | 854 _("Cancel"), NULL); |
855 | |
856 g_free(text); | |
857 } | |
9709 | 858 } |
859 | |
860 void | |
9753 | 861 gaim_gtkdialogs_remove_group_cb(GaimGroup *group) |
9709 | 862 { |
9730 | 863 GaimBlistNode *cnode, *bnode; |
864 | |
865 cnode = ((GaimBlistNode*)group)->child; | |
866 | |
867 while (cnode) { | |
868 if (GAIM_BLIST_NODE_IS_CONTACT(cnode)) { | |
869 bnode = cnode->child; | |
870 cnode = cnode->next; | |
871 while (bnode) { | |
872 GaimBuddy *buddy; | |
873 if (GAIM_BLIST_NODE_IS_BUDDY(bnode)) { | |
874 GaimConversation *conv; | |
875 buddy = (GaimBuddy*)bnode; | |
876 bnode = bnode->next; | |
10246 | 877 conv = gaim_find_conversation_with_account(GAIM_CONV_IM, |
878 buddy->name, | |
879 buddy->account); | |
9730 | 880 if (gaim_account_is_connected(buddy->account)) { |
881 serv_remove_buddy(buddy->account->gc, buddy, group); | |
882 gaim_blist_remove_buddy(buddy); | |
883 if (conv) | |
884 gaim_conversation_update(conv, | |
885 GAIM_CONV_UPDATE_REMOVE); | |
886 } | |
887 } else { | |
888 bnode = bnode->next; | |
889 } | |
890 } | |
891 } else if (GAIM_BLIST_NODE_IS_CHAT(cnode)) { | |
892 GaimChat *chat = (GaimChat *)cnode; | |
893 cnode = cnode->next; | |
894 if (gaim_account_is_connected(chat->account)) | |
895 gaim_blist_remove_chat(chat); | |
896 } else { | |
897 cnode = cnode->next; | |
898 } | |
899 } | |
900 | |
901 gaim_blist_remove_group(group); | |
902 } | |
903 | |
904 void | |
905 gaim_gtkdialogs_remove_group(GaimGroup *group) | |
906 { | |
9753 | 907 gchar *text; |
908 | |
909 g_return_if_fail(group != NULL); | |
910 | |
911 text = g_strdup_printf(_("You are about to remove the group %s and all its members from your buddy list. Do you want to continue?"), | |
912 group->name); | |
9730 | 913 |
10222 | 914 gaim_request_action(group, NULL, _("Remove Group"), text, 0, group, 2, |
9753 | 915 _("Remove Group"), G_CALLBACK(gaim_gtkdialogs_remove_group_cb), |
9730 | 916 _("Cancel"), NULL); |
917 | |
918 g_free(text); | |
9709 | 919 } |
920 | |
10246 | 921 /* XXX - Some of this should be moved into the core, methinks. */ |
9709 | 922 static void |
9753 | 923 gaim_gtkdialogs_remove_buddy_cb(GaimBuddy *buddy) |
9709 | 924 { |
9730 | 925 GaimGroup *group; |
926 GaimConversation *conv; | |
927 gchar *name; | |
928 GaimAccount *account; | |
929 | |
930 group = gaim_find_buddys_group(buddy); | |
931 name = g_strdup(buddy->name); /* b->name is a crasher after remove_buddy */ | |
932 account = buddy->account; | |
933 | |
9753 | 934 gaim_debug_info("blist", "Removing '%s' from buddy list.\n", buddy->name); |
9991 | 935 /* TODO - Should remove from blist first... then call serv_remove_buddy()? */ |
9730 | 936 serv_remove_buddy(buddy->account->gc, buddy, group); |
937 gaim_blist_remove_buddy(buddy); | |
938 | |
10246 | 939 conv = gaim_find_conversation_with_account(GAIM_CONV_IM, name, account); |
9730 | 940 if (conv != NULL) |
941 gaim_conversation_update(conv, GAIM_CONV_UPDATE_REMOVE); | |
942 | |
943 g_free(name); | |
9709 | 944 } |
945 | |
946 void | |
9730 | 947 gaim_gtkdialogs_remove_buddy(GaimBuddy *buddy) |
9709 | 948 { |
9753 | 949 gchar *text; |
9730 | 950 |
9753 | 951 g_return_if_fail(buddy != NULL); |
9730 | 952 |
9753 | 953 text = g_strdup_printf(_("You are about to remove %s from your buddy list. Do you want to continue?"), |
954 buddy->name); | |
9730 | 955 |
10222 | 956 gaim_request_action(buddy, NULL, _("Remove Buddy"), text, 0, buddy, 2, |
9753 | 957 _("Remove Buddy"), G_CALLBACK(gaim_gtkdialogs_remove_buddy_cb), |
9730 | 958 _("Cancel"), NULL); |
959 | |
960 g_free(text); | |
961 } | |
9709 | 962 |
9730 | 963 static void |
9753 | 964 gaim_gtkdialogs_remove_chat_cb(GaimChat *chat) |
9730 | 965 { |
9918 | 966 char *name = NULL; |
10167 | 967 GaimAccount *account; |
9918 | 968 GaimConversation *conv = NULL; |
969 | |
10167 | 970 account = chat->account; |
971 | |
972 if (GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl)->get_chat_name != NULL) | |
973 name = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl)->get_chat_name(chat->components); | |
9918 | 974 |
9730 | 975 gaim_blist_remove_chat(chat); |
9918 | 976 |
977 if (name != NULL) { | |
10246 | 978 conv = gaim_find_conversation_with_account(GAIM_CONV_CHAT, name, account); |
9918 | 979 g_free(name); |
980 } | |
981 | |
982 if (conv != NULL) | |
983 gaim_conversation_update(conv, GAIM_CONV_UPDATE_REMOVE); | |
9730 | 984 } |
9709 | 985 |
9730 | 986 void |
987 gaim_gtkdialogs_remove_chat(GaimChat *chat) | |
988 { | |
9753 | 989 gchar *name = gaim_chat_get_display_name(chat); |
990 gchar *text = g_strdup_printf(_("You are about to remove the chat %s from your buddy list. Do you want to continue?"), name); | |
991 | |
992 g_return_if_fail(chat != NULL); | |
9730 | 993 |
10222 | 994 gaim_request_action(chat, NULL, _("Remove Chat"), text, 0, chat, 2, |
9753 | 995 _("Remove Chat"), G_CALLBACK(gaim_gtkdialogs_remove_chat_cb), |
9730 | 996 _("Cancel"), NULL); |
997 | |
998 g_free(name); | |
999 g_free(text); | |
9709 | 1000 } |