Statistics
| Revision:

root / src / prefs_account_dialog.c @ 3036

History | View | Annotate | Download (83.2 kB)

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