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