* sync with main changes of 2002-10-04
[claws.git] / src / prefs_account.c
1 /*
2  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2002 Hiroyuki Yamamoto
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18  */
19
20 #ifdef HAVE_CONFIG_H
21 #  include "config.h"
22 #endif
23
24 #include "defs.h"
25
26 #include <gtk/gtk.h>
27 #include <gdk/gdkkeysyms.h>
28 #include <stdio.h>
29 #include <sys/types.h>
30 #include <sys/stat.h>
31 #include <string.h>
32 #include <stdlib.h>
33 #include <ctype.h>
34
35 #include "intl.h"
36 #include "main.h"
37 #include "prefs.h"
38 #include "prefs_account.h"
39 #include "prefs_customheader.h"
40 #include "account.h"
41 #include "mainwindow.h"
42 #include "manage_window.h"
43 #include "foldersel.h"
44 #include "inc.h"
45 #include "menu.h"
46 #include "gtkutils.h"
47 #include "utils.h"
48 #include "alertpanel.h"
49 #include "colorlabel.h"
50
51 static gboolean cancelled;
52
53 static PrefsAccount tmp_ac_prefs;
54
55 static PrefsDialog dialog;
56
57 static struct Basic {
58         GtkWidget *acname_entry;
59         GtkWidget *default_chkbtn;
60
61         GtkWidget *name_entry;
62         GtkWidget *addr_entry;
63         GtkWidget *org_entry;
64
65         GtkWidget *serv_frame;
66         GtkWidget *serv_table;
67         GtkWidget *protocol_optmenu;
68         GtkWidget *recvserv_label;
69         GtkWidget *smtpserv_label;
70         GtkWidget *nntpserv_label;
71         GtkWidget *localmbox_label;
72         GtkWidget *mailcmd_label;
73         GtkWidget *recvserv_entry;
74         GtkWidget *smtpserv_entry;
75         GtkWidget *nntpserv_entry;
76         GtkWidget *nntpauth_chkbtn;
77         GtkWidget *localmbox_entry;
78         GtkWidget *mailcmd_chkbtn;
79         GtkWidget *mailcmd_entry;
80         GtkWidget *uid_label;
81         GtkWidget *pass_label;
82         GtkWidget *uid_entry;
83         GtkWidget *pass_entry;
84 } basic;
85
86 static struct Receive {
87         GtkWidget *pop3_frame;
88         GtkWidget *rmmail_chkbtn;
89         GtkWidget *leave_time_entry;
90         GtkWidget *getall_chkbtn;
91         GtkWidget *sd_filter_on_recv_chkbtn;
92         GtkWidget *sd_rmmail_chkbtn;
93         GtkWidget *size_limit_chkbtn;
94         GtkWidget *size_limit_entry;
95         GtkWidget *filter_on_recv_chkbtn;
96         GtkWidget *inbox_label;
97         GtkWidget *inbox_entry;
98         GtkWidget *inbox_btn;
99
100         GtkWidget *recvatgetall_chkbtn;
101 } receive;
102
103 static struct Send {
104         GtkWidget *date_chkbtn;
105         GtkWidget *msgid_chkbtn;
106
107         GtkWidget *customhdr_chkbtn;
108
109         GtkWidget *smtp_auth_chkbtn;
110         GtkWidget *smtp_auth_type_optmenu;
111         GtkWidget *smtp_uid_entry;
112         GtkWidget *smtp_pass_entry;
113         GtkWidget *pop_bfr_smtp_chkbtn;
114         GtkWidget *pop_bfr_smtp_tm_entry;
115 } p_send;
116
117 static struct Compose {
118         GtkWidget *sigpath_entry;
119
120         GtkWidget *autocc_chkbtn;
121         GtkWidget *autocc_entry;
122         GtkWidget *autobcc_chkbtn;
123         GtkWidget *autobcc_entry;
124         GtkWidget *autoreplyto_chkbtn;
125         GtkWidget *autoreplyto_entry;
126 } compose;
127
128 #if USE_GPGME
129 static struct Privacy {
130         GtkWidget *default_encrypt_chkbtn;
131         GtkWidget *default_sign_chkbtn;
132         GtkWidget *ascii_armored_chkbtn;
133         GtkWidget *clearsign_chkbtn;
134         GtkWidget *defaultkey_radiobtn;
135         GtkWidget *emailkey_radiobtn;
136         GtkWidget *customkey_radiobtn;
137         GtkWidget *customkey_entry;
138 } privacy;
139 #endif /* USE_GPGME */
140
141 #if USE_SSL
142 static struct SSLPrefs {
143         GtkWidget *pop_frame;
144         GtkWidget *pop_nossl_radiobtn;
145         GtkWidget *pop_ssltunnel_radiobtn;
146         GtkWidget *pop_starttls_radiobtn;
147
148         GtkWidget *imap_frame;
149         GtkWidget *imap_nossl_radiobtn;
150         GtkWidget *imap_ssltunnel_radiobtn;
151         GtkWidget *imap_starttls_radiobtn;
152
153         GtkWidget *nntp_frame;
154         GtkWidget *nntp_nossl_radiobtn;
155         GtkWidget *nntp_ssltunnel_radiobtn;
156
157         GtkWidget *send_frame;
158         GtkWidget *smtp_nossl_radiobtn;
159         GtkWidget *smtp_ssltunnel_radiobtn;
160         GtkWidget *smtp_starttls_radiobtn;
161 } ssl;
162 #endif /* USE_SSL */
163
164 static struct Advanced {
165         GtkWidget *smtpport_chkbtn;
166         GtkWidget *smtpport_entry;
167         GtkWidget *popport_hbox;
168         GtkWidget *popport_chkbtn;
169         GtkWidget *popport_entry;
170         GtkWidget *imapport_hbox;
171         GtkWidget *imapport_chkbtn;
172         GtkWidget *imapport_entry;
173         GtkWidget *nntpport_hbox;
174         GtkWidget *nntpport_chkbtn;
175         GtkWidget *nntpport_entry;
176         GtkWidget *domain_chkbtn;
177         GtkWidget *domain_entry;
178         GtkWidget *tunnelcmd_chkbtn;
179         GtkWidget *tunnelcmd_entry;
180         GtkWidget *crosspost_chkbtn;
181         GtkWidget *crosspost_colormenu;
182
183         GtkWidget *imap_frame;
184         GtkWidget *imapdir_entry;
185
186         GtkWidget *sent_folder_chkbtn;
187         GtkWidget *sent_folder_entry;
188         GtkWidget *draft_folder_chkbtn;
189         GtkWidget *draft_folder_entry;
190         GtkWidget *trash_folder_chkbtn;
191         GtkWidget *trash_folder_entry;
192 } advanced;
193
194 static void prefs_account_fix_size                      (void);
195
196 static void prefs_account_protocol_set_data_from_optmenu(PrefParam *pparam);
197 static void prefs_account_protocol_set_optmenu          (PrefParam *pparam);
198 static void prefs_account_protocol_activated            (GtkMenuItem *menuitem);
199
200 static void prefs_account_smtp_auth_type_set_data_from_optmenu
201                                                         (PrefParam *pparam);
202 static void prefs_account_smtp_auth_type_set_optmenu    (PrefParam *pparam);
203
204 #if USE_GPGME || USE_SSL
205 static void prefs_account_enum_set_data_from_radiobtn   (PrefParam *pparam);
206 static void prefs_account_enum_set_radiobtn             (PrefParam *pparam);
207 #endif /* USE_GPGME || USE_SSL */
208
209 #if USE_GPGME
210 static void prefs_account_ascii_armored_warning         (GtkWidget *widget);
211 #endif /* USE_GPGME */
212
213 static void prefs_account_crosspost_set_data_from_colormenu(PrefParam *pparam);
214 static void prefs_account_crosspost_set_colormenu(PrefParam *pparam);
215
216 static void prefs_account_nntpauth_toggled(GtkToggleButton *button,
217                                            gpointer user_data);
218 static void prefs_account_mailcmd_toggled(GtkToggleButton *button,
219                                           gpointer user_data);
220
221 static PrefParam param[] = {
222         /* Basic */
223         {"account_name", NULL, &tmp_ac_prefs.account_name, P_STRING,
224          &basic.acname_entry, prefs_set_data_from_entry, prefs_set_entry},
225
226         {"is_default", "FALSE", &tmp_ac_prefs.is_default, P_BOOL,
227          &basic.default_chkbtn,
228          prefs_set_data_from_toggle, prefs_set_toggle},
229
230         {"name", NULL, &tmp_ac_prefs.name, P_STRING,
231          &basic.name_entry, prefs_set_data_from_entry, prefs_set_entry},
232
233         {"address", NULL, &tmp_ac_prefs.address, P_STRING,
234          &basic.addr_entry, prefs_set_data_from_entry, prefs_set_entry},
235
236         {"organization", NULL, &tmp_ac_prefs.organization, P_STRING,
237          &basic.org_entry, prefs_set_data_from_entry, prefs_set_entry},
238
239         {"protocol", NULL, &tmp_ac_prefs.protocol, P_ENUM,
240          &basic.protocol_optmenu,
241          prefs_account_protocol_set_data_from_optmenu,
242          prefs_account_protocol_set_optmenu},
243
244         {"receive_server", NULL, &tmp_ac_prefs.recv_server, P_STRING,
245          &basic.recvserv_entry, prefs_set_data_from_entry, prefs_set_entry},
246
247         {"smtp_server", NULL, &tmp_ac_prefs.smtp_server, P_STRING,
248          &basic.smtpserv_entry, prefs_set_data_from_entry, prefs_set_entry},
249
250         {"nntp_server", NULL, &tmp_ac_prefs.nntp_server, P_STRING,
251          &basic.nntpserv_entry, prefs_set_data_from_entry, prefs_set_entry},
252
253         {"local_mbox", NULL, &tmp_ac_prefs.local_mbox, P_STRING,
254          &basic.localmbox_entry, prefs_set_data_from_entry, prefs_set_entry},
255
256         {"use_mail_command", "FALSE", &tmp_ac_prefs.use_mail_command, P_BOOL,
257          &basic.mailcmd_chkbtn, prefs_set_data_from_toggle, prefs_set_toggle},
258
259         {"mail_command", "/usr/sbin/sendmail -t", &tmp_ac_prefs.mail_command, P_STRING,
260          &basic.mailcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
261
262         {"use_nntp_auth", "FALSE", &tmp_ac_prefs.use_nntp_auth, P_BOOL,
263          &basic.nntpauth_chkbtn,
264          prefs_set_data_from_toggle, prefs_set_toggle},
265
266         {"user_id", "ENV_USER", &tmp_ac_prefs.userid, P_STRING,
267          &basic.uid_entry, prefs_set_data_from_entry, prefs_set_entry},
268
269         {"password", NULL, &tmp_ac_prefs.passwd, P_STRING,
270          &basic.pass_entry, prefs_set_data_from_entry, prefs_set_entry},
271
272         {"inbox", "inbox", &tmp_ac_prefs.inbox, P_STRING,
273          &receive.inbox_entry, prefs_set_data_from_entry, prefs_set_entry},
274
275         /* Receive */
276         {"remove_mail", "TRUE", &tmp_ac_prefs.rmmail, P_BOOL,
277          &receive.rmmail_chkbtn,
278          prefs_set_data_from_toggle, prefs_set_toggle},
279
280         {"message_leave_time", "0", &tmp_ac_prefs.msg_leave_time, P_INT,
281          &receive.leave_time_entry,
282          prefs_set_data_from_entry, prefs_set_entry},
283
284         {"get_all_mail", "FALSE", &tmp_ac_prefs.getall, P_BOOL,
285          &receive.getall_chkbtn,
286          prefs_set_data_from_toggle, prefs_set_toggle},
287
288         {"enable_size_limit", "FALSE", &tmp_ac_prefs.enable_size_limit, P_BOOL,
289          &receive.size_limit_chkbtn,
290          prefs_set_data_from_toggle, prefs_set_toggle},
291         {"size_limit", "1024", &tmp_ac_prefs.size_limit, P_INT,
292          &receive.size_limit_entry,
293          prefs_set_data_from_entry, prefs_set_entry},
294
295         {"filter_on_receive", "TRUE", &tmp_ac_prefs.filter_on_recv, P_BOOL,
296          &receive.filter_on_recv_chkbtn,
297          prefs_set_data_from_toggle, prefs_set_toggle},
298
299         /* selective download */        
300         {"sd_filter_on_receive", "TRUE", &tmp_ac_prefs.sd_filter_on_recv, P_BOOL,
301          &receive.sd_filter_on_recv_chkbtn,
302          prefs_set_data_from_toggle, prefs_set_toggle},
303         {"sd_remove_mail_on_download", "TRUE", &tmp_ac_prefs.sd_rmmail_on_download, P_BOOL,
304          &receive.sd_rmmail_chkbtn,
305          prefs_set_data_from_toggle, prefs_set_toggle},
306
307         {"receive_at_get_all", "TRUE", &tmp_ac_prefs.recv_at_getall, P_BOOL,
308          &receive.recvatgetall_chkbtn,
309          prefs_set_data_from_toggle, prefs_set_toggle},
310
311         /* Send */
312         {"add_date", "TRUE", &tmp_ac_prefs.add_date, P_BOOL,
313          &p_send.date_chkbtn,
314          prefs_set_data_from_toggle, prefs_set_toggle},
315
316         {"generate_msgid", "TRUE", &tmp_ac_prefs.gen_msgid, P_BOOL,
317          &p_send.msgid_chkbtn,
318          prefs_set_data_from_toggle, prefs_set_toggle},
319
320         {"add_custom_header", "FALSE", &tmp_ac_prefs.add_customhdr, P_BOOL,
321          &p_send.customhdr_chkbtn,
322          prefs_set_data_from_toggle, prefs_set_toggle},
323
324         {"use_smtp_auth", "FALSE", &tmp_ac_prefs.use_smtp_auth, P_BOOL,
325          &p_send.smtp_auth_chkbtn,
326          prefs_set_data_from_toggle, prefs_set_toggle},
327
328         {"smtp_auth_method", "0", &tmp_ac_prefs.smtp_auth_type, P_ENUM,
329          &p_send.smtp_auth_type_optmenu,
330          prefs_account_smtp_auth_type_set_data_from_optmenu,
331          prefs_account_smtp_auth_type_set_optmenu},
332
333         {"smtp_user_id", NULL, &tmp_ac_prefs.smtp_userid, P_STRING,
334          &p_send.smtp_uid_entry, prefs_set_data_from_entry, prefs_set_entry},
335         {"smtp_password", NULL, &tmp_ac_prefs.smtp_passwd, P_STRING,
336          &p_send.smtp_pass_entry, prefs_set_data_from_entry, prefs_set_entry},
337
338         {"pop_before_smtp", "FALSE", &tmp_ac_prefs.pop_before_smtp, P_BOOL,
339          &p_send.pop_bfr_smtp_chkbtn,
340          prefs_set_data_from_toggle, prefs_set_toggle},
341
342         {"pop_before_smtp_timeout", "5", &tmp_ac_prefs.pop_before_smtp_timeout, P_INT,
343          &p_send.pop_bfr_smtp_tm_entry,
344          prefs_set_data_from_entry, prefs_set_entry},
345
346         /* Compose */
347         {"signature_path", "~/"DEFAULT_SIGNATURE, &tmp_ac_prefs.sig_path, P_STRING,
348          &compose.sigpath_entry,
349          prefs_set_data_from_entry, prefs_set_entry},
350
351         {"set_autocc", "FALSE", &tmp_ac_prefs.set_autocc, P_BOOL,
352          &compose.autocc_chkbtn,
353          prefs_set_data_from_toggle, prefs_set_toggle},
354
355         {"auto_cc", NULL, &tmp_ac_prefs.auto_cc, P_STRING,
356          &compose.autocc_entry,
357          prefs_set_data_from_entry, prefs_set_entry},
358
359         {"set_autobcc", "FALSE", &tmp_ac_prefs.set_autobcc, P_BOOL,
360          &compose.autobcc_chkbtn,
361          prefs_set_data_from_toggle, prefs_set_toggle},
362
363         {"auto_bcc", NULL, &tmp_ac_prefs.auto_bcc, P_STRING,
364          &compose.autobcc_entry,
365          prefs_set_data_from_entry, prefs_set_entry},
366
367         {"set_autoreplyto", "FALSE", &tmp_ac_prefs.set_autoreplyto, P_BOOL,
368          &compose.autoreplyto_chkbtn,
369          prefs_set_data_from_toggle, prefs_set_toggle},
370
371         {"auto_replyto", NULL, &tmp_ac_prefs.auto_replyto, P_STRING,
372          &compose.autoreplyto_entry,
373          prefs_set_data_from_entry, prefs_set_entry},
374
375 #if USE_GPGME
376         /* Privacy */
377         {"default_encrypt", "FALSE", &tmp_ac_prefs.default_encrypt, P_BOOL,
378          &privacy.default_encrypt_chkbtn,
379          prefs_set_data_from_toggle, prefs_set_toggle},
380         {"default_sign", "FALSE", &tmp_ac_prefs.default_sign, P_BOOL,
381          &privacy.default_sign_chkbtn,
382          prefs_set_data_from_toggle, prefs_set_toggle},
383         {"ascii_armored", "FALSE", &tmp_ac_prefs.ascii_armored, P_BOOL,
384          &privacy.ascii_armored_chkbtn,
385          prefs_set_data_from_toggle, prefs_set_toggle},
386         {"clearsign", "FALSE", &tmp_ac_prefs.clearsign, P_BOOL,
387          &privacy.clearsign_chkbtn,
388          prefs_set_data_from_toggle, prefs_set_toggle},
389         {"sign_key", NULL, &tmp_ac_prefs.sign_key, P_ENUM,
390          &privacy.defaultkey_radiobtn,
391          prefs_account_enum_set_data_from_radiobtn,
392          prefs_account_enum_set_radiobtn},
393         {"sign_key_id", NULL, &tmp_ac_prefs.sign_key_id, P_STRING,
394          &privacy.customkey_entry,
395          prefs_set_data_from_entry, prefs_set_entry},
396 #endif /* USE_GPGME */
397
398 #if USE_SSL
399         /* SSL */
400         {"ssl_pop", "0", &tmp_ac_prefs.ssl_pop, P_ENUM,
401          &ssl.pop_nossl_radiobtn,
402          prefs_account_enum_set_data_from_radiobtn,
403          prefs_account_enum_set_radiobtn},
404         {"ssl_imap", "0", &tmp_ac_prefs.ssl_imap, P_ENUM,
405          &ssl.imap_nossl_radiobtn,
406          prefs_account_enum_set_data_from_radiobtn,
407          prefs_account_enum_set_radiobtn},
408         {"ssl_nntp", "0", &tmp_ac_prefs.ssl_nntp, P_ENUM,
409          &ssl.nntp_nossl_radiobtn,
410          prefs_account_enum_set_data_from_radiobtn,
411          prefs_account_enum_set_radiobtn},
412         {"ssl_smtp", "0", &tmp_ac_prefs.ssl_smtp, P_ENUM,
413          &ssl.smtp_nossl_radiobtn,
414          prefs_account_enum_set_data_from_radiobtn,
415          prefs_account_enum_set_radiobtn},
416 #endif /* USE_SSL */
417
418         /* Advanced */
419         {"set_smtpport", "FALSE", &tmp_ac_prefs.set_smtpport, P_BOOL,
420          &advanced.smtpport_chkbtn,
421          prefs_set_data_from_toggle, prefs_set_toggle},
422
423         {"smtp_port", "25", &tmp_ac_prefs.smtpport, P_USHORT,
424          &advanced.smtpport_entry,
425          prefs_set_data_from_entry, prefs_set_entry},
426
427         {"set_popport", "FALSE", &tmp_ac_prefs.set_popport, P_BOOL,
428          &advanced.popport_chkbtn,
429          prefs_set_data_from_toggle, prefs_set_toggle},
430
431         {"pop_port", "110", &tmp_ac_prefs.popport, P_USHORT,
432          &advanced.popport_entry,
433          prefs_set_data_from_entry, prefs_set_entry},
434
435         {"set_imapport", "FALSE", &tmp_ac_prefs.set_imapport, P_BOOL,
436          &advanced.imapport_chkbtn,
437          prefs_set_data_from_toggle, prefs_set_toggle},
438
439         {"imap_port", "143", &tmp_ac_prefs.imapport, P_USHORT,
440          &advanced.imapport_entry,
441          prefs_set_data_from_entry, prefs_set_entry},
442
443         {"set_nntpport", "FALSE", &tmp_ac_prefs.set_nntpport, P_BOOL,
444          &advanced.nntpport_chkbtn,
445          prefs_set_data_from_toggle, prefs_set_toggle},
446
447         {"nntp_port", "119", &tmp_ac_prefs.nntpport, P_USHORT,
448          &advanced.nntpport_entry,
449          prefs_set_data_from_entry, prefs_set_entry},
450
451         {"set_domain", "FALSE", &tmp_ac_prefs.set_domain, P_BOOL,
452          &advanced.domain_chkbtn,
453          prefs_set_data_from_toggle, prefs_set_toggle},
454
455         {"domain", NULL, &tmp_ac_prefs.domain, P_STRING,
456          &advanced.domain_entry,
457          prefs_set_data_from_entry, prefs_set_entry},
458
459         {"set_tunnelcmd", "FALSE", &tmp_ac_prefs.set_tunnelcmd, P_BOOL,
460          &advanced.tunnelcmd_chkbtn,
461          prefs_set_data_from_toggle, prefs_set_toggle},
462
463         {"tunnelcmd", NULL, &tmp_ac_prefs.tunnelcmd, P_STRING,
464          &advanced.tunnelcmd_entry,
465          prefs_set_data_from_entry, prefs_set_entry},
466
467         {"mark_crosspost_read", "FALSE", &tmp_ac_prefs.mark_crosspost_read, P_BOOL,
468          &advanced.crosspost_chkbtn,
469          prefs_set_data_from_toggle, prefs_set_toggle},
470
471         {"crosspost_color", NULL, &tmp_ac_prefs.crosspost_col, P_ENUM,
472          &advanced.crosspost_colormenu,
473          prefs_account_crosspost_set_data_from_colormenu,
474          prefs_account_crosspost_set_colormenu},
475
476         {"imap_directory", NULL, &tmp_ac_prefs.imap_dir, P_STRING,
477          &advanced.imapdir_entry, prefs_set_data_from_entry, prefs_set_entry},
478
479         {"set_sent_folder", "FALSE", &tmp_ac_prefs.set_sent_folder, P_BOOL,
480          &advanced.sent_folder_chkbtn,
481          prefs_set_data_from_toggle, prefs_set_toggle},
482         {"sent_folder", NULL, &tmp_ac_prefs.sent_folder, P_STRING,
483          &advanced.sent_folder_entry,
484          prefs_set_data_from_entry, prefs_set_entry},
485
486         {"set_draft_folder", "FALSE", &tmp_ac_prefs.set_draft_folder, P_BOOL,
487          &advanced.draft_folder_chkbtn,
488          prefs_set_data_from_toggle, prefs_set_toggle},
489         {"draft_folder", NULL, &tmp_ac_prefs.draft_folder, P_STRING,
490          &advanced.draft_folder_entry,
491          prefs_set_data_from_entry, prefs_set_entry},
492
493         {"set_trash_folder", "FALSE", &tmp_ac_prefs.set_trash_folder, P_BOOL,
494          &advanced.trash_folder_chkbtn,
495          prefs_set_data_from_toggle, prefs_set_toggle},
496         {"trash_folder", NULL, &tmp_ac_prefs.trash_folder, P_STRING,
497          &advanced.trash_folder_entry,
498          prefs_set_data_from_entry, prefs_set_entry},
499
500         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
501 };
502
503 static gint prefs_account_get_new_id            (void);
504
505 static void prefs_account_create                (void);
506 static void prefs_account_basic_create          (void);
507 static void prefs_account_receive_create        (void);
508 static void prefs_account_send_create           (void);
509 static void prefs_account_compose_create        (void);
510 #if USE_GPGME
511 static void prefs_account_privacy_create        (void);
512 #endif /* USE_GPGME */
513 #if USE_SSL
514 static void prefs_account_ssl_create            (void);
515 #endif /* USE_SSL */
516 static void prefs_account_advanced_create       (void);
517
518 static void prefs_account_select_folder_cb      (GtkWidget      *widget,
519                                                  gpointer        data);
520
521 static void pop_bfr_smtp_tm_set_sens            (GtkWidget      *widget,
522                                                  gpointer        data);
523
524 static void prefs_account_edit_custom_header    (void);
525
526 static gint prefs_account_deleted               (GtkWidget      *widget,
527                                                  GdkEventAny    *event,
528                                                  gpointer        data);
529 static void prefs_account_key_pressed           (GtkWidget      *widget,
530                                                  GdkEventKey    *event,
531                                                  gpointer        data);
532 static void prefs_account_ok                    (void);
533 static gint prefs_account_apply                 (void);
534 static void prefs_account_cancel                (void);
535
536 PrefsAccount *prefs_account_new(void)
537 {
538         PrefsAccount *ac_prefs;
539
540         ac_prefs = g_new0(PrefsAccount, 1);
541         memset(&tmp_ac_prefs, 0, sizeof(PrefsAccount));
542         prefs_set_default(param);
543         *ac_prefs = tmp_ac_prefs;
544         ac_prefs->account_id = prefs_account_get_new_id();
545
546         return ac_prefs;
547 }
548
549 void prefs_account_read_config(PrefsAccount *ac_prefs, const gchar *label)
550 {
551         const gchar *p = label;
552         gint id;
553
554         g_return_if_fail(ac_prefs != NULL);
555         g_return_if_fail(label != NULL);
556
557         memset(&tmp_ac_prefs, 0, sizeof(PrefsAccount));
558         prefs_read_config(param, label, ACCOUNT_RC);
559         *ac_prefs = tmp_ac_prefs;
560         while (*p && !isdigit(*p)) p++;
561         id = atoi(p);
562         if (id < 0) g_warning("wrong account id: %d\n", id);
563         ac_prefs->account_id = id;
564
565         prefs_custom_header_read_config(ac_prefs);
566 }
567
568 void prefs_account_save_config(PrefsAccount *ac_prefs)
569 {
570         gchar *buf;
571
572         g_return_if_fail(ac_prefs != NULL);
573
574         tmp_ac_prefs = *ac_prefs;
575         buf = g_strdup_printf("Account: %d", ac_prefs->account_id);
576         prefs_save_config(param, buf, ACCOUNT_RC);
577 }
578
579 void prefs_account_save_config_all(GList *account_list)
580 {
581         GList *cur;
582         gchar *rcpath;
583         PrefFile *pfile;
584
585         rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, ACCOUNT_RC, NULL);
586         if ((pfile = prefs_write_open(rcpath)) == NULL) {
587                 g_free(rcpath);
588                 return;
589         }
590         g_free(rcpath);
591
592         for (cur = account_list; cur != NULL; cur = cur->next) {
593                 tmp_ac_prefs = *(PrefsAccount *)cur->data;
594                 if (fprintf(pfile->fp, "[Account: %d]\n",
595                             tmp_ac_prefs.account_id) <= 0 ||
596                     prefs_write_param(param, pfile->fp) < 0) {
597                         g_warning(_("failed to write configuration to file\n"));
598                         prefs_write_close_revert(pfile);
599                         return;
600                 }
601                 if (cur->next) {
602                         if (fputc('\n', pfile->fp) == EOF) {
603                                 FILE_OP_ERROR(rcpath, "fputc");
604                                 prefs_write_close_revert(pfile);
605                                 return;
606                         }
607                 }
608         }
609
610         if (prefs_write_close(pfile) < 0)
611                 g_warning(_("failed to write configuration to file\n"));
612 }
613
614 void prefs_account_free(PrefsAccount *ac_prefs)
615 {
616         if (!ac_prefs) return;
617
618         tmp_ac_prefs = *ac_prefs;
619         prefs_free(param);
620 }
621
622 static gint prefs_account_get_new_id(void)
623 {
624         GList *ac_list;
625         PrefsAccount *ac;
626         static gint last_id = 0;
627
628         for (ac_list = account_get_list(); ac_list != NULL;
629              ac_list = ac_list->next) {
630                 ac = (PrefsAccount *)ac_list->data;
631                 if (last_id < ac->account_id)
632                         last_id = ac->account_id;
633         }
634
635         return last_id + 1;
636 }
637
638 PrefsAccount *prefs_account_open(PrefsAccount *ac_prefs)
639 {
640         gboolean new_account = FALSE;
641
642         if (prefs_rc_is_readonly(ACCOUNT_RC))
643                 return ac_prefs;
644
645         debug_print("Opening account preferences window...\n");
646
647         inc_lock();
648
649         cancelled = FALSE;
650
651         if (!ac_prefs) {
652                 ac_prefs = prefs_account_new();
653                 new_account = TRUE;
654         }
655
656         if (!dialog.window) {
657                 prefs_account_create();
658         }
659
660         manage_window_set_transient(GTK_WINDOW(dialog.window));
661         gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
662         gtk_widget_grab_focus(dialog.ok_btn);
663
664         tmp_ac_prefs = *ac_prefs;
665
666         if (new_account) {
667                 PrefsAccount *def_ac;
668                 gchar *buf;
669
670                 prefs_set_dialog_to_default(param);
671                 buf = g_strdup_printf(_("Account%d"), ac_prefs->account_id);
672                 gtk_entry_set_text(GTK_ENTRY(basic.acname_entry), buf);
673                 g_free(buf);
674                 def_ac = account_get_default();
675                 if (def_ac) {
676                         gtk_entry_set_text(GTK_ENTRY(basic.name_entry),
677                                            def_ac->name ? def_ac->name : "");
678                         gtk_entry_set_text(GTK_ENTRY(basic.addr_entry),
679                                            def_ac->address ? def_ac->address : "");
680                         gtk_entry_set_text(GTK_ENTRY(basic.org_entry),
681                                            def_ac->organization ? def_ac->organization : "");
682                 }
683                 menu_set_sensitive_all
684                         (GTK_MENU_SHELL
685                                 (gtk_option_menu_get_menu
686                                         (GTK_OPTION_MENU
687                                                 (basic.protocol_optmenu))),
688                          TRUE);
689                 gtk_window_set_title(GTK_WINDOW(dialog.window),
690                                      _("Preferences for new account"));
691                 gtk_widget_hide(dialog.apply_btn);
692         } else {
693                 prefs_set_dialog(param);
694                 gtk_window_set_title(GTK_WINDOW(dialog.window),
695                                      _("Account preferences"));
696                 gtk_widget_show(dialog.apply_btn);
697         }
698
699         if (ac_prefs->protocol != A_LOCAL) {
700                 gtk_widget_set_sensitive(basic.smtpserv_entry, TRUE);
701                 gtk_widget_set_sensitive(basic.smtpserv_label, TRUE);
702         }
703
704         pop_bfr_smtp_tm_set_sens (NULL, NULL);
705         
706         gtk_widget_show(dialog.window);
707         gtk_main();
708         gtk_widget_hide(dialog.window);
709
710         inc_unlock();
711
712         if (cancelled && new_account) {
713                 g_free(ac_prefs);
714                 return NULL;
715         } else {
716                 *ac_prefs = tmp_ac_prefs;
717                 return ac_prefs;
718         }
719 }
720
721 static void prefs_account_create(void)
722 {
723         gint page = 0;
724
725         debug_print("Creating account preferences window...\n");
726
727         /* create dialog */
728         prefs_dialog_create(&dialog);
729         gtk_signal_connect(GTK_OBJECT(dialog.window), "delete_event",
730                            GTK_SIGNAL_FUNC(prefs_account_deleted), NULL);
731         gtk_signal_connect(GTK_OBJECT(dialog.window), "key_press_event",
732                            GTK_SIGNAL_FUNC(prefs_account_key_pressed), NULL);
733         MANAGE_WINDOW_SIGNALS_CONNECT(dialog.window);
734
735         gtk_signal_connect(GTK_OBJECT(dialog.ok_btn), "clicked",
736                            GTK_SIGNAL_FUNC(prefs_account_ok), NULL);
737         gtk_signal_connect(GTK_OBJECT(dialog.apply_btn), "clicked",
738                            GTK_SIGNAL_FUNC(prefs_account_apply), NULL);
739         gtk_signal_connect(GTK_OBJECT(dialog.cancel_btn), "clicked",
740                            GTK_SIGNAL_FUNC(prefs_account_cancel), NULL);
741
742         prefs_account_basic_create();
743         SET_NOTEBOOK_LABEL(dialog.notebook, _("Basic"), page++);
744         prefs_account_receive_create();
745         SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
746         prefs_account_send_create();
747         SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
748         prefs_account_compose_create();
749         SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
750 #if USE_GPGME
751         prefs_account_privacy_create();
752         SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
753 #endif /* USE_GPGME */
754 #if USE_SSL
755         prefs_account_ssl_create();
756         SET_NOTEBOOK_LABEL(dialog.notebook, _("SSL"), page++);
757 #endif /* USE_SSL */
758         prefs_account_advanced_create();
759         SET_NOTEBOOK_LABEL(dialog.notebook, _("Advanced"), page++);
760
761         prefs_account_fix_size();
762 }
763
764 /**
765  * prefs_account_fix_size:
766  * 
767  * Fix the window size after creating widgets by selecting "Local"
768  * protocol (currently it has the largest size of parameter widgets).
769  * Without this the window gets too large.
770  **/
771 static void prefs_account_fix_size(void)
772 {
773         GtkOptionMenu *optmenu = GTK_OPTION_MENU (basic.protocol_optmenu);
774         GtkWidget *menu;
775         GtkWidget *menuitem;
776
777         gtk_option_menu_set_history (optmenu, 4); /* local */
778         menu = gtk_option_menu_get_menu (optmenu);
779         menuitem = gtk_menu_get_active (GTK_MENU (menu));
780         gtk_menu_item_activate (GTK_MENU_ITEM (menuitem));
781 }
782
783 #define SET_ACTIVATE(menuitem) \
784 { \
785         gtk_signal_connect(GTK_OBJECT(menuitem), "activate", \
786                            GTK_SIGNAL_FUNC(prefs_account_protocol_activated), \
787                            NULL); \
788 }
789
790 #define TABLE_YPAD 2
791
792 static void prefs_account_basic_create(void)
793 {
794         GtkWidget *vbox1;
795         GtkWidget *hbox;
796         GtkWidget *label;
797         GtkWidget *acname_entry;
798         GtkWidget *default_chkbtn;
799         GtkWidget *frame1;
800         GtkWidget *table1;
801         GtkWidget *name_entry;
802         GtkWidget *addr_entry;
803         GtkWidget *org_entry;
804
805         GtkWidget *serv_frame;
806         GtkWidget *vbox2;
807         GtkWidget *optmenu;
808         GtkWidget *optmenu_menu;
809         GtkWidget *menuitem;
810         GtkWidget *serv_table;
811         GtkWidget *recvserv_label;
812         GtkWidget *smtpserv_label;
813         GtkWidget *nntpserv_label;
814         GtkWidget *localmbox_label;
815         GtkWidget *mailcmd_label;
816         GtkWidget *recvserv_entry;
817         GtkWidget *smtpserv_entry;
818         GtkWidget *nntpserv_entry;
819         GtkWidget *nntpauth_chkbtn;
820         GtkWidget *localmbox_entry;
821         GtkWidget *mailcmd_chkbtn;
822         GtkWidget *mailcmd_entry;
823         GtkWidget *uid_label;
824         GtkWidget *pass_label;
825         GtkWidget *uid_entry;
826         GtkWidget *pass_entry;
827
828         vbox1 = gtk_vbox_new (FALSE, VSPACING);
829         gtk_widget_show (vbox1);
830         gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
831         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
832
833         hbox = gtk_hbox_new (FALSE, 8);
834         gtk_widget_show (hbox);
835         gtk_box_pack_start (GTK_BOX (vbox1), hbox, FALSE, FALSE, 0);
836
837         label = gtk_label_new (_("Name of this account"));
838         gtk_widget_show (label);
839         gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
840
841         acname_entry = gtk_entry_new ();
842         gtk_widget_show (acname_entry);
843         gtk_widget_set_usize (acname_entry, DEFAULT_ENTRY_WIDTH, -1);
844         gtk_box_pack_start (GTK_BOX (hbox), acname_entry, TRUE, TRUE, 0);
845
846         default_chkbtn = gtk_check_button_new_with_label (_("Set as default"));
847         gtk_widget_show (default_chkbtn);
848         gtk_box_pack_end (GTK_BOX (hbox), default_chkbtn, FALSE, FALSE, 0);
849
850         PACK_FRAME (vbox1, frame1, _("Personal information"));
851
852         table1 = gtk_table_new (3, 2, FALSE);
853         gtk_widget_show (table1);
854         gtk_container_add (GTK_CONTAINER (frame1), table1);
855         gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
856         gtk_table_set_row_spacings (GTK_TABLE (table1), VSPACING_NARROW);
857         gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
858
859         label = gtk_label_new (_("Full name"));
860         gtk_widget_show (label);
861         gtk_table_attach (GTK_TABLE (table1), label, 0, 1, 0, 1,
862                           GTK_FILL, 0, 0, 0);
863         gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
864
865         label = gtk_label_new (_("Mail address"));
866         gtk_widget_show (label);
867         gtk_table_attach (GTK_TABLE (table1), label, 0, 1, 1, 2,
868                           GTK_FILL, 0, 0, 0);
869         gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
870
871         label = gtk_label_new (_("Organization"));
872         gtk_widget_show (label);
873         gtk_table_attach (GTK_TABLE (table1), label, 0, 1, 2, 3,
874                           GTK_FILL, 0, 0, 0);
875         gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
876
877         name_entry = gtk_entry_new ();
878         gtk_widget_show (name_entry);
879         gtk_table_attach (GTK_TABLE (table1), name_entry, 1, 2, 0, 1,
880                           GTK_EXPAND | GTK_SHRINK | GTK_FILL,
881                           GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
882
883         addr_entry = gtk_entry_new ();
884         gtk_widget_show (addr_entry);
885         gtk_table_attach (GTK_TABLE (table1), addr_entry, 1, 2, 1, 2,
886                           GTK_EXPAND | GTK_SHRINK | GTK_FILL,
887                           GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
888
889         org_entry = gtk_entry_new ();
890         gtk_widget_show (org_entry);
891         gtk_table_attach (GTK_TABLE (table1), org_entry, 1, 2, 2, 3,
892                           GTK_EXPAND | GTK_SHRINK | GTK_FILL,
893                           GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
894
895         PACK_FRAME (vbox1, serv_frame, _("Server information"));
896
897         vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
898         gtk_widget_show (vbox2);
899         gtk_container_add (GTK_CONTAINER (serv_frame), vbox2);
900         gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
901
902         hbox = gtk_hbox_new (FALSE, 8);
903         gtk_widget_show (hbox);
904         gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
905
906         label = gtk_label_new (_("Protocol"));
907         gtk_widget_show (label);
908         gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
909
910         optmenu = gtk_option_menu_new ();
911         gtk_widget_show (optmenu);
912         gtk_box_pack_start (GTK_BOX (hbox), optmenu, FALSE, FALSE, 0);
913
914         optmenu_menu = gtk_menu_new ();
915
916         MENUITEM_ADD (optmenu_menu, menuitem, _("POP3 (normal)"),  A_POP3);
917         SET_ACTIVATE (menuitem);
918         MENUITEM_ADD (optmenu_menu, menuitem, _("POP3 (APOP auth)"),  A_APOP);
919         SET_ACTIVATE (menuitem);
920         MENUITEM_ADD (optmenu_menu, menuitem, _("IMAP4"), A_IMAP4);
921         SET_ACTIVATE (menuitem);
922         MENUITEM_ADD (optmenu_menu, menuitem, _("News (NNTP)"), A_NNTP);
923         SET_ACTIVATE (menuitem);
924         MENUITEM_ADD (optmenu_menu, menuitem, _("None (local)"), A_LOCAL);
925         SET_ACTIVATE (menuitem);
926
927         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
928
929         serv_table = gtk_table_new (6, 4, FALSE);
930         gtk_widget_show (serv_table);
931         gtk_box_pack_start (GTK_BOX (vbox2), serv_table, FALSE, FALSE, 0);
932         gtk_table_set_row_spacings (GTK_TABLE (serv_table), VSPACING_NARROW);
933         gtk_table_set_row_spacing (GTK_TABLE (serv_table), 3, 0);
934         gtk_table_set_col_spacings (GTK_TABLE (serv_table), 8);
935
936         nntpserv_entry = gtk_entry_new ();
937         gtk_widget_show (nntpserv_entry);
938         gtk_table_attach (GTK_TABLE (serv_table), nntpserv_entry, 1, 4, 0, 1,
939                           GTK_EXPAND | GTK_SHRINK | GTK_FILL,
940                           GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
941 /*      gtk_table_set_row_spacing (GTK_TABLE (serv_table), 0, 0); */
942
943         nntpauth_chkbtn = gtk_check_button_new_with_label
944                 (_("This server requires authentication"));
945         gtk_widget_show (nntpauth_chkbtn);
946         gtk_table_attach (GTK_TABLE (serv_table), nntpauth_chkbtn, 0, 4, 1, 2,
947                           GTK_FILL, 0, 0, 0);
948
949         recvserv_entry = gtk_entry_new ();
950         gtk_widget_show (recvserv_entry);
951         gtk_table_attach (GTK_TABLE (serv_table), recvserv_entry, 1, 4, 2, 3,
952                           GTK_EXPAND | GTK_SHRINK | GTK_FILL,
953                           GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
954
955         localmbox_entry = gtk_entry_new ();
956         gtk_widget_show (localmbox_entry);
957         gtk_table_attach (GTK_TABLE (serv_table), localmbox_entry, 1, 4, 3, 4,
958                           GTK_EXPAND | GTK_SHRINK | GTK_FILL,
959                           GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
960
961         smtpserv_entry = gtk_entry_new ();
962         gtk_widget_show (smtpserv_entry);
963         gtk_table_attach (GTK_TABLE (serv_table), smtpserv_entry, 1, 4, 4, 5,
964                           GTK_EXPAND | GTK_SHRINK | GTK_FILL,
965                           GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
966
967         mailcmd_entry = gtk_entry_new ();
968         gtk_widget_show (mailcmd_entry);
969         gtk_table_attach (GTK_TABLE (serv_table), mailcmd_entry, 1, 4, 6, 7,
970                           GTK_EXPAND | GTK_SHRINK | GTK_FILL,
971                           GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
972
973         uid_entry = gtk_entry_new ();
974         gtk_widget_show (uid_entry);
975         gtk_widget_set_usize (uid_entry, DEFAULT_ENTRY_WIDTH, -1);
976         gtk_table_attach (GTK_TABLE (serv_table), uid_entry, 1, 2, 7, 8,
977                           GTK_EXPAND | GTK_SHRINK | GTK_FILL,
978                           GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
979
980         pass_entry = gtk_entry_new ();
981         gtk_widget_show (pass_entry);
982         gtk_widget_set_usize (pass_entry, DEFAULT_ENTRY_WIDTH, -1);
983         gtk_table_attach (GTK_TABLE (serv_table), pass_entry, 3, 4, 7, 8,
984                           GTK_EXPAND | GTK_SHRINK | GTK_FILL,
985                           GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
986         gtk_entry_set_visibility (GTK_ENTRY (pass_entry), FALSE);
987
988         nntpserv_label = gtk_label_new (_("News server"));
989         gtk_widget_show (nntpserv_label);
990         gtk_table_attach (GTK_TABLE (serv_table), nntpserv_label, 0, 1, 0, 1,
991                           GTK_FILL, 0, 0, 0);
992         gtk_misc_set_alignment (GTK_MISC (nntpserv_label), 1, 0.5);
993
994         recvserv_label = gtk_label_new (_("Server for receiving"));
995         gtk_widget_show (recvserv_label);
996         gtk_table_attach (GTK_TABLE (serv_table), recvserv_label, 0, 1, 2, 3,
997                           GTK_FILL, 0, 0, 0);
998         gtk_misc_set_alignment (GTK_MISC (recvserv_label), 1, 0.5);
999
1000         localmbox_label = gtk_label_new (_("Local mailbox file"));
1001         gtk_widget_show (localmbox_label);
1002         gtk_table_attach (GTK_TABLE (serv_table), localmbox_label, 0, 1, 3, 4,
1003                           GTK_FILL, 0, 0, 0);
1004         gtk_misc_set_alignment (GTK_MISC (localmbox_label), 1, 0.5);
1005 /*      gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0); */
1006
1007         smtpserv_label = gtk_label_new (_("SMTP server (send)"));
1008         gtk_widget_show (smtpserv_label);
1009         gtk_table_attach (GTK_TABLE (serv_table), smtpserv_label, 0, 1, 4, 5,
1010                           GTK_FILL, 0, 0, 0);
1011         gtk_misc_set_alignment (GTK_MISC (smtpserv_label), 1, 0.5);
1012 /*      gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0); */
1013
1014         mailcmd_chkbtn = gtk_check_button_new_with_label
1015                 (_("Use mail command rather than SMTP server"));
1016         gtk_widget_show (mailcmd_chkbtn);
1017         gtk_table_attach (GTK_TABLE (serv_table), mailcmd_chkbtn, 0, 4, 5, 6,
1018                           GTK_EXPAND | GTK_FILL,
1019                           0, 0, TABLE_YPAD);
1020         gtk_signal_connect(GTK_OBJECT(mailcmd_chkbtn), "toggled",
1021                            GTK_SIGNAL_FUNC(prefs_account_mailcmd_toggled),
1022                            NULL);
1023
1024         mailcmd_label = gtk_label_new (_("command to send mails"));
1025         gtk_widget_show (mailcmd_label);
1026         gtk_table_attach (GTK_TABLE (serv_table), mailcmd_label, 0, 1, 6, 7,
1027                           GTK_FILL, 0, 0, 0);
1028         gtk_misc_set_alignment (GTK_MISC (mailcmd_label), 1, 0.5);
1029 /*      gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0); */
1030
1031         uid_label = gtk_label_new (_("User ID"));
1032         gtk_widget_show (uid_label);
1033         gtk_table_attach (GTK_TABLE (serv_table), uid_label, 0, 1, 7, 8,
1034                           GTK_FILL, 0, 0, 0);
1035         gtk_misc_set_alignment (GTK_MISC (uid_label), 1, 0.5);
1036
1037         pass_label = gtk_label_new (_("Password"));
1038         gtk_widget_show (pass_label);
1039         gtk_table_attach (GTK_TABLE (serv_table), pass_label, 2, 3, 7, 8,
1040                           0, 0, 0, 0);
1041
1042         SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, uid_label);
1043         SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, pass_label);
1044         SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, uid_entry);
1045         SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, pass_entry);
1046
1047         basic.acname_entry   = acname_entry;
1048         basic.default_chkbtn = default_chkbtn;
1049
1050         basic.name_entry = name_entry;
1051         basic.addr_entry = addr_entry;
1052         basic.org_entry  = org_entry;
1053
1054         basic.serv_frame       = serv_frame;
1055         basic.serv_table       = serv_table;
1056         basic.protocol_optmenu = optmenu;
1057         basic.recvserv_label   = recvserv_label;
1058         basic.recvserv_entry   = recvserv_entry;
1059         basic.smtpserv_label   = smtpserv_label;
1060         basic.smtpserv_entry   = smtpserv_entry;
1061         basic.nntpserv_label   = nntpserv_label;
1062         basic.nntpserv_entry   = nntpserv_entry;
1063         basic.nntpauth_chkbtn  = nntpauth_chkbtn;
1064         basic.localmbox_label   = localmbox_label;
1065         basic.localmbox_entry   = localmbox_entry;
1066         basic.mailcmd_chkbtn   = mailcmd_chkbtn;
1067         basic.mailcmd_label   = mailcmd_label;
1068         basic.mailcmd_entry   = mailcmd_entry;
1069         basic.uid_label        = uid_label;
1070         basic.pass_label       = pass_label;
1071         basic.uid_entry        = uid_entry;
1072         basic.pass_entry       = pass_entry;
1073 }
1074
1075 static void prefs_account_receive_create(void)
1076 {
1077         GtkWidget *vbox1;
1078         GtkWidget *frame1;
1079         GtkWidget *vbox2;
1080         GtkWidget *rmmail_chkbtn;
1081         GtkWidget *hbox_spc;
1082         GtkWidget *leave_time_label;
1083         GtkWidget *leave_time_entry;
1084         GtkWidget *getall_chkbtn;
1085         GtkWidget *hbox1;
1086         GtkWidget *size_limit_chkbtn;
1087         GtkWidget *size_limit_entry;
1088         GtkWidget *label;
1089         GtkWidget *filter_on_recv_chkbtn;
1090         GtkWidget *sd_filter_on_recv_chkbtn;
1091         GtkWidget *sd_rmmail_chkbtn;
1092         GtkWidget *vbox3;
1093         GtkWidget *inbox_label;
1094         GtkWidget *inbox_entry;
1095         GtkWidget *inbox_btn;
1096         GtkWidget *recvatgetall_chkbtn;
1097
1098         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1099         gtk_widget_show (vbox1);
1100         gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1101         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1102
1103         PACK_FRAME (vbox1, frame1, _("POP3"));
1104
1105         vbox2 = gtk_vbox_new (FALSE, 0);
1106         gtk_widget_show (vbox2);
1107         gtk_container_add (GTK_CONTAINER (frame1), vbox2);
1108         gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1109
1110         PACK_CHECK_BUTTON (vbox2, rmmail_chkbtn,
1111                            _("Remove messages on server when received"));
1112
1113         hbox1 = gtk_hbox_new (FALSE, 8);
1114         gtk_widget_show (hbox1);
1115         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
1116
1117         hbox_spc = gtk_hbox_new (FALSE, 0);
1118         gtk_widget_show (hbox_spc);
1119         gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
1120         gtk_widget_set_usize (hbox_spc, 12, -1);
1121
1122         leave_time_label = gtk_label_new (_("Remove after"));
1123         gtk_widget_show (leave_time_label);
1124         gtk_box_pack_start (GTK_BOX (hbox1), leave_time_label, FALSE, FALSE, 0);
1125
1126         leave_time_entry = gtk_entry_new ();
1127         gtk_widget_show (leave_time_entry);
1128         gtk_widget_set_usize (leave_time_entry, 64, -1);
1129         gtk_box_pack_start (GTK_BOX (hbox1), leave_time_entry, FALSE, FALSE, 0);
1130
1131         leave_time_label = gtk_label_new (_("days"));
1132         gtk_widget_show (leave_time_label);
1133         gtk_box_pack_start (GTK_BOX (hbox1), leave_time_label, FALSE, FALSE, 0);
1134
1135         SET_TOGGLE_SENSITIVITY (rmmail_chkbtn, hbox1);
1136
1137         PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1138
1139         hbox1 = gtk_hbox_new (FALSE, 8);
1140         gtk_widget_show (hbox1);
1141         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
1142
1143         hbox_spc = gtk_hbox_new (FALSE, 0);
1144         gtk_widget_show (hbox_spc);
1145         gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
1146         gtk_widget_set_usize (hbox_spc, 12, -1);
1147
1148         leave_time_label = gtk_label_new (_("(0 days: remove immediately)"));
1149         gtk_widget_show (leave_time_label);
1150         gtk_box_pack_start (GTK_BOX (hbox1), leave_time_label, FALSE, FALSE, 0);
1151
1152         SET_TOGGLE_SENSITIVITY (rmmail_chkbtn, hbox1);
1153
1154         PACK_CHECK_BUTTON (vbox2, getall_chkbtn,
1155                            _("Download all messages on server"));
1156         PACK_CHECK_BUTTON (vbox2, sd_filter_on_recv_chkbtn,
1157                            _("Use filtering rules with Selective Download"));
1158         PACK_CHECK_BUTTON (vbox2, sd_rmmail_chkbtn,
1159                            _("Remove mail after downloading with Selective Download"));
1160
1161         hbox1 = gtk_hbox_new (FALSE, 8);
1162         gtk_widget_show (hbox1);
1163         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
1164
1165         PACK_CHECK_BUTTON (hbox1, size_limit_chkbtn, _("Receive size limit"));
1166
1167         size_limit_entry = gtk_entry_new ();
1168         gtk_widget_show (size_limit_entry);
1169         gtk_widget_set_usize (size_limit_entry, 64, -1);
1170         gtk_box_pack_start (GTK_BOX (hbox1), size_limit_entry, FALSE, FALSE, 0);
1171
1172         label = gtk_label_new ("KB");
1173         gtk_widget_show (label);
1174         gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1175
1176         SET_TOGGLE_SENSITIVITY (size_limit_chkbtn, size_limit_entry);
1177
1178         PACK_CHECK_BUTTON (vbox2, filter_on_recv_chkbtn,
1179                            _("Filter messages on receiving"));
1180
1181         PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1182
1183         hbox1 = gtk_hbox_new (FALSE, 8);
1184         gtk_widget_show (hbox1);
1185         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
1186
1187         inbox_label = gtk_label_new (_("Default inbox"));
1188         gtk_widget_show (inbox_label);
1189         gtk_box_pack_start (GTK_BOX (hbox1), inbox_label, FALSE, FALSE, 0);
1190
1191         inbox_entry = gtk_entry_new ();
1192         gtk_widget_show (inbox_entry);
1193         gtk_widget_set_usize (inbox_entry, DEFAULT_ENTRY_WIDTH, -1);
1194         gtk_box_pack_start (GTK_BOX (hbox1), inbox_entry, TRUE, TRUE, 0);
1195
1196         inbox_btn = gtk_button_new_with_label (_(" Select... "));
1197         gtk_widget_show (inbox_btn);
1198         gtk_box_pack_start (GTK_BOX (hbox1), inbox_btn, FALSE, FALSE, 0);
1199         gtk_signal_connect (GTK_OBJECT (inbox_btn), "clicked",
1200                             GTK_SIGNAL_FUNC (prefs_account_select_folder_cb),
1201                             inbox_entry);
1202
1203         PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1204
1205         hbox1 = gtk_hbox_new (FALSE, 8);
1206         gtk_widget_show (hbox1);
1207         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
1208
1209         label = gtk_label_new
1210                 (_("(Unfiltered messages will be stored in this folder)"));
1211         gtk_widget_show (label);
1212         gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1213         gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1214
1215         PACK_CHECK_BUTTON
1216                 (vbox1, recvatgetall_chkbtn,
1217                  _("`Get all' checks for new messages on this account"));
1218
1219         receive.pop3_frame               = frame1;
1220         receive.rmmail_chkbtn            = rmmail_chkbtn;
1221         receive.leave_time_entry         = leave_time_entry;
1222         receive.getall_chkbtn            = getall_chkbtn;
1223         receive.size_limit_chkbtn        = size_limit_chkbtn;
1224         receive.size_limit_entry         = size_limit_entry;
1225         receive.filter_on_recv_chkbtn    = filter_on_recv_chkbtn;
1226         receive.sd_filter_on_recv_chkbtn = sd_filter_on_recv_chkbtn;
1227         receive.sd_rmmail_chkbtn         = sd_rmmail_chkbtn;
1228         receive.inbox_label              = inbox_label;
1229         receive.inbox_entry              = inbox_entry;
1230         receive.inbox_btn                = inbox_btn;
1231
1232         receive.recvatgetall_chkbtn      = recvatgetall_chkbtn;
1233 }
1234
1235 static void prefs_account_send_create(void)
1236 {
1237         GtkWidget *vbox1;
1238         GtkWidget *vbox2;
1239         GtkWidget *frame;
1240         GtkWidget *date_chkbtn;
1241         GtkWidget *msgid_chkbtn;
1242         GtkWidget *hbox;
1243         GtkWidget *customhdr_chkbtn;
1244         GtkWidget *customhdr_edit_btn;
1245         GtkWidget *vbox3;
1246         GtkWidget *smtp_auth_chkbtn;
1247         GtkWidget *optmenu;
1248         GtkWidget *optmenu_menu;
1249         GtkWidget *menuitem;
1250         GtkWidget *vbox4;
1251         GtkWidget *hbox_spc;
1252         GtkWidget *label;
1253         GtkWidget *smtp_uid_entry;
1254         GtkWidget *smtp_pass_entry;
1255         GtkWidget *vbox_spc;
1256         GtkWidget *pop_bfr_smtp_chkbtn;
1257         GtkWidget *pop_bfr_smtp_tm_entry;
1258
1259         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1260         gtk_widget_show (vbox1);
1261         gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1262         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1263
1264         PACK_FRAME (vbox1, frame, _("Header"));
1265
1266         vbox2 = gtk_vbox_new (FALSE, 0);
1267         gtk_widget_show (vbox2);
1268         gtk_container_add (GTK_CONTAINER (frame), vbox2);
1269         gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1270
1271         PACK_CHECK_BUTTON (vbox2, date_chkbtn, _("Add Date header field"));
1272         PACK_CHECK_BUTTON (vbox2, msgid_chkbtn, _("Generate Message-ID"));
1273
1274         hbox = gtk_hbox_new (FALSE, 12);
1275         gtk_widget_show (hbox);
1276         gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1277
1278         PACK_CHECK_BUTTON (hbox, customhdr_chkbtn,
1279                            _("Add user-defined header"));
1280
1281         customhdr_edit_btn = gtk_button_new_with_label (_(" Edit... "));
1282         gtk_widget_show (customhdr_edit_btn);
1283         gtk_box_pack_start (GTK_BOX (hbox), customhdr_edit_btn,
1284                             FALSE, FALSE, 0);
1285         gtk_signal_connect (GTK_OBJECT (customhdr_edit_btn), "clicked",
1286                             GTK_SIGNAL_FUNC (prefs_account_edit_custom_header),
1287                             NULL);
1288
1289         SET_TOGGLE_SENSITIVITY (customhdr_chkbtn, customhdr_edit_btn);
1290
1291         PACK_FRAME (vbox1, frame, _("Authentication"));
1292
1293         vbox3 = gtk_vbox_new (FALSE, 0);
1294         gtk_widget_show (vbox3);
1295         gtk_container_add (GTK_CONTAINER (frame), vbox3);
1296         gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
1297
1298         PACK_CHECK_BUTTON (vbox3, smtp_auth_chkbtn,
1299                 _("SMTP Authentication (SMTP AUTH)"));
1300
1301         vbox4 = gtk_vbox_new (FALSE, 0);
1302         gtk_widget_show (vbox4);
1303         gtk_box_pack_start (GTK_BOX (vbox3), vbox4, FALSE, FALSE, 0);
1304
1305         hbox = gtk_hbox_new (FALSE, 8);
1306         gtk_widget_show (hbox);
1307         gtk_box_pack_start (GTK_BOX (vbox4), hbox, FALSE, FALSE, 0);
1308
1309         hbox_spc = gtk_hbox_new (FALSE, 0);
1310         gtk_widget_show (hbox_spc);
1311         gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1312         gtk_widget_set_usize (hbox_spc, 12, -1);
1313
1314         label = gtk_label_new (_("Authentication method"));
1315         gtk_widget_show (label);
1316         gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1317
1318         optmenu = gtk_option_menu_new ();
1319         gtk_widget_show (optmenu);
1320         gtk_box_pack_start (GTK_BOX (hbox), optmenu, FALSE, FALSE, 0);
1321
1322         optmenu_menu = gtk_menu_new ();
1323
1324         MENUITEM_ADD (optmenu_menu, menuitem, _("Automatic"), 0);
1325         MENUITEM_ADD (optmenu_menu, menuitem, "LOGIN", SMTPAUTH_LOGIN);
1326         MENUITEM_ADD (optmenu_menu, menuitem, "CRAM-MD5", SMTPAUTH_CRAM_MD5);
1327         MENUITEM_ADD (optmenu_menu, menuitem, "DIGEST-MD5", SMTPAUTH_DIGEST_MD5);
1328         gtk_widget_set_sensitive (menuitem, FALSE);
1329
1330         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1331
1332         PACK_VSPACER(vbox4, vbox_spc, VSPACING_NARROW_2);
1333
1334         hbox = gtk_hbox_new (FALSE, 8);
1335         gtk_widget_show (hbox);
1336         gtk_box_pack_start (GTK_BOX (vbox4), hbox, FALSE, FALSE, 0);
1337
1338         hbox_spc = gtk_hbox_new (FALSE, 0);
1339         gtk_widget_show (hbox_spc);
1340         gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1341         gtk_widget_set_usize (hbox_spc, 12, -1);
1342
1343         label = gtk_label_new (_("User ID"));
1344         gtk_widget_show (label);
1345         gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1346
1347         smtp_uid_entry = gtk_entry_new ();
1348         gtk_widget_show (smtp_uid_entry);
1349         gtk_widget_set_usize (smtp_uid_entry, DEFAULT_ENTRY_WIDTH, -1);
1350         gtk_box_pack_start (GTK_BOX (hbox), smtp_uid_entry, TRUE, TRUE, 0);
1351
1352         label = gtk_label_new (_("Password"));
1353         gtk_widget_show (label);
1354         gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1355
1356         smtp_pass_entry = gtk_entry_new ();
1357         gtk_widget_show (smtp_pass_entry);
1358         gtk_widget_set_usize (smtp_pass_entry, DEFAULT_ENTRY_WIDTH, -1);
1359         gtk_box_pack_start (GTK_BOX (hbox), smtp_pass_entry, TRUE, TRUE, 0);
1360         gtk_entry_set_visibility (GTK_ENTRY (smtp_pass_entry), FALSE);
1361
1362         PACK_VSPACER(vbox4, vbox_spc, VSPACING_NARROW_2);
1363
1364         hbox = gtk_hbox_new (FALSE, 8);
1365         gtk_widget_show (hbox);
1366         gtk_box_pack_start (GTK_BOX (vbox4), hbox, FALSE, FALSE, 0);
1367
1368         hbox_spc = gtk_hbox_new (FALSE, 0);
1369         gtk_widget_show (hbox_spc);
1370         gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1371         gtk_widget_set_usize (hbox_spc, 12, -1);
1372
1373         label = gtk_label_new
1374                 (_("If you leave these entries empty, the same\n"
1375                    "user ID and password as receiving will be used."));
1376         gtk_widget_show (label);
1377         gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1378         gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1379
1380         SET_TOGGLE_SENSITIVITY (smtp_auth_chkbtn, vbox4);
1381
1382         PACK_CHECK_BUTTON (vbox3, pop_bfr_smtp_chkbtn,
1383                 _("Authenticate with POP3 before sending"));
1384         
1385         gtk_signal_connect (GTK_OBJECT (pop_bfr_smtp_chkbtn), "clicked",
1386                             GTK_SIGNAL_FUNC (pop_bfr_smtp_tm_set_sens),
1387                             NULL);
1388
1389         hbox = gtk_hbox_new (FALSE, 8);
1390         gtk_widget_show (hbox);
1391         gtk_box_pack_start (GTK_BOX (vbox3), hbox, FALSE, FALSE, 0);
1392
1393         hbox_spc = gtk_hbox_new (FALSE, 0);
1394         gtk_widget_show (hbox_spc);
1395         gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1396         gtk_widget_set_usize (hbox_spc, 12, -1);
1397
1398         label = gtk_label_new(_("POP authentication timeout: "));
1399         gtk_widget_show (label);
1400         gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1401
1402         pop_bfr_smtp_tm_entry = gtk_entry_new ();
1403         gtk_widget_show (pop_bfr_smtp_tm_entry);
1404         gtk_widget_set_usize (pop_bfr_smtp_tm_entry, 30, -1);
1405         gtk_box_pack_start (GTK_BOX (hbox), pop_bfr_smtp_tm_entry, FALSE, FALSE, 0);
1406
1407         label = gtk_label_new(_("minutes"));
1408         gtk_widget_show (label);
1409         gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1410
1411
1412         
1413         p_send.date_chkbtn      = date_chkbtn;
1414         p_send.msgid_chkbtn     = msgid_chkbtn;
1415         p_send.customhdr_chkbtn = customhdr_chkbtn;
1416
1417         p_send.smtp_auth_chkbtn       = smtp_auth_chkbtn;
1418         p_send.smtp_auth_type_optmenu = optmenu;
1419         p_send.smtp_uid_entry         = smtp_uid_entry;
1420         p_send.smtp_pass_entry        = smtp_pass_entry;
1421         p_send.pop_bfr_smtp_chkbtn    = pop_bfr_smtp_chkbtn;
1422         p_send.pop_bfr_smtp_tm_entry  = pop_bfr_smtp_tm_entry;
1423 }
1424
1425 static void prefs_account_compose_create(void)
1426 {
1427         GtkWidget *vbox1;
1428         GtkWidget *hbox;
1429         GtkWidget *label;
1430         GtkWidget *sigpath_entry;
1431         GtkWidget *frame;
1432         GtkWidget *table;
1433         GtkWidget *autocc_chkbtn;
1434         GtkWidget *autocc_entry;
1435         GtkWidget *autobcc_chkbtn;
1436         GtkWidget *autobcc_entry;
1437         GtkWidget *autoreplyto_chkbtn;
1438         GtkWidget *autoreplyto_entry;
1439
1440         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1441         gtk_widget_show (vbox1);
1442         gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1443         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1444
1445         hbox = gtk_hbox_new (FALSE, 8);
1446         gtk_widget_show (hbox);
1447         gtk_box_pack_start (GTK_BOX (vbox1), hbox, FALSE, FALSE, 0);
1448
1449         label = gtk_label_new (_("Signature file"));
1450         gtk_widget_show (label);
1451         gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1452
1453         sigpath_entry = gtk_entry_new ();
1454         gtk_widget_show (sigpath_entry);
1455         gtk_box_pack_start (GTK_BOX (hbox), sigpath_entry, TRUE, TRUE, 0);
1456
1457         PACK_FRAME (vbox1, frame, _("Automatically set the following addresses"));
1458
1459         table =  gtk_table_new (3, 2, FALSE);
1460         gtk_widget_show (table);
1461         gtk_container_add (GTK_CONTAINER (frame), table);
1462         gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1463         gtk_table_set_row_spacings (GTK_TABLE (table), VSPACING_NARROW_2);
1464         gtk_table_set_col_spacings (GTK_TABLE (table), 8);
1465
1466         autocc_chkbtn = gtk_check_button_new_with_label (_("Cc"));
1467         gtk_widget_show (autocc_chkbtn);
1468         gtk_table_attach (GTK_TABLE (table), autocc_chkbtn, 0, 1, 0, 1,
1469                           GTK_FILL, 0, 0, 0);
1470
1471         autocc_entry = gtk_entry_new ();
1472         gtk_widget_show (autocc_entry);
1473         gtk_table_attach (GTK_TABLE (table), autocc_entry, 1, 2, 0, 1,
1474                           GTK_EXPAND | GTK_SHRINK | GTK_FILL,
1475                           GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
1476
1477         SET_TOGGLE_SENSITIVITY (autocc_chkbtn, autocc_entry);
1478
1479         autobcc_chkbtn = gtk_check_button_new_with_label (_("Bcc"));
1480         gtk_widget_show (autobcc_chkbtn);
1481         gtk_table_attach (GTK_TABLE (table), autobcc_chkbtn, 0, 1, 1, 2,
1482                           GTK_FILL, 0, 0, 0);
1483
1484         autobcc_entry = gtk_entry_new ();
1485         gtk_widget_show (autobcc_entry);
1486         gtk_table_attach (GTK_TABLE (table), autobcc_entry, 1, 2, 1, 2,
1487                           GTK_EXPAND | GTK_SHRINK | GTK_FILL,
1488                           GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
1489
1490         SET_TOGGLE_SENSITIVITY (autobcc_chkbtn, autobcc_entry);
1491
1492         autoreplyto_chkbtn = gtk_check_button_new_with_label (_("Reply-To"));
1493         gtk_widget_show (autoreplyto_chkbtn);
1494         gtk_table_attach (GTK_TABLE (table), autoreplyto_chkbtn, 0, 1, 2, 3,
1495                           GTK_FILL, 0, 0, 0);
1496
1497         autoreplyto_entry = gtk_entry_new ();
1498         gtk_widget_show (autoreplyto_entry);
1499         gtk_table_attach (GTK_TABLE (table), autoreplyto_entry, 1, 2, 2, 3,
1500                           GTK_EXPAND | GTK_SHRINK | GTK_FILL,
1501                           GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
1502
1503         SET_TOGGLE_SENSITIVITY (autoreplyto_chkbtn, autoreplyto_entry);
1504
1505         compose.sigpath_entry = sigpath_entry;
1506
1507         compose.autocc_chkbtn      = autocc_chkbtn;
1508         compose.autocc_entry       = autocc_entry;
1509         compose.autobcc_chkbtn     = autobcc_chkbtn;
1510         compose.autobcc_entry      = autobcc_entry;
1511         compose.autoreplyto_chkbtn = autoreplyto_chkbtn;
1512         compose.autoreplyto_entry  = autoreplyto_entry;
1513 }
1514
1515 #if USE_GPGME
1516 static void prefs_account_privacy_create(void)
1517 {
1518         GtkWidget *vbox1;
1519         GtkWidget *frame1;
1520         GtkWidget *vbox2;
1521         GtkWidget *hbox1;
1522         GtkWidget *label;
1523         GtkWidget *default_encrypt_chkbtn;
1524         GtkWidget *default_sign_chkbtn;
1525         GtkWidget *ascii_armored_chkbtn;
1526         GtkWidget *clearsign_chkbtn;
1527         GtkWidget *defaultkey_radiobtn;
1528         GtkWidget *emailkey_radiobtn;
1529         GtkWidget *customkey_radiobtn;
1530         GtkWidget *customkey_entry;
1531
1532         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1533         gtk_widget_show (vbox1);
1534         gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1535         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1536
1537         vbox2 = gtk_vbox_new (FALSE, 0);
1538         gtk_widget_show (vbox2);
1539         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1540
1541         PACK_CHECK_BUTTON (vbox2, default_encrypt_chkbtn,
1542                            _("Encrypt message by default"));
1543         PACK_CHECK_BUTTON (vbox2, default_sign_chkbtn,
1544                            _("Sign message by default"));
1545         PACK_CHECK_BUTTON (vbox2, ascii_armored_chkbtn,
1546                            _("Use ASCII-armored format for encryption"));
1547         PACK_CHECK_BUTTON (vbox2, clearsign_chkbtn,
1548                            _("Use clear text signature"));
1549         gtk_signal_connect (GTK_OBJECT (ascii_armored_chkbtn), "toggled",
1550                             prefs_account_ascii_armored_warning, NULL);
1551
1552         PACK_FRAME (vbox1, frame1, _("Sign key"));
1553
1554         vbox2 = gtk_vbox_new (FALSE, 0);
1555         gtk_widget_show (vbox2);
1556         gtk_container_add (GTK_CONTAINER (frame1), vbox2);
1557         gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1558
1559         defaultkey_radiobtn = gtk_radio_button_new_with_label
1560                 (NULL, _("Use default GnuPG key"));
1561         gtk_widget_show (defaultkey_radiobtn);
1562         gtk_box_pack_start (GTK_BOX (vbox2), defaultkey_radiobtn,
1563                             FALSE, FALSE, 0);
1564         gtk_object_set_user_data (GTK_OBJECT (defaultkey_radiobtn),
1565                                   GINT_TO_POINTER (SIGN_KEY_DEFAULT));
1566
1567         emailkey_radiobtn = gtk_radio_button_new_with_label_from_widget
1568                 (GTK_RADIO_BUTTON (defaultkey_radiobtn),
1569                  _("Select key by your email address"));
1570         gtk_widget_show (emailkey_radiobtn);
1571         gtk_box_pack_start (GTK_BOX (vbox2), emailkey_radiobtn,
1572                             FALSE, FALSE, 0);
1573         gtk_object_set_user_data (GTK_OBJECT (emailkey_radiobtn),
1574                                   GINT_TO_POINTER (SIGN_KEY_BY_FROM));
1575
1576         customkey_radiobtn = gtk_radio_button_new_with_label_from_widget
1577                 (GTK_RADIO_BUTTON (defaultkey_radiobtn),
1578                  _("Specify key manually"));
1579         gtk_widget_show (customkey_radiobtn);
1580         gtk_box_pack_start (GTK_BOX (vbox2), customkey_radiobtn,
1581                             FALSE, FALSE, 0);
1582         gtk_object_set_user_data (GTK_OBJECT (customkey_radiobtn),
1583                                   GINT_TO_POINTER (SIGN_KEY_CUSTOM));
1584
1585         hbox1 = gtk_hbox_new (FALSE, 8);
1586         gtk_widget_show (hbox1);
1587         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
1588
1589         label = gtk_label_new ("");
1590         gtk_widget_show (label);
1591         gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1592         gtk_widget_set_usize (label, 16, -1);
1593
1594         label = gtk_label_new (_("User or key ID:"));
1595         gtk_widget_show (label);
1596         gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1597
1598         customkey_entry = gtk_entry_new ();
1599         gtk_widget_show (customkey_entry);
1600         gtk_box_pack_start (GTK_BOX (hbox1), customkey_entry,
1601                             TRUE, TRUE, 0);
1602
1603         SET_TOGGLE_SENSITIVITY (customkey_radiobtn, customkey_entry);
1604
1605         privacy.default_encrypt_chkbtn = default_encrypt_chkbtn;
1606         privacy.default_sign_chkbtn    = default_sign_chkbtn;
1607         privacy.ascii_armored_chkbtn   = ascii_armored_chkbtn;
1608         privacy.clearsign_chkbtn       = clearsign_chkbtn;
1609         privacy.defaultkey_radiobtn    = defaultkey_radiobtn;
1610         privacy.emailkey_radiobtn      = emailkey_radiobtn;
1611         privacy.customkey_radiobtn     = customkey_radiobtn;
1612         privacy.customkey_entry        = customkey_entry;
1613 }
1614 #endif /* USE_GPGME */
1615
1616 #if USE_SSL
1617
1618 #define CREATE_RADIO_BUTTON(box, btn, btn_p, label, data)               \
1619 {                                                                       \
1620         btn = gtk_radio_button_new_with_label_from_widget               \
1621                 (GTK_RADIO_BUTTON (btn_p), label);                      \
1622         gtk_widget_show (btn);                                          \
1623         gtk_box_pack_start (GTK_BOX (box), btn, FALSE, FALSE, 0);       \
1624         gtk_object_set_user_data (GTK_OBJECT (btn),                     \
1625                                   GINT_TO_POINTER (data));              \
1626 }
1627
1628 #define CREATE_RADIO_BUTTONS(box,                                       \
1629                              btn1, btn1_label, btn1_data,               \
1630                              btn2, btn2_label, btn2_data,               \
1631                              btn3, btn3_label, btn3_data)               \
1632 {                                                                       \
1633         btn1 = gtk_radio_button_new_with_label(NULL, btn1_label);       \
1634         gtk_widget_show (btn1);                                         \
1635         gtk_box_pack_start (GTK_BOX (box), btn1, FALSE, FALSE, 0);      \
1636         gtk_object_set_user_data (GTK_OBJECT (btn1),                    \
1637                                   GINT_TO_POINTER (btn1_data));         \
1638                                                                         \
1639         CREATE_RADIO_BUTTON(box, btn2, btn1, btn2_label, btn2_data);    \
1640         CREATE_RADIO_BUTTON(box, btn3, btn1, btn3_label, btn3_data);    \
1641 }
1642
1643 static void prefs_account_ssl_create(void)
1644 {
1645         GtkWidget *vbox1;
1646
1647         GtkWidget *pop_frame;
1648         GtkWidget *vbox2;
1649         GtkWidget *pop_nossl_radiobtn;
1650         GtkWidget *pop_ssltunnel_radiobtn;
1651         GtkWidget *pop_starttls_radiobtn;
1652
1653         GtkWidget *imap_frame;
1654         GtkWidget *vbox3;
1655         GtkWidget *imap_nossl_radiobtn;
1656         GtkWidget *imap_ssltunnel_radiobtn;
1657         GtkWidget *imap_starttls_radiobtn;
1658
1659         GtkWidget *nntp_frame;
1660         GtkWidget *vbox4;
1661         GtkWidget *nntp_nossl_radiobtn;
1662         GtkWidget *nntp_ssltunnel_radiobtn;
1663
1664         GtkWidget *send_frame;
1665         GtkWidget *vbox5;
1666         GtkWidget *smtp_nossl_radiobtn;
1667         GtkWidget *smtp_ssltunnel_radiobtn;
1668         GtkWidget *smtp_starttls_radiobtn;
1669
1670         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1671         gtk_widget_show (vbox1);
1672         gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1673         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1674
1675         PACK_FRAME (vbox1, pop_frame, _("POP3"));
1676         vbox2 = gtk_vbox_new (FALSE, 0);
1677         gtk_widget_show (vbox2);
1678         gtk_container_add (GTK_CONTAINER (pop_frame), vbox2);
1679         gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1680
1681         CREATE_RADIO_BUTTONS(vbox2,
1682                              pop_nossl_radiobtn,
1683                              _("Don't use SSL"),
1684                              SSL_NONE,
1685                              pop_ssltunnel_radiobtn,
1686                              _("Use SSL for POP3 connection"),
1687                              SSL_TUNNEL,
1688                              pop_starttls_radiobtn,
1689                              _("Use STARTTLS command to start SSL session"),
1690                              SSL_STARTTLS);
1691
1692         PACK_FRAME (vbox1, imap_frame, _("IMAP4"));
1693         vbox3 = gtk_vbox_new (FALSE, 0);
1694         gtk_widget_show (vbox3);
1695         gtk_container_add (GTK_CONTAINER (imap_frame), vbox3);
1696         gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
1697
1698         CREATE_RADIO_BUTTONS(vbox3,
1699                              imap_nossl_radiobtn,
1700                              _("Don't use SSL"),
1701                              SSL_NONE,
1702                              imap_ssltunnel_radiobtn,
1703                              _("Use SSL for IMAP4 connection"),
1704                              SSL_TUNNEL,
1705                              imap_starttls_radiobtn,
1706                              _("Use STARTTLS command to start SSL session"),
1707                              SSL_STARTTLS);
1708
1709         PACK_FRAME (vbox1, nntp_frame, _("NNTP"));
1710         vbox4 = gtk_vbox_new (FALSE, 0);
1711         gtk_widget_show (vbox4);
1712         gtk_container_add (GTK_CONTAINER (nntp_frame), vbox4);
1713         gtk_container_set_border_width (GTK_CONTAINER (vbox4), 8);
1714
1715         nntp_nossl_radiobtn =
1716                 gtk_radio_button_new_with_label (NULL, _("Don't use SSL"));
1717         gtk_widget_show (nntp_nossl_radiobtn);
1718         gtk_box_pack_start (GTK_BOX (vbox4), nntp_nossl_radiobtn,
1719                             FALSE, FALSE, 0);
1720         gtk_object_set_user_data (GTK_OBJECT (nntp_nossl_radiobtn),
1721                                   GINT_TO_POINTER (SSL_NONE));
1722
1723         CREATE_RADIO_BUTTON(vbox4, nntp_ssltunnel_radiobtn, nntp_nossl_radiobtn,
1724                             _("Use SSL for NNTP connection"), SSL_TUNNEL);
1725
1726         PACK_FRAME (vbox1, send_frame, _("Send (SMTP)"));
1727         vbox5 = gtk_vbox_new (FALSE, 0);
1728         gtk_widget_show (vbox5);
1729         gtk_container_add (GTK_CONTAINER (send_frame), vbox5);
1730         gtk_container_set_border_width (GTK_CONTAINER (vbox5), 8);
1731
1732         CREATE_RADIO_BUTTONS(vbox5,
1733                              smtp_nossl_radiobtn,
1734                              _("Don't use SSL"),
1735                              SSL_NONE,
1736                              smtp_ssltunnel_radiobtn,
1737                              _("Use SSL for SMTP connection"),
1738                              SSL_TUNNEL,
1739                              smtp_starttls_radiobtn,
1740                              _("Use STARTTLS command to start SSL session"),
1741                              SSL_STARTTLS);
1742
1743         ssl.pop_frame               = pop_frame;
1744         ssl.pop_nossl_radiobtn      = pop_nossl_radiobtn;
1745         ssl.pop_ssltunnel_radiobtn  = pop_ssltunnel_radiobtn;
1746         ssl.pop_starttls_radiobtn   = pop_starttls_radiobtn;
1747
1748         ssl.imap_frame              = imap_frame;
1749         ssl.imap_nossl_radiobtn     = imap_nossl_radiobtn;
1750         ssl.imap_ssltunnel_radiobtn = imap_ssltunnel_radiobtn;
1751         ssl.imap_starttls_radiobtn  = imap_starttls_radiobtn;
1752
1753         ssl.nntp_frame              = nntp_frame;
1754         ssl.nntp_nossl_radiobtn     = nntp_nossl_radiobtn;
1755         ssl.nntp_ssltunnel_radiobtn = nntp_ssltunnel_radiobtn;
1756
1757         ssl.send_frame              = send_frame;
1758         ssl.smtp_nossl_radiobtn     = smtp_nossl_radiobtn;
1759         ssl.smtp_ssltunnel_radiobtn = smtp_ssltunnel_radiobtn;
1760         ssl.smtp_starttls_radiobtn  = smtp_starttls_radiobtn;
1761 }
1762
1763 #undef CREATE_RADIO_BUTTONS
1764 #undef CREATE_RADIO_BUTTON
1765 #endif /* USE_SSL */
1766
1767 static void crosspost_color_toggled(void)
1768 {
1769         gboolean is_active;
1770
1771         is_active = gtk_toggle_button_get_active
1772                 (GTK_TOGGLE_BUTTON(advanced.crosspost_chkbtn));
1773         gtk_widget_set_sensitive(advanced.crosspost_colormenu, is_active);
1774 }
1775
1776 static void prefs_account_crosspost_set_data_from_colormenu(PrefParam *pparam)
1777 {
1778         GtkWidget *menu;
1779         GtkWidget *menuitem;
1780
1781         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(advanced.crosspost_colormenu));
1782         menuitem = gtk_menu_get_active(GTK_MENU(menu));
1783         *((gint *)pparam->data) = GPOINTER_TO_INT
1784                 (gtk_object_get_data(GTK_OBJECT(menuitem), "color"));
1785 }
1786
1787 static void prefs_account_crosspost_set_colormenu(PrefParam *pparam)
1788 {
1789         gint colorlabel = *((gint *)pparam->data);
1790         GtkOptionMenu *colormenu = GTK_OPTION_MENU(*pparam->widget);
1791         GtkWidget *menu;
1792         GtkWidget *menuitem;
1793
1794         gtk_option_menu_set_history(colormenu, colorlabel);
1795         menu = gtk_option_menu_get_menu(colormenu);
1796         menuitem = gtk_menu_get_active(GTK_MENU(menu));
1797         gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
1798 }
1799
1800
1801 static void prefs_account_advanced_create(void)
1802 {
1803         GtkWidget *vbox1;
1804         GtkWidget *vbox2;
1805         GtkWidget *hbox1;
1806         GtkWidget *checkbtn_smtpport;
1807         GtkWidget *entry_smtpport;
1808         GtkWidget *hbox_popport;
1809         GtkWidget *checkbtn_popport;
1810         GtkWidget *entry_popport;
1811         GtkWidget *hbox_imapport;
1812         GtkWidget *checkbtn_imapport;
1813         GtkWidget *entry_imapport;
1814         GtkWidget *hbox_nntpport;
1815         GtkWidget *checkbtn_nntpport;
1816         GtkWidget *entry_nntpport;
1817         GtkWidget *checkbtn_domain;
1818         GtkWidget *entry_domain;
1819         GtkWidget *checkbtn_tunnelcmd;
1820         GtkWidget *entry_tunnelcmd;
1821         GtkWidget *checkbtn_crosspost;
1822         GtkWidget *colormenu_crosspost;
1823         GtkWidget *menu;
1824         GtkWidget *imap_frame;
1825         GtkWidget *imapdir_label;
1826         GtkWidget *imapdir_entry;
1827         GtkWidget *folder_frame;
1828         GtkWidget *vbox3;
1829         GtkWidget *table;
1830         GtkWidget *sent_folder_chkbtn;
1831         GtkWidget *sent_folder_entry;
1832         GtkWidget *draft_folder_chkbtn;
1833         GtkWidget *draft_folder_entry;
1834         GtkWidget *trash_folder_chkbtn;
1835         GtkWidget *trash_folder_entry;
1836
1837 #define PACK_HBOX(hbox) \
1838         { \
1839         hbox = gtk_hbox_new (FALSE, 8); \
1840         gtk_widget_show (hbox); \
1841         gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); \
1842         }
1843
1844 #define PACK_PORT_ENTRY(box, entry) \
1845         { \
1846         entry = gtk_entry_new_with_max_length (5); \
1847         gtk_widget_show (entry); \
1848         gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 0); \
1849         gtk_widget_set_usize (entry, 64, -1); \
1850         }
1851
1852         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1853         gtk_widget_show (vbox1);
1854         gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1855         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1856
1857         vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW_2);
1858         gtk_widget_show (vbox2);
1859         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1860
1861         PACK_HBOX (hbox1);
1862         PACK_CHECK_BUTTON (hbox1, checkbtn_smtpport, _("Specify SMTP port"));
1863         PACK_PORT_ENTRY (hbox1, entry_smtpport);
1864         SET_TOGGLE_SENSITIVITY (checkbtn_smtpport, entry_smtpport);
1865
1866         PACK_HBOX (hbox_popport);
1867         PACK_CHECK_BUTTON (hbox_popport, checkbtn_popport,
1868                            _("Specify POP3 port"));
1869         PACK_PORT_ENTRY (hbox_popport, entry_popport);
1870         SET_TOGGLE_SENSITIVITY (checkbtn_popport, entry_popport);
1871
1872         PACK_HBOX (hbox_imapport);
1873         PACK_CHECK_BUTTON (hbox_imapport, checkbtn_imapport,
1874                            _("Specify IMAP4 port"));
1875         PACK_PORT_ENTRY (hbox_imapport, entry_imapport);
1876         SET_TOGGLE_SENSITIVITY (checkbtn_imapport, entry_imapport);
1877
1878         PACK_HBOX (hbox_nntpport);
1879         PACK_CHECK_BUTTON (hbox_nntpport, checkbtn_nntpport,
1880                            _("Specify NNTP port"));
1881         PACK_PORT_ENTRY (hbox_nntpport, entry_nntpport);
1882         SET_TOGGLE_SENSITIVITY (checkbtn_nntpport, entry_nntpport);
1883
1884         PACK_HBOX (hbox1);
1885         PACK_CHECK_BUTTON (hbox1, checkbtn_domain, _("Specify domain name"));
1886
1887         entry_domain = gtk_entry_new ();
1888         gtk_widget_show (entry_domain);
1889         gtk_box_pack_start (GTK_BOX (hbox1), entry_domain, TRUE, TRUE, 0);
1890         SET_TOGGLE_SENSITIVITY (checkbtn_domain, entry_domain);
1891
1892         
1893         PACK_HBOX (hbox1);
1894         PACK_CHECK_BUTTON (hbox1, checkbtn_tunnelcmd,
1895                            _("Tunnel command to open connection"));
1896         entry_tunnelcmd = gtk_entry_new ();
1897         gtk_widget_show (entry_tunnelcmd);
1898         gtk_box_pack_start (GTK_BOX (hbox1), entry_tunnelcmd, TRUE, TRUE, 0);
1899         SET_TOGGLE_SENSITIVITY (checkbtn_tunnelcmd, entry_tunnelcmd);
1900
1901         PACK_HBOX (hbox1);
1902         PACK_CHECK_BUTTON (hbox1, checkbtn_crosspost, 
1903                            _("Mark cross-posted messages as read and color:"));
1904         gtk_signal_connect (GTK_OBJECT (checkbtn_crosspost), "toggled",
1905                                         GTK_SIGNAL_FUNC (crosspost_color_toggled),
1906                                         NULL);
1907
1908         colormenu_crosspost = gtk_option_menu_new();
1909         gtk_widget_show (colormenu_crosspost);
1910         gtk_box_pack_start (GTK_BOX (hbox1), colormenu_crosspost, FALSE, FALSE, 0);
1911
1912         menu = colorlabel_create_color_menu();
1913         gtk_option_menu_set_menu (GTK_OPTION_MENU(colormenu_crosspost), menu);
1914         SET_TOGGLE_SENSITIVITY(checkbtn_crosspost, colormenu_crosspost);
1915
1916         PACK_FRAME (vbox1, imap_frame, _("IMAP4"));
1917
1918         vbox3 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1919         gtk_widget_show (vbox3);
1920         gtk_container_add (GTK_CONTAINER (imap_frame), vbox3);
1921         gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
1922
1923         hbox1 = gtk_hbox_new (FALSE, 8);
1924         gtk_widget_show (hbox1);
1925         gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1926
1927         imapdir_label = gtk_label_new (_("IMAP server directory"));
1928         gtk_widget_show (imapdir_label);
1929         gtk_box_pack_start (GTK_BOX (hbox1), imapdir_label, FALSE, FALSE, 0);
1930
1931         imapdir_entry = gtk_entry_new();
1932         gtk_widget_show (imapdir_entry);
1933         gtk_box_pack_start (GTK_BOX (hbox1), imapdir_entry, TRUE, TRUE, 0);
1934
1935 #undef PACK_HBOX
1936 #undef PACK_PORT_ENTRY
1937
1938         /* special folder setting (maybe these options are redundant) */
1939
1940         PACK_FRAME (vbox1, folder_frame, _("Folder"));
1941
1942         vbox3 = gtk_vbox_new (FALSE, 0);
1943         gtk_widget_show (vbox3);
1944         gtk_container_add (GTK_CONTAINER (folder_frame), vbox3);
1945         gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
1946
1947         table = gtk_table_new (3, 3, FALSE);
1948         gtk_widget_show (table);
1949         gtk_container_add (GTK_CONTAINER (vbox3), table);
1950         gtk_table_set_row_spacings (GTK_TABLE (table), VSPACING_NARROW_2);
1951         gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1952
1953 #define SET_CHECK_BTN_AND_ENTRY(label, chkbtn, entry, n)                \
1954 {                                                                       \
1955         GtkWidget *button;                                              \
1956                                                                         \
1957         chkbtn = gtk_check_button_new_with_label (label);               \
1958         gtk_widget_show (chkbtn);                                       \
1959         gtk_table_attach (GTK_TABLE (table), chkbtn,                    \
1960                           0, 1, n, n + 1, GTK_FILL, 0, 0, 0);           \
1961                                                                         \
1962         entry = gtk_entry_new ();                                       \
1963         gtk_widget_show (entry);                                        \
1964         gtk_table_attach (GTK_TABLE (table), entry, 1, 2, n, n + 1,     \
1965                           GTK_EXPAND | GTK_SHRINK | GTK_FILL,           \
1966                           GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);    \
1967                                                                         \
1968         button = gtk_button_new_with_label (_(" ... "));                \
1969         gtk_widget_show (button);                                       \
1970         gtk_table_attach (GTK_TABLE (table), button,                    \
1971                           2, 3, n, n + 1, GTK_FILL, 0, 0, 0);           \
1972         gtk_signal_connect                                              \
1973                 (GTK_OBJECT (button), "clicked",                        \
1974                  GTK_SIGNAL_FUNC (prefs_account_select_folder_cb),      \
1975                  entry);                                                \
1976                                                                         \
1977         SET_TOGGLE_SENSITIVITY (chkbtn, entry);                         \
1978         SET_TOGGLE_SENSITIVITY (chkbtn, button);                        \
1979 }
1980
1981         SET_CHECK_BTN_AND_ENTRY(_("Put sent messages in"),
1982                                 sent_folder_chkbtn, sent_folder_entry, 0);
1983         SET_CHECK_BTN_AND_ENTRY(_("Put draft messages in"),
1984                                 draft_folder_chkbtn, draft_folder_entry, 1);
1985         SET_CHECK_BTN_AND_ENTRY(_("Put deleted messages in"),
1986                                 trash_folder_chkbtn, trash_folder_entry, 2);
1987
1988         advanced.smtpport_chkbtn        = checkbtn_smtpport;
1989         advanced.smtpport_entry         = entry_smtpport;
1990         advanced.popport_hbox           = hbox_popport;
1991         advanced.popport_chkbtn         = checkbtn_popport;
1992         advanced.popport_entry          = entry_popport;
1993         advanced.imapport_hbox          = hbox_imapport;
1994         advanced.imapport_chkbtn        = checkbtn_imapport;
1995         advanced.imapport_entry         = entry_imapport;
1996         advanced.nntpport_hbox          = hbox_nntpport;
1997         advanced.nntpport_chkbtn        = checkbtn_nntpport;
1998         advanced.nntpport_entry         = entry_nntpport;
1999         advanced.domain_chkbtn          = checkbtn_domain;
2000         advanced.domain_entry           = entry_domain;
2001         advanced.tunnelcmd_chkbtn       = checkbtn_tunnelcmd;
2002         advanced.tunnelcmd_entry        = entry_tunnelcmd;
2003         advanced.crosspost_chkbtn       = checkbtn_crosspost;
2004         advanced.crosspost_colormenu    = colormenu_crosspost;
2005
2006         advanced.imap_frame             = imap_frame;
2007         advanced.imapdir_entry          = imapdir_entry;
2008
2009         advanced.sent_folder_chkbtn  = sent_folder_chkbtn;
2010         advanced.sent_folder_entry   = sent_folder_entry;
2011         advanced.draft_folder_chkbtn = draft_folder_chkbtn;
2012         advanced.draft_folder_entry  = draft_folder_entry;
2013         advanced.trash_folder_chkbtn = trash_folder_chkbtn;
2014         advanced.trash_folder_entry  = trash_folder_entry;
2015 }
2016
2017 static gint prefs_account_deleted(GtkWidget *widget, GdkEventAny *event,
2018                                   gpointer data)
2019 {
2020         prefs_account_cancel();
2021         return TRUE;
2022 }
2023
2024 static void prefs_account_key_pressed(GtkWidget *widget, GdkEventKey *event,
2025                                       gpointer data)
2026 {
2027         if (event && event->keyval == GDK_Escape)
2028                 prefs_account_cancel();
2029 }
2030
2031 static void prefs_account_ok(void)
2032 {
2033         if (prefs_account_apply() == 0)
2034                 gtk_main_quit();
2035 }
2036
2037 static gint prefs_account_apply(void)
2038 {
2039         RecvProtocol protocol;
2040         GtkWidget *menu;
2041         GtkWidget *menuitem;
2042
2043         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(basic.protocol_optmenu));
2044         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2045         protocol = GPOINTER_TO_INT
2046                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
2047
2048         if (*gtk_entry_get_text(GTK_ENTRY(basic.acname_entry)) == '\0') {
2049                 alertpanel_error(_("Account name is not entered."));
2050                 return -1;
2051         }
2052         if (*gtk_entry_get_text(GTK_ENTRY(basic.addr_entry)) == '\0') {
2053                 alertpanel_error(_("Mail address is not entered."));
2054                 return -1;
2055         }
2056         if ((protocol == A_POP3 || protocol == A_APOP || (protocol == A_LOCAL && !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(basic.mailcmd_chkbtn)))) &&
2057            *gtk_entry_get_text(GTK_ENTRY(basic.smtpserv_entry)) == '\0') {
2058                 alertpanel_error(_("SMTP server is not entered."));
2059                 return -1;
2060         }
2061         if ((protocol == A_POP3 || protocol == A_APOP || protocol == A_IMAP4) &&
2062             *gtk_entry_get_text(GTK_ENTRY(basic.uid_entry)) == '\0') {
2063                 alertpanel_error(_("User ID is not entered."));
2064                 return -1;
2065         }
2066         if ((protocol == A_POP3 || protocol == A_APOP) &&
2067             *gtk_entry_get_text(GTK_ENTRY(basic.recvserv_entry)) == '\0') {
2068                 alertpanel_error(_("POP3 server is not entered."));
2069                 return -1;
2070         }
2071         if (protocol == A_IMAP4 &&
2072             *gtk_entry_get_text(GTK_ENTRY(basic.recvserv_entry)) == '\0') {
2073                 alertpanel_error(_("IMAP4 server is not entered."));
2074                 return -1;
2075         }
2076         if (protocol == A_NNTP &&
2077             *gtk_entry_get_text(GTK_ENTRY(basic.nntpserv_entry)) == '\0') {
2078                 alertpanel_error(_("NNTP server is not entered."));
2079                 return -1;
2080         }
2081
2082         if (protocol == A_LOCAL &&
2083             *gtk_entry_get_text(GTK_ENTRY(basic.localmbox_entry)) == '\0') {
2084                 alertpanel_error(_("local mailbox filename is not entered."));
2085                 return -1;
2086         }
2087
2088         if (protocol == A_LOCAL &&
2089             gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(basic.mailcmd_chkbtn)) && *gtk_entry_get_text(GTK_ENTRY(basic.mailcmd_entry)) == '\0') {
2090                 alertpanel_error(_("mail command is not entered."));
2091                 return -1;
2092         }
2093
2094         prefs_set_data_from_dialog(param);
2095         return 0;
2096 }
2097
2098 static void prefs_account_cancel(void)
2099 {
2100         cancelled = TRUE;
2101         gtk_main_quit();
2102 }
2103
2104 static void pop_bfr_smtp_tm_set_sens(GtkWidget *widget, gpointer data)
2105 {
2106         gtk_widget_set_sensitive(p_send.pop_bfr_smtp_tm_entry, 
2107                                  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(p_send.pop_bfr_smtp_chkbtn)));
2108 }
2109
2110 static void prefs_account_select_folder_cb(GtkWidget *widget, gpointer data)
2111 {
2112         FolderItem *item;
2113         gchar *id;
2114
2115         item = foldersel_folder_sel(NULL, FOLDER_SEL_COPY, NULL);
2116         if (item && item->path) {
2117                 id = folder_item_get_identifier(item);
2118                 if (id) {
2119                         gtk_entry_set_text(GTK_ENTRY(data), id);
2120                         g_free(id);
2121                 }
2122         }
2123 }
2124
2125 static void prefs_account_edit_custom_header(void)
2126 {
2127         prefs_custom_header_open(&tmp_ac_prefs);
2128 }
2129
2130 #if USE_GPGME || USE_SSL
2131 static void prefs_account_enum_set_data_from_radiobtn(PrefParam *pparam)
2132 {
2133         GtkRadioButton *radiobtn;
2134         GSList *group;
2135
2136         radiobtn = GTK_RADIO_BUTTON (*pparam->widget);
2137         group = gtk_radio_button_group (radiobtn);
2138         while (group != NULL) {
2139                 GtkToggleButton *btn = GTK_TOGGLE_BUTTON (group->data);
2140                 if (gtk_toggle_button_get_active (btn)) {
2141                         *((gint *)pparam->data) = GPOINTER_TO_INT
2142                                 (gtk_object_get_user_data (GTK_OBJECT (btn)));
2143                         break;
2144                 }
2145                 group = group->next;
2146         }
2147 }
2148
2149 static void prefs_account_enum_set_radiobtn(PrefParam *pparam)
2150 {
2151         GtkRadioButton *radiobtn;
2152         GSList *group;
2153         gpointer data;
2154
2155         data = GINT_TO_POINTER (*((gint *)pparam->data));
2156         radiobtn = GTK_RADIO_BUTTON (*pparam->widget);
2157         group = gtk_radio_button_group (radiobtn);
2158         while (group != NULL) {
2159                 GtkToggleButton *btn = GTK_TOGGLE_BUTTON (group->data);
2160                 gpointer data1 = gtk_object_get_user_data (GTK_OBJECT (btn));
2161                 if (data1 == data) {
2162                         gtk_toggle_button_set_active (btn, TRUE);
2163                         break;
2164                 }
2165                 group = group->next;
2166         }
2167 }
2168
2169 #endif /* USE_GPGME || USE_SSL */
2170
2171 #if USE_GPGME
2172 static void prefs_account_ascii_armored_warning(GtkWidget *widget)
2173 {
2174         if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) &&
2175             gtk_notebook_get_current_page(GTK_NOTEBOOK(dialog.notebook)) > 0)
2176                 alertpanel_warning
2177                         (_("It's not recommended to use the old style ASCII-armored\n"
2178                            "mode for encrypted messages. It doesn't comply with the\n"
2179                            "RFC 3156 - MIME Security with OpenPGP."));
2180 }
2181 #endif /* USE_GPGME */
2182
2183 static void prefs_account_protocol_set_data_from_optmenu(PrefParam *pparam)
2184 {
2185         GtkWidget *menu;
2186         GtkWidget *menuitem;
2187
2188         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2189         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2190         *((RecvProtocol *)pparam->data) = GPOINTER_TO_INT
2191                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
2192 }
2193
2194 static void prefs_account_protocol_set_optmenu(PrefParam *pparam)
2195 {
2196         RecvProtocol protocol;
2197         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2198         GtkWidget *menu;
2199         GtkWidget *menuitem;
2200         GList *children;
2201         gint list_order[] = {
2202                 0,  /* A_POP3  */
2203                 1,  /* A_APOP  */
2204                 -1, /* A_RPOP  */
2205                 2,  /* A_IMAP4 */
2206                 3,  /* A_NNTP  */
2207                 4   /* A_LOCAL */
2208         };
2209
2210         protocol = *((RecvProtocol *)pparam->data);
2211         if (protocol < 0 || protocol > A_LOCAL) return;
2212         if (list_order[protocol] < 0) return;
2213         gtk_option_menu_set_history(optmenu, list_order[protocol]);
2214
2215         menu = gtk_option_menu_get_menu(optmenu);
2216         menu_set_insensitive_all(GTK_MENU_SHELL(menu));
2217
2218 #define SET_NTH_SENSITIVE(proto) \
2219 { \
2220         menuitem = g_list_nth_data(children, list_order[proto]); \
2221         if (menuitem) \
2222                 gtk_widget_set_sensitive(menuitem, TRUE); \
2223 }
2224
2225         children = GTK_MENU_SHELL(menu)->children;
2226         SET_NTH_SENSITIVE(protocol);
2227         if (protocol == A_POP3) {
2228                 SET_NTH_SENSITIVE(A_APOP);
2229         } else if (protocol == A_APOP) {
2230                 SET_NTH_SENSITIVE(A_POP3);
2231         }
2232
2233 #undef SET_NTH_SENSITIVE
2234
2235         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2236         gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2237 }
2238
2239 static void prefs_account_smtp_auth_type_set_data_from_optmenu(PrefParam *pparam)
2240 {
2241         GtkWidget *menu;
2242         GtkWidget *menuitem;
2243
2244         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2245         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2246         *((RecvProtocol *)pparam->data) = GPOINTER_TO_INT
2247                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
2248 }
2249
2250 static void prefs_account_smtp_auth_type_set_optmenu(PrefParam *pparam)
2251 {
2252         SMTPAuthType type = *((SMTPAuthType *)pparam->data);
2253         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2254         GtkWidget *menu;
2255         GtkWidget *menuitem;
2256
2257         switch (type) {
2258         case SMTPAUTH_LOGIN:
2259                 gtk_option_menu_set_history(optmenu, 1);
2260                 break;
2261         case SMTPAUTH_CRAM_MD5:
2262                 gtk_option_menu_set_history(optmenu, 2);
2263                 break;
2264         case SMTPAUTH_DIGEST_MD5:
2265                 gtk_option_menu_set_history(optmenu, 3);
2266                 break;
2267         case 0:
2268         default:
2269                 gtk_option_menu_set_history(optmenu, 0);
2270         }
2271
2272         menu = gtk_option_menu_get_menu(optmenu);
2273         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2274         gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2275 }
2276
2277 static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
2278 {
2279         RecvProtocol protocol;
2280
2281         protocol = GPOINTER_TO_INT
2282                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
2283
2284         switch(protocol) {
2285         case A_NNTP:
2286                 gtk_widget_show(basic.nntpserv_label);
2287                 gtk_widget_show(basic.nntpserv_entry);
2288                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2289                                            0, VSPACING_NARROW);
2290                 gtk_widget_set_sensitive(basic.nntpauth_chkbtn, TRUE);
2291                 gtk_widget_show(basic.nntpauth_chkbtn);
2292                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2293                                            1, VSPACING_NARROW);
2294                 gtk_widget_hide(basic.recvserv_label);
2295                 gtk_widget_hide(basic.recvserv_entry);
2296                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2297                                            2, 0);
2298                 gtk_widget_show(basic.smtpserv_label);
2299                 gtk_widget_show(basic.smtpserv_entry);
2300                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2301                                            4, VSPACING_NARROW);
2302                 gtk_widget_hide(basic.localmbox_label);
2303                 gtk_widget_hide(basic.localmbox_entry);
2304                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2305                                            3, 0);
2306                 gtk_widget_hide(basic.mailcmd_label);
2307                 gtk_widget_hide(basic.mailcmd_entry);
2308                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2309                                            6, 0);
2310                 gtk_widget_hide(basic.mailcmd_chkbtn);
2311                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2312                                            5, 0);
2313                 gtk_widget_show(basic.uid_label);
2314                 gtk_widget_show(basic.pass_label);
2315                 gtk_widget_show(basic.uid_entry);
2316                 gtk_widget_show(basic.pass_entry);
2317                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2318                                            7, VSPACING_NARROW);
2319
2320                 gtk_widget_set_sensitive(basic.uid_label,  TRUE);
2321                 gtk_widget_set_sensitive(basic.pass_label, TRUE);
2322                 gtk_widget_set_sensitive(basic.uid_entry,  TRUE);
2323                 gtk_widget_set_sensitive(basic.pass_entry, TRUE);
2324
2325                 /* update userid/passwd sensitive state */
2326                 prefs_account_nntpauth_toggled
2327                         (GTK_TOGGLE_BUTTON(basic.nntpauth_chkbtn), NULL);
2328                 gtk_widget_set_sensitive(receive.pop3_frame, FALSE);
2329                 gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, TRUE);
2330
2331                 /* update pop_before_smtp sensitivity */
2332                 gtk_toggle_button_set_active
2333                         (GTK_TOGGLE_BUTTON(p_send.pop_bfr_smtp_chkbtn), FALSE);
2334                 gtk_widget_set_sensitive(p_send.pop_bfr_smtp_chkbtn, FALSE);
2335                 gtk_widget_set_sensitive(p_send.pop_bfr_smtp_tm_entry, FALSE);
2336                 
2337                 if (!tmp_ac_prefs.account_name) {
2338                         gtk_toggle_button_set_active
2339                                 (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
2340                                  FALSE);
2341                 }
2342
2343 #if USE_SSL
2344                 gtk_widget_hide(ssl.pop_frame);
2345                 gtk_widget_hide(ssl.imap_frame);
2346                 gtk_widget_show(ssl.nntp_frame);
2347                 gtk_widget_hide(ssl.send_frame);
2348 #endif
2349                 gtk_widget_hide(advanced.popport_hbox);
2350                 gtk_widget_hide(advanced.imapport_hbox);
2351                 gtk_widget_show(advanced.nntpport_hbox);
2352                 gtk_widget_show(advanced.crosspost_chkbtn);
2353                 gtk_widget_show(advanced.crosspost_colormenu);
2354                 gtk_widget_hide(advanced.imap_frame);
2355                 break;
2356         case A_LOCAL:
2357                 gtk_widget_hide(basic.nntpserv_label);
2358                 gtk_widget_hide(basic.nntpserv_entry);
2359                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2360                                            0, 0);
2361                 gtk_widget_set_sensitive(basic.nntpauth_chkbtn, FALSE);
2362                 gtk_widget_hide(basic.nntpauth_chkbtn);
2363                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2364                                            1, 0);
2365                 gtk_widget_hide(basic.recvserv_label);
2366                 gtk_widget_hide(basic.recvserv_entry);
2367                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2368                                            2, 0);
2369                 gtk_widget_show(basic.smtpserv_label);
2370                 gtk_widget_show(basic.smtpserv_entry);
2371                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2372                                            4, VSPACING_NARROW);
2373                 gtk_widget_show(basic.localmbox_label);
2374                 gtk_widget_show(basic.localmbox_entry);
2375                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2376                                            3, VSPACING_NARROW);
2377                 gtk_widget_show(basic.mailcmd_label);
2378                 gtk_widget_show(basic.mailcmd_entry);
2379                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2380                                            6, VSPACING_NARROW);
2381                 gtk_widget_show(basic.mailcmd_chkbtn);
2382                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2383                                            5, VSPACING_NARROW);
2384                 gtk_widget_hide(basic.uid_label);
2385                 gtk_widget_hide(basic.pass_label);
2386                 gtk_widget_hide(basic.uid_entry);
2387                 gtk_widget_hide(basic.pass_entry);
2388                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2389                                            7, 0);
2390
2391                 gtk_widget_set_sensitive(basic.uid_label,  TRUE);
2392                 gtk_widget_set_sensitive(basic.pass_label, TRUE);
2393                 gtk_widget_set_sensitive(basic.uid_entry,  TRUE);
2394                 gtk_widget_set_sensitive(basic.pass_entry, TRUE);
2395                 gtk_widget_set_sensitive(receive.pop3_frame, FALSE);
2396                 gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, FALSE);
2397                 prefs_account_mailcmd_toggled
2398                         (GTK_TOGGLE_BUTTON(basic.mailcmd_chkbtn), NULL);
2399
2400                 /* update pop_before_smtp sensitivity */
2401                 gtk_toggle_button_set_active
2402                         (GTK_TOGGLE_BUTTON(p_send.pop_bfr_smtp_chkbtn), FALSE);
2403                 gtk_widget_set_sensitive(p_send.pop_bfr_smtp_chkbtn, FALSE);
2404                 gtk_widget_set_sensitive(p_send.pop_bfr_smtp_tm_entry, FALSE);
2405
2406                 if (!tmp_ac_prefs.account_name) {
2407                         gtk_toggle_button_set_active
2408                                 (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
2409                                  TRUE);
2410                 }
2411
2412 #if USE_SSL
2413                 gtk_widget_hide(ssl.pop_frame);
2414                 gtk_widget_hide(ssl.imap_frame);
2415                 gtk_widget_hide(ssl.nntp_frame);
2416                 gtk_widget_show(ssl.send_frame);
2417 #endif
2418                 gtk_widget_hide(advanced.popport_hbox);
2419                 gtk_widget_hide(advanced.imapport_hbox);
2420                 gtk_widget_hide(advanced.nntpport_hbox);
2421                 gtk_widget_hide(advanced.crosspost_chkbtn);
2422                 gtk_widget_hide(advanced.crosspost_colormenu);
2423                 gtk_widget_hide(advanced.imap_frame);
2424                 break;
2425         case A_IMAP4:
2426                 gtk_widget_hide(basic.nntpserv_label);
2427                 gtk_widget_hide(basic.nntpserv_entry);
2428                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2429                                            0, 0);
2430                 gtk_widget_set_sensitive(basic.nntpauth_chkbtn, FALSE);
2431                 gtk_widget_hide(basic.nntpauth_chkbtn);
2432                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2433                                            1, 0);
2434                 gtk_widget_set_sensitive(basic.recvserv_label, TRUE);
2435                 gtk_widget_set_sensitive(basic.recvserv_entry, TRUE);
2436                 gtk_widget_show(basic.recvserv_label);
2437                 gtk_widget_show(basic.recvserv_entry);
2438                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2439                                            2, VSPACING_NARROW);
2440                 gtk_widget_show(basic.smtpserv_label);
2441                 gtk_widget_show(basic.smtpserv_entry);
2442                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2443                                            4, VSPACING_NARROW);
2444                 gtk_widget_hide(basic.localmbox_label);
2445                 gtk_widget_hide(basic.localmbox_entry);
2446                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2447                                            3, 0);
2448                 gtk_widget_hide(basic.mailcmd_label);
2449                 gtk_widget_hide(basic.mailcmd_entry);
2450                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2451                                            6, 0);
2452                 gtk_widget_hide(basic.mailcmd_chkbtn);
2453                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2454                                            5, 0);
2455                 gtk_widget_show(basic.uid_label);
2456                 gtk_widget_show(basic.pass_label);
2457                 gtk_widget_show(basic.uid_entry);
2458                 gtk_widget_show(basic.pass_entry);
2459                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2460                                            7, VSPACING_NARROW);
2461
2462                 gtk_widget_set_sensitive(basic.uid_label,  TRUE);
2463                 gtk_widget_set_sensitive(basic.pass_label, TRUE);
2464                 gtk_widget_set_sensitive(basic.uid_entry,  TRUE);
2465                 gtk_widget_set_sensitive(basic.pass_entry, TRUE);
2466                 gtk_widget_set_sensitive(receive.pop3_frame, FALSE);
2467                 gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, TRUE);
2468                 gtk_widget_set_sensitive(basic.smtpserv_entry, TRUE);
2469                 gtk_widget_set_sensitive(basic.smtpserv_label, TRUE);
2470
2471                 /* update pop_before_smtp sensitivity */
2472                 gtk_toggle_button_set_active
2473                         (GTK_TOGGLE_BUTTON(p_send.pop_bfr_smtp_chkbtn), FALSE);
2474                 gtk_widget_set_sensitive(p_send.pop_bfr_smtp_chkbtn, FALSE);
2475                 gtk_widget_set_sensitive(p_send.pop_bfr_smtp_tm_entry, FALSE);
2476
2477                 if (!tmp_ac_prefs.account_name) {
2478                         gtk_toggle_button_set_active
2479                                 (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
2480                                  FALSE);
2481                 }
2482
2483 #if USE_SSL
2484                 gtk_widget_hide(ssl.pop_frame);
2485                 gtk_widget_show(ssl.imap_frame);
2486                 gtk_widget_hide(ssl.nntp_frame);
2487                 gtk_widget_show(ssl.send_frame);
2488 #endif
2489                 gtk_widget_hide(advanced.popport_hbox);
2490                 gtk_widget_show(advanced.imapport_hbox);
2491                 gtk_widget_hide(advanced.nntpport_hbox);
2492                 gtk_widget_hide(advanced.crosspost_chkbtn);
2493                 gtk_widget_hide(advanced.crosspost_colormenu);
2494                 gtk_widget_show(advanced.imap_frame);
2495                 break;
2496         case A_POP3:
2497         default:
2498                 gtk_widget_hide(basic.nntpserv_label);
2499                 gtk_widget_hide(basic.nntpserv_entry);
2500                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2501                                            0, 0);
2502                 gtk_widget_set_sensitive(basic.nntpauth_chkbtn, FALSE);
2503                 gtk_widget_hide(basic.nntpauth_chkbtn);
2504                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2505                                            1, 0);
2506                 gtk_widget_set_sensitive(basic.recvserv_label, TRUE);
2507                 gtk_widget_set_sensitive(basic.recvserv_entry, TRUE);
2508                 gtk_widget_show(basic.recvserv_label);
2509                 gtk_widget_show(basic.recvserv_entry);
2510                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2511                                            2, VSPACING_NARROW);
2512                 gtk_widget_show(basic.smtpserv_label);
2513                 gtk_widget_show(basic.smtpserv_entry);
2514                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2515                                            4, VSPACING_NARROW);
2516                 gtk_widget_hide(basic.localmbox_label);
2517                 gtk_widget_hide(basic.localmbox_entry);
2518                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2519                                            3, 0);
2520                 gtk_widget_hide(basic.mailcmd_label);
2521                 gtk_widget_hide(basic.mailcmd_entry);
2522                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2523                                            6, 0);
2524                 gtk_widget_hide(basic.mailcmd_chkbtn);
2525                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2526                                            5, 0);
2527                 gtk_widget_show(basic.uid_label);
2528                 gtk_widget_show(basic.pass_label);
2529                 gtk_widget_show(basic.uid_entry);
2530                 gtk_widget_show(basic.pass_entry);
2531                 gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
2532                                            7, VSPACING_NARROW);
2533
2534                 gtk_widget_set_sensitive(basic.uid_label,  TRUE);
2535                 gtk_widget_set_sensitive(basic.pass_label, TRUE);
2536                 gtk_widget_set_sensitive(basic.uid_entry,  TRUE);
2537                 gtk_widget_set_sensitive(basic.pass_entry, TRUE);
2538                 gtk_widget_set_sensitive(receive.pop3_frame, TRUE);
2539                 gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, TRUE);
2540                 gtk_widget_set_sensitive(basic.smtpserv_entry, TRUE);
2541                 gtk_widget_set_sensitive(basic.smtpserv_label, TRUE);
2542
2543                 /* update pop_before_smtp sensitivity */
2544                 gtk_widget_set_sensitive(p_send.pop_bfr_smtp_chkbtn, TRUE);
2545                 pop_bfr_smtp_tm_set_sens(NULL, NULL);
2546                 
2547                 if (!tmp_ac_prefs.account_name) {
2548                         gtk_toggle_button_set_active
2549                                 (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
2550                                  TRUE);
2551                 }
2552
2553 #if USE_SSL
2554                 gtk_widget_show(ssl.pop_frame);
2555                 gtk_widget_hide(ssl.imap_frame);
2556                 gtk_widget_hide(ssl.nntp_frame);
2557                 gtk_widget_show(ssl.send_frame);
2558 #endif
2559                 gtk_widget_show(advanced.popport_hbox);
2560                 gtk_widget_hide(advanced.imapport_hbox);
2561                 gtk_widget_hide(advanced.nntpport_hbox);
2562                 gtk_widget_hide(advanced.crosspost_chkbtn);
2563                 gtk_widget_hide(advanced.crosspost_colormenu);
2564                 gtk_widget_hide(advanced.imap_frame);
2565                 break;
2566         }
2567
2568         gtk_widget_queue_resize(basic.serv_frame);
2569 }
2570
2571 static void prefs_account_nntpauth_toggled(GtkToggleButton *button,
2572                                            gpointer user_data)
2573 {
2574         gboolean auth;
2575
2576         if (!GTK_WIDGET_SENSITIVE (GTK_WIDGET (button)))
2577                 return;
2578         auth = gtk_toggle_button_get_active (button);
2579         gtk_widget_set_sensitive(basic.uid_label,  auth);
2580         gtk_widget_set_sensitive(basic.pass_label, auth);
2581         gtk_widget_set_sensitive(basic.uid_entry,  auth);
2582         gtk_widget_set_sensitive(basic.pass_entry, auth);
2583 }
2584
2585 static void prefs_account_mailcmd_toggled(GtkToggleButton *button,
2586                                           gpointer user_data)
2587 {
2588         gboolean use_mailcmd;
2589
2590         use_mailcmd = gtk_toggle_button_get_active (button);
2591
2592         gtk_widget_set_sensitive(basic.mailcmd_entry,  use_mailcmd);
2593         gtk_widget_set_sensitive(basic.mailcmd_label, use_mailcmd);
2594         gtk_widget_set_sensitive(basic.smtpserv_entry, !use_mailcmd);
2595         gtk_widget_set_sensitive(basic.smtpserv_label, !use_mailcmd);
2596         gtk_widget_set_sensitive(basic.uid_entry,  !use_mailcmd);
2597         gtk_widget_set_sensitive(basic.pass_entry, !use_mailcmd);
2598 }