Statistics
| Revision:

root / src / prefs_account_dialog.c @ 533

History | View | Annotate | Download (69.8 kB)

1
/*
2
 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3
 * Copyright (C) 1999-2005 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 <glib.h>
27
#include <glib/gi18n.h>
28
#include <gtk/gtk.h>
29
#include <gdk/gdkkeysyms.h>
30
#include <stdio.h>
31
#include <sys/types.h>
32
#include <sys/stat.h>
33
#include <string.h>
34
#include <stdlib.h>
35
#include <ctype.h>
36
37
#include "main.h"
38
#include "prefs.h"
39
#include "prefs_ui.h"
40
#include "prefs_account.h"
41
#include "prefs_account_dialog.h"
42
#include "prefs_customheader.h"
43
#include "prefs_common.h"
44
#include "account.h"
45
#include "mainwindow.h"
46
#include "manage_window.h"
47
#include "foldersel.h"
48
#include "inc.h"
49
#include "menu.h"
50
#include "gtkutils.h"
51
#include "utils.h"
52
#include "alertpanel.h"
53
#include "smtp.h"
54
#include "imap.h"
55
56
static gboolean cancelled;
57
static PrefsDialog dialog;
58
59
static struct Basic {
60
        GtkWidget *acname_entry;
61
        GtkWidget *default_chkbtn;
62
63
        GtkWidget *name_entry;
64
        GtkWidget *addr_entry;
65
        GtkWidget *org_entry;
66
67
        GtkWidget *serv_frame;
68
        GtkWidget *serv_table;
69
        GtkWidget *protocol_optmenu;
70
        GtkWidget *recvserv_label;
71
        GtkWidget *smtpserv_label;
72
        GtkWidget *nntpserv_label;
73
        GtkWidget *recvserv_entry;
74
        GtkWidget *smtpserv_entry;
75
        GtkWidget *nntpserv_entry;
76
        GtkWidget *nntpauth_chkbtn;
77
        GtkWidget *uid_label;
78
        GtkWidget *pass_label;
79
        GtkWidget *uid_entry;
80
        GtkWidget *pass_entry;
81
} basic;
82
83
static struct Receive {
84
        GtkWidget *pop3_frame;
85
        GtkWidget *use_apop_chkbtn;
86
        GtkWidget *rmmail_chkbtn;
87
        GtkWidget *leave_time_entry;
88
        GtkWidget *getall_chkbtn;
89
        GtkWidget *size_limit_chkbtn;
90
        GtkWidget *size_limit_entry;
91
        GtkWidget *filter_on_recv_chkbtn;
92
        GtkWidget *inbox_label;
93
        GtkWidget *inbox_entry;
94
        GtkWidget *inbox_btn;
95
96
        GtkWidget *imap_frame;
97
        GtkWidget *imap_auth_type_optmenu;
98
99
        GtkWidget *nntp_frame;
100
        GtkWidget *maxarticle_spinbtn;
101
        GtkObject *maxarticle_spinbtn_adj;
102
103
        GtkWidget *recvatgetall_chkbtn;
104
} receive;
105
106
static struct Send {
107
        GtkWidget *date_chkbtn;
108
        GtkWidget *msgid_chkbtn;
109
110
        GtkWidget *customhdr_chkbtn;
111
112
        GtkWidget *smtp_auth_chkbtn;
113
        GtkWidget *smtp_auth_type_optmenu;
114
        GtkWidget *smtp_uid_entry;
115
        GtkWidget *smtp_pass_entry;
116
        /* GtkWidget *pop_bfr_smtp_chkbtn; */
117
} p_send;
118
119
static struct Compose {
120
        GtkWidget *sigfile_radiobtn;
121
        GtkWidget *sigpath_entry;
122
123
        GtkWidget *autocc_chkbtn;
124
        GtkWidget *autocc_entry;
125
        GtkWidget *autobcc_chkbtn;
126
        GtkWidget *autobcc_entry;
127
        GtkWidget *autoreplyto_chkbtn;
128
        GtkWidget *autoreplyto_entry;
129
} compose;
130
131
#if USE_GPGME
132
static struct Privacy {
133
        GtkWidget *default_sign_chkbtn;
134
        GtkWidget *default_encrypt_chkbtn;
135
        GtkWidget *encrypt_reply_chkbtn;
136
        GtkWidget *ascii_armored_chkbtn;
137
        GtkWidget *clearsign_chkbtn;
138
        GtkWidget *defaultkey_radiobtn;
139
        GtkWidget *emailkey_radiobtn;
140
        GtkWidget *customkey_radiobtn;
141
        GtkWidget *customkey_entry;
142
} privacy;
143
#endif /* USE_GPGME */
144
145
#if USE_SSL
146
static struct SSLPrefs {
147
        GtkWidget *pop_frame;
148
        GtkWidget *pop_nossl_radiobtn;
149
        GtkWidget *pop_ssltunnel_radiobtn;
150
        GtkWidget *pop_starttls_radiobtn;
151
152
        GtkWidget *imap_frame;
153
        GtkWidget *imap_nossl_radiobtn;
154
        GtkWidget *imap_ssltunnel_radiobtn;
155
        GtkWidget *imap_starttls_radiobtn;
156
157
        GtkWidget *nntp_frame;
158
        GtkWidget *nntp_nossl_radiobtn;
159
        GtkWidget *nntp_ssltunnel_radiobtn;
160
161
        GtkWidget *send_frame;
162
        GtkWidget *smtp_nossl_radiobtn;
163
        GtkWidget *smtp_ssltunnel_radiobtn;
164
        GtkWidget *smtp_starttls_radiobtn;
165
166
        GtkWidget *use_nonblocking_ssl_chkbtn;
167
} ssl;
168
#endif /* USE_SSL */
169
170
static struct Advanced {
171
        GtkWidget *smtpport_chkbtn;
172
        GtkWidget *smtpport_entry;
173
        GtkWidget *popport_hbox;
174
        GtkWidget *popport_chkbtn;
175
        GtkWidget *popport_entry;
176
        GtkWidget *imapport_hbox;
177
        GtkWidget *imapport_chkbtn;
178
        GtkWidget *imapport_entry;
179
        GtkWidget *nntpport_hbox;
180
        GtkWidget *nntpport_chkbtn;
181
        GtkWidget *nntpport_entry;
182
        GtkWidget *domain_chkbtn;
183
        GtkWidget *domain_entry;
184
185
        GtkWidget *imap_frame;
186
        GtkWidget *imapdir_entry;
187
188
        GtkWidget *sent_folder_chkbtn;
189
        GtkWidget *sent_folder_entry;
190
        GtkWidget *draft_folder_chkbtn;
191
        GtkWidget *draft_folder_entry;
192
        GtkWidget *trash_folder_chkbtn;
193
        GtkWidget *trash_folder_entry;
194
} advanced;
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_imap_auth_type_set_data_from_optmenu
201
                                                        (PrefParam *pparam);
202
static void prefs_account_imap_auth_type_set_optmenu        (PrefParam *pparam);
203
static void prefs_account_smtp_auth_type_set_data_from_optmenu
204
                                                        (PrefParam *pparam);
205
static void prefs_account_smtp_auth_type_set_optmenu        (PrefParam *pparam);
206
207
static void prefs_account_enum_set_data_from_radiobtn        (PrefParam *pparam);
208
static void prefs_account_enum_set_radiobtn                (PrefParam *pparam);
209
210
#if USE_GPGME
211
static void prefs_account_ascii_armored_warning                (GtkWidget *widget);
212
#endif /* USE_GPGME */
213
214
static PrefsUIData ui_data[] = {
215
        /* Basic */
216
        {"account_name", &basic.acname_entry,
217
         prefs_set_data_from_entry, prefs_set_entry},
218
        {"is_default", &basic.default_chkbtn,
219
         prefs_set_data_from_toggle, prefs_set_toggle},
220
        {"name", &basic.name_entry,
221
         prefs_set_data_from_entry, prefs_set_entry},
222
        {"address", &basic.addr_entry,
223
         prefs_set_data_from_entry, prefs_set_entry},
224
        {"organization", &basic.org_entry,
225
         prefs_set_data_from_entry, prefs_set_entry},
226
        {"protocol", &basic.protocol_optmenu,
227
         prefs_account_protocol_set_data_from_optmenu,
228
         prefs_account_protocol_set_optmenu},
229
        {"receive_server", &basic.recvserv_entry,
230
         prefs_set_data_from_entry, prefs_set_entry},
231
        {"smtp_server", &basic.smtpserv_entry,
232
         prefs_set_data_from_entry, prefs_set_entry},
233
        {"nntp_server", &basic.nntpserv_entry,
234
         prefs_set_data_from_entry, prefs_set_entry},
235
        {"use_nntp_auth", &basic.nntpauth_chkbtn,
236
         prefs_set_data_from_toggle, prefs_set_toggle},
237
        {"user_id", &basic.uid_entry,
238
         prefs_set_data_from_entry, prefs_set_entry},
239
        {"password", &basic.pass_entry,
240
         prefs_set_data_from_entry, prefs_set_entry},
241
        {"inbox", &receive.inbox_entry,
242
         prefs_set_data_from_entry, prefs_set_entry},
243
244
        /* Receive */
245
        {"use_apop_auth", &receive.use_apop_chkbtn,
246
         prefs_set_data_from_toggle, prefs_set_toggle},
247
        {"remove_mail", &receive.rmmail_chkbtn,
248
         prefs_set_data_from_toggle, prefs_set_toggle},
249
        {"message_leave_time", &receive.leave_time_entry,
250
         prefs_set_data_from_entry, prefs_set_entry},
251
        {"get_all_mail", &receive.getall_chkbtn,
252
         prefs_set_data_from_toggle, prefs_set_toggle},
253
        {"enable_size_limit", &receive.size_limit_chkbtn,
254
         prefs_set_data_from_toggle, prefs_set_toggle},
255
        {"size_limit", &receive.size_limit_entry,
256
         prefs_set_data_from_entry, prefs_set_entry},
257
        {"filter_on_receive", &receive.filter_on_recv_chkbtn,
258
         prefs_set_data_from_toggle, prefs_set_toggle},
259
        {"imap_auth_method", &receive.imap_auth_type_optmenu,
260
         prefs_account_imap_auth_type_set_data_from_optmenu,
261
         prefs_account_imap_auth_type_set_optmenu},
262
        {"max_nntp_articles", &receive.maxarticle_spinbtn,
263
         prefs_set_data_from_spinbtn, prefs_set_spinbtn},
264
        {"receive_at_get_all", &receive.recvatgetall_chkbtn,
265
         prefs_set_data_from_toggle, prefs_set_toggle},
266
267
        /* Send */
268
        {"add_date", &p_send.date_chkbtn,
269
         prefs_set_data_from_toggle, prefs_set_toggle},
270
        {"generate_msgid", &p_send.msgid_chkbtn,
271
         prefs_set_data_from_toggle, prefs_set_toggle},
272
        {"add_custom_header", &p_send.customhdr_chkbtn,
273
         prefs_set_data_from_toggle, prefs_set_toggle},
274
        {"use_smtp_auth", &p_send.smtp_auth_chkbtn,
275
         prefs_set_data_from_toggle, prefs_set_toggle},
276
        {"smtp_auth_method", &p_send.smtp_auth_type_optmenu,
277
         prefs_account_smtp_auth_type_set_data_from_optmenu,
278
         prefs_account_smtp_auth_type_set_optmenu},
279
        {"smtp_user_id", &p_send.smtp_uid_entry,
280
         prefs_set_data_from_entry, prefs_set_entry},
281
        {"smtp_password", &p_send.smtp_pass_entry,
282
         prefs_set_data_from_entry, prefs_set_entry},
283
284
        /* {"pop_before_smtp", NULL, NULL, NULL}, */
285
286
        /* Compose */
287
        {"signature_type", &compose.sigfile_radiobtn,
288
         prefs_account_enum_set_data_from_radiobtn,
289
         prefs_account_enum_set_radiobtn},
290
        {"signature_path", &compose.sigpath_entry,
291
         prefs_set_data_from_entry, prefs_set_entry},
292
        {"set_autocc", &compose.autocc_chkbtn,
293
         prefs_set_data_from_toggle, prefs_set_toggle},
294
        {"auto_cc", &compose.autocc_entry,
295
         prefs_set_data_from_entry, prefs_set_entry},
296
        {"set_autobcc", &compose.autobcc_chkbtn,
297
         prefs_set_data_from_toggle, prefs_set_toggle},
298
        {"auto_bcc", &compose.autobcc_entry,
299
         prefs_set_data_from_entry, prefs_set_entry},
300
        {"set_autoreplyto", &compose.autoreplyto_chkbtn,
301
         prefs_set_data_from_toggle, prefs_set_toggle},
302
        {"auto_replyto", &compose.autoreplyto_entry,
303
         prefs_set_data_from_entry, prefs_set_entry},
304
305
#if USE_GPGME
306
        /* Privacy */
307
        {"default_sign", &privacy.default_sign_chkbtn,
308
         prefs_set_data_from_toggle, prefs_set_toggle},
309
        {"default_encrypt", &privacy.default_encrypt_chkbtn,
310
         prefs_set_data_from_toggle, prefs_set_toggle},
311
        {"encrypt_reply", &privacy.encrypt_reply_chkbtn,
312
         prefs_set_data_from_toggle, prefs_set_toggle},
313
        {"ascii_armored", &privacy.ascii_armored_chkbtn,
314
         prefs_set_data_from_toggle, prefs_set_toggle},
315
        {"clearsign", &privacy.clearsign_chkbtn,
316
         prefs_set_data_from_toggle, prefs_set_toggle},
317
        {"sign_key", &privacy.defaultkey_radiobtn,
318
         prefs_account_enum_set_data_from_radiobtn,
319
         prefs_account_enum_set_radiobtn},
320
        {"sign_key_id", &privacy.customkey_entry,
321
         prefs_set_data_from_entry, prefs_set_entry},
322
#endif /* USE_GPGME */
323
324
#if USE_SSL
325
        /* SSL */
326
        {"ssl_pop", &ssl.pop_nossl_radiobtn,
327
         prefs_account_enum_set_data_from_radiobtn,
328
         prefs_account_enum_set_radiobtn},
329
        {"ssl_imap", &ssl.imap_nossl_radiobtn,
330
         prefs_account_enum_set_data_from_radiobtn,
331
         prefs_account_enum_set_radiobtn},
332
        {"ssl_nntp", &ssl.nntp_nossl_radiobtn,
333
         prefs_account_enum_set_data_from_radiobtn,
334
         prefs_account_enum_set_radiobtn},
335
        {"ssl_smtp", &ssl.smtp_nossl_radiobtn,
336
         prefs_account_enum_set_data_from_radiobtn,
337
         prefs_account_enum_set_radiobtn},
338
        {"use_nonblocking_ssl", &ssl.use_nonblocking_ssl_chkbtn,
339
         prefs_set_data_from_toggle, prefs_set_toggle},
340
#endif /* USE_SSL */
341
342
        /* Advanced */
343
        {"set_smtpport", &advanced.smtpport_chkbtn,
344
         prefs_set_data_from_toggle, prefs_set_toggle},
345
        {"smtp_port", &advanced.smtpport_entry,
346
         prefs_set_data_from_entry, prefs_set_entry},
347
        {"set_popport", &advanced.popport_chkbtn,
348
         prefs_set_data_from_toggle, prefs_set_toggle},
349
        {"pop_port", &advanced.popport_entry,
350
         prefs_set_data_from_entry, prefs_set_entry},
351
        {"set_imapport", &advanced.imapport_chkbtn,
352
         prefs_set_data_from_toggle, prefs_set_toggle},
353
        {"imap_port", &advanced.imapport_entry,
354
         prefs_set_data_from_entry, prefs_set_entry},
355
        {"set_nntpport", &advanced.nntpport_chkbtn,
356
         prefs_set_data_from_toggle, prefs_set_toggle},
357
        {"nntp_port", &advanced.nntpport_entry,
358
         prefs_set_data_from_entry, prefs_set_entry},
359
        {"set_domain", &advanced.domain_chkbtn,
360
         prefs_set_data_from_toggle, prefs_set_toggle},
361
        {"domain", &advanced.domain_entry,
362
         prefs_set_data_from_entry, prefs_set_entry},
363
        {"imap_directory", &advanced.imapdir_entry,
364
         prefs_set_data_from_entry, prefs_set_entry},
365
        {"set_sent_folder", &advanced.sent_folder_chkbtn,
366
         prefs_set_data_from_toggle, prefs_set_toggle},
367
        {"sent_folder", &advanced.sent_folder_entry,
368
         prefs_set_data_from_entry, prefs_set_entry},
369
        {"set_draft_folder", &advanced.draft_folder_chkbtn,
370
         prefs_set_data_from_toggle, prefs_set_toggle},
371
        {"draft_folder", &advanced.draft_folder_entry,
372
         prefs_set_data_from_entry, prefs_set_entry},
373
        {"set_trash_folder", &advanced.trash_folder_chkbtn,
374
         prefs_set_data_from_toggle, prefs_set_toggle},
375
        {"trash_folder", &advanced.trash_folder_entry,
376
         prefs_set_data_from_entry, prefs_set_entry},
377
378
        {NULL, NULL, NULL, NULL}
379
};
380
381
static void prefs_account_create                (void);
382
static void prefs_account_basic_create                (void);
383
static void prefs_account_receive_create        (void);
384
static void prefs_account_send_create                (void);
385
static void prefs_account_compose_create        (void);
386
#if USE_GPGME
387
static void prefs_account_privacy_create        (void);
388
#endif /* USE_GPGME */
389
#if USE_SSL
390
static void prefs_account_ssl_create                (void);
391
#endif /* USE_SSL */
392
static void prefs_account_advanced_create        (void);
393
394
static void prefs_account_select_folder_cb        (GtkWidget        *widget,
395
                                                 gpointer         data);
396
static void prefs_account_edit_custom_header        (void);
397
398
static gint prefs_account_deleted                (GtkWidget        *widget,
399
                                                 GdkEventAny        *event,
400
                                                 gpointer         data);
401
static gboolean prefs_account_key_pressed        (GtkWidget        *widget,
402
                                                 GdkEventKey        *event,
403
                                                 gpointer         data);
404
static void prefs_account_ok                        (void);
405
static gint prefs_account_apply                        (void);
406
static void prefs_account_cancel                (void);
407
408
409
PrefsAccount *prefs_account_open(PrefsAccount *ac_prefs)
410
{
411
        gboolean new_account = FALSE;
412
        static gboolean ui_registered = FALSE;
413
414
        debug_print(_("Opening account preferences window...\n"));
415
416
        inc_lock();
417
418
        cancelled = FALSE;
419
420
        if (!ui_registered) {
421
                prefs_register_ui(prefs_account_get_params(), ui_data);
422
                ui_registered = TRUE;
423
        }
424
425
        if (!ac_prefs) {
426
                ac_prefs = prefs_account_new();
427
                new_account = TRUE;
428
        }
429
430
        if (!dialog.window) {
431
                prefs_account_create();
432
        }
433
434
        gtkut_box_set_reverse_order(GTK_BOX(dialog.confirm_area),
435
                                    !prefs_common.comply_gnome_hig);
436
        manage_window_set_transient(GTK_WINDOW(dialog.window));
437
        gtk_notebook_set_current_page(GTK_NOTEBOOK(dialog.notebook), 0);
438
        gtk_widget_grab_focus(dialog.ok_btn);
439
440
        prefs_account_set_tmp_prefs(ac_prefs);
441
442
        if (new_account) {
443
                PrefsAccount *def_ac;
444
                gchar *buf;
445
446
                prefs_set_dialog_to_default(prefs_account_get_params());
447
                buf = g_strdup_printf(_("Account%d"), ac_prefs->account_id);
448
                gtk_entry_set_text(GTK_ENTRY(basic.acname_entry), buf);
449
                g_free(buf);
450
                def_ac = account_get_default();
451
                if (def_ac) {
452
                        gtk_entry_set_text(GTK_ENTRY(basic.name_entry),
453
                                           def_ac->name ? def_ac->name : "");
454
                        gtk_entry_set_text(GTK_ENTRY(basic.addr_entry),
455
                                           def_ac->address ? def_ac->address : "");
456
                        gtk_entry_set_text(GTK_ENTRY(basic.org_entry),
457
                                           def_ac->organization ? def_ac->organization : "");
458
                }
459
                menu_set_sensitive_all
460
                        (GTK_MENU_SHELL
461
                                (gtk_option_menu_get_menu
462
                                        (GTK_OPTION_MENU
463
                                                (basic.protocol_optmenu))),
464
                         TRUE);
465
                gtk_window_set_title(GTK_WINDOW(dialog.window),
466
                                     _("Preferences for new account"));
467
                gtk_widget_hide(dialog.apply_btn);
468
        } else {
469
                prefs_set_dialog(prefs_account_get_params());
470
                gtk_window_set_title(GTK_WINDOW(dialog.window),
471
                                     _("Account preferences"));
472
                gtk_widget_show(dialog.apply_btn);
473
        }
474
475
        gtk_widget_show(dialog.window);
476
        gtk_main();
477
        gtk_widget_hide(dialog.window);
478
479
        inc_unlock();
480
481
        if (cancelled && new_account) {
482
                g_free(ac_prefs);
483
                return NULL;
484
        } else {
485
                prefs_account_apply_tmp_prefs(ac_prefs);
486
                return ac_prefs;
487
        }
488
}
489
490
static void prefs_account_create(void)
491
{
492
        gint page = 0;
493
494
        debug_print(_("Creating account preferences window...\n"));
495
496
        /* create dialog */
497
        prefs_dialog_create(&dialog);
498
        g_signal_connect(G_OBJECT(dialog.window), "delete_event",
499
                         G_CALLBACK(prefs_account_deleted), NULL);
500
        g_signal_connect(G_OBJECT(dialog.window), "key_press_event",
501
                         G_CALLBACK(prefs_account_key_pressed), NULL);
502
        MANAGE_WINDOW_SIGNALS_CONNECT(dialog.window);
503
504
        g_signal_connect(G_OBJECT(dialog.ok_btn), "clicked",
505
                          G_CALLBACK(prefs_account_ok), NULL);
506
        g_signal_connect(G_OBJECT(dialog.apply_btn), "clicked",
507
                         G_CALLBACK(prefs_account_apply), NULL);
508
        g_signal_connect(G_OBJECT(dialog.cancel_btn), "clicked",
509
                         G_CALLBACK(prefs_account_cancel), NULL);
510
511
        prefs_account_basic_create();
512
        SET_NOTEBOOK_LABEL(dialog.notebook, _("Basic"), page++);
513
        prefs_account_receive_create();
514
        SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
515
        prefs_account_send_create();
516
        SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
517
        prefs_account_compose_create();
518
        SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
519
#if USE_GPGME
520
        prefs_account_privacy_create();
521
        SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
522
#endif /* USE_GPGME */
523
#if USE_SSL
524
        prefs_account_ssl_create();
525
        SET_NOTEBOOK_LABEL(dialog.notebook, _("SSL"), page++);
526
#endif /* USE_SSL */
527
        prefs_account_advanced_create();
528
        SET_NOTEBOOK_LABEL(dialog.notebook, _("Advanced"), page++);
529
}
530
531
#define SET_ACTIVATE(menuitem) \
532
{ \
533
        g_signal_connect(G_OBJECT(menuitem), "activate", \
534
                         G_CALLBACK(prefs_account_protocol_activated), NULL); \
535
}
536
537
static void prefs_account_basic_create(void)
538
{
539
        GtkWidget *vbox1;
540
        GtkWidget *hbox;
541
        GtkWidget *label;
542
        GtkWidget *acname_entry;
543
        GtkWidget *default_chkbtn;
544
        GtkWidget *frame1;
545
        GtkWidget *table1;
546
        GtkWidget *name_entry;
547
        GtkWidget *addr_entry;
548
        GtkWidget *org_entry;
549
550
        GtkWidget *serv_frame;
551
        GtkWidget *vbox2;
552
        GtkWidget *optmenu;
553
        GtkWidget *optmenu_menu;
554
        GtkWidget *menuitem;
555
        GtkWidget *serv_table;
556
        GtkWidget *recvserv_label;
557
        GtkWidget *smtpserv_label;
558
        GtkWidget *nntpserv_label;
559
        GtkWidget *recvserv_entry;
560
        GtkWidget *smtpserv_entry;
561
        GtkWidget *nntpserv_entry;
562
        GtkWidget *nntpauth_chkbtn;
563
        GtkWidget *uid_label;
564
        GtkWidget *pass_label;
565
        GtkWidget *uid_entry;
566
        GtkWidget *pass_entry;
567
568
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
569
        gtk_widget_show (vbox1);
570
        gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
571
        gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
572
573
        hbox = gtk_hbox_new (FALSE, 8);
574
        gtk_widget_show (hbox);
575
        gtk_box_pack_start (GTK_BOX (vbox1), hbox, FALSE, FALSE, 0);
576
577
        label = gtk_label_new (_("Name of this account"));
578
        gtk_widget_show (label);
579
        gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
580
581
        acname_entry = gtk_entry_new ();
582
        gtk_widget_show (acname_entry);
583
        gtk_widget_set_size_request (acname_entry, DEFAULT_ENTRY_WIDTH, -1);
584
        gtk_box_pack_start (GTK_BOX (hbox), acname_entry, TRUE, TRUE, 0);
585
586
        default_chkbtn = gtk_check_button_new_with_label (_("Set as default"));
587
        gtk_widget_show (default_chkbtn);
588
        gtk_box_pack_end (GTK_BOX (hbox), default_chkbtn, FALSE, FALSE, 0);
589
590
        PACK_FRAME (vbox1, frame1, _("Personal information"));
591
592
        table1 = gtk_table_new (3, 2, FALSE);
593
        gtk_widget_show (table1);
594
        gtk_container_add (GTK_CONTAINER (frame1), table1);
595
        gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
596
        gtk_table_set_row_spacings (GTK_TABLE (table1), VSPACING_NARROW);
597
        gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
598
599
        label = gtk_label_new (_("Full name"));
600
        gtk_widget_show (label);
601
        gtk_table_attach (GTK_TABLE (table1), label, 0, 1, 0, 1,
602
                          GTK_FILL, 0, 0, 0);
603
        gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
604
605
        label = gtk_label_new (_("Mail address"));
606
        gtk_widget_show (label);
607
        gtk_table_attach (GTK_TABLE (table1), label, 0, 1, 1, 2,
608
                          GTK_FILL, 0, 0, 0);
609
        gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
610
611
        label = gtk_label_new (_("Organization"));
612
        gtk_widget_show (label);
613
        gtk_table_attach (GTK_TABLE (table1), label, 0, 1, 2, 3,
614
                          GTK_FILL, 0, 0, 0);
615
        gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
616
617
        name_entry = gtk_entry_new ();
618
        gtk_widget_show (name_entry);
619
        gtk_table_attach (GTK_TABLE (table1), name_entry, 1, 2, 0, 1,
620
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,
621
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
622
623
        addr_entry = gtk_entry_new ();
624
        gtk_widget_show (addr_entry);
625
        gtk_table_attach (GTK_TABLE (table1), addr_entry, 1, 2, 1, 2,
626
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,
627
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
628
629
        org_entry = gtk_entry_new ();
630
        gtk_widget_show (org_entry);
631
        gtk_table_attach (GTK_TABLE (table1), org_entry, 1, 2, 2, 3,
632
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,
633
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
634
635
        PACK_FRAME (vbox1, serv_frame, _("Server information"));
636
637
        vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
638
        gtk_widget_show (vbox2);
639
        gtk_container_add (GTK_CONTAINER (serv_frame), vbox2);
640
        gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
641
642
        hbox = gtk_hbox_new (FALSE, 8);
643
        gtk_widget_show (hbox);
644
        gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
645
646
        label = gtk_label_new (_("Protocol"));
647
        gtk_widget_show (label);
648
        gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
649
650
        optmenu = gtk_option_menu_new ();
651
        gtk_widget_show (optmenu);
652
        gtk_box_pack_start (GTK_BOX (hbox), optmenu, FALSE, FALSE, 0);
653
654
        optmenu_menu = gtk_menu_new ();
655
656
        MENUITEM_ADD (optmenu_menu, menuitem, _("POP3"),  A_POP3);
657
        SET_ACTIVATE (menuitem);
658
        MENUITEM_ADD (optmenu_menu, menuitem, _("IMAP4"), A_IMAP4);
659
        SET_ACTIVATE (menuitem);
660
        MENUITEM_ADD (optmenu_menu, menuitem, _("News (NNTP)"), A_NNTP);
661
        SET_ACTIVATE (menuitem);
662
        MENUITEM_ADD (optmenu_menu, menuitem, _("None (local)"), A_LOCAL);
663
        SET_ACTIVATE (menuitem);
664
665
        gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
666
667
        serv_table = gtk_table_new (6, 4, FALSE);
668
        gtk_widget_show (serv_table);
669
        gtk_box_pack_start (GTK_BOX (vbox2), serv_table, FALSE, FALSE, 0);
670
        gtk_table_set_row_spacings (GTK_TABLE (serv_table), VSPACING_NARROW);
671
        gtk_table_set_row_spacing (GTK_TABLE (serv_table), 3, 0);
672
        gtk_table_set_col_spacings (GTK_TABLE (serv_table), 8);
673
674
        nntpauth_chkbtn = gtk_check_button_new_with_label
675
                (_("This server requires authentication"));
676
        gtk_widget_show (nntpauth_chkbtn);
677
        gtk_table_attach (GTK_TABLE (serv_table), nntpauth_chkbtn, 0, 4, 4, 5,
678
                          GTK_FILL, 0, 0, 0);
679
680
        nntpserv_entry = gtk_entry_new ();
681
        gtk_widget_show (nntpserv_entry);
682
        gtk_table_attach (GTK_TABLE (serv_table), nntpserv_entry, 1, 4, 0, 1,
683
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,
684
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
685
        gtk_table_set_row_spacing (GTK_TABLE (serv_table), 0, 0);
686
687
        recvserv_entry = gtk_entry_new ();
688
        gtk_widget_show (recvserv_entry);
689
        gtk_table_attach (GTK_TABLE (serv_table), recvserv_entry, 1, 4, 1, 2,
690
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,
691
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
692
693
        smtpserv_entry = gtk_entry_new ();
694
        gtk_widget_show (smtpserv_entry);
695
        gtk_table_attach (GTK_TABLE (serv_table), smtpserv_entry, 1, 4, 2, 3,
696
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,
697
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
698
699
        uid_entry = gtk_entry_new ();
700
        gtk_widget_show (uid_entry);
701
        gtk_widget_set_size_request (uid_entry, DEFAULT_ENTRY_WIDTH, -1);
702
        gtk_table_attach (GTK_TABLE (serv_table), uid_entry, 1, 2, 5, 6,
703
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,
704
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
705
706
        pass_entry = gtk_entry_new ();
707
        gtk_widget_show (pass_entry);
708
        gtk_widget_set_size_request (pass_entry, DEFAULT_ENTRY_WIDTH, -1);
709
        gtk_table_attach (GTK_TABLE (serv_table), pass_entry, 3, 4, 5, 6,
710
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,
711
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
712
        gtk_entry_set_visibility (GTK_ENTRY (pass_entry), FALSE);
713
714
        nntpserv_label = gtk_label_new (_("News server"));
715
        gtk_widget_show (nntpserv_label);
716
        gtk_table_attach (GTK_TABLE (serv_table), nntpserv_label, 0, 1, 0, 1,
717
                          GTK_FILL, 0, 0, 0);
718
        gtk_misc_set_alignment (GTK_MISC (nntpserv_label), 1, 0.5);
719
720
        recvserv_label = gtk_label_new (_("Server for receiving"));
721
        gtk_widget_show (recvserv_label);
722
        gtk_table_attach (GTK_TABLE (serv_table), recvserv_label, 0, 1, 1, 2,
723
                          GTK_FILL, 0, 0, 0);
724
        gtk_misc_set_alignment (GTK_MISC (recvserv_label), 1, 0.5);
725
726
        smtpserv_label = gtk_label_new (_("SMTP server (send)"));
727
        gtk_widget_show (smtpserv_label);
728
        gtk_table_attach (GTK_TABLE (serv_table), smtpserv_label, 0, 1, 2, 3,
729
                          GTK_FILL, 0, 0, 0);
730
        gtk_misc_set_alignment (GTK_MISC (smtpserv_label), 1, 0.5);
731
        gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0);
732
733
        uid_label = gtk_label_new (_("User ID"));
734
        gtk_widget_show (uid_label);
735
        gtk_table_attach (GTK_TABLE (serv_table), uid_label, 0, 1, 5, 6,
736
                          GTK_FILL, 0, 0, 0);
737
        gtk_misc_set_alignment (GTK_MISC (uid_label), 1, 0.5);
738
739
        pass_label = gtk_label_new (_("Password"));
740
        gtk_widget_show (pass_label);
741
        gtk_table_attach (GTK_TABLE (serv_table), pass_label, 2, 3, 5, 6,
742
                          0, 0, 0, 0);
743
744
        SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, uid_label);
745
        SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, pass_label);
746
        SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, uid_entry);
747
        SET_TOGGLE_SENSITIVITY (nntpauth_chkbtn, pass_entry);
748
749
        basic.acname_entry   = acname_entry;
750
        basic.default_chkbtn = default_chkbtn;
751
752
        basic.name_entry = name_entry;
753
        basic.addr_entry = addr_entry;
754
        basic.org_entry  = org_entry;
755
756
        basic.serv_frame       = serv_frame;
757
        basic.serv_table       = serv_table;
758
        basic.protocol_optmenu = optmenu;
759
        basic.recvserv_label   = recvserv_label;
760
        basic.recvserv_entry   = recvserv_entry;
761
        basic.smtpserv_label   = smtpserv_label;
762
        basic.smtpserv_entry   = smtpserv_entry;
763
        basic.nntpserv_label   = nntpserv_label;
764
        basic.nntpserv_entry   = nntpserv_entry;
765
        basic.nntpauth_chkbtn  = nntpauth_chkbtn;
766
        basic.uid_label        = uid_label;
767
        basic.pass_label       = pass_label;
768
        basic.uid_entry        = uid_entry;
769
        basic.pass_entry       = pass_entry;
770
}
771
772
static void prefs_account_receive_create(void)
773
{
774
        GtkWidget *vbox1;
775
        GtkWidget *frame1;
776
        GtkWidget *vbox2;
777
        GtkWidget *use_apop_chkbtn;
778
        GtkWidget *rmmail_chkbtn;
779
        GtkWidget *hbox_spc;
780
        GtkWidget *leave_time_label;
781
        GtkWidget *leave_time_entry;
782
        GtkWidget *getall_chkbtn;
783
        GtkWidget *hbox1;
784
        GtkWidget *size_limit_chkbtn;
785
        GtkWidget *size_limit_entry;
786
        GtkWidget *label;
787
        GtkWidget *filter_on_recv_chkbtn;
788
        GtkWidget *vbox3;
789
        GtkWidget *inbox_label;
790
        GtkWidget *inbox_entry;
791
        GtkWidget *inbox_btn;
792
793
        GtkWidget *imap_frame;
794
        GtkWidget *optmenu;
795
        GtkWidget *optmenu_menu;
796
        GtkWidget *menuitem;
797
798
        GtkWidget *nntp_frame;
799
        GtkWidget *maxarticle_label;
800
        GtkWidget *maxarticle_spinbtn;
801
        GtkObject *maxarticle_spinbtn_adj;
802
        GtkWidget *maxarticle_desc_label;
803
804
        GtkWidget *recvatgetall_chkbtn;
805
806
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
807
        gtk_widget_show (vbox1);
808
        gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
809
        gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
810
811
        PACK_FRAME (vbox1, frame1, _("POP3"));
812
813
        vbox2 = gtk_vbox_new (FALSE, 0);
814
        gtk_widget_show (vbox2);
815
        gtk_container_add (GTK_CONTAINER (frame1), vbox2);
816
        gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
817
818
        PACK_CHECK_BUTTON (vbox2, use_apop_chkbtn,
819
                           _("Use secure authentication (APOP)"));
820
821
        PACK_CHECK_BUTTON (vbox2, rmmail_chkbtn,
822
                           _("Remove messages on server when received"));
823
824
        hbox1 = gtk_hbox_new (FALSE, 8);
825
        gtk_widget_show (hbox1);
826
        gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
827
828
        hbox_spc = gtk_hbox_new (FALSE, 0);
829
        gtk_widget_show (hbox_spc);
830
        gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
831
        gtk_widget_set_size_request (hbox_spc, 12, -1);
832
833
        leave_time_label = gtk_label_new (_("Remove after"));
834
        gtk_widget_show (leave_time_label);
835
        gtk_box_pack_start (GTK_BOX (hbox1), leave_time_label, FALSE, FALSE, 0);
836
837
        leave_time_entry = gtk_entry_new ();
838
        gtk_widget_show (leave_time_entry);
839
        gtk_widget_set_size_request (leave_time_entry, 64, -1);
840
        gtk_box_pack_start (GTK_BOX (hbox1), leave_time_entry, FALSE, FALSE, 0);
841
842
        leave_time_label = gtk_label_new (_("days"));
843
        gtk_widget_show (leave_time_label);
844
        gtk_box_pack_start (GTK_BOX (hbox1), leave_time_label, FALSE, FALSE, 0);
845
846
        SET_TOGGLE_SENSITIVITY (rmmail_chkbtn, hbox1);
847
848
        PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
849
850
        hbox1 = gtk_hbox_new (FALSE, 8);
851
        gtk_widget_show (hbox1);
852
        gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
853
854
        hbox_spc = gtk_hbox_new (FALSE, 0);
855
        gtk_widget_show (hbox_spc);
856
        gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
857
        gtk_widget_set_size_request (hbox_spc, 12, -1);
858
859
        leave_time_label = gtk_label_new (_("(0 days: remove immediately)"));
860
        gtk_widget_show (leave_time_label);
861
        gtk_box_pack_start (GTK_BOX (hbox1), leave_time_label, FALSE, FALSE, 0);
862
863
        SET_TOGGLE_SENSITIVITY (rmmail_chkbtn, hbox1);
864
865
        PACK_CHECK_BUTTON (vbox2, getall_chkbtn,
866
                           _("Download all messages on server"));
867
868
        hbox1 = gtk_hbox_new (FALSE, 8);
869
        gtk_widget_show (hbox1);
870
        gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
871
872
        PACK_CHECK_BUTTON (hbox1, size_limit_chkbtn, _("Receive size limit"));
873
874
        size_limit_entry = gtk_entry_new ();
875
        gtk_widget_show (size_limit_entry);
876
        gtk_widget_set_size_request (size_limit_entry, 64, -1);
877
        gtk_box_pack_start (GTK_BOX (hbox1), size_limit_entry, FALSE, FALSE, 0);
878
879
        label = gtk_label_new (_("KB"));
880
        gtk_widget_show (label);
881
        gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
882
883
        SET_TOGGLE_SENSITIVITY (size_limit_chkbtn, size_limit_entry);
884
885
        PACK_CHECK_BUTTON (vbox2, filter_on_recv_chkbtn,
886
                           _("Filter messages on receiving"));
887
888
        PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
889
890
        hbox1 = gtk_hbox_new (FALSE, 8);
891
        gtk_widget_show (hbox1);
892
        gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
893
894
        inbox_label = gtk_label_new (_("Default inbox"));
895
        gtk_widget_show (inbox_label);
896
        gtk_box_pack_start (GTK_BOX (hbox1), inbox_label, FALSE, FALSE, 0);
897
898
        inbox_entry = gtk_entry_new ();
899
        gtk_widget_show (inbox_entry);
900
        gtk_widget_set_size_request (inbox_entry, DEFAULT_ENTRY_WIDTH, -1);
901
        gtk_box_pack_start (GTK_BOX (hbox1), inbox_entry, TRUE, TRUE, 0);
902
903
        inbox_btn = gtk_button_new_with_label (_(" Select... "));
904
        gtk_widget_show (inbox_btn);
905
        gtk_box_pack_start (GTK_BOX (hbox1), inbox_btn, FALSE, FALSE, 0);
906
        g_signal_connect (G_OBJECT (inbox_btn), "clicked",
907
                          G_CALLBACK (prefs_account_select_folder_cb),
908
                          inbox_entry);
909
910
        PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
911
912
        PACK_SMALL_LABEL
913
                (vbox2, label, 
914
                 _("Unfiltered messages will be stored in this folder."));
915
916
        PACK_FRAME (vbox1, imap_frame, _("IMAP4"));
917
918
        vbox2 = gtk_vbox_new (FALSE, 0);
919
        gtk_widget_show (vbox2);
920
        gtk_container_add (GTK_CONTAINER (imap_frame), vbox2);
921
        gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
922
923
        hbox1 = gtk_hbox_new (FALSE, 8);
924
        gtk_widget_show (hbox1);
925
        gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
926
927
        label = gtk_label_new (_("Authentication method"));
928
        gtk_widget_show (label);
929
        gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
930
931
        optmenu = gtk_option_menu_new ();
932
        gtk_widget_show (optmenu);
933
        gtk_box_pack_start (GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
934
935
        optmenu_menu = gtk_menu_new ();
936
937
        MENUITEM_ADD (optmenu_menu, menuitem, _("Automatic"), 0);
938
        MENUITEM_ADD (optmenu_menu, menuitem, "LOGIN", IMAP_AUTH_LOGIN);
939
        MENUITEM_ADD (optmenu_menu, menuitem, "CRAM-MD5", IMAP_AUTH_CRAM_MD5);
940
941
        gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
942
943
        PACK_FRAME (vbox1, nntp_frame, _("News"));
944
945
        vbox2 = gtk_vbox_new (FALSE, 0);
946
        gtk_widget_show (vbox2);
947
        gtk_container_add (GTK_CONTAINER (nntp_frame), vbox2);
948
        gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
949
950
        hbox1 = gtk_hbox_new (FALSE, 8);
951
        gtk_widget_show (hbox1);
952
        gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
953
954
        maxarticle_label = gtk_label_new
955
                (_("Maximum number of articles to download"));
956
        gtk_widget_show (maxarticle_label);
957
        gtk_box_pack_start (GTK_BOX (hbox1), maxarticle_label, FALSE, FALSE, 0);
958
        gtk_label_set_justify (GTK_LABEL (maxarticle_label), GTK_JUSTIFY_LEFT);
959
960
        maxarticle_spinbtn_adj =
961
                gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
962
        maxarticle_spinbtn = gtk_spin_button_new
963
                (GTK_ADJUSTMENT (maxarticle_spinbtn_adj), 10, 0);
964
        gtk_widget_show (maxarticle_spinbtn);
965
        gtk_box_pack_start (GTK_BOX (hbox1), maxarticle_spinbtn,
966
                            FALSE, FALSE, 0);
967
        gtk_widget_set_size_request (maxarticle_spinbtn, 64, -1);
968
        gtk_spin_button_set_numeric
969
                (GTK_SPIN_BUTTON (maxarticle_spinbtn), TRUE);
970
971
        PACK_SMALL_LABEL (vbox2, maxarticle_desc_label,
972
                          _("No limit if 0 is specified."));
973
974
        PACK_CHECK_BUTTON
975
                (vbox1, recvatgetall_chkbtn,
976
                 _("`Get all' checks for new messages on this account"));
977
978
        receive.pop3_frame            = frame1;
979
        receive.use_apop_chkbtn       = use_apop_chkbtn;
980
        receive.rmmail_chkbtn         = rmmail_chkbtn;
981
        receive.leave_time_entry      = leave_time_entry;
982
        receive.getall_chkbtn         = getall_chkbtn;
983
        receive.size_limit_chkbtn     = size_limit_chkbtn;
984
        receive.size_limit_entry      = size_limit_entry;
985
        receive.filter_on_recv_chkbtn = filter_on_recv_chkbtn;
986
        receive.inbox_label           = inbox_label;
987
        receive.inbox_entry           = inbox_entry;
988
        receive.inbox_btn             = inbox_btn;
989
990
        receive.imap_frame             = imap_frame;
991
        receive.imap_auth_type_optmenu = optmenu;
992
993
        receive.nntp_frame             = nntp_frame;
994
        receive.maxarticle_spinbtn     = maxarticle_spinbtn;
995
        receive.maxarticle_spinbtn_adj = maxarticle_spinbtn_adj;
996
997
        receive.recvatgetall_chkbtn = recvatgetall_chkbtn;
998
}
999
1000
static void prefs_account_send_create(void)
1001
{
1002
        GtkWidget *vbox1;
1003
        GtkWidget *vbox2;
1004
        GtkWidget *frame;
1005
        GtkWidget *date_chkbtn;
1006
        GtkWidget *msgid_chkbtn;
1007
        GtkWidget *hbox;
1008
        GtkWidget *customhdr_chkbtn;
1009
        GtkWidget *customhdr_edit_btn;
1010
        GtkWidget *vbox3;
1011
        GtkWidget *smtp_auth_chkbtn;
1012
        GtkWidget *optmenu;
1013
        GtkWidget *optmenu_menu;
1014
        GtkWidget *menuitem;
1015
        GtkWidget *vbox4;
1016
        GtkWidget *hbox_spc;
1017
        GtkWidget *label;
1018
        GtkWidget *smtp_uid_entry;
1019
        GtkWidget *smtp_pass_entry;
1020
        GtkWidget *vbox_spc;
1021
        /* GtkWidget *pop_bfr_smtp_chkbtn; */
1022
1023
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
1024
        gtk_widget_show (vbox1);
1025
        gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1026
        gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1027
1028
        PACK_FRAME (vbox1, frame, _("Header"));
1029
1030
        vbox2 = gtk_vbox_new (FALSE, 0);
1031
        gtk_widget_show (vbox2);
1032
        gtk_container_add (GTK_CONTAINER (frame), vbox2);
1033
        gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1034
1035
        PACK_CHECK_BUTTON (vbox2, date_chkbtn, _("Add Date header field"));
1036
        PACK_CHECK_BUTTON (vbox2, msgid_chkbtn, _("Generate Message-ID"));
1037
1038
        hbox = gtk_hbox_new (FALSE, 12);
1039
        gtk_widget_show (hbox);
1040
        gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1041
1042
        PACK_CHECK_BUTTON (hbox, customhdr_chkbtn,
1043
                           _("Add user-defined header"));
1044
1045
        customhdr_edit_btn = gtk_button_new_with_label (_(" Edit... "));
1046
        gtk_widget_show (customhdr_edit_btn);
1047
        gtk_box_pack_start (GTK_BOX (hbox), customhdr_edit_btn,
1048
                            FALSE, FALSE, 0);
1049
        g_signal_connect (G_OBJECT (customhdr_edit_btn), "clicked",
1050
                          G_CALLBACK (prefs_account_edit_custom_header),
1051
                          NULL);
1052
1053
        SET_TOGGLE_SENSITIVITY (customhdr_chkbtn, customhdr_edit_btn);
1054
1055
        PACK_FRAME (vbox1, frame, _("Authentication"));
1056
1057
        vbox3 = gtk_vbox_new (FALSE, 0);
1058
        gtk_widget_show (vbox3);
1059
        gtk_container_add (GTK_CONTAINER (frame), vbox3);
1060
        gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
1061
1062
        PACK_CHECK_BUTTON (vbox3, smtp_auth_chkbtn,
1063
                _("SMTP Authentication (SMTP AUTH)"));
1064
1065
        vbox4 = gtk_vbox_new (FALSE, 0);
1066
        gtk_widget_show (vbox4);
1067
        gtk_box_pack_start (GTK_BOX (vbox3), vbox4, FALSE, FALSE, 0);
1068
1069
        hbox = gtk_hbox_new (FALSE, 8);
1070
        gtk_widget_show (hbox);
1071
        gtk_box_pack_start (GTK_BOX (vbox4), hbox, FALSE, FALSE, 0);
1072
1073
        hbox_spc = gtk_hbox_new (FALSE, 0);
1074
        gtk_widget_show (hbox_spc);
1075
        gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1076
        gtk_widget_set_size_request (hbox_spc, 12, -1);
1077
1078
        label = gtk_label_new (_("Authentication method"));
1079
        gtk_widget_show (label);
1080
        gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1081
1082
        optmenu = gtk_option_menu_new ();
1083
        gtk_widget_show (optmenu);
1084
        gtk_box_pack_start (GTK_BOX (hbox), optmenu, FALSE, FALSE, 0);
1085
1086
        optmenu_menu = gtk_menu_new ();
1087
1088
        MENUITEM_ADD (optmenu_menu, menuitem, _("Automatic"), 0);
1089
        MENUITEM_ADD (optmenu_menu, menuitem, "PLAIN", SMTPAUTH_PLAIN);
1090
        MENUITEM_ADD (optmenu_menu, menuitem, "LOGIN", SMTPAUTH_LOGIN);
1091
        MENUITEM_ADD (optmenu_menu, menuitem, "CRAM-MD5", SMTPAUTH_CRAM_MD5);
1092
        MENUITEM_ADD (optmenu_menu, menuitem, "DIGEST-MD5", SMTPAUTH_DIGEST_MD5);
1093
        gtk_widget_set_sensitive (menuitem, FALSE);
1094
1095
        gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1096
1097
        PACK_VSPACER(vbox4, vbox_spc, VSPACING_NARROW_2);
1098
1099
        hbox = gtk_hbox_new (FALSE, 8);
1100
        gtk_widget_show (hbox);
1101
        gtk_box_pack_start (GTK_BOX (vbox4), hbox, FALSE, FALSE, 0);
1102
1103
        hbox_spc = gtk_hbox_new (FALSE, 0);
1104
        gtk_widget_show (hbox_spc);
1105
        gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1106
        gtk_widget_set_size_request (hbox_spc, 12, -1);
1107
1108
        label = gtk_label_new (_("User ID"));
1109
        gtk_widget_show (label);
1110
        gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1111
1112
        smtp_uid_entry = gtk_entry_new ();
1113
        gtk_widget_show (smtp_uid_entry);
1114
        gtk_widget_set_size_request (smtp_uid_entry, DEFAULT_ENTRY_WIDTH, -1);
1115
        gtk_box_pack_start (GTK_BOX (hbox), smtp_uid_entry, TRUE, TRUE, 0);
1116
1117
        label = gtk_label_new (_("Password"));
1118
        gtk_widget_show (label);
1119
        gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1120
1121
        smtp_pass_entry = gtk_entry_new ();
1122
        gtk_widget_show (smtp_pass_entry);
1123
        gtk_widget_set_size_request (smtp_pass_entry, DEFAULT_ENTRY_WIDTH, -1);
1124
        gtk_box_pack_start (GTK_BOX (hbox), smtp_pass_entry, TRUE, TRUE, 0);
1125
        gtk_entry_set_visibility (GTK_ENTRY (smtp_pass_entry), FALSE);
1126
1127
        PACK_VSPACER(vbox4, vbox_spc, VSPACING_NARROW_2);
1128
1129
        hbox = gtk_hbox_new (FALSE, 8);
1130
        gtk_widget_show (hbox);
1131
        gtk_box_pack_start (GTK_BOX (vbox4), hbox, FALSE, FALSE, 0);
1132
1133
        hbox_spc = gtk_hbox_new (FALSE, 0);
1134
        gtk_widget_show (hbox_spc);
1135
        gtk_box_pack_start (GTK_BOX (hbox), hbox_spc, FALSE, FALSE, 0);
1136
        gtk_widget_set_size_request (hbox_spc, 12, -1);
1137
1138
        label = gtk_label_new
1139
                (_("If you leave these entries empty, the same "
1140
                   "user ID and password as receiving will be used."));
1141
        gtk_widget_show (label);
1142
        gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
1143
        gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1144
        gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
1145
        gtkut_widget_set_small_font_size (label);
1146
1147
        SET_TOGGLE_SENSITIVITY (smtp_auth_chkbtn, vbox4);
1148
1149
#if 0
1150
        PACK_CHECK_BUTTON (vbox3, pop_bfr_smtp_chkbtn,
1151
                _("Authenticate with POP3 before sending"));
1152
        gtk_widget_set_sensitive(pop_bfr_smtp_chkbtn, FALSE);
1153
#endif
1154
1155
        p_send.date_chkbtn      = date_chkbtn;
1156
        p_send.msgid_chkbtn     = msgid_chkbtn;
1157
        p_send.customhdr_chkbtn = customhdr_chkbtn;
1158
1159
        p_send.smtp_auth_chkbtn       = smtp_auth_chkbtn;
1160
        p_send.smtp_auth_type_optmenu = optmenu;
1161
        p_send.smtp_uid_entry         = smtp_uid_entry;
1162
        p_send.smtp_pass_entry        = smtp_pass_entry;
1163
        /* p_send.pop_bfr_smtp_chkbtn    = pop_bfr_smtp_chkbtn; */
1164
}
1165
1166
static void prefs_account_compose_create(void)
1167
{
1168
        GtkWidget *vbox1;
1169
        GtkWidget *sig_vbox;
1170
        GtkWidget *sig_hbox;
1171
        GtkWidget *sigfile_radiobtn;
1172
        GtkWidget *sigcmd_radiobtn;
1173
        GtkWidget *sigpath_entry;
1174
        GtkWidget *frame;
1175
        GtkWidget *table;
1176
        GtkWidget *autocc_chkbtn;
1177
        GtkWidget *autocc_entry;
1178
        GtkWidget *autobcc_chkbtn;
1179
        GtkWidget *autobcc_entry;
1180
        GtkWidget *autoreplyto_chkbtn;
1181
        GtkWidget *autoreplyto_entry;
1182
1183
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
1184
        gtk_widget_show (vbox1);
1185
        gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1186
        gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1187
1188
        PACK_FRAME (vbox1, frame, _("Signature"));
1189
1190
        sig_vbox = gtk_vbox_new (FALSE, VSPACING_NARROW_2);
1191
        gtk_widget_show (sig_vbox);
1192
        gtk_container_add (GTK_CONTAINER (frame), sig_vbox);
1193
        gtk_container_set_border_width (GTK_CONTAINER (sig_vbox), 8);
1194
1195
        sig_hbox = gtk_hbox_new (FALSE, 8);
1196
        gtk_widget_show (sig_hbox);
1197
        gtk_box_pack_start (GTK_BOX (sig_vbox), sig_hbox, FALSE, FALSE, 0);
1198
1199
        sigfile_radiobtn = gtk_radio_button_new_with_label (NULL, _("File"));
1200
        gtk_widget_show (sigfile_radiobtn);
1201
        gtk_box_pack_start (GTK_BOX (sig_hbox), sigfile_radiobtn,
1202
                            FALSE, FALSE, 0);
1203
        g_object_set_data (G_OBJECT (sigfile_radiobtn), MENU_VAL_ID,
1204
                           GINT_TO_POINTER (SIG_FILE));
1205
1206
        sigcmd_radiobtn = gtk_radio_button_new_with_label_from_widget
1207
                (GTK_RADIO_BUTTON(sigfile_radiobtn), _("Command output"));
1208
        gtk_widget_show (sigcmd_radiobtn);
1209
        gtk_box_pack_start (GTK_BOX (sig_hbox), sigcmd_radiobtn,
1210
                            FALSE, FALSE, 0);
1211
        g_object_set_data (G_OBJECT (sigcmd_radiobtn), MENU_VAL_ID,
1212
                           GINT_TO_POINTER (SIG_COMMAND));
1213
1214
        sigpath_entry = gtk_entry_new ();
1215
        gtk_widget_show (sigpath_entry);
1216
        gtk_box_pack_start (GTK_BOX (sig_vbox), sigpath_entry, TRUE, TRUE, 0);
1217
1218
        PACK_FRAME (vbox1, frame, _("Automatically set the following addresses"));
1219
1220
        table =  gtk_table_new (3, 2, FALSE);
1221
        gtk_widget_show (table);
1222
        gtk_container_add (GTK_CONTAINER (frame), table);
1223
        gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1224
        gtk_table_set_row_spacings (GTK_TABLE (table), VSPACING_NARROW_2);
1225
        gtk_table_set_col_spacings (GTK_TABLE (table), 8);
1226
1227
        autocc_chkbtn = gtk_check_button_new_with_label (_("Cc"));
1228
        gtk_widget_show (autocc_chkbtn);
1229
        gtk_table_attach (GTK_TABLE (table), autocc_chkbtn, 0, 1, 0, 1,
1230
                          GTK_FILL, 0, 0, 0);
1231
1232
        autocc_entry = gtk_entry_new ();
1233
        gtk_widget_show (autocc_entry);
1234
        gtk_table_attach (GTK_TABLE (table), autocc_entry, 1, 2, 0, 1,
1235
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,
1236
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
1237
1238
        SET_TOGGLE_SENSITIVITY (autocc_chkbtn, autocc_entry);
1239
1240
        autobcc_chkbtn = gtk_check_button_new_with_label (_("Bcc"));
1241
        gtk_widget_show (autobcc_chkbtn);
1242
        gtk_table_attach (GTK_TABLE (table), autobcc_chkbtn, 0, 1, 1, 2,
1243
                          GTK_FILL, 0, 0, 0);
1244
1245
        autobcc_entry = gtk_entry_new ();
1246
        gtk_widget_show (autobcc_entry);
1247
        gtk_table_attach (GTK_TABLE (table), autobcc_entry, 1, 2, 1, 2,
1248
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,
1249
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
1250
1251
        SET_TOGGLE_SENSITIVITY (autobcc_chkbtn, autobcc_entry);
1252
1253
        autoreplyto_chkbtn = gtk_check_button_new_with_label (_("Reply-To"));
1254
        gtk_widget_show (autoreplyto_chkbtn);
1255
        gtk_table_attach (GTK_TABLE (table), autoreplyto_chkbtn, 0, 1, 2, 3,
1256
                          GTK_FILL, 0, 0, 0);
1257
1258
        autoreplyto_entry = gtk_entry_new ();
1259
        gtk_widget_show (autoreplyto_entry);
1260
        gtk_table_attach (GTK_TABLE (table), autoreplyto_entry, 1, 2, 2, 3,
1261
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,
1262
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
1263
1264
        SET_TOGGLE_SENSITIVITY (autoreplyto_chkbtn, autoreplyto_entry);
1265
1266
1267
        compose.sigfile_radiobtn = sigfile_radiobtn;
1268
        compose.sigpath_entry    = sigpath_entry;
1269
1270
        compose.autocc_chkbtn      = autocc_chkbtn;
1271
        compose.autocc_entry       = autocc_entry;
1272
        compose.autobcc_chkbtn     = autobcc_chkbtn;
1273
        compose.autobcc_entry      = autobcc_entry;
1274
        compose.autoreplyto_chkbtn = autoreplyto_chkbtn;
1275
        compose.autoreplyto_entry  = autoreplyto_entry;
1276
}
1277
1278
#if USE_GPGME
1279
static void prefs_account_privacy_create(void)
1280
{
1281
        GtkWidget *vbox1;
1282
        GtkWidget *frame1;
1283
        GtkWidget *vbox2;
1284
        GtkWidget *hbox1;
1285
        GtkWidget *label;
1286
        GtkWidget *default_sign_chkbtn;
1287
        GtkWidget *default_encrypt_chkbtn;
1288
        GtkWidget *encrypt_reply_chkbtn;
1289
        GtkWidget *ascii_armored_chkbtn;
1290
        GtkWidget *clearsign_chkbtn;
1291
        GtkWidget *defaultkey_radiobtn;
1292
        GtkWidget *emailkey_radiobtn;
1293
        GtkWidget *customkey_radiobtn;
1294
        GtkWidget *customkey_entry;
1295
1296
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
1297
        gtk_widget_show (vbox1);
1298
        gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1299
        gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1300
1301
        vbox2 = gtk_vbox_new (FALSE, 0);
1302
        gtk_widget_show (vbox2);
1303
        gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1304
1305
        PACK_CHECK_BUTTON (vbox2, default_sign_chkbtn,
1306
                           _("Sign message by default"));
1307
        PACK_CHECK_BUTTON (vbox2, default_encrypt_chkbtn,
1308
                           _("Encrypt message by default"));
1309
        PACK_CHECK_BUTTON (vbox2, encrypt_reply_chkbtn,
1310
                           _("Encrypt when replying to encrypted message"));
1311
        PACK_CHECK_BUTTON (vbox2, ascii_armored_chkbtn,
1312
                           _("Use ASCII-armored format for encryption"));
1313
        PACK_CHECK_BUTTON (vbox2, clearsign_chkbtn,
1314
                           _("Use clear text signature"));
1315
        g_signal_connect (G_OBJECT (ascii_armored_chkbtn), "toggled",
1316
                          G_CALLBACK (prefs_account_ascii_armored_warning),
1317
                          NULL);
1318
1319
        PACK_FRAME (vbox1, frame1, _("Sign key"));
1320
1321
        vbox2 = gtk_vbox_new (FALSE, 0);
1322
        gtk_widget_show (vbox2);
1323
        gtk_container_add (GTK_CONTAINER (frame1), vbox2);
1324
        gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1325
1326
        defaultkey_radiobtn = gtk_radio_button_new_with_label
1327
                (NULL, _("Use default GnuPG key"));
1328
        gtk_widget_show (defaultkey_radiobtn);
1329
        gtk_box_pack_start (GTK_BOX (vbox2), defaultkey_radiobtn,
1330
                            FALSE, FALSE, 0);
1331
        g_object_set_data (G_OBJECT (defaultkey_radiobtn), MENU_VAL_ID,
1332
                           GINT_TO_POINTER (SIGN_KEY_DEFAULT));
1333
1334
        emailkey_radiobtn = gtk_radio_button_new_with_label_from_widget
1335
                (GTK_RADIO_BUTTON (defaultkey_radiobtn),
1336
                 _("Select key by your email address"));
1337
        gtk_widget_show (emailkey_radiobtn);
1338
        gtk_box_pack_start (GTK_BOX (vbox2), emailkey_radiobtn,
1339
                            FALSE, FALSE, 0);
1340
        g_object_set_data (G_OBJECT (emailkey_radiobtn), MENU_VAL_ID,
1341
                           GINT_TO_POINTER (SIGN_KEY_BY_FROM));
1342
1343
        customkey_radiobtn = gtk_radio_button_new_with_label_from_widget
1344
                (GTK_RADIO_BUTTON (defaultkey_radiobtn),
1345
                 _("Specify key manually"));
1346
        gtk_widget_show (customkey_radiobtn);
1347
        gtk_box_pack_start (GTK_BOX (vbox2), customkey_radiobtn,
1348
                            FALSE, FALSE, 0);
1349
        g_object_set_data (G_OBJECT (customkey_radiobtn), MENU_VAL_ID,
1350
                           GINT_TO_POINTER (SIGN_KEY_CUSTOM));
1351
1352
        hbox1 = gtk_hbox_new (FALSE, 8);
1353
        gtk_widget_show (hbox1);
1354
        gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
1355
1356
        label = gtk_label_new ("");
1357
        gtk_widget_show (label);
1358
        gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1359
        gtk_widget_set_size_request (label, 16, -1);
1360
1361
        label = gtk_label_new (_("User or key ID:"));
1362
        gtk_widget_show (label);
1363
        gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1364
1365
        customkey_entry = gtk_entry_new ();
1366
        gtk_widget_show (customkey_entry);
1367
        gtk_box_pack_start (GTK_BOX (hbox1), customkey_entry,
1368
                            TRUE, TRUE, 0);
1369
1370
        SET_TOGGLE_SENSITIVITY (customkey_radiobtn, customkey_entry);
1371
1372
        privacy.default_sign_chkbtn    = default_sign_chkbtn;
1373
        privacy.default_encrypt_chkbtn = default_encrypt_chkbtn;
1374
        privacy.encrypt_reply_chkbtn   = encrypt_reply_chkbtn;
1375
        privacy.ascii_armored_chkbtn   = ascii_armored_chkbtn;
1376
        privacy.clearsign_chkbtn       = clearsign_chkbtn;
1377
        privacy.defaultkey_radiobtn    = defaultkey_radiobtn;
1378
        privacy.emailkey_radiobtn      = emailkey_radiobtn;
1379
        privacy.customkey_radiobtn     = customkey_radiobtn;
1380
        privacy.customkey_entry        = customkey_entry;
1381
}
1382
#endif /* USE_GPGME */
1383
1384
#if USE_SSL
1385
1386
#define CREATE_RADIO_BUTTON(box, btn, btn_p, label, data)                \
1387
{                                                                        \
1388
        btn = gtk_radio_button_new_with_label_from_widget                \
1389
                (GTK_RADIO_BUTTON (btn_p), label);                        \
1390
        gtk_widget_show (btn);                                                \
1391
        gtk_box_pack_start (GTK_BOX (box), btn, FALSE, FALSE, 0);        \
1392
        g_object_set_data (G_OBJECT (btn), MENU_VAL_ID,                        \
1393
                           GINT_TO_POINTER (data));                        \
1394
}
1395
1396
#define CREATE_RADIO_BUTTONS(box,                                        \
1397
                             btn1, btn1_label, btn1_data,                \
1398
                             btn2, btn2_label, btn2_data,                \
1399
                             btn3, btn3_label, btn3_data)                \
1400
{                                                                        \
1401
        btn1 = gtk_radio_button_new_with_label(NULL, btn1_label);        \
1402
        gtk_widget_show (btn1);                                                \
1403
        gtk_box_pack_start (GTK_BOX (box), btn1, FALSE, FALSE, 0);        \
1404
        g_object_set_data (G_OBJECT (btn1), MENU_VAL_ID,                \
1405
                           GINT_TO_POINTER (btn1_data));                \
1406
                                                                        \
1407
        CREATE_RADIO_BUTTON(box, btn2, btn1, btn2_label, btn2_data);        \
1408
        CREATE_RADIO_BUTTON(box, btn3, btn1, btn3_label, btn3_data);        \
1409
}
1410
1411
static void prefs_account_ssl_create(void)
1412
{
1413
        GtkWidget *vbox1;
1414
1415
        GtkWidget *pop_frame;
1416
        GtkWidget *vbox2;
1417
        GtkWidget *pop_nossl_radiobtn;
1418
        GtkWidget *pop_ssltunnel_radiobtn;
1419
        GtkWidget *pop_starttls_radiobtn;
1420
1421
        GtkWidget *imap_frame;
1422
        GtkWidget *vbox3;
1423
        GtkWidget *imap_nossl_radiobtn;
1424
        GtkWidget *imap_ssltunnel_radiobtn;
1425
        GtkWidget *imap_starttls_radiobtn;
1426
1427
        GtkWidget *nntp_frame;
1428
        GtkWidget *vbox4;
1429
        GtkWidget *nntp_nossl_radiobtn;
1430
        GtkWidget *nntp_ssltunnel_radiobtn;
1431
1432
        GtkWidget *send_frame;
1433
        GtkWidget *vbox5;
1434
        GtkWidget *smtp_nossl_radiobtn;
1435
        GtkWidget *smtp_ssltunnel_radiobtn;
1436
        GtkWidget *smtp_starttls_radiobtn;
1437
1438
        GtkWidget *vbox6;
1439
        GtkWidget *use_nonblocking_ssl_chkbtn;
1440
        GtkWidget *label;
1441
1442
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
1443
        gtk_widget_show (vbox1);
1444
        gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1445
        gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1446
1447
        PACK_FRAME (vbox1, pop_frame, _("POP3"));
1448
        vbox2 = gtk_vbox_new (FALSE, 0);
1449
        gtk_widget_show (vbox2);
1450
        gtk_container_add (GTK_CONTAINER (pop_frame), vbox2);
1451
        gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1452
1453
        CREATE_RADIO_BUTTONS(vbox2,
1454
                             pop_nossl_radiobtn,
1455
                             _("Don't use SSL"),
1456
                             SSL_NONE,
1457
                             pop_ssltunnel_radiobtn,
1458
                             _("Use SSL for POP3 connection"),
1459
                             SSL_TUNNEL,
1460
                             pop_starttls_radiobtn,
1461
                             _("Use STARTTLS command to start SSL session"),
1462
                             SSL_STARTTLS);
1463
1464
        PACK_FRAME (vbox1, imap_frame, _("IMAP4"));
1465
        vbox3 = gtk_vbox_new (FALSE, 0);
1466
        gtk_widget_show (vbox3);
1467
        gtk_container_add (GTK_CONTAINER (imap_frame), vbox3);
1468
        gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
1469
1470
        CREATE_RADIO_BUTTONS(vbox3,
1471
                             imap_nossl_radiobtn,
1472
                             _("Don't use SSL"),
1473
                             SSL_NONE,
1474
                             imap_ssltunnel_radiobtn,
1475
                             _("Use SSL for IMAP4 connection"),
1476
                             SSL_TUNNEL,
1477
                             imap_starttls_radiobtn,
1478
                             _("Use STARTTLS command to start SSL session"),
1479
                             SSL_STARTTLS);
1480
1481
        PACK_FRAME (vbox1, nntp_frame, _("NNTP"));
1482
        vbox4 = gtk_vbox_new (FALSE, 0);
1483
        gtk_widget_show (vbox4);
1484
        gtk_container_add (GTK_CONTAINER (nntp_frame), vbox4);
1485
        gtk_container_set_border_width (GTK_CONTAINER (vbox4), 8);
1486
1487
        nntp_nossl_radiobtn =
1488
                gtk_radio_button_new_with_label (NULL, _("Don't use SSL"));
1489
        gtk_widget_show (nntp_nossl_radiobtn);
1490
        gtk_box_pack_start (GTK_BOX (vbox4), nntp_nossl_radiobtn,
1491
                            FALSE, FALSE, 0);
1492
        g_object_set_data (G_OBJECT (nntp_nossl_radiobtn), MENU_VAL_ID,
1493
                           GINT_TO_POINTER (SSL_NONE));
1494
1495
        CREATE_RADIO_BUTTON(vbox4, nntp_ssltunnel_radiobtn, nntp_nossl_radiobtn,
1496
                            _("Use SSL for NNTP connection"), SSL_TUNNEL);
1497
1498
        PACK_FRAME (vbox1, send_frame, _("Send (SMTP)"));
1499
        vbox5 = gtk_vbox_new (FALSE, 0);
1500
        gtk_widget_show (vbox5);
1501
        gtk_container_add (GTK_CONTAINER (send_frame), vbox5);
1502
        gtk_container_set_border_width (GTK_CONTAINER (vbox5), 8);
1503
1504
        CREATE_RADIO_BUTTONS(vbox5,
1505
                             smtp_nossl_radiobtn,
1506
                             _("Don't use SSL"),
1507
                             SSL_NONE,
1508
                             smtp_ssltunnel_radiobtn,
1509
                             _("Use SSL for SMTP connection"),
1510
                             SSL_TUNNEL,
1511
                             smtp_starttls_radiobtn,
1512
                             _("Use STARTTLS command to start SSL session"),
1513
                             SSL_STARTTLS);
1514
1515
        vbox6 = gtk_vbox_new (FALSE, 0);
1516
        gtk_widget_show (vbox6);
1517
        gtk_box_pack_start (GTK_BOX (vbox1), vbox6, FALSE, FALSE, 0);
1518
1519
        PACK_CHECK_BUTTON(vbox6, use_nonblocking_ssl_chkbtn,
1520
                          _("Use non-blocking SSL"));
1521
        PACK_SMALL_LABEL
1522
                (vbox6, label,
1523
                 _("Turn this off if you have problems in SSL connection."));
1524
1525
        ssl.pop_frame               = pop_frame;
1526
        ssl.pop_nossl_radiobtn      = pop_nossl_radiobtn;
1527
        ssl.pop_ssltunnel_radiobtn  = pop_ssltunnel_radiobtn;
1528
        ssl.pop_starttls_radiobtn   = pop_starttls_radiobtn;
1529
1530
        ssl.imap_frame              = imap_frame;
1531
        ssl.imap_nossl_radiobtn     = imap_nossl_radiobtn;
1532
        ssl.imap_ssltunnel_radiobtn = imap_ssltunnel_radiobtn;
1533
        ssl.imap_starttls_radiobtn  = imap_starttls_radiobtn;
1534
1535
        ssl.nntp_frame              = nntp_frame;
1536
        ssl.nntp_nossl_radiobtn     = nntp_nossl_radiobtn;
1537
        ssl.nntp_ssltunnel_radiobtn = nntp_ssltunnel_radiobtn;
1538
1539
        ssl.send_frame              = send_frame;
1540
        ssl.smtp_nossl_radiobtn     = smtp_nossl_radiobtn;
1541
        ssl.smtp_ssltunnel_radiobtn = smtp_ssltunnel_radiobtn;
1542
        ssl.smtp_starttls_radiobtn  = smtp_starttls_radiobtn;
1543
1544
        ssl.use_nonblocking_ssl_chkbtn = use_nonblocking_ssl_chkbtn;
1545
}
1546
1547
#undef CREATE_RADIO_BUTTONS
1548
#undef CREATE_RADIO_BUTTON
1549
1550
#endif /* USE_SSL */
1551
1552
static void prefs_account_advanced_create(void)
1553
{
1554
        GtkWidget *vbox1;
1555
        GtkWidget *vbox2;
1556
        GtkWidget *hbox1;
1557
        GtkWidget *checkbtn_smtpport;
1558
        GtkWidget *entry_smtpport;
1559
        GtkWidget *hbox_popport;
1560
        GtkWidget *checkbtn_popport;
1561
        GtkWidget *entry_popport;
1562
        GtkWidget *hbox_imapport;
1563
        GtkWidget *checkbtn_imapport;
1564
        GtkWidget *entry_imapport;
1565
        GtkWidget *hbox_nntpport;
1566
        GtkWidget *checkbtn_nntpport;
1567
        GtkWidget *entry_nntpport;
1568
        GtkWidget *checkbtn_domain;
1569
        GtkWidget *entry_domain;
1570
        GtkWidget *imap_frame;
1571
        GtkWidget *imapdir_label;
1572
        GtkWidget *imapdir_entry;
1573
        GtkWidget *folder_frame;
1574
        GtkWidget *vbox3;
1575
        GtkWidget *table;
1576
        GtkWidget *sent_folder_chkbtn;
1577
        GtkWidget *sent_folder_entry;
1578
        GtkWidget *draft_folder_chkbtn;
1579
        GtkWidget *draft_folder_entry;
1580
        GtkWidget *trash_folder_chkbtn;
1581
        GtkWidget *trash_folder_entry;
1582
1583
#define PACK_HBOX(hbox) \
1584
{ \
1585
        hbox = gtk_hbox_new (FALSE, 8); \
1586
        gtk_widget_show (hbox); \
1587
        gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); \
1588
}
1589
1590
#define PACK_PORT_ENTRY(box, entry) \
1591
{ \
1592
        entry = gtk_entry_new (); \
1593
        gtk_entry_set_max_length (GTK_ENTRY(entry), 5); \
1594
        gtk_widget_show (entry); \
1595
        gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 0); \
1596
        gtk_widget_set_size_request (entry, 64, -1); \
1597
}
1598
1599
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
1600
        gtk_widget_show (vbox1);
1601
        gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1602
        gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1603
1604
        vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW_2);
1605
        gtk_widget_show (vbox2);
1606
        gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1607
1608
        PACK_HBOX (hbox1);
1609
        PACK_CHECK_BUTTON (hbox1, checkbtn_smtpport, _("Specify SMTP port"));
1610
        PACK_PORT_ENTRY (hbox1, entry_smtpport);
1611
        SET_TOGGLE_SENSITIVITY (checkbtn_smtpport, entry_smtpport);
1612
1613
        PACK_HBOX (hbox_popport);
1614
        PACK_CHECK_BUTTON (hbox_popport, checkbtn_popport,
1615
                           _("Specify POP3 port"));
1616
        PACK_PORT_ENTRY (hbox_popport, entry_popport);
1617
        SET_TOGGLE_SENSITIVITY (checkbtn_popport, entry_popport);
1618
1619
        PACK_HBOX (hbox_imapport);
1620
        PACK_CHECK_BUTTON (hbox_imapport, checkbtn_imapport,
1621
                           _("Specify IMAP4 port"));
1622
        PACK_PORT_ENTRY (hbox_imapport, entry_imapport);
1623
        SET_TOGGLE_SENSITIVITY (checkbtn_imapport, entry_imapport);
1624
1625
        PACK_HBOX (hbox_nntpport);
1626
        PACK_CHECK_BUTTON (hbox_nntpport, checkbtn_nntpport,
1627
                           _("Specify NNTP port"));
1628
        PACK_PORT_ENTRY (hbox_nntpport, entry_nntpport);
1629
        SET_TOGGLE_SENSITIVITY (checkbtn_nntpport, entry_nntpport);
1630
1631
        PACK_HBOX (hbox1);
1632
        PACK_CHECK_BUTTON (hbox1, checkbtn_domain, _("Specify domain name"));
1633
1634
        entry_domain = gtk_entry_new ();
1635
        gtk_widget_show (entry_domain);
1636
        gtk_box_pack_start (GTK_BOX (hbox1), entry_domain, TRUE, TRUE, 0);
1637
        SET_TOGGLE_SENSITIVITY (checkbtn_domain, entry_domain);
1638
1639
        PACK_FRAME (vbox1, imap_frame, _("IMAP4"));
1640
1641
        vbox3 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1642
        gtk_widget_show (vbox3);
1643
        gtk_container_add (GTK_CONTAINER (imap_frame), vbox3);
1644
        gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
1645
1646
        hbox1 = gtk_hbox_new (FALSE, 8);
1647
        gtk_widget_show (hbox1);
1648
        gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1649
1650
        imapdir_label = gtk_label_new (_("IMAP server directory"));
1651
        gtk_widget_show (imapdir_label);
1652
        gtk_box_pack_start (GTK_BOX (hbox1), imapdir_label, FALSE, FALSE, 0);
1653
1654
        imapdir_entry = gtk_entry_new();
1655
        gtk_widget_show (imapdir_entry);
1656
        gtk_box_pack_start (GTK_BOX (hbox1), imapdir_entry, TRUE, TRUE, 0);
1657
1658
#undef PACK_HBOX
1659
#undef PACK_PORT_ENTRY
1660
1661
        /* special folder setting (maybe these options are redundant) */
1662
1663
        PACK_FRAME (vbox1, folder_frame, _("Folder"));
1664
1665
        vbox3 = gtk_vbox_new (FALSE, 0);
1666
        gtk_widget_show (vbox3);
1667
        gtk_container_add (GTK_CONTAINER (folder_frame), vbox3);
1668
        gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8);
1669
1670
        table = gtk_table_new (3, 3, FALSE);
1671
        gtk_widget_show (table);
1672
        gtk_container_add (GTK_CONTAINER (vbox3), table);
1673
        gtk_table_set_row_spacings (GTK_TABLE (table), VSPACING_NARROW_2);
1674
        gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1675
1676
#define SET_CHECK_BTN_AND_ENTRY(label, chkbtn, entry, n)                \
1677
{                                                                        \
1678
        GtkWidget *button;                                                \
1679
                                                                        \
1680
        chkbtn = gtk_check_button_new_with_label (label);                \
1681
        gtk_widget_show (chkbtn);                                        \
1682
        gtk_table_attach (GTK_TABLE (table), chkbtn,                        \
1683
                          0, 1, n, n + 1, GTK_FILL, 0, 0, 0);                \
1684
                                                                        \
1685
        entry = gtk_entry_new ();                                        \
1686
        gtk_widget_show (entry);                                        \
1687
        gtk_table_attach (GTK_TABLE (table), entry, 1, 2, n, n + 1,        \
1688
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL,                \
1689
                          GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);        \
1690
                                                                        \
1691
        button = gtk_button_new_with_label (_(" ... "));                \
1692
        gtk_widget_show (button);                                        \
1693
        gtk_table_attach (GTK_TABLE (table), button,                        \
1694
                          2, 3, n, n + 1, GTK_FILL, 0, 0, 0);                \
1695
        g_signal_connect                                                \
1696
                (G_OBJECT (button), "clicked",                                \
1697
                 G_CALLBACK (prefs_account_select_folder_cb),                \
1698
                 entry);                                                \
1699
                                                                        \
1700
        SET_TOGGLE_SENSITIVITY (chkbtn, entry);                                \
1701
        SET_TOGGLE_SENSITIVITY (chkbtn, button);                        \
1702
}
1703
1704
        SET_CHECK_BTN_AND_ENTRY(_("Put sent messages in"),
1705
                                sent_folder_chkbtn, sent_folder_entry, 0);
1706
        SET_CHECK_BTN_AND_ENTRY(_("Put draft messages in"),
1707
                                draft_folder_chkbtn, draft_folder_entry, 1);
1708
        SET_CHECK_BTN_AND_ENTRY(_("Put deleted messages in"),
1709
                                trash_folder_chkbtn, trash_folder_entry, 2);
1710
1711
        advanced.smtpport_chkbtn        = checkbtn_smtpport;
1712
        advanced.smtpport_entry                = entry_smtpport;
1713
        advanced.popport_hbox                = hbox_popport;
1714
        advanced.popport_chkbtn                = checkbtn_popport;
1715
        advanced.popport_entry                = entry_popport;
1716
        advanced.imapport_hbox                = hbox_imapport;
1717
        advanced.imapport_chkbtn        = checkbtn_imapport;
1718
        advanced.imapport_entry                = entry_imapport;
1719
        advanced.nntpport_hbox                = hbox_nntpport;
1720
        advanced.nntpport_chkbtn        = checkbtn_nntpport;
1721
        advanced.nntpport_entry                = entry_nntpport;
1722
        advanced.domain_chkbtn                = checkbtn_domain;
1723
        advanced.domain_entry                = entry_domain;
1724
1725
        advanced.imap_frame             = imap_frame;
1726
        advanced.imapdir_entry          = imapdir_entry;
1727
1728
        advanced.sent_folder_chkbtn  = sent_folder_chkbtn;
1729
        advanced.sent_folder_entry   = sent_folder_entry;
1730
        advanced.draft_folder_chkbtn = draft_folder_chkbtn;
1731
        advanced.draft_folder_entry  = draft_folder_entry;
1732
        advanced.trash_folder_chkbtn = trash_folder_chkbtn;
1733
        advanced.trash_folder_entry  = trash_folder_entry;
1734
}
1735
1736
static gint prefs_account_deleted(GtkWidget *widget, GdkEventAny *event,
1737
                                  gpointer data)
1738
{
1739
        prefs_account_cancel();
1740
        return TRUE;
1741
}
1742
1743
static gboolean prefs_account_key_pressed(GtkWidget *widget, GdkEventKey *event,
1744
                                          gpointer data)
1745
{
1746
        if (event && event->keyval == GDK_Escape)
1747
                prefs_account_cancel();
1748
        return FALSE;
1749
}
1750
1751
static void prefs_account_ok(void)
1752
{
1753
        if (prefs_account_apply() == 0)
1754
                gtk_main_quit();
1755
}
1756
1757
static gint prefs_account_apply(void)
1758
{
1759
        RecvProtocol protocol;
1760
        GtkWidget *menu;
1761
        GtkWidget *menuitem;
1762
1763
        menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(basic.protocol_optmenu));
1764
        menuitem = gtk_menu_get_active(GTK_MENU(menu));
1765
        protocol = GPOINTER_TO_INT
1766
                (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
1767
1768
        if (*gtk_entry_get_text(GTK_ENTRY(basic.acname_entry)) == '\0') {
1769
                alertpanel_error(_("Account name is not entered."));
1770
                return -1;
1771
        }
1772
        if (*gtk_entry_get_text(GTK_ENTRY(basic.addr_entry)) == '\0') {
1773
                alertpanel_error(_("Mail address is not entered."));
1774
                return -1;
1775
        }
1776
        if ((protocol == A_POP3 || protocol == A_LOCAL) &&
1777
            *gtk_entry_get_text(GTK_ENTRY(basic.smtpserv_entry)) == '\0') {
1778
                alertpanel_error(_("SMTP server is not entered."));
1779
                return -1;
1780
        }
1781
        if ((protocol == A_POP3 || protocol == A_IMAP4) &&
1782
            *gtk_entry_get_text(GTK_ENTRY(basic.uid_entry)) == '\0') {
1783
                alertpanel_error(_("User ID is not entered."));
1784
                return -1;
1785
        }
1786
        if (protocol == A_POP3 &&
1787
            *gtk_entry_get_text(GTK_ENTRY(basic.recvserv_entry)) == '\0') {
1788
                alertpanel_error(_("POP3 server is not entered."));
1789
                return -1;
1790
        }
1791
        if (protocol == A_IMAP4 &&
1792
            *gtk_entry_get_text(GTK_ENTRY(basic.recvserv_entry)) == '\0') {
1793
                alertpanel_error(_("IMAP4 server is not entered."));
1794
                return -1;
1795
        }
1796
        if (protocol == A_NNTP &&
1797
            *gtk_entry_get_text(GTK_ENTRY(basic.nntpserv_entry)) == '\0') {
1798
                alertpanel_error(_("NNTP server is not entered."));
1799
                return -1;
1800
        }
1801
1802
        prefs_set_data_from_dialog(prefs_account_get_params());
1803
        return 0;
1804
}
1805
1806
static void prefs_account_cancel(void)
1807
{
1808
        cancelled = TRUE;
1809
        gtk_main_quit();
1810
}
1811
1812
static void prefs_account_select_folder_cb(GtkWidget *widget, gpointer data)
1813
{
1814
        FolderItem *item;
1815
        gchar *id;
1816
1817
        item = foldersel_folder_sel(NULL, FOLDER_SEL_COPY, NULL);
1818
        if (item && item->path) {
1819
                id = folder_item_get_identifier(item);
1820
                if (id) {
1821
                        gtk_entry_set_text(GTK_ENTRY(data), id);
1822
                        g_free(id);
1823
                }
1824
        }
1825
}
1826
1827
static void prefs_account_edit_custom_header(void)
1828
{
1829
        prefs_custom_header_open(prefs_account_get_tmp_prefs());
1830
}
1831
1832
static void prefs_account_enum_set_data_from_radiobtn(PrefParam *pparam)
1833
{
1834
        PrefsUIData *ui_data;
1835
        GtkRadioButton *radiobtn;
1836
        GSList *group;
1837
1838
        ui_data = (PrefsUIData *)pparam->ui_data;
1839
        g_return_if_fail(ui_data != NULL);
1840
        g_return_if_fail(*ui_data->widget != NULL);
1841
1842
        radiobtn = GTK_RADIO_BUTTON(*ui_data->widget);
1843
        group = gtk_radio_button_get_group(radiobtn);
1844
        while (group != NULL) {
1845
                GtkToggleButton *btn = GTK_TOGGLE_BUTTON(group->data);
1846
                if (gtk_toggle_button_get_active(btn)) {
1847
                        *((gint *)pparam->data) = GPOINTER_TO_INT
1848
                                (g_object_get_data(G_OBJECT(btn), MENU_VAL_ID));
1849
                        break;
1850
                }
1851
                group = group->next;
1852
        }
1853
}
1854
1855
static void prefs_account_enum_set_radiobtn(PrefParam *pparam)
1856
{
1857
        PrefsUIData *ui_data;
1858
        GtkRadioButton *radiobtn;
1859
        GSList *group;
1860
        gpointer data;
1861
1862
        ui_data = (PrefsUIData *)pparam->ui_data;
1863
        g_return_if_fail(ui_data != NULL);
1864
        g_return_if_fail(*ui_data->widget != NULL);
1865
1866
        data = GINT_TO_POINTER(*((gint *)pparam->data));
1867
        radiobtn = GTK_RADIO_BUTTON(*ui_data->widget);
1868
        group = gtk_radio_button_get_group(radiobtn);
1869
        while (group != NULL) {
1870
                GtkToggleButton *btn = GTK_TOGGLE_BUTTON(group->data);
1871
                gpointer data1;
1872
1873
                data1 = g_object_get_data(G_OBJECT(btn), MENU_VAL_ID);
1874
                if (data1 == data) {
1875
                        gtk_toggle_button_set_active(btn, TRUE);
1876
                        break;
1877
                }
1878
                group = group->next;
1879
        }
1880
}
1881
1882
1883
#if USE_GPGME
1884
static void prefs_account_ascii_armored_warning(GtkWidget *widget)
1885
{
1886
        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) &&
1887
            gtk_notebook_get_current_page(GTK_NOTEBOOK(dialog.notebook)) > 0)
1888
                alertpanel_warning
1889
                        (_("It's not recommended to use the old style ASCII-armored\n"
1890
                           "mode for encrypted messages. It doesn't comply with the\n"
1891
                           "RFC 3156 - MIME Security with OpenPGP."));
1892
}
1893
#endif /* USE_GPGME */
1894
1895
static void prefs_account_protocol_set_data_from_optmenu(PrefParam *pparam)
1896
{
1897
        PrefsUIData *ui_data;
1898
        GtkWidget *menu;
1899
        GtkWidget *menuitem;
1900
1901
        ui_data = (PrefsUIData *)pparam->ui_data;
1902
        g_return_if_fail(ui_data != NULL);
1903
        g_return_if_fail(*ui_data->widget != NULL);
1904
1905
        menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*ui_data->widget));
1906
        menuitem = gtk_menu_get_active(GTK_MENU(menu));
1907
        *((RecvProtocol *)pparam->data) = GPOINTER_TO_INT
1908
                (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
1909
}
1910
1911
static void prefs_account_protocol_set_optmenu(PrefParam *pparam)
1912
{
1913
        PrefsUIData *ui_data;
1914
        RecvProtocol protocol;
1915
        GtkOptionMenu *optmenu;
1916
        GtkWidget *menu;
1917
        GtkWidget *menuitem;
1918
        gint index;
1919
1920
        ui_data = (PrefsUIData *)pparam->ui_data;
1921
        g_return_if_fail(ui_data != NULL);
1922
        g_return_if_fail(*ui_data->widget != NULL);
1923
1924
        optmenu = GTK_OPTION_MENU(*ui_data->widget);
1925
1926
        protocol = *((RecvProtocol *)pparam->data);
1927
        index = menu_find_option_menu_index
1928
                (optmenu, GINT_TO_POINTER(protocol), NULL);
1929
        if (index < 0) return;
1930
        gtk_option_menu_set_history(optmenu, index);
1931
1932
        menu = gtk_option_menu_get_menu(optmenu);
1933
        menu_set_insensitive_all(GTK_MENU_SHELL(menu));
1934
1935
        menuitem = gtk_menu_get_active(GTK_MENU(menu));
1936
        gtk_widget_set_sensitive(menuitem, TRUE);
1937
        gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
1938
}
1939
1940
static void prefs_account_imap_auth_type_set_data_from_optmenu(PrefParam *pparam)
1941
{
1942
        PrefsUIData *ui_data;
1943
        GtkWidget *menu;
1944
        GtkWidget *menuitem;
1945
1946
        ui_data = (PrefsUIData *)pparam->ui_data;
1947
        g_return_if_fail(ui_data != NULL);
1948
        g_return_if_fail(*ui_data->widget != NULL);
1949
1950
        menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*ui_data->widget));
1951
        menuitem = gtk_menu_get_active(GTK_MENU(menu));
1952
        *((RecvProtocol *)pparam->data) = GPOINTER_TO_INT
1953
                (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
1954
}
1955
1956
static void prefs_account_imap_auth_type_set_optmenu(PrefParam *pparam)
1957
{
1958
        PrefsUIData *ui_data;
1959
        IMAPAuthType type = *((IMAPAuthType *)pparam->data);
1960
        GtkOptionMenu *optmenu;
1961
        GtkWidget *menu;
1962
        GtkWidget *menuitem;
1963
1964
        ui_data = (PrefsUIData *)pparam->ui_data;
1965
        g_return_if_fail(ui_data != NULL);
1966
        g_return_if_fail(*ui_data->widget != NULL);
1967
1968
        optmenu = GTK_OPTION_MENU(*ui_data->widget);
1969
1970
        switch (type) {
1971
        case IMAP_AUTH_LOGIN:
1972
                gtk_option_menu_set_history(optmenu, 1);
1973
                break;
1974
        case IMAP_AUTH_CRAM_MD5:
1975
                gtk_option_menu_set_history(optmenu, 2);
1976
                break;
1977
        case 0:
1978
        default:
1979
                gtk_option_menu_set_history(optmenu, 0);
1980
        }
1981
1982
        menu = gtk_option_menu_get_menu(optmenu);
1983
        menuitem = gtk_menu_get_active(GTK_MENU(menu));
1984
        gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
1985
}
1986
1987
static void prefs_account_smtp_auth_type_set_data_from_optmenu(PrefParam *pparam)
1988
{
1989
        PrefsUIData *ui_data;
1990
        GtkWidget *menu;
1991
        GtkWidget *menuitem;
1992
1993
        ui_data = (PrefsUIData *)pparam->ui_data;
1994
        g_return_if_fail(ui_data != NULL);
1995
        g_return_if_fail(*ui_data->widget != NULL);
1996
1997
        menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*ui_data->widget));
1998
        menuitem = gtk_menu_get_active(GTK_MENU(menu));
1999
        *((RecvProtocol *)pparam->data) = GPOINTER_TO_INT
2000
                (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2001
}
2002
2003
static void prefs_account_smtp_auth_type_set_optmenu(PrefParam *pparam)
2004
{
2005
        PrefsUIData *ui_data;
2006
        SMTPAuthType type = *((SMTPAuthType *)pparam->data);
2007
        GtkOptionMenu *optmenu;
2008
        GtkWidget *menu;
2009
        GtkWidget *menuitem;
2010
2011
        ui_data = (PrefsUIData *)pparam->ui_data;
2012
        g_return_if_fail(ui_data != NULL);
2013
        g_return_if_fail(*ui_data->widget != NULL);
2014
2015
        optmenu = GTK_OPTION_MENU(*ui_data->widget);
2016
2017
        switch (type) {
2018
        case SMTPAUTH_PLAIN:
2019
                gtk_option_menu_set_history(optmenu, 1);
2020
                break;
2021
        case SMTPAUTH_LOGIN:
2022
                gtk_option_menu_set_history(optmenu, 2);
2023
                break;
2024
        case SMTPAUTH_CRAM_MD5:
2025
                gtk_option_menu_set_history(optmenu, 3);
2026
                break;
2027
        case SMTPAUTH_DIGEST_MD5:
2028
                gtk_option_menu_set_history(optmenu, 4);
2029
                break;
2030
        case 0:
2031
        default:
2032
                gtk_option_menu_set_history(optmenu, 0);
2033
        }
2034
2035
        menu = gtk_option_menu_get_menu(optmenu);
2036
        menuitem = gtk_menu_get_active(GTK_MENU(menu));
2037
        gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2038
}
2039
2040
static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
2041
{
2042
        RecvProtocol protocol;
2043
        gboolean active;
2044
        PrefsAccount *tmp_ac_prefs;
2045
2046
        tmp_ac_prefs = prefs_account_get_tmp_prefs();
2047
2048
        protocol = GPOINTER_TO_INT
2049
                (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2050
2051
        switch(protocol) {
2052
        case A_NNTP:
2053
                gtk_widget_show(basic.nntpserv_label);
2054
                gtk_widget_show(basic.nntpserv_entry);
2055
                gtk_widget_show(basic.nntpauth_chkbtn);
2056
                gtk_widget_hide(basic.recvserv_label);
2057
                gtk_widget_hide(basic.recvserv_entry);
2058
                gtk_widget_hide(basic.smtpserv_label);
2059
                gtk_widget_hide(basic.smtpserv_entry);
2060
                active = gtk_toggle_button_get_active
2061
                        (GTK_TOGGLE_BUTTON(basic.nntpauth_chkbtn));
2062
                gtk_widget_set_sensitive(basic.uid_label,  active);
2063
                gtk_widget_set_sensitive(basic.pass_label, active);
2064
                gtk_widget_set_sensitive(basic.uid_entry,  active);
2065
                gtk_widget_set_sensitive(basic.pass_entry, active);
2066
                gtk_widget_hide(receive.pop3_frame);
2067
                gtk_widget_hide(receive.imap_frame);
2068
                gtk_widget_show(receive.nntp_frame);
2069
                gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, TRUE);
2070
2071
                if (!tmp_ac_prefs->account_name) {
2072
                        gtk_toggle_button_set_active
2073
                                (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
2074
                                 FALSE);
2075
                }
2076
2077
#if USE_SSL
2078
                gtk_widget_hide(ssl.pop_frame);
2079
                gtk_widget_hide(ssl.imap_frame);
2080
                gtk_widget_show(ssl.nntp_frame);
2081
                gtk_widget_hide(ssl.send_frame);
2082
#endif
2083
                gtk_widget_hide(advanced.popport_hbox);
2084
                gtk_widget_hide(advanced.imapport_hbox);
2085
                gtk_widget_show(advanced.nntpport_hbox);
2086
                gtk_widget_hide(advanced.imap_frame);
2087
                break;
2088
        case A_LOCAL:
2089
                gtk_widget_hide(basic.nntpserv_label);
2090
                gtk_widget_hide(basic.nntpserv_entry);
2091
                gtk_widget_hide(basic.nntpauth_chkbtn);
2092
                gtk_widget_set_sensitive(basic.recvserv_label, FALSE);
2093
                gtk_widget_set_sensitive(basic.recvserv_entry, FALSE);
2094
                gtk_widget_show(basic.recvserv_label);
2095
                gtk_widget_show(basic.recvserv_entry);
2096
                gtk_widget_show(basic.smtpserv_label);
2097
                gtk_widget_show(basic.smtpserv_entry);
2098
                gtk_widget_set_sensitive(basic.uid_label,  FALSE);
2099
                gtk_widget_set_sensitive(basic.pass_label, FALSE);
2100
                gtk_widget_set_sensitive(basic.uid_entry,  FALSE);
2101
                gtk_widget_set_sensitive(basic.pass_entry, FALSE);
2102
                gtk_widget_hide(receive.pop3_frame);
2103
                gtk_widget_hide(receive.imap_frame);
2104
                gtk_widget_hide(receive.nntp_frame);
2105
                gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, FALSE);
2106
2107
                if (!tmp_ac_prefs->account_name) {
2108
                        gtk_toggle_button_set_active
2109
                                (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
2110
                                 TRUE);
2111
                }
2112
2113
#if USE_SSL
2114
                gtk_widget_hide(ssl.pop_frame);
2115
                gtk_widget_hide(ssl.imap_frame);
2116
                gtk_widget_hide(ssl.nntp_frame);
2117
                gtk_widget_show(ssl.send_frame);
2118
#endif
2119
                gtk_widget_hide(advanced.popport_hbox);
2120
                gtk_widget_hide(advanced.imapport_hbox);
2121
                gtk_widget_hide(advanced.nntpport_hbox);
2122
                gtk_widget_hide(advanced.imap_frame);
2123
                break;
2124
        case A_IMAP4:
2125
                gtk_widget_hide(basic.nntpserv_label);
2126
                gtk_widget_hide(basic.nntpserv_entry);
2127
                gtk_widget_hide(basic.nntpauth_chkbtn);
2128
                gtk_widget_set_sensitive(basic.recvserv_label, TRUE);
2129
                gtk_widget_set_sensitive(basic.recvserv_entry, TRUE);
2130
                gtk_widget_show(basic.recvserv_label);
2131
                gtk_widget_show(basic.recvserv_entry);
2132
                gtk_widget_show(basic.smtpserv_label);
2133
                gtk_widget_show(basic.smtpserv_entry);
2134
                gtk_widget_set_sensitive(basic.uid_label,  TRUE);
2135
                gtk_widget_set_sensitive(basic.pass_label, TRUE);
2136
                gtk_widget_set_sensitive(basic.uid_entry,  TRUE);
2137
                gtk_widget_set_sensitive(basic.pass_entry, TRUE);
2138
                gtk_widget_hide(receive.pop3_frame);
2139
                gtk_widget_show(receive.imap_frame);
2140
                gtk_widget_hide(receive.nntp_frame);
2141
                gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, TRUE);
2142
2143
                if (!tmp_ac_prefs->account_name) {
2144
                        gtk_toggle_button_set_active
2145
                                (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
2146
                                 FALSE);
2147
                }
2148
2149
#if USE_SSL
2150
                gtk_widget_hide(ssl.pop_frame);
2151
                gtk_widget_show(ssl.imap_frame);
2152
                gtk_widget_hide(ssl.nntp_frame);
2153
                gtk_widget_show(ssl.send_frame);
2154
#endif
2155
                gtk_widget_hide(advanced.popport_hbox);
2156
                gtk_widget_show(advanced.imapport_hbox);
2157
                gtk_widget_hide(advanced.nntpport_hbox);
2158
                gtk_widget_show(advanced.imap_frame);
2159
                break;
2160
        case A_POP3:
2161
        default:
2162
                gtk_widget_hide(basic.nntpserv_label);
2163
                gtk_widget_hide(basic.nntpserv_entry);
2164
                gtk_widget_hide(basic.nntpauth_chkbtn);
2165
                gtk_widget_set_sensitive(basic.recvserv_label, TRUE);
2166
                gtk_widget_set_sensitive(basic.recvserv_entry, TRUE);
2167
                gtk_widget_show(basic.recvserv_label);
2168
                gtk_widget_show(basic.recvserv_entry);
2169
                gtk_widget_show(basic.smtpserv_label);
2170
                gtk_widget_show(basic.smtpserv_entry);
2171
                gtk_widget_set_sensitive(basic.uid_label,  TRUE);
2172
                gtk_widget_set_sensitive(basic.pass_label, TRUE);
2173
                gtk_widget_set_sensitive(basic.uid_entry,  TRUE);
2174
                gtk_widget_set_sensitive(basic.pass_entry, TRUE);
2175
                gtk_widget_show(receive.pop3_frame);
2176
                gtk_widget_hide(receive.imap_frame);
2177
                gtk_widget_hide(receive.nntp_frame);
2178
                gtk_widget_set_sensitive(receive.recvatgetall_chkbtn, TRUE);
2179
2180
                if (!tmp_ac_prefs->account_name) {
2181
                        gtk_toggle_button_set_active
2182
                                (GTK_TOGGLE_BUTTON(receive.recvatgetall_chkbtn),
2183
                                 TRUE);
2184
                }
2185
2186
#if USE_SSL
2187
                gtk_widget_show(ssl.pop_frame);
2188
                gtk_widget_hide(ssl.imap_frame);
2189
                gtk_widget_hide(ssl.nntp_frame);
2190
                gtk_widget_show(ssl.send_frame);
2191
#endif
2192
                gtk_widget_show(advanced.popport_hbox);
2193
                gtk_widget_hide(advanced.imapport_hbox);
2194
                gtk_widget_hide(advanced.nntpport_hbox);
2195
                gtk_widget_hide(advanced.imap_frame);
2196
                break;
2197
        }
2198
2199
        gtk_widget_queue_resize(basic.serv_frame);
2200
}