2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2003 Hiroyuki Yamamoto
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.
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.
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.
28 #include <gdk/gdkkeysyms.h>
33 #include <sys/types.h>
39 #include "prefs_gtk.h"
40 #include "prefs_common.h"
41 #include "prefs_display_header.h"
42 #include "prefs_summary_column.h"
43 #include "mainwindow.h"
44 #include "summaryview.h"
45 #include "messageview.h"
46 #include "manage_window.h"
52 #include "alertpanel.h"
55 #include "folderview.h"
56 #include "stock_pixmap.h"
57 #include "quote_fmt.h"
60 #include "gtkaspell.h"
63 PrefsCommon prefs_common;
65 static PrefsDialog dialog;
67 static struct Receive {
68 GtkWidget *checkbtn_incext;
69 GtkWidget *entry_incext;
70 GtkWidget *button_incext;
72 GtkWidget *checkbtn_local;
73 GtkWidget *checkbtn_filter_on_inc;
74 GtkWidget *entry_spool;
76 GtkWidget *checkbtn_autochk;
77 GtkWidget *spinbtn_autochk;
78 GtkObject *spinbtn_autochk_adj;
80 GtkWidget *checkbtn_chkonstartup;
81 GtkWidget *checkbtn_scan_after_inc;
84 GtkWidget *checkbtn_newmail_auto;
85 GtkWidget *checkbtn_newmail_manu;
86 GtkWidget *entry_newmail_notify_cmd;
87 GtkWidget *hbox_newmail_notify;
91 GtkWidget *checkbtn_extsend;
92 GtkWidget *entry_extsend;
93 GtkWidget *button_extsend;
95 GtkWidget *checkbtn_savemsg;
96 GtkWidget *checkbtn_queuemsg;
98 GtkWidget *optmenu_charset;
99 GtkWidget *optmenu_encoding_method;
102 static struct Compose {
103 GtkWidget *entry_fw_quotemark;
104 GtkWidget *text_fw_quotefmt;
106 GtkWidget *checkbtn_autoextedit;
107 GtkWidget *spinbtn_undolevel;
108 GtkObject *spinbtn_undolevel_adj;
109 GtkWidget *spinbtn_linewrap;
110 GtkObject *spinbtn_linewrap_adj;
111 GtkWidget *checkbtn_wrapquote;
112 GtkWidget *checkbtn_autowrap;
113 GtkWidget *checkbtn_wrapatsend;
115 GtkWidget *checkbtn_reply_account_autosel;
116 GtkWidget *checkbtn_forward_account_autosel;
117 GtkWidget *checkbtn_reedit_account_autosel;
118 GtkWidget *checkbtn_quote;
119 GtkWidget *checkbtn_default_reply_list;
120 GtkWidget *checkbtn_forward_as_attachment;
121 GtkWidget *checkbtn_redirect_keep_from;
122 GtkWidget *checkbtn_smart_wrapping;
123 GtkWidget *checkbtn_block_cursor;
124 GtkWidget *checkbtn_reply_with_quote;
126 GtkWidget *checkbtn_autosave;
127 GtkWidget *entry_autosave_length;
132 static struct Spelling {
133 GtkWidget *checkbtn_enable_aspell;
134 GtkWidget *entry_aspell_path;
135 GtkWidget *btn_aspell_path;
136 GtkWidget *optmenu_dictionary;
137 GtkWidget *optmenu_sugmode;
138 GtkWidget *misspelled_btn;
139 GtkWidget *checkbtn_use_alternate;
140 GtkWidget *checkbtn_check_while_typing;
144 static struct Quote {
145 GtkWidget *entry_quotemark;
146 GtkWidget *text_quotefmt;
148 GtkWidget *entry_fw_quotemark;
149 GtkWidget *text_fw_quotefmt;
151 GtkWidget *entry_quote_chars;
154 static struct Display {
155 GtkWidget *entry_textfont;
156 GtkWidget *button_textfont;
158 GtkWidget *entry_smallfont;
159 GtkWidget *entry_normalfont;
160 GtkWidget *entry_boldfont;
162 GtkWidget *chkbtn_folder_unread;
163 GtkWidget *entry_ng_abbrev_len;
164 GtkWidget *spinbtn_ng_abbrev_len;
165 GtkObject *spinbtn_ng_abbrev_len_adj;
167 GtkWidget *chkbtn_transhdr;
169 GtkWidget *chkbtn_swapfrom;
170 GtkWidget *chkbtn_useaddrbook;
171 GtkWidget *chkbtn_threadsubj;
172 GtkWidget *entry_datefmt;
175 static struct Message {
176 GtkWidget *chkbtn_enablecol;
177 GtkWidget *button_edit_col;
178 GtkWidget *chkbtn_mbalnum;
179 GtkWidget *chkbtn_disphdrpane;
180 GtkWidget *chkbtn_disphdr;
181 GtkWidget *spinbtn_linespc;
182 GtkObject *spinbtn_linespc_adj;
183 GtkWidget *chkbtn_headspc;
185 GtkWidget *chkbtn_smoothscroll;
186 GtkWidget *spinbtn_scrollstep;
187 GtkObject *spinbtn_scrollstep_adj;
188 GtkWidget *chkbtn_halfpage;
190 GtkWidget *chkbtn_display_img;
191 GtkWidget *chkbtn_resize_image;
193 GtkWidget *chkbtn_attach_desc;
197 static struct Privacy {
198 GtkWidget *checkbtn_auto_check_signatures;
199 GtkWidget *checkbtn_gpg_signature_popup;
200 GtkWidget *checkbtn_store_passphrase;
201 GtkWidget *spinbtn_store_passphrase;
202 GtkObject *spinbtn_store_passphrase_adj;
203 GtkWidget *checkbtn_passphrase_grab;
204 GtkWidget *checkbtn_gpg_warning;
208 static struct Interface {
209 /* GtkWidget *checkbtn_emacs; */
210 GtkWidget *checkbtn_show_msg_with_cursor;
211 GtkWidget *checkbtn_openunread;
212 GtkWidget *checkbtn_mark_as_read_on_newwin;
213 GtkWidget *checkbtn_openinbox;
214 GtkWidget *checkbtn_immedexec;
215 GtkWidget *optmenu_recvdialog;
216 GtkWidget *optmenu_senddialog;
217 GtkWidget *checkbtn_no_recv_err_panel;
218 GtkWidget *checkbtn_close_recv_dialog;
219 GtkWidget *optmenu_nextunreadmsgdialog;
220 GtkWidget *entry_pixmap_theme;
221 GtkWidget *combo_pixmap_theme;
224 static struct Other {
225 GtkWidget *uri_combo;
226 GtkWidget *uri_entry;
227 GtkWidget *printcmd_entry;
228 GtkWidget *exteditor_combo;
229 GtkWidget *exteditor_entry;
230 GtkWidget *checkbtn_addaddrbyclick;
231 GtkWidget *checkbtn_confonexit;
232 GtkWidget *checkbtn_cleanonexit;
233 GtkWidget *checkbtn_askonclean;
234 GtkWidget *checkbtn_warnqueued;
235 GtkWidget *checkbtn_cliplog;
236 GtkWidget *loglength_entry;
239 GtkWidget *checkbtn_ssl_ask_unknown_valid;
245 static struct MessageColorButtons {
246 GtkWidget *quote_level1_btn;
247 GtkWidget *quote_level2_btn;
248 GtkWidget *quote_level3_btn;
250 GtkWidget *tgt_folder_btn;
251 GtkWidget *signature_btn;
254 static struct KeybindDialog {
259 static GtkWidget *font_sel_win;
260 static guint font_sel_conn_id;
261 static GtkWidget *quote_color_win;
262 static GtkWidget *color_dialog;
264 static void prefs_common_charset_set_data_from_optmenu (PrefParam *pparam);
265 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
266 static void prefs_common_encoding_set_data_from_optmenu (PrefParam *pparam);
267 static void prefs_common_encoding_set_optmenu (PrefParam *pparam);
268 static void prefs_common_recv_dialog_set_data_from_optmenu (PrefParam *pparam);
269 static void prefs_common_recv_dialog_set_optmenu (PrefParam *pparam);
270 static void prefs_common_recv_dialog_newmail_notify_toggle_cb (GtkWidget *w,
272 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
273 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
274 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam);
275 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam);
276 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
277 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
280 static void prefs_dictionary_set_data_from_optmenu (PrefParam *param);
281 static void prefs_dictionary_set_optmenu (PrefParam *pparam);
282 static void prefs_speller_sugmode_set_data_from_optmenu (PrefParam *pparam);
283 static void prefs_speller_sugmode_set_optmenu (PrefParam *pparam);
288 parameter name, default value, pointer to the prefs variable, data type,
289 pointer to the widget pointer,
290 pointer to the function for data setting,
291 pointer to the function for widget setting
294 static PrefParam param[] = {
296 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
297 &receive.checkbtn_incext,
298 prefs_set_data_from_toggle, prefs_set_toggle},
299 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
300 &receive.entry_incext,
301 prefs_set_data_from_entry, prefs_set_entry},
303 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
304 &receive.checkbtn_local,
305 prefs_set_data_from_toggle, prefs_set_toggle},
306 {"filter_on_inc_local", "TRUE", &prefs_common.filter_on_inc, P_BOOL,
307 &receive.checkbtn_filter_on_inc,
308 prefs_set_data_from_toggle, prefs_set_toggle},
309 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
310 &receive.entry_spool,
311 prefs_set_data_from_entry, prefs_set_entry},
313 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
314 &receive.checkbtn_autochk,
315 prefs_set_data_from_toggle, prefs_set_toggle},
316 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
317 &receive.spinbtn_autochk,
318 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
319 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
320 &receive.checkbtn_chkonstartup,
321 prefs_set_data_from_toggle, prefs_set_toggle},
322 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
323 P_BOOL, &receive.checkbtn_scan_after_inc,
324 prefs_set_data_from_toggle, prefs_set_toggle},
325 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
326 P_BOOL, &receive.checkbtn_newmail_manu,
327 prefs_set_data_from_toggle, prefs_set_toggle},
328 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
329 P_BOOL, &receive.checkbtn_newmail_auto,
330 prefs_set_data_from_toggle, prefs_set_toggle},
331 {"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING,
332 &receive.entry_newmail_notify_cmd,
333 prefs_set_data_from_entry, prefs_set_entry},
336 {"use_ext_sendmail", "FALSE", &prefs_common.use_extsend, P_BOOL,
337 &p_send.checkbtn_extsend,
338 prefs_set_data_from_toggle, prefs_set_toggle},
339 {"ext_sendmail_cmd", DEFAULT_SENDMAIL_CMD,
340 &prefs_common.extsend_cmd, P_STRING,
341 &p_send.entry_extsend, prefs_set_data_from_entry, prefs_set_entry},
342 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
343 &p_send.checkbtn_savemsg,
344 prefs_set_data_from_toggle, prefs_set_toggle},
345 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
346 &p_send.checkbtn_queuemsg,
347 prefs_set_data_from_toggle, prefs_set_toggle},
349 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
350 &p_send.optmenu_charset,
351 prefs_common_charset_set_data_from_optmenu,
352 prefs_common_charset_set_optmenu},
353 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
354 &p_send.optmenu_encoding_method,
355 prefs_common_encoding_set_data_from_optmenu,
356 prefs_common_encoding_set_optmenu},
359 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
360 &compose.checkbtn_autoextedit,
361 prefs_set_data_from_toggle, prefs_set_toggle},
362 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
363 P_BOOL, &compose.checkbtn_forward_as_attachment,
364 prefs_set_data_from_toggle, prefs_set_toggle},
365 {"redirect_keep_from", "FALSE",
366 &prefs_common.redirect_keep_from, P_BOOL,
367 &compose.checkbtn_redirect_keep_from,
368 prefs_set_data_from_toggle, prefs_set_toggle},
369 {"undo_level", "50", &prefs_common.undolevels, P_INT,
370 &compose.spinbtn_undolevel,
371 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
372 {"block_cursor", "FALSE", &prefs_common.block_cursor,
373 P_BOOL, &compose.checkbtn_block_cursor,
374 prefs_set_data_from_toggle, prefs_set_toggle},
376 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
377 &compose.spinbtn_linewrap,
378 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
379 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
380 &compose.checkbtn_wrapquote,
381 prefs_set_data_from_toggle, prefs_set_toggle},
382 {"linewrap_auto", "FALSE", &prefs_common.autowrap, P_BOOL,
383 &compose.checkbtn_autowrap,
384 prefs_set_data_from_toggle, prefs_set_toggle},
385 {"linewrap_before_sending", "FALSE",
386 &prefs_common.linewrap_at_send, P_BOOL,
387 &compose.checkbtn_wrapatsend,
388 prefs_set_data_from_toggle, prefs_set_toggle},
389 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
390 P_BOOL, &compose.checkbtn_smart_wrapping,
391 prefs_set_data_from_toggle, prefs_set_toggle},
392 {"autosave", "FALSE", &prefs_common.autosave,
393 P_BOOL, &compose.checkbtn_autosave,
394 prefs_set_data_from_toggle, prefs_set_toggle},
395 {"autosave_length", "50", &prefs_common.autosave_length,
396 P_INT, &compose.entry_autosave_length,
397 prefs_set_data_from_entry, prefs_set_entry},
399 {"enable_aspell", "TRUE", &prefs_common.enable_aspell,
400 P_BOOL, &spelling.checkbtn_enable_aspell,
401 prefs_set_data_from_toggle, prefs_set_toggle},
402 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path,
403 P_STRING, &spelling.entry_aspell_path,
404 prefs_set_data_from_entry, prefs_set_entry},
405 {"dictionary", "", &prefs_common.dictionary,
406 P_STRING, &spelling.optmenu_dictionary,
407 prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
408 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode,
409 P_INT, &spelling.optmenu_sugmode,
410 prefs_speller_sugmode_set_data_from_optmenu, prefs_speller_sugmode_set_optmenu },
411 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate,
412 P_BOOL, &spelling.checkbtn_use_alternate,
413 prefs_set_data_from_toggle, prefs_set_toggle},
414 {"check_while_typing", "TRUE", &prefs_common.check_while_typing,
415 P_BOOL, &spelling.checkbtn_check_while_typing,
416 prefs_set_data_from_toggle, prefs_set_toggle},
417 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
420 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
421 &compose.checkbtn_reply_with_quote, prefs_set_data_from_toggle, prefs_set_toggle},
423 /* Account autoselection */
424 {"reply_account_autoselect", "TRUE",
425 &prefs_common.reply_account_autosel, P_BOOL,
426 &compose.checkbtn_reply_account_autosel,
427 prefs_set_data_from_toggle, prefs_set_toggle},
428 {"forward_account_autoselect", "TRUE",
429 &prefs_common.forward_account_autosel, P_BOOL,
430 &compose.checkbtn_forward_account_autosel,
431 prefs_set_data_from_toggle, prefs_set_toggle},
432 {"reedit_account_autoselect", "TRUE",
433 &prefs_common.reedit_account_autosel, P_BOOL,
434 &compose.checkbtn_reedit_account_autosel,
435 prefs_set_data_from_toggle, prefs_set_toggle},
437 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
438 &compose.checkbtn_default_reply_list,
439 prefs_set_data_from_toggle, prefs_set_toggle},
441 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
445 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
446 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
447 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
448 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
449 prefs_set_data_from_text, prefs_set_text},
451 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
452 "e.entry_fw_quotemark,
453 prefs_set_data_from_entry, prefs_set_entry},
454 {"forward_quote_format",
455 "\\n\\nBegin forwarded message:\\n\\n"
456 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
457 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
458 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
459 prefs_set_data_from_text, prefs_set_text},
460 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
461 "e.entry_quote_chars, prefs_set_data_from_entry, prefs_set_entry},
464 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
466 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
467 &prefs_common.textfont, P_STRING,
468 &display.entry_textfont,
469 prefs_set_data_from_entry, prefs_set_entry},
470 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
471 &prefs_common.smallfont, P_STRING,
472 &display.entry_smallfont,
473 prefs_set_data_from_entry, prefs_set_entry},
474 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
475 &prefs_common.boldfont, P_STRING,
476 &display.entry_boldfont,
477 prefs_set_data_from_entry, prefs_set_entry},
478 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
479 &prefs_common.normalfont, P_STRING,
480 &display.entry_normalfont,
481 prefs_set_data_from_entry, prefs_set_entry},
484 {"display_folder_unread_num", "TRUE",
485 &prefs_common.display_folder_unread, P_BOOL,
486 &display.chkbtn_folder_unread,
487 prefs_set_data_from_toggle, prefs_set_toggle},
488 {"newsgroup_abbrev_len", "16",
489 &prefs_common.ng_abbrev_len, P_INT,
490 &display.spinbtn_ng_abbrev_len,
491 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
493 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
494 &display.chkbtn_transhdr,
495 prefs_set_data_from_toggle, prefs_set_toggle},
497 /* Display: Summary View */
498 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
499 &display.chkbtn_swapfrom,
500 prefs_set_data_from_toggle, prefs_set_toggle},
501 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
502 &display.chkbtn_useaddrbook,
503 prefs_set_data_from_toggle, prefs_set_toggle},
504 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
505 &display.chkbtn_threadsubj,
506 prefs_set_data_from_toggle, prefs_set_toggle},
507 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
508 P_STRING, &display.entry_datefmt,
509 prefs_set_data_from_entry, prefs_set_entry},
511 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
513 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
516 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
518 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
520 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
522 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
525 {"folderview_vscrollbar_policy", "0",
526 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
529 {"summary_col_show_mark", "TRUE",
530 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
531 {"summary_col_show_unread", "TRUE",
532 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
533 {"summary_col_show_mime", "TRUE",
534 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
535 {"summary_col_show_subject", "TRUE",
536 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
537 {"summary_col_show_from", "TRUE",
538 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
539 {"summary_col_show_date", "TRUE",
540 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
541 {"summary_col_show_size", "TRUE",
542 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
543 {"summary_col_show_number", "FALSE",
544 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
545 {"summary_col_show_score", "FALSE",
546 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
547 {"summary_col_show_locked", "FALSE",
548 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
550 {"summary_col_pos_mark", "0",
551 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
552 {"summary_col_pos_unread", "1",
553 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
554 {"summary_col_pos_mime", "2",
555 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
556 {"summary_col_pos_subject", "3",
557 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
558 {"summary_col_pos_from", "4",
559 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
560 {"summary_col_pos_date", "5",
561 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
562 {"summary_col_pos_size", "6",
563 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
564 {"summary_col_pos_number", "7",
565 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
566 {"summary_col_pos_score", "8",
567 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
568 {"summary_col_pos_locked", "9",
569 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
571 {"summary_col_size_mark", "10",
572 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
573 {"summary_col_size_unread", "13",
574 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
575 {"summary_col_size_mime", "10",
576 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
577 {"summary_col_size_subject", "200",
578 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
579 {"summary_col_size_from", "120",
580 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
581 {"summary_col_size_date", "118",
582 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
583 {"summary_col_size_size", "45",
584 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
585 {"summary_col_size_number", "40",
586 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
587 {"summary_col_size_score", "40",
588 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
589 {"summary_col_size_locked", "13",
590 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
593 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
595 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
597 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
599 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
601 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
603 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
606 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
608 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
611 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
613 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
615 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
617 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
619 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
621 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
623 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
625 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
627 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
629 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
631 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
633 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
635 {"compose_width", "600", &prefs_common.compose_width, P_INT,
637 {"compose_height", "560", &prefs_common.compose_height, P_INT,
641 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
642 &message.chkbtn_enablecol,
643 prefs_set_data_from_toggle, prefs_set_toggle},
645 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
647 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
649 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
651 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
653 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
655 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
657 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
658 P_BOOL, NULL, NULL, NULL},
660 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
661 &message.chkbtn_mbalnum,
662 prefs_set_data_from_toggle, prefs_set_toggle},
663 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
664 P_BOOL, &message.chkbtn_disphdrpane,
665 prefs_set_data_from_toggle, prefs_set_toggle},
666 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
667 &message.chkbtn_disphdr,
668 prefs_set_data_from_toggle, prefs_set_toggle},
669 {"line_space", "2", &prefs_common.line_space, P_INT,
670 &message.spinbtn_linespc,
671 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
672 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
673 &message.chkbtn_headspc,
674 prefs_set_data_from_toggle, prefs_set_toggle},
676 {"enable_smooth_scroll", "FALSE",
677 &prefs_common.enable_smooth_scroll, P_BOOL,
678 &message.chkbtn_smoothscroll,
679 prefs_set_data_from_toggle, prefs_set_toggle},
680 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
681 &message.spinbtn_scrollstep,
682 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
683 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
684 &message.chkbtn_halfpage,
685 prefs_set_data_from_toggle, prefs_set_toggle},
687 {"display_img", "TRUE", &prefs_common.display_img, P_BOOL,
688 &message.chkbtn_display_img,
689 prefs_set_data_from_toggle, prefs_set_toggle},
690 {"resize_image", "TRUE", &prefs_common.resize_image, P_BOOL,
691 &message.chkbtn_resize_image,
692 prefs_set_data_from_toggle, prefs_set_toggle},
694 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
697 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
698 &message.chkbtn_attach_desc,
699 prefs_set_data_from_toggle, prefs_set_toggle},
702 {"mime_image_viewer", "display '%s'",
703 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
704 {"mime_audio_player", "play '%s'",
705 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
706 {"mime_open_command", "gedit '%s'",
707 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
711 {"auto_check_signatures", "TRUE",
712 &prefs_common.auto_check_signatures, P_BOOL,
713 &privacy.checkbtn_auto_check_signatures,
714 prefs_set_data_from_toggle, prefs_set_toggle},
715 {"gpg_signature_popup", "FALSE",
716 &prefs_common.gpg_signature_popup, P_BOOL,
717 &privacy.checkbtn_gpg_signature_popup,
718 prefs_set_data_from_toggle, prefs_set_toggle},
719 {"store_passphrase", "FALSE", &prefs_common.store_passphrase, P_BOOL,
720 &privacy.checkbtn_store_passphrase,
721 prefs_set_data_from_toggle, prefs_set_toggle},
722 {"store_passphrase_timeout", "0",
723 &prefs_common.store_passphrase_timeout, P_INT,
724 &privacy.spinbtn_store_passphrase,
725 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
727 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
728 &privacy.checkbtn_passphrase_grab,
729 prefs_set_data_from_toggle, prefs_set_toggle},
730 #endif /* __MINGW32__ */
731 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
732 &privacy.checkbtn_gpg_warning,
733 prefs_set_data_from_toggle, prefs_set_toggle},
734 #endif /* USE_GPGME */
737 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
739 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
742 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
743 NULL, NULL, NULL}, */
744 {"show_message_with_cursor_key", "FALSE",
745 &prefs_common.show_msg_with_cursor_key,
746 P_BOOL, &interface.checkbtn_show_msg_with_cursor,
747 prefs_set_data_from_toggle, prefs_set_toggle},
748 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
749 P_BOOL, &interface.checkbtn_openunread,
750 prefs_set_data_from_toggle, prefs_set_toggle},
751 {"mark_as_read_on_new_window", "FALSE",
752 &prefs_common.mark_as_read_on_new_window,
753 P_BOOL, &interface.checkbtn_mark_as_read_on_newwin,
754 prefs_set_data_from_toggle, prefs_set_toggle},
755 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
756 P_BOOL, &interface.checkbtn_openinbox,
757 prefs_set_data_from_toggle, prefs_set_toggle},
758 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
759 &interface.checkbtn_immedexec,
760 prefs_set_data_from_toggle, prefs_set_toggle},
761 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
762 &interface.optmenu_recvdialog,
763 prefs_common_recv_dialog_set_data_from_optmenu,
764 prefs_common_recv_dialog_set_optmenu},
765 {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
766 &interface.optmenu_senddialog,
767 prefs_common_send_dialog_set_data_from_optmenu,
768 prefs_common_send_dialog_set_optmenu},
769 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
770 P_BOOL, &interface.checkbtn_no_recv_err_panel,
771 prefs_set_data_from_toggle, prefs_set_toggle},
772 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
773 P_BOOL, &interface.checkbtn_close_recv_dialog,
774 prefs_set_data_from_toggle, prefs_set_toggle},
775 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
776 &interface.optmenu_nextunreadmsgdialog,
777 prefs_nextunreadmsgdialog_set_data_from_optmenu,
778 prefs_nextunreadmsgdialog_set_optmenu},
780 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
781 &prefs_common.pixmap_theme_path, P_STRING,
782 &interface.entry_pixmap_theme, prefs_set_data_from_entry, prefs_set_entry},
785 {"uri_open_command", DEFAULT_BROWSER_CMD,
786 &prefs_common.uri_cmd, P_STRING,
787 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
788 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
789 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
790 {"ext_editor_command", "gedit %s",
791 &prefs_common.ext_editor_cmd, P_STRING,
792 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
794 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
795 P_BOOL, &other.checkbtn_addaddrbyclick,
796 prefs_set_data_from_toggle, prefs_set_toggle},
798 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
799 &other.checkbtn_confonexit,
800 prefs_set_data_from_toggle, prefs_set_toggle},
801 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
802 &other.checkbtn_cleanonexit,
803 prefs_set_data_from_toggle, prefs_set_toggle},
804 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
805 &other.checkbtn_askonclean,
806 prefs_set_data_from_toggle, prefs_set_toggle},
807 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
808 P_BOOL, &other.checkbtn_warnqueued,
809 prefs_set_data_from_toggle, prefs_set_toggle},
812 {"ssl_ask_unknown_valid", "TRUE", &prefs_common.ssl_ask_unknown_valid,
813 P_BOOL, &other.checkbtn_ssl_ask_unknown_valid,
814 prefs_set_data_from_toggle, prefs_set_toggle},
817 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
819 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
822 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
824 {"important_score", "1", &prefs_common.important_score, P_INT,
826 {"clip_log", "FALSE", &prefs_common.cliplog, P_BOOL,
827 &other.checkbtn_cliplog,
828 prefs_set_data_from_toggle, prefs_set_toggle},
829 {"log_length", "1000", &prefs_common.loglength, P_INT,
830 &other.loglength_entry,
831 prefs_set_data_from_entry, prefs_set_entry},
833 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
835 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
838 {"color_new", "179", &prefs_common.color_new, P_COLOR,
841 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
844 /* widget creating functions */
845 static void prefs_common_create (void);
846 static void prefs_receive_create (void);
847 static void prefs_send_create (void);
849 static void prefs_spelling_create (void);
851 static void prefs_compose_create (void);
852 static void prefs_quote_create (void);
853 static void prefs_display_create (void);
854 static void prefs_message_create (void);
856 static void prefs_privacy_create (void);
858 static void prefs_interface_create (void);
859 static void prefs_other_create (void);
861 static void date_format_ok_btn_clicked (GtkButton *button,
863 static void date_format_cancel_btn_clicked (GtkButton *button,
865 static void date_format_key_pressed (GtkWidget *keywidget,
868 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
871 static void date_format_entry_on_change (GtkEditable *editable,
873 static void date_format_select_row (GtkWidget *date_format_list,
876 GdkEventButton *event,
877 GtkWidget *date_format);
878 static GtkWidget *date_format_create (GtkButton *button,
881 static void prefs_quote_colors_dialog (void);
882 static void prefs_quote_colors_dialog_create (void);
883 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
886 static void quote_color_set_dialog (GtkWidget *widget,
888 static void quote_colors_set_dialog_ok (GtkWidget *widget,
890 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
892 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
895 static void set_button_bg_color (GtkWidget *widget,
897 static void prefs_enable_message_color_toggled (void);
898 static void prefs_recycle_colors_toggled (GtkWidget *widget);
900 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
902 static void prefs_font_selection_key_pressed (GtkWidget *widget,
905 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
907 static void prefs_keybind_select (void);
908 static gint prefs_keybind_deleted (GtkWidget *widget,
911 static void prefs_keybind_key_pressed (GtkWidget *widget,
914 static void prefs_keybind_cancel (void);
915 static void prefs_keybind_apply_clicked (GtkWidget *widget);
917 static gint prefs_common_deleted (GtkWidget *widget,
920 static void prefs_common_key_pressed (GtkWidget *widget,
923 static void prefs_common_ok (void);
924 static void prefs_common_apply (void);
925 static void prefs_common_cancel (void);
927 void prefs_common_init() {
928 prefs_common.disphdr_list = NULL;
931 void prefs_common_read_config(void)
935 gchar buf[PREFSBUFSIZE];
937 prefs_read_config(param, "Common", COMMON_RC);
939 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
941 if ((fp = fopen(path, "rb")) == NULL) {
942 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
947 while (fgets(buf, sizeof(buf), fp) != NULL) {
949 if (buf[0] == '\0') continue;
950 prefs_common.mime_open_cmd_history =
951 add_history(prefs_common.mime_open_cmd_history, buf);
955 prefs_common.mime_open_cmd_history =
956 g_list_reverse(prefs_common.mime_open_cmd_history);
959 void prefs_common_save_config(void)
965 prefs_save_config(param, "Common", COMMON_RC);
967 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
969 if ((fp = fopen(path, "wb")) == NULL) {
970 FILE_OP_ERROR(path, "fopen");
975 for (cur = prefs_common.mime_open_cmd_history;
976 cur != NULL; cur = cur->next) {
977 fputs((gchar *)cur->data, fp);
985 void prefs_common_open(void)
987 if (prefs_rc_is_readonly(COMMON_RC))
992 if (!dialog.window) {
993 prefs_common_create();
996 manage_window_set_transient(GTK_WINDOW(dialog.window));
997 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
998 gtk_widget_grab_focus(dialog.ok_btn);
1000 prefs_set_dialog(param);
1002 gtk_widget_show(dialog.window);
1005 static void prefs_common_create(void)
1009 debug_print("Creating common preferences window...\n");
1011 prefs_dialog_create(&dialog);
1012 gtk_window_set_title (GTK_WINDOW(dialog.window),
1013 _("Common Preferences"));
1014 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
1015 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
1016 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
1017 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
1018 MANAGE_WINDOW_SIGNALS_CONNECT(dialog.window);
1020 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
1021 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
1022 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
1023 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
1024 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
1025 GTK_SIGNAL_FUNC(prefs_common_cancel),
1026 GTK_OBJECT(dialog.window));
1028 /* create all widgets on notebook */
1029 prefs_receive_create();
1030 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
1031 prefs_send_create();
1032 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
1033 prefs_compose_create();
1034 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
1036 prefs_spelling_create();
1037 SET_NOTEBOOK_LABEL(dialog.notebook, _("Spell Checker"), page++);
1039 prefs_quote_create();
1040 SET_NOTEBOOK_LABEL(dialog.notebook, _("Quote"), page++);
1041 prefs_display_create();
1042 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
1043 prefs_message_create();
1044 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
1046 prefs_privacy_create();
1047 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
1049 prefs_interface_create();
1050 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
1051 prefs_other_create();
1052 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
1054 gtk_widget_show_all(dialog.window);
1057 static void prefs_receive_create(void)
1061 GtkWidget *frame_incext;
1062 GtkWidget *checkbtn_incext;
1064 GtkWidget *label_incext;
1065 GtkWidget *entry_incext;
1066 /* GtkWidget *button_incext; */
1068 GtkWidget *frame_spool;
1069 GtkWidget *checkbtn_local;
1070 GtkWidget *checkbtn_filter_on_inc;
1071 GtkWidget *label_spool;
1072 GtkWidget *entry_spool;
1074 GtkWidget *hbox_autochk;
1075 GtkWidget *checkbtn_autochk;
1076 GtkWidget *label_autochk1;
1077 GtkObject *spinbtn_autochk_adj;
1078 GtkWidget *spinbtn_autochk;
1079 GtkWidget *label_autochk2;
1080 GtkWidget *checkbtn_chkonstartup;
1081 GtkWidget *checkbtn_scan_after_inc;
1084 GtkWidget *frame_newmail;
1085 GtkWidget *hbox_newmail_notify;
1086 GtkWidget *checkbtn_newmail_auto;
1087 GtkWidget *checkbtn_newmail_manu;
1088 GtkWidget *entry_newmail_notify_cmd;
1089 GtkWidget *label_newmail_notify_cmd;
1091 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1092 gtk_widget_show (vbox1);
1093 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1094 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1096 PACK_FRAME(vbox1, frame_incext, _("External program"));
1098 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1099 gtk_widget_show (vbox2);
1100 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
1101 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1103 /* Use of external incorporation program */
1104 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
1105 _("Use external program for incorporation"));
1107 hbox = gtk_hbox_new (FALSE, 8);
1108 gtk_widget_show (hbox);
1109 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1110 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
1112 label_incext = gtk_label_new (_("Command"));
1113 gtk_widget_show (label_incext);
1114 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
1116 entry_incext = gtk_entry_new ();
1117 gtk_widget_show (entry_incext);
1118 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
1121 button_incext = gtk_button_new_with_label ("... ");
1122 gtk_widget_show (button_incext);
1123 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1126 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
1128 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1129 gtk_widget_show (vbox2);
1130 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
1131 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1133 hbox = gtk_hbox_new (FALSE, 32);
1134 gtk_widget_show (hbox);
1135 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1137 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
1138 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
1139 _("Filter on incorporation"));
1140 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
1142 hbox = gtk_hbox_new (FALSE, 8);
1143 gtk_widget_show (hbox);
1144 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1145 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
1147 label_spool = gtk_label_new (_("Spool directory"));
1148 gtk_widget_show (label_spool);
1149 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
1151 entry_spool = gtk_entry_new ();
1152 gtk_widget_show (entry_spool);
1153 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
1155 vbox2 = gtk_vbox_new (FALSE, 0);
1156 gtk_widget_show (vbox2);
1157 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1160 hbox_autochk = gtk_hbox_new (FALSE, 8);
1161 gtk_widget_show (hbox_autochk);
1162 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1164 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1165 _("Auto-check new mail"));
1167 label_autochk1 = gtk_label_new (_("every"));
1168 gtk_widget_show (label_autochk1);
1169 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1171 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1172 spinbtn_autochk = gtk_spin_button_new
1173 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1174 gtk_widget_show (spinbtn_autochk);
1175 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1176 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
1177 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1179 label_autochk2 = gtk_label_new (_("minute(s)"));
1180 gtk_widget_show (label_autochk2);
1181 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1183 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1184 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1185 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1187 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1188 _("Check new mail on startup"));
1189 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1190 _("Update all local folders after incorporation"));
1193 PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1195 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1196 gtk_widget_show (vbox2);
1197 gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1198 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1200 hbox = gtk_hbox_new (TRUE, 8);
1201 gtk_widget_show (hbox);
1202 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1203 _("after autochecking"));
1204 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1205 _("after manual checking"));
1206 gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1207 gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_auto), "toggled",
1208 GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1210 gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_manu), "toggled",
1211 GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1214 hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1215 gtk_widget_show (hbox);
1216 gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE,
1219 label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1220 "(use %d as number of new "
1222 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd),
1224 gtk_widget_show (label_newmail_notify_cmd);
1225 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1226 label_newmail_notify_cmd, FALSE, FALSE, 0);
1228 entry_newmail_notify_cmd = gtk_entry_new ();
1229 gtk_widget_show (entry_newmail_notify_cmd);
1230 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1231 entry_newmail_notify_cmd, TRUE, TRUE, 0);
1233 gtk_widget_set_sensitive(hbox_newmail_notify,
1234 prefs_common.newmail_notify_auto ||
1235 prefs_common.newmail_notify_manu);
1237 receive.checkbtn_incext = checkbtn_incext;
1238 receive.entry_incext = entry_incext;
1239 /* receive.button_incext = button_incext; */
1241 receive.checkbtn_local = checkbtn_local;
1242 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
1243 receive.entry_spool = entry_spool;
1245 receive.checkbtn_autochk = checkbtn_autochk;
1246 receive.spinbtn_autochk = spinbtn_autochk;
1247 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1249 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1250 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1253 receive.checkbtn_newmail_auto = checkbtn_newmail_auto;
1254 receive.checkbtn_newmail_manu = checkbtn_newmail_manu;
1255 receive.hbox_newmail_notify = hbox_newmail_notify;
1256 receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1259 static void prefs_send_create(void)
1263 GtkWidget *frame_extsend;
1264 GtkWidget *vbox_extsend;
1265 GtkWidget *checkbtn_extsend;
1267 GtkWidget *label_extsend;
1268 GtkWidget *entry_extsend;
1269 /* GtkWidget *button_extsend; */
1270 GtkWidget *checkbtn_savemsg;
1271 GtkWidget *checkbtn_queuemsg;
1272 GtkWidget *label_outcharset;
1273 GtkWidget *optmenu_charset;
1274 GtkWidget *optmenu_menu;
1275 GtkWidget *menuitem;
1276 GtkWidget *label_charset_desc;
1277 GtkWidget *optmenu_encoding;
1278 GtkWidget *label_encoding;
1279 GtkWidget *label_encoding_desc;
1281 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1282 gtk_widget_show (vbox1);
1283 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1284 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1286 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1288 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1289 gtk_widget_show (vbox_extsend);
1290 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1291 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1293 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1294 _("Use external program for sending"));
1296 hbox1 = gtk_hbox_new (FALSE, 8);
1297 gtk_widget_show (hbox1);
1298 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1299 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1301 label_extsend = gtk_label_new (_("Command"));
1302 gtk_widget_show (label_extsend);
1303 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1305 entry_extsend = gtk_entry_new ();
1306 gtk_widget_show (entry_extsend);
1307 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1310 button_extsend = gtk_button_new_with_label ("... ");
1311 gtk_widget_show (button_extsend);
1312 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1315 vbox2 = gtk_vbox_new (FALSE, 0);
1316 gtk_widget_show (vbox2);
1317 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1319 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1320 _("Save sent messages to Sent folder"));
1321 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1322 _("Queue messages that fail to send"));
1324 hbox1 = gtk_hbox_new (FALSE, 8);
1325 gtk_widget_show (hbox1);
1326 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1328 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1329 gtk_widget_show (label_outcharset);
1330 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1332 optmenu_charset = gtk_option_menu_new ();
1333 gtk_widget_show (optmenu_charset);
1334 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_charset, FALSE, FALSE, 0);
1336 optmenu_menu = gtk_menu_new ();
1338 #define SET_MENUITEM(str, data) \
1340 MENUITEM_ADD(optmenu_menu, menuitem, str, data); \
1343 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1344 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1346 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1348 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1349 SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1350 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1351 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1352 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1353 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1354 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1356 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1358 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1360 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
1361 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1363 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1365 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1366 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1368 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1369 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1371 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1372 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1374 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1375 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1376 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1378 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_charset),
1381 hbox1 = gtk_hbox_new (FALSE, 8);
1382 gtk_widget_show (hbox1);
1383 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1385 label_charset_desc = gtk_label_new
1386 (_("If `Automatic' is selected, the optimal encoding\n"
1387 "for the current locale will be used."));
1388 gtk_widget_show (label_charset_desc);
1389 gtk_box_pack_start (GTK_BOX (hbox1), label_charset_desc,
1391 gtk_label_set_justify (GTK_LABEL (label_charset_desc),
1394 hbox1 = gtk_hbox_new (FALSE, 8);
1395 gtk_widget_show (hbox1);
1396 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1398 label_encoding = gtk_label_new (_("Transfer encoding"));
1399 gtk_widget_show (label_encoding);
1400 gtk_box_pack_start (GTK_BOX (hbox1), label_encoding, FALSE, FALSE, 0);
1402 optmenu_encoding = gtk_option_menu_new ();
1403 gtk_widget_show (optmenu_encoding);
1404 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_encoding, FALSE, FALSE, 0);
1406 optmenu_menu = gtk_menu_new ();
1408 SET_MENUITEM(_("Automatic"), CTE_AUTO);
1409 SET_MENUITEM("base64", CTE_BASE64);
1410 SET_MENUITEM("quoted-printable", CTE_QUOTED_PRINTABLE);
1411 SET_MENUITEM("8bit", CTE_8BIT);
1413 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_encoding),
1416 hbox1 = gtk_hbox_new (FALSE, 8);
1417 gtk_widget_show (hbox1);
1418 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1420 label_encoding_desc = gtk_label_new
1421 (_("Specify Content-Transfer-Encoding used when\n"
1422 "message body contains non-ASCII characters."));
1423 gtk_widget_show (label_encoding_desc);
1424 gtk_box_pack_start (GTK_BOX (hbox1), label_encoding_desc,
1426 gtk_label_set_justify (GTK_LABEL (label_encoding_desc),
1429 p_send.checkbtn_extsend = checkbtn_extsend;
1430 p_send.entry_extsend = entry_extsend;
1431 /* p_send.button_extsend = button_extsend; */
1433 p_send.checkbtn_savemsg = checkbtn_savemsg;
1434 p_send.checkbtn_queuemsg = checkbtn_queuemsg;
1436 p_send.optmenu_charset = optmenu_charset;
1437 p_send.optmenu_encoding_method = optmenu_encoding;
1440 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1444 toggled = gtk_toggle_button_get_active
1445 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1446 gtk_toggle_button_get_active
1447 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1448 gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1452 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1455 gchar *dict_fullname;
1457 g_return_if_fail(param);
1458 g_return_if_fail(param->data);
1459 g_return_if_fail(param->widget);
1460 g_return_if_fail(*(param->widget));
1462 dict_fullname = gtkaspell_get_dictionary_menu_active_item
1463 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1464 str = *((gchar **) param->data);
1467 *((gchar **) param->data) = dict_fullname;
1470 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1473 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1475 GtkWidget *menuitem;
1479 g_return_if_fail(optmenu != NULL);
1480 g_return_if_fail(pparam->data != NULL);
1482 if (*(gchar **) pparam->data) {
1483 menu = gtk_option_menu_get_menu(optmenu);
1484 for (cur = GTK_MENU_SHELL(menu)->children;
1485 cur != NULL; cur = cur->next) {
1486 menuitem = GTK_WIDGET(cur->data);
1487 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem),
1489 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1490 gtk_option_menu_set_history(optmenu, n);
1497 gtk_option_menu_set_history(optmenu, 0);
1498 prefs_dictionary_set_data_from_optmenu(pparam);
1501 static void prefs_speller_sugmode_set_data_from_optmenu(PrefParam *param)
1504 g_return_if_fail(param);
1505 g_return_if_fail(param->data);
1506 g_return_if_fail(param->widget);
1507 g_return_if_fail(*(param->widget));
1509 sugmode = gtkaspell_get_sugmode_from_option_menu
1510 (GTK_OPTION_MENU(*(param->widget)));
1511 *((gint *) param->data) = sugmode;
1514 static void prefs_speller_sugmode_set_optmenu(PrefParam *pparam)
1516 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1519 g_return_if_fail(optmenu != NULL);
1520 g_return_if_fail(pparam->data != NULL);
1522 sugmode = *(gint *) pparam->data;
1523 gtkaspell_sugmode_option_menu_set(optmenu, sugmode);
1527 static void prefs_spelling_checkbtn_enable_aspell_toggle_cb
1533 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1535 gtk_widget_set_sensitive(spelling.entry_aspell_path, toggled);
1536 gtk_widget_set_sensitive(spelling.optmenu_dictionary, toggled);
1537 gtk_widget_set_sensitive(spelling.optmenu_sugmode, toggled);
1538 gtk_widget_set_sensitive(spelling.btn_aspell_path, toggled);
1539 gtk_widget_set_sensitive(spelling.misspelled_btn, toggled);
1540 gtk_widget_set_sensitive(spelling.checkbtn_use_alternate, toggled);
1541 gtk_widget_set_sensitive(spelling.checkbtn_check_while_typing, toggled);
1544 static void prefs_spelling_btn_aspell_path_clicked_cb(GtkWidget *widget,
1547 gchar *file_path, *tmp;
1548 GtkWidget *new_menu;
1550 file_path = filesel_select_file(_("Select dictionaries location"),
1551 prefs_common.aspell_path);
1552 if (file_path == NULL) {
1556 tmp=g_dirname(file_path);
1558 if (prefs_common.aspell_path)
1559 g_free(prefs_common.aspell_path);
1560 prefs_common.aspell_path = g_strdup_printf("%s%s",tmp,
1563 new_menu = gtkaspell_dictionary_option_menu_new(prefs_common.aspell_path);
1564 gtk_option_menu_set_menu(GTK_OPTION_MENU(spelling.optmenu_dictionary),
1567 gtk_entry_set_text(GTK_ENTRY(spelling.entry_aspell_path),
1568 prefs_common.aspell_path);
1569 /* select first one */
1570 gtk_option_menu_set_history(GTK_OPTION_MENU(
1571 spelling.optmenu_dictionary), 0);
1573 if (prefs_common.dictionary)
1574 g_free(prefs_common.dictionary);
1576 prefs_common.dictionary =
1577 gtkaspell_get_dictionary_menu_active_item(
1578 gtk_option_menu_get_menu(
1580 spelling.optmenu_dictionary)));
1586 static void prefs_spelling_create()
1589 GtkWidget *frame_spell;
1590 GtkWidget *vbox_spell;
1591 GtkWidget *hbox_aspell_path;
1592 GtkWidget *checkbtn_enable_aspell;
1593 GtkWidget *label_aspell_path;
1594 GtkWidget *entry_aspell_path;
1595 GtkWidget *btn_aspell_path;
1596 GtkWidget *spell_table;
1597 GtkWidget *label_dictionary;
1598 GtkWidget *optmenu_dictionary;
1599 GtkWidget *sugmode_label;
1600 GtkWidget *sugmode_optmenu;
1601 GtkWidget *checkbtn_use_alternate;
1602 GtkWidget *help_label;
1603 GtkWidget *checkbtn_check_while_typing;
1604 GtkWidget *color_label;
1605 GtkWidget *col_align;
1607 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1608 gtk_widget_show (vbox1);
1609 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1610 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1612 /* spell checker defaults */
1613 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1614 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1615 gtk_widget_show (vbox_spell);
1616 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1617 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1619 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_aspell,
1620 _("Enable spell checker"));
1622 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_aspell), "toggled",
1623 GTK_SIGNAL_FUNC(prefs_spelling_checkbtn_enable_aspell_toggle_cb),
1626 /* Check while typing */
1627 PACK_CHECK_BUTTON(vbox_spell, checkbtn_check_while_typing,
1628 _("Check while typing"));
1630 PACK_CHECK_BUTTON(vbox_spell, checkbtn_use_alternate,
1631 _("Enable alternate dictionary"));
1633 help_label = gtk_label_new(_("Enabling an alternate dictionary makes switching\n"
1634 "with the last used dictionary faster."));
1635 gtk_misc_set_alignment (GTK_MISC (help_label), 0, 0);
1636 gtk_widget_show(help_label);
1637 gtk_box_pack_start(GTK_BOX(vbox_spell), help_label, FALSE, TRUE, 0);
1639 spell_table = gtk_table_new(4, 3, FALSE);
1640 gtk_container_set_border_width (GTK_CONTAINER (spell_table), VSPACING);
1641 gtk_table_set_row_spacings(GTK_TABLE(spell_table), 8);
1642 gtk_table_set_col_spacings(GTK_TABLE(spell_table), 8);
1644 gtk_box_pack_start(GTK_BOX(vbox_spell), spell_table, TRUE, TRUE, 0);
1646 label_aspell_path = gtk_label_new (_("Dictionaries path:"));
1647 gtk_misc_set_alignment(GTK_MISC(label_aspell_path), 1.0, 0.5);
1648 gtk_widget_show(label_aspell_path);
1649 gtk_table_attach (GTK_TABLE (spell_table), label_aspell_path, 0, 1, 0,
1650 1, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1652 hbox_aspell_path = gtk_hbox_new (FALSE, 8);
1653 gtk_table_attach (GTK_TABLE (spell_table), hbox_aspell_path, 1, 2, 0,
1654 1, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1655 gtk_widget_show(hbox_aspell_path);
1657 entry_aspell_path = gtk_entry_new();
1658 gtk_widget_show(entry_aspell_path);
1659 gtk_box_pack_start(GTK_BOX(hbox_aspell_path), entry_aspell_path, TRUE,
1662 gtk_widget_set_sensitive(entry_aspell_path, prefs_common.enable_aspell);
1664 btn_aspell_path = gtk_button_new_with_label(" ... ");
1665 gtk_widget_show(btn_aspell_path);
1666 gtk_box_pack_start(GTK_BOX(hbox_aspell_path), btn_aspell_path, FALSE, FALSE, 0);
1667 gtk_widget_set_sensitive(btn_aspell_path, prefs_common.enable_aspell);
1669 gtk_signal_connect(GTK_OBJECT(btn_aspell_path), "clicked",
1670 GTK_SIGNAL_FUNC(prefs_spelling_btn_aspell_path_clicked_cb),
1673 label_dictionary = gtk_label_new(_("Default dictionary:"));
1674 gtk_misc_set_alignment(GTK_MISC(label_dictionary), 1.0, 0.5);
1675 gtk_widget_show(label_dictionary);
1676 gtk_table_attach (GTK_TABLE (spell_table), label_dictionary, 0, 1, 1, 2,
1677 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1679 optmenu_dictionary = gtk_option_menu_new();
1680 gtk_widget_show(optmenu_dictionary);
1681 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1682 gtkaspell_dictionary_option_menu_new(
1683 prefs_common.aspell_path));
1684 gtk_table_attach (GTK_TABLE (spell_table), optmenu_dictionary, 1, 2, 1,
1685 2, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1686 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_aspell);
1688 /* Suggestion mode */
1689 sugmode_label = gtk_label_new(_("Default suggestion mode"));
1690 gtk_misc_set_alignment(GTK_MISC(sugmode_label), 1.0, 0.5);
1691 gtk_widget_show(sugmode_label);
1692 gtk_table_attach(GTK_TABLE (spell_table), sugmode_label, 0, 1, 2, 3,
1693 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1695 sugmode_optmenu = gtk_option_menu_new();
1696 gtk_widget_show(sugmode_optmenu);
1697 gtk_option_menu_set_menu(GTK_OPTION_MENU(sugmode_optmenu),
1698 gtkaspell_sugmode_option_menu_new(prefs_common.aspell_sugmode));
1699 gtk_table_attach(GTK_TABLE(spell_table), sugmode_optmenu, 1, 2, 2, 3,
1700 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1701 gtk_widget_set_sensitive(sugmode_optmenu, prefs_common.enable_aspell);
1704 color_label = gtk_label_new(_("Misspelled word color:"));
1705 gtk_misc_set_alignment(GTK_MISC(color_label), 1.0, 0.5);
1706 gtk_table_attach (GTK_TABLE (spell_table), color_label, 0, 1, 3, 4,
1707 GTK_FILL, GTK_SHRINK, 0, 0);
1708 gtk_widget_show(color_label);
1710 col_align = gtk_alignment_new(0.0, 0.5, 0, 0);
1711 gtk_widget_show(col_align);
1712 gtk_table_attach (GTK_TABLE (spell_table), col_align, 1, 2, 3, 4,
1713 GTK_FILL, GTK_SHRINK, 0, 0);
1715 spelling.misspelled_btn = gtk_button_new_with_label ("");
1716 set_button_bg_color(spelling.misspelled_btn,
1717 prefs_common.misspelled_col);
1718 gtk_widget_set_usize (spelling.misspelled_btn, 30, 20);
1719 gtk_widget_set_sensitive(spelling.misspelled_btn, prefs_common.enable_aspell);
1720 gtk_signal_connect (GTK_OBJECT (spelling.misspelled_btn), "clicked",
1721 GTK_SIGNAL_FUNC(quote_color_set_dialog), "Misspelled word");
1722 gtk_container_add(GTK_CONTAINER(col_align), spelling.misspelled_btn);
1725 spelling.checkbtn_enable_aspell = checkbtn_enable_aspell;
1726 spelling.entry_aspell_path = entry_aspell_path;
1727 spelling.btn_aspell_path = btn_aspell_path;
1728 spelling.optmenu_dictionary = optmenu_dictionary;
1729 spelling.optmenu_sugmode = sugmode_optmenu;
1730 spelling.checkbtn_use_alternate = checkbtn_use_alternate;
1731 spelling.checkbtn_check_while_typing = checkbtn_check_while_typing;
1737 static void prefs_compose_create(void)
1743 GtkWidget *checkbtn_autoextedit;
1745 GtkWidget *frame_autosel;
1746 GtkWidget *hbox_autosel;
1747 GtkWidget *checkbtn_reply_account_autosel;
1748 GtkWidget *checkbtn_forward_account_autosel;
1749 GtkWidget *checkbtn_reedit_account_autosel;
1751 GtkWidget *hbox_undolevel;
1752 GtkWidget *label_undolevel;
1753 GtkObject *spinbtn_undolevel_adj;
1754 GtkWidget *spinbtn_undolevel;
1756 GtkWidget *vbox_linewrap;
1761 GtkWidget *label_linewrap;
1762 GtkObject *spinbtn_linewrap_adj;
1763 GtkWidget *spinbtn_linewrap;
1764 GtkWidget *checkbtn_wrapquote;
1765 GtkWidget *checkbtn_autowrap;
1766 GtkWidget *checkbtn_wrapatsend;
1768 GtkWidget *checkbtn_default_reply_list;
1770 GtkWidget *checkbtn_forward_as_attachment;
1771 GtkWidget *checkbtn_redirect_keep_from;
1772 GtkWidget *checkbtn_smart_wrapping;
1773 GtkWidget *checkbtn_block_cursor;
1774 GtkWidget *frame_msgwrap;
1776 GtkWidget *hbox_autosave;
1777 GtkWidget *checkbtn_autosave;
1778 GtkWidget *entry_autosave_length;
1779 GtkWidget *label_autosave_length;
1781 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1782 gtk_widget_show (vbox1);
1783 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1784 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1786 /* Account autoselection */
1787 PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1789 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1790 gtk_widget_show (hbox_autosel);
1791 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1792 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1794 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1795 _("when replying"));
1796 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1797 _("when forwarding"));
1798 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1799 _("when re-editing"));
1801 vbox2 = gtk_vbox_new (FALSE, 0);
1802 gtk_widget_show (vbox2);
1803 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1805 PACK_CHECK_BUTTON (vbox2, checkbtn_default_reply_list,
1806 _("Reply button invokes mailing list reply"));
1808 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1809 _("Automatically launch the external editor"));
1811 hbox5 = gtk_hbox_new (FALSE, 8);
1812 gtk_widget_show (hbox5);
1813 gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1815 PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1816 _("Forward as attachment"));
1818 PACK_CHECK_BUTTON (hbox5, checkbtn_block_cursor,
1821 PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1822 _("Keep the original 'From' header when redirecting"));
1825 hbox_autosave = gtk_hbox_new (FALSE, 8);
1826 gtk_widget_show (hbox_autosave);
1827 gtk_box_pack_start (GTK_BOX (vbox1), hbox_autosave, FALSE, FALSE, 0);
1829 PACK_CHECK_BUTTON (hbox_autosave, checkbtn_autosave,
1830 _("Autosave to Drafts folder every "));
1832 entry_autosave_length = gtk_entry_new();
1833 gtk_widget_set_usize (entry_autosave_length, 64, -1);
1834 gtk_widget_show (entry_autosave_length);
1835 gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0);
1837 label_autosave_length = gtk_label_new(_("characters"));
1838 gtk_widget_show (label_autosave_length);
1839 gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
1841 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1842 gtk_widget_show (hbox_undolevel);
1843 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1845 label_undolevel = gtk_label_new (_("Undo level"));
1846 gtk_widget_show (label_undolevel);
1847 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1849 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1850 spinbtn_undolevel = gtk_spin_button_new
1851 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1852 gtk_widget_show (spinbtn_undolevel);
1853 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1854 gtk_widget_set_usize (spinbtn_undolevel, 64, -1);
1855 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1858 PACK_FRAME(vbox1, frame_msgwrap, _("Message wrapping"));
1860 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1861 gtk_widget_show (vbox_linewrap);
1862 gtk_container_add (GTK_CONTAINER (frame_msgwrap), vbox_linewrap);
1863 gtk_container_set_border_width (GTK_CONTAINER (vbox_linewrap), 8);
1865 hbox3 = gtk_hbox_new (FALSE, 8);
1866 gtk_widget_show (hbox3);
1867 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1870 label_linewrap = gtk_label_new (_("Wrap messages at"));
1871 gtk_widget_show (label_linewrap);
1872 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1874 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1875 spinbtn_linewrap = gtk_spin_button_new
1876 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1877 gtk_widget_show (spinbtn_linewrap);
1878 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1879 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1880 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1882 label_linewrap = gtk_label_new (_("characters"));
1883 gtk_widget_show (label_linewrap);
1884 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1886 hbox4 = gtk_hbox_new (FALSE, VSPACING);
1887 gtk_widget_show (hbox4);
1888 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1890 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1892 PACK_CHECK_BUTTON (hbox4, checkbtn_autowrap, _("Wrap on input"));
1895 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1897 PACK_CHECK_BUTTON (vbox_linewrap, checkbtn_smart_wrapping,
1898 _("Smart wrapping (EXPERIMENTAL)"));
1901 compose.checkbtn_quote = checkbtn_quote;
1902 compose.entry_quotemark = entry_quotemark;
1903 compose.text_quotefmt = text_quotefmt;
1906 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1908 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1909 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1910 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1912 compose.spinbtn_undolevel = spinbtn_undolevel;
1913 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1915 compose.spinbtn_linewrap = spinbtn_linewrap;
1916 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1917 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1918 compose.checkbtn_autowrap = checkbtn_autowrap;
1919 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1921 compose.checkbtn_autosave = checkbtn_autosave;
1922 compose.entry_autosave_length = entry_autosave_length;
1924 compose.checkbtn_forward_as_attachment =
1925 checkbtn_forward_as_attachment;
1926 compose.checkbtn_redirect_keep_from =
1927 checkbtn_redirect_keep_from;
1928 compose.checkbtn_smart_wrapping =
1929 checkbtn_smart_wrapping;
1930 compose.checkbtn_block_cursor =
1931 checkbtn_block_cursor;
1932 compose.checkbtn_default_reply_list = checkbtn_default_reply_list;
1935 static void prefs_quote_create(void)
1938 GtkWidget *frame_quote;
1939 GtkWidget *vbox_quote;
1942 GtkWidget *label_quotemark;
1943 GtkWidget *entry_quotemark;
1944 GtkWidget *scrolledwin_quotefmt;
1945 GtkWidget *text_quotefmt;
1947 GtkWidget *entry_fw_quotemark;
1948 GtkWidget *text_fw_quotefmt;
1950 GtkWidget *entry_quote_chars;
1951 GtkWidget *label_quote_chars;
1953 GtkWidget *btn_quotedesc;
1955 GtkWidget *checkbtn_reply_with_quote;
1957 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1958 gtk_widget_show (vbox1);
1959 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1960 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1964 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1966 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1968 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1969 gtk_widget_show (vbox_quote);
1970 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1971 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1973 hbox1 = gtk_hbox_new (FALSE, 32);
1974 gtk_widget_show (hbox1);
1975 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1977 hbox2 = gtk_hbox_new (FALSE, 8);
1978 gtk_widget_show (hbox2);
1979 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1981 label_quotemark = gtk_label_new (_("Quotation mark"));
1982 gtk_widget_show (label_quotemark);
1983 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1985 entry_quotemark = gtk_entry_new ();
1986 gtk_widget_show (entry_quotemark);
1987 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1988 gtk_widget_set_usize (entry_quotemark, 64, -1);
1990 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1991 gtk_widget_show (scrolledwin_quotefmt);
1992 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1993 gtk_scrolled_window_set_policy
1994 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1995 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1997 text_quotefmt = gtk_text_new (NULL, NULL);
1998 gtk_widget_show (text_quotefmt);
1999 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
2000 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
2001 gtk_widget_set_usize(text_quotefmt, -1, 60);
2005 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
2007 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
2008 gtk_widget_show (vbox_quote);
2009 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
2010 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
2012 hbox1 = gtk_hbox_new (FALSE, 32);
2013 gtk_widget_show (hbox1);
2014 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2016 hbox2 = gtk_hbox_new (FALSE, 8);
2017 gtk_widget_show (hbox2);
2018 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
2020 label_quotemark = gtk_label_new (_("Quotation mark"));
2021 gtk_widget_show (label_quotemark);
2022 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
2024 entry_fw_quotemark = gtk_entry_new ();
2025 gtk_widget_show (entry_fw_quotemark);
2026 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
2028 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
2030 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
2031 gtk_widget_show (scrolledwin_quotefmt);
2032 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
2033 gtk_scrolled_window_set_policy
2034 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
2035 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2037 text_fw_quotefmt = gtk_text_new (NULL, NULL);
2038 gtk_widget_show (text_fw_quotefmt);
2039 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
2041 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
2042 gtk_widget_set_usize(text_fw_quotefmt, -1, 60);
2044 hbox1 = gtk_hbox_new (FALSE, 32);
2045 gtk_widget_show (hbox1);
2046 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2049 gtk_button_new_with_label (_(" Description of symbols "));
2050 gtk_widget_show (btn_quotedesc);
2051 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
2052 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
2053 GTK_SIGNAL_FUNC(quote_fmt_quote_description), NULL);
2057 PACK_FRAME (vbox1, frame_quote, _("Quotation characters"));
2059 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
2060 gtk_widget_show (vbox_quote);
2061 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
2062 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
2064 hbox1 = gtk_hbox_new (FALSE, 32);
2065 gtk_widget_show (hbox1);
2066 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2068 hbox2 = gtk_hbox_new (FALSE, 8);
2069 gtk_widget_show (hbox2);
2070 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
2072 label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
2073 gtk_widget_show (label_quote_chars);
2074 gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
2076 entry_quote_chars = gtk_entry_new ();
2077 gtk_widget_show (entry_quote_chars);
2078 gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
2080 gtk_widget_set_usize (entry_quote_chars, 64, -1);
2083 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
2084 quote.entry_quotemark = entry_quotemark;
2085 quote.text_quotefmt = text_quotefmt;
2086 quote.entry_fw_quotemark = entry_fw_quotemark;
2087 quote.text_fw_quotefmt = text_fw_quotefmt;
2088 quote.entry_quote_chars = entry_quote_chars;
2091 static void prefs_display_create(void)
2094 GtkWidget *frame_font;
2096 GtkWidget *label_textfont;
2097 GtkWidget *entry_textfont;
2098 GtkWidget *button_textfont;
2099 GtkWidget *chkbtn_transhdr;
2100 GtkWidget *chkbtn_folder_unread;
2102 GtkWidget *label_ng_abbrev;
2103 GtkWidget *spinbtn_ng_abbrev_len;
2104 GtkObject *spinbtn_ng_abbrev_len_adj;
2105 GtkWidget *frame_summary;
2107 GtkWidget *chkbtn_swapfrom;
2108 GtkWidget *chkbtn_useaddrbook;
2109 GtkWidget *chkbtn_threadsubj;
2111 GtkWidget *label_datefmt;
2112 GtkWidget *button_datefmt;
2113 GtkWidget *entry_datefmt;
2114 GtkWidget *button_dispitem;
2115 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
2117 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2118 gtk_widget_show (vbox1);
2119 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2120 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2122 PACK_FRAME(vbox1, frame_font, _("Font"));
2124 table1 = gtk_table_new (4, 3, FALSE);
2126 gtk_widget_show (table1);
2127 gtk_container_add (GTK_CONTAINER (frame_font), table1);
2128 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
2129 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
2130 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
2132 label_textfont = gtk_label_new (_("Text"));
2133 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
2134 gtk_widget_show (label_textfont);
2135 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
2136 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2138 entry_textfont = gtk_entry_new ();
2139 gtk_widget_show (entry_textfont);
2140 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
2141 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2143 button_textfont = gtk_button_new_with_label (" ... ");
2145 gtk_widget_show (button_textfont);
2146 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
2148 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
2149 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
2151 tmplabel = gtk_label_new (_("Small"));
2152 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2153 gtk_widget_show (tmplabel);
2154 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
2155 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2157 tmpentry = gtk_entry_new ();
2158 gtk_widget_show (tmpentry);
2159 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
2160 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2162 tmpbutton = gtk_button_new_with_label (" ... ");
2163 gtk_widget_show (tmpbutton);
2164 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
2166 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2167 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2168 display.entry_smallfont = tmpentry;
2170 tmplabel = gtk_label_new (_("Normal"));
2171 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2172 gtk_widget_show (tmplabel);
2173 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
2174 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2176 tmpentry = gtk_entry_new ();
2177 gtk_widget_show (tmpentry);
2178 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
2179 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2181 tmpbutton = gtk_button_new_with_label (" ... ");
2182 gtk_widget_show (tmpbutton);
2183 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
2185 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2186 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2187 display.entry_normalfont = tmpentry;
2189 tmplabel = gtk_label_new (_("Bold"));
2190 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2191 gtk_widget_show (tmplabel);
2192 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
2193 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2195 tmpentry = gtk_entry_new ();
2196 gtk_widget_show (tmpentry);
2197 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
2198 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2200 tmpbutton = gtk_button_new_with_label (" ... ");
2201 gtk_widget_show (tmpbutton);
2202 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
2204 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2205 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2206 display.entry_boldfont = tmpentry;
2208 vbox2 = gtk_vbox_new (FALSE, 0);
2209 gtk_widget_show (vbox2);
2210 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
2213 (vbox2, chkbtn_transhdr,
2214 _("Translate header name (such as `From:', `Subject:')"));
2216 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
2217 _("Display unread number next to folder name"));
2219 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2221 hbox1 = gtk_hbox_new (FALSE, 8);
2222 gtk_widget_show (hbox1);
2223 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2225 label_ng_abbrev = gtk_label_new
2226 (_("Abbreviate newsgroup names longer than"));
2227 gtk_widget_show (label_ng_abbrev);
2228 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
2230 spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
2231 spinbtn_ng_abbrev_len = gtk_spin_button_new
2232 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
2233 gtk_widget_show (spinbtn_ng_abbrev_len);
2234 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
2236 gtk_widget_set_usize (spinbtn_ng_abbrev_len, 56, -1);
2237 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
2240 label_ng_abbrev = gtk_label_new
2242 gtk_widget_show (label_ng_abbrev);
2243 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
2245 /* ---- Summary ---- */
2247 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
2249 vbox2 = gtk_vbox_new (FALSE, 0);
2250 gtk_widget_show (vbox2);
2251 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
2252 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
2255 (vbox2, chkbtn_swapfrom,
2256 _("Display recipient in `From' column if sender is yourself"));
2258 (vbox2, chkbtn_useaddrbook,
2259 _("Display sender using address book"));
2261 (vbox2, chkbtn_threadsubj,
2262 _("Thread using subject in addition to standard headers"));
2264 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2266 hbox1 = gtk_hbox_new (FALSE, 8);
2267 gtk_widget_show (hbox1);
2268 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2270 label_datefmt = gtk_label_new (_("Date format"));
2271 gtk_widget_show (label_datefmt);
2272 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
2274 entry_datefmt = gtk_entry_new ();
2275 gtk_widget_show (entry_datefmt);
2276 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
2278 button_datefmt = gtk_button_new_with_label (" ... ");
2280 gtk_widget_show (button_datefmt);
2281 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
2282 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
2283 GTK_SIGNAL_FUNC (date_format_create), NULL);
2285 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2287 hbox1 = gtk_hbox_new (FALSE, 8);
2288 gtk_widget_show (hbox1);
2289 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2291 button_dispitem = gtk_button_new_with_label
2292 (_(" Set displayed items in summary... "));
2293 gtk_widget_show (button_dispitem);
2294 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
2295 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
2296 GTK_SIGNAL_FUNC (prefs_summary_column_open),
2299 display.entry_textfont = entry_textfont;
2300 display.button_textfont = button_textfont;
2302 display.chkbtn_transhdr = chkbtn_transhdr;
2303 display.chkbtn_folder_unread = chkbtn_folder_unread;
2304 display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
2305 display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
2307 display.chkbtn_swapfrom = chkbtn_swapfrom;
2308 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
2309 display.chkbtn_threadsubj = chkbtn_threadsubj;
2310 display.entry_datefmt = entry_datefmt;
2313 static void prefs_message_create(void)
2319 GtkWidget *chkbtn_enablecol;
2320 GtkWidget *button_edit_col;
2321 GtkWidget *chkbtn_mbalnum;
2322 GtkWidget *chkbtn_disphdrpane;
2323 GtkWidget *chkbtn_disphdr;
2324 GtkWidget *button_edit_disphdr;
2325 GtkWidget *hbox_linespc;
2326 GtkWidget *label_linespc;
2327 GtkObject *spinbtn_linespc_adj;
2328 GtkWidget *spinbtn_linespc;
2329 GtkWidget *chkbtn_headspc;
2331 GtkWidget *frame_scr;
2332 GtkWidget *vbox_scr;
2333 GtkWidget *chkbtn_smoothscroll;
2334 GtkWidget *hbox_scr;
2335 GtkWidget *label_scr;
2336 GtkObject *spinbtn_scrollstep_adj;
2337 GtkWidget *spinbtn_scrollstep;
2338 GtkWidget *chkbtn_halfpage;
2340 GtkWidget *chkbtn_display_img;
2341 GtkWidget *chkbtn_resize_image;
2343 GtkWidget *chkbtn_attach_desc;
2345 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2346 gtk_widget_show (vbox1);
2347 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2348 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2350 vbox2 = gtk_vbox_new (FALSE, 0);
2351 gtk_widget_show (vbox2);
2352 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2354 hbox1 = gtk_hbox_new (FALSE, 8);
2355 gtk_widget_show (hbox1);
2356 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2358 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
2359 _("Enable coloration of message"));
2360 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
2361 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
2364 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
2365 gtk_widget_show (button_edit_col);
2366 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
2367 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
2368 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
2370 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
2373 (vbox2, chkbtn_mbalnum,
2374 _("Display multi-byte alphanumeric as\n"
2375 "ASCII character (Japanese only)"));
2376 gtk_label_set_justify (GTK_LABEL (GTK_BIN(chkbtn_mbalnum)->child),
2379 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
2380 _("Display header pane above message view"));
2382 hbox1 = gtk_hbox_new (FALSE, 8);
2383 gtk_widget_show (hbox1);
2384 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2386 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
2387 _("Display short headers on message view"));
2389 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
2390 gtk_widget_show (button_edit_disphdr);
2391 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
2393 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
2394 GTK_SIGNAL_FUNC (prefs_display_header_open),
2397 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
2399 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2401 hbox1 = gtk_hbox_new (FALSE, 32);
2402 gtk_widget_show (hbox1);
2403 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2405 hbox_linespc = gtk_hbox_new (FALSE, 8);
2406 gtk_widget_show (hbox1);
2407 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
2409 label_linespc = gtk_label_new (_("Line space"));
2410 gtk_widget_show (label_linespc);
2411 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2414 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
2415 spinbtn_linespc = gtk_spin_button_new
2416 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
2417 gtk_widget_show (spinbtn_linespc);
2418 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
2420 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
2421 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
2423 label_linespc = gtk_label_new (_("pixel(s)"));
2424 gtk_widget_show (label_linespc);
2425 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2428 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
2430 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
2432 vbox_scr = gtk_vbox_new (FALSE, 0);
2433 gtk_widget_show (vbox_scr);
2434 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
2435 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
2437 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
2439 hbox1 = gtk_hbox_new (FALSE, 32);
2440 gtk_widget_show (hbox1);
2441 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
2443 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
2445 hbox_scr = gtk_hbox_new (FALSE, 8);
2446 gtk_widget_show (hbox_scr);
2447 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
2449 label_scr = gtk_label_new (_("Step"));
2450 gtk_widget_show (label_scr);
2451 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2453 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
2454 spinbtn_scrollstep = gtk_spin_button_new
2455 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
2456 gtk_widget_show (spinbtn_scrollstep);
2457 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
2459 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
2460 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
2463 label_scr = gtk_label_new (_("pixel(s)"));
2464 gtk_widget_show (label_scr);
2465 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2467 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
2469 vbox3 = gtk_vbox_new (FALSE, 0);
2470 gtk_widget_show (vbox3);
2471 gtk_box_pack_start (GTK_BOX (vbox1), vbox3, FALSE, FALSE, 0);
2473 PACK_CHECK_BUTTON(vbox3, chkbtn_display_img,
2474 _("Automatically display attached images"));
2476 PACK_CHECK_BUTTON(vbox3, chkbtn_resize_image,
2477 _("Resize attached images"));
2479 PACK_CHECK_BUTTON(vbox3, chkbtn_attach_desc,
2480 _("Show attachment descriptions (rather than names)"));
2483 message.chkbtn_enablecol = chkbtn_enablecol;
2484 message.button_edit_col = button_edit_col;
2485 message.chkbtn_mbalnum = chkbtn_mbalnum;
2486 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
2487 message.chkbtn_disphdr = chkbtn_disphdr;
2488 message.spinbtn_linespc = spinbtn_linespc;
2489 message.chkbtn_headspc = chkbtn_headspc;
2491 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
2492 message.spinbtn_scrollstep = spinbtn_scrollstep;
2493 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
2494 message.chkbtn_halfpage = chkbtn_halfpage;
2496 message.chkbtn_display_img = chkbtn_display_img;
2497 message.chkbtn_resize_image = chkbtn_resize_image;
2499 message.chkbtn_attach_desc = chkbtn_attach_desc;
2503 static void prefs_privacy_create(void)
2509 GtkWidget *hbox_spc;
2511 GtkWidget *checkbtn_auto_check_signatures;
2512 GtkWidget *checkbtn_gpg_signature_popup;
2513 GtkWidget *checkbtn_store_passphrase;
2514 GtkObject *spinbtn_store_passphrase_adj;
2515 GtkWidget *spinbtn_store_passphrase;
2516 GtkWidget *checkbtn_passphrase_grab;
2517 GtkWidget *checkbtn_gpg_warning;
2519 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2520 gtk_widget_show (vbox1);
2521 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2522 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2524 vbox2 = gtk_vbox_new (FALSE, 0);
2525 gtk_widget_show (vbox2);
2526 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2528 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
2529 _("Automatically check signatures"));
2531 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
2532 _("Show signature check result in a popup window"));
2534 PACK_CHECK_BUTTON (vbox2, checkbtn_store_passphrase,
2535 _("Store passphrase in memory temporarily"));
2537 vbox3 = gtk_vbox_new (FALSE, 0);
2538 gtk_widget_show (vbox3);
2539 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2541 hbox1 = gtk_hbox_new (FALSE, 8);
2542 gtk_widget_show (hbox1);
2543 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2545 hbox_spc = gtk_hbox_new (FALSE, 0);
2546 gtk_widget_show (hbox_spc);
2547 gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
2548 gtk_widget_set_usize (hbox_spc, 12, -1);
2550 label = gtk_label_new (_("Expire after"));
2551 gtk_widget_show (label);
2552 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2554 spinbtn_store_passphrase_adj = gtk_adjustment_new (0, 0, 1440, 1, 5, 5);
2555 spinbtn_store_passphrase = gtk_spin_button_new
2556 (GTK_ADJUSTMENT (spinbtn_store_passphrase_adj), 1, 0);
2557 gtk_widget_show (spinbtn_store_passphrase);
2558 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_store_passphrase, FALSE, FALSE, 0);
2559 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_store_passphrase),
2561 gtk_widget_set_usize (spinbtn_store_passphrase, 64, -1);
2563 label = gtk_label_new (_("minute(s) "));
2564 gtk_widget_show (label);
2565 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2567 hbox1 = gtk_hbox_new (FALSE, 8);
2568 gtk_widget_show (hbox1);
2569 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2571 hbox_spc = gtk_hbox_new (FALSE, 0);
2572 gtk_widget_show (hbox_spc);
2573 gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
2574 gtk_widget_set_usize (hbox_spc, 12, -1);
2576 label = gtk_label_new (_("(Setting to '0' will store the passphrase\n"
2577 " for the whole session)"));
2578 gtk_widget_show (label);
2579 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2580 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2582 SET_TOGGLE_SENSITIVITY (checkbtn_store_passphrase, vbox3);
2585 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
2586 _("Grab input while entering a passphrase"));
2590 (vbox2, checkbtn_gpg_warning,
2591 _("Display warning on startup if GnuPG doesn't work"));
2593 hbox1 = gtk_hbox_new (FALSE, 8);
2594 gtk_widget_show (hbox1);
2595 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2597 privacy.checkbtn_auto_check_signatures
2598 = checkbtn_auto_check_signatures;
2599 privacy.checkbtn_gpg_signature_popup
2600 = checkbtn_gpg_signature_popup;
2601 privacy.checkbtn_store_passphrase = checkbtn_store_passphrase;
2602 privacy.spinbtn_store_passphrase = spinbtn_store_passphrase;
2603 privacy.spinbtn_store_passphrase_adj = spinbtn_store_passphrase_adj;
2604 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2605 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2607 #endif /* USE_GPGME */
2609 static void prefs_interface_create(void)
2614 /* GtkWidget *checkbtn_emacs; */
2615 GtkWidget *checkbtn_show_msg_with_cursor;
2616 GtkWidget *checkbtn_openunread;
2617 GtkWidget *checkbtn_mark_as_read_on_newwin;
2618 GtkWidget *checkbtn_openinbox;
2619 GtkWidget *checkbtn_immedexec;
2620 GtkWidget *frame_dialogs;
2621 GtkWidget *vbox_dialogs;
2624 GtkWidget *dialogs_table;
2625 GtkWidget *optmenu_recvdialog;
2626 GtkWidget *optmenu_senddialog;
2628 GtkWidget *menuitem;
2629 GtkWidget *checkbtn_no_recv_err_panel;
2630 GtkWidget *checkbtn_close_recv_dialog;
2632 GtkWidget *button_keybind;
2634 GtkWidget *optmenu_nextunreadmsgdialog;
2636 GtkWidget *frame_pixmap_theme;
2637 GtkWidget *vbox_pixmap_theme;
2638 GtkWidget *entry_pixmap_theme;
2639 GtkWidget *combo_pixmap_theme;
2640 GList *avail_pixmap_themes = NULL;
2642 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2643 gtk_widget_show (vbox1);
2644 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2645 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2647 vbox2 = gtk_vbox_new (FALSE, 0);
2648 gtk_widget_show (vbox2);
2649 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2651 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2652 _("Emulate the behavior of mouse operation of\n"
2653 "Emacs-based mailer"));
2654 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2655 GTK_JUSTIFY_LEFT); */
2658 (vbox2, checkbtn_show_msg_with_cursor,
2659 _("Open messages in summary with cursor keys"));
2662 (vbox2, checkbtn_openunread,
2663 _("Open first unread message when entering a folder"));
2666 (vbox2, checkbtn_mark_as_read_on_newwin,
2667 _("Only mark message as read when opened in new window"));
2670 (vbox2, checkbtn_openinbox,
2671 _("Go to inbox after receiving new mail"));
2673 vbox3 = gtk_vbox_new (FALSE, 0);
2674 gtk_widget_show (vbox3);
2675 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2678 (vbox3, checkbtn_immedexec,
2679 _("Execute immediately when moving or deleting messages"));
2681 hbox1 = gtk_hbox_new (FALSE, 0);
2682 gtk_widget_show (hbox1);
2683 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2685 label = gtk_label_new
2686 (_("(Messages will be marked until execution\n"
2687 " if this is turned off)"));
2688 gtk_widget_show (label);
2689 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2690 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2692 PACK_FRAME (vbox1, frame_dialogs, _("Dialogs"));
2693 vbox_dialogs = gtk_vbox_new (FALSE, 0);
2694 gtk_widget_show (vbox_dialogs);
2695 gtk_container_add (GTK_CONTAINER (frame_dialogs), vbox_dialogs);
2696 gtk_container_set_border_width (GTK_CONTAINER (vbox_dialogs), 8);
2698 dialogs_table = gtk_table_new (2, 2, FALSE);
2699 gtk_widget_show (dialogs_table);
2700 gtk_container_add (GTK_CONTAINER (vbox_dialogs), dialogs_table);
2701 gtk_container_set_border_width (GTK_CONTAINER (dialogs_table), 4);
2702 gtk_table_set_row_spacings (GTK_TABLE (dialogs_table), VSPACING_NARROW);
2703 gtk_table_set_col_spacings (GTK_TABLE (dialogs_table), 8);
2705 /* Next Unread Message Dialog */
2706 label = gtk_label_new (_("Show no-unread-message dialog"));
2707 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
2708 gtk_widget_show (label);
2709 gtk_table_attach (GTK_TABLE (dialogs_table), label, 0, 1, 0, 1,
2710 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2713 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2714 gtk_widget_show (optmenu_nextunreadmsgdialog);
2715 gtk_table_attach (GTK_TABLE (dialogs_table),
2716 optmenu_nextunreadmsgdialog, 1, 2, 0, 1,
2717 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2719 menu = gtk_menu_new ();
2720 MENUITEM_ADD (menu, menuitem, _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2721 MENUITEM_ADD (menu, menuitem, _("Assume 'Yes'"),
2722 NEXTUNREADMSGDIALOG_ASSUME_YES);
2723 MENUITEM_ADD (menu, menuitem, _("Assume 'No'"),
2724 NEXTUNREADMSGDIALOG_ASSUME_NO);
2726 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog), menu);
2728 label = gtk_label_new (_("Show send dialog"));
2729 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
2730 gtk_widget_show (label);
2731 gtk_table_attach (GTK_TABLE (dialogs_table), label, 0, 1, 1, 2,
2732 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2734 optmenu_senddialog = gtk_option_menu_new ();
2735 gtk_widget_show (optmenu_senddialog);
2736 gtk_table_attach (GTK_TABLE (dialogs_table),
2737 optmenu_senddialog, 1, 2, 1, 2,
2738 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2740 menu = gtk_menu_new ();
2741 MENUITEM_ADD (menu, menuitem, _("Always"), SEND_DIALOG_ALWAYS);
2742 MENUITEM_ADD (menu, menuitem, _("Never"), SEND_DIALOG_NEVER);
2744 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_senddialog), menu);
2746 label = gtk_label_new (_("Show receive dialog"));
2747 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
2748 gtk_widget_show (label);
2749 gtk_table_attach (GTK_TABLE (dialogs_table), label, 0, 1, 2, 3,
2750 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2752 optmenu_recvdialog = gtk_option_menu_new ();
2753 gtk_widget_show (optmenu_recvdialog);
2754 gtk_table_attach (GTK_TABLE (dialogs_table), optmenu_recvdialog, 1, 2, 2, 3,
2755 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2757 menu = gtk_menu_new ();
2758 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2759 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2760 RECV_DIALOG_ACTIVE);
2761 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2763 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2765 PACK_CHECK_BUTTON (vbox_dialogs, checkbtn_no_recv_err_panel,
2766 _("Don't popup error dialog on receive error"));
2768 PACK_CHECK_BUTTON (vbox_dialogs, checkbtn_close_recv_dialog,
2769 _("Close receive dialog when finished"));
2772 hbox1 = gtk_hbox_new (FALSE, 8);
2773 gtk_widget_show (hbox1);
2774 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2776 button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
2777 gtk_widget_show (button_keybind);
2778 gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
2779 gtk_signal_connect (GTK_OBJECT (button_keybind), "clicked",
2780 GTK_SIGNAL_FUNC (prefs_keybind_select), NULL);
2782 PACK_FRAME(vbox1, frame_pixmap_theme, _("Icon theme"));
2784 vbox_pixmap_theme = gtk_vbox_new(FALSE, 0);
2785 gtk_widget_show(vbox_pixmap_theme);
2786 gtk_container_add(GTK_CONTAINER(frame_pixmap_theme), vbox_pixmap_theme);
2787 gtk_container_set_border_width(GTK_CONTAINER(vbox_pixmap_theme), 8);
2789 avail_pixmap_themes = stock_pixmap_themes_list_new();
2791 combo_pixmap_theme = gtk_combo_new ();
2792 gtk_widget_show (combo_pixmap_theme);
2793 gtk_box_pack_start (GTK_BOX (vbox_pixmap_theme), combo_pixmap_theme, TRUE, TRUE, 0);
2794 gtk_combo_set_popdown_strings(GTK_COMBO(combo_pixmap_theme), avail_pixmap_themes);
2795 entry_pixmap_theme = GTK_COMBO (combo_pixmap_theme)->entry;
2797 stock_pixmap_themes_list_free(avail_pixmap_themes);
2799 /* interface.checkbtn_emacs = checkbtn_emacs; */
2800 interface.checkbtn_show_msg_with_cursor
2801 = checkbtn_show_msg_with_cursor;
2802 interface.checkbtn_openunread = checkbtn_openunread;
2803 interface.checkbtn_mark_as_read_on_newwin
2804 = checkbtn_mark_as_read_on_newwin;
2805 interface.checkbtn_openinbox = checkbtn_openinbox;
2806 interface.checkbtn_immedexec = checkbtn_immedexec;
2807 interface.optmenu_recvdialog = optmenu_recvdialog;
2808 interface.optmenu_senddialog = optmenu_senddialog;
2809 interface.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
2810 interface.checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
2811 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2812 interface.combo_pixmap_theme = combo_pixmap_theme;
2813 interface.entry_pixmap_theme = entry_pixmap_theme;
2816 static void prefs_other_create(void)
2819 GtkWidget *ext_frame;
2820 GtkWidget *ext_table;
2823 GtkWidget *uri_label;
2824 GtkWidget *uri_combo;
2825 GtkWidget *uri_entry;
2827 GtkWidget *printcmd_label;
2828 GtkWidget *printcmd_entry;
2830 GtkWidget *exteditor_label;
2831 GtkWidget *exteditor_combo;
2832 GtkWidget *exteditor_entry;
2834 GtkWidget *frame_addr;
2835 GtkWidget *vbox_addr;
2836 GtkWidget *checkbtn_addaddrbyclick;
2838 GtkWidget *frame_cliplog;
2839 GtkWidget *vbox_cliplog;
2840 GtkWidget *hbox_cliplog;
2841 GtkWidget *checkbtn_cliplog;
2842 GtkWidget *loglength_label;
2843 GtkWidget *loglength_entry;
2845 GtkWidget *frame_exit;
2846 GtkWidget *vbox_exit;
2847 GtkWidget *checkbtn_confonexit;
2848 GtkWidget *checkbtn_cleanonexit;
2849 GtkWidget *checkbtn_askonclean;
2850 GtkWidget *checkbtn_warnqueued;
2853 GtkWidget *frame_ssl;
2854 GtkWidget *vbox_ssl;
2855 GtkWidget *hbox_ssl;
2856 GtkWidget *checkbtn_ssl_ask_unknown_valid;
2859 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2860 gtk_widget_show (vbox1);
2861 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2862 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2864 PACK_FRAME(vbox1, ext_frame,
2865 _("External commands (%s will be replaced with file name / URI)"));
2867 ext_table = gtk_table_new (3, 2, FALSE);
2868 gtk_widget_show (ext_table);
2869 gtk_container_add (GTK_CONTAINER (ext_frame), ext_table);
2870 gtk_container_set_border_width (GTK_CONTAINER (ext_table), 8);
2871 gtk_table_set_row_spacings (GTK_TABLE (ext_table), VSPACING_NARROW);
2872 gtk_table_set_col_spacings (GTK_TABLE (ext_table), 8);
2874 uri_label = gtk_label_new (_("Web browser"));
2875 gtk_widget_show(uri_label);
2876 gtk_table_attach (GTK_TABLE (ext_table), uri_label, 0, 1, 0, 1,
2877 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2878 gtk_misc_set_alignment (GTK_MISC (uri_label), 1, 0.5);
2880 uri_combo = gtk_combo_new ();
2881 gtk_widget_show (uri_combo);
2882 gtk_table_attach (GTK_TABLE (ext_table), uri_combo, 1, 2, 0, 1,
2883 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2884 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2885 DEFAULT_BROWSER_CMD,
2886 "galeon --new-tab '%s'",
2888 "mozilla -remote 'openurl(%s,new-window)'",
2889 "netscape -remote 'openURL(%s, new-window)'",
2891 "gnome-moz-remote --newwin '%s'",
2892 "kfmclient openURL '%s'",
2893 "opera -newwindow '%s'",
2894 "kterm -e w3m '%s'",
2895 "kterm -e lynx '%s'",
2897 uri_entry = GTK_COMBO (uri_combo)->entry;
2899 printcmd_label = gtk_label_new (_("Print"));
2900 gtk_widget_show (printcmd_label);
2901 gtk_table_attach (GTK_TABLE (ext_table), printcmd_label, 0, 1, 1, 2,
2902 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2903 gtk_misc_set_alignment (GTK_MISC (printcmd_label), 1, 0.5);
2905 printcmd_entry = gtk_entry_new ();
2906 gtk_widget_show (printcmd_entry);
2907 gtk_table_attach (GTK_TABLE (ext_table), printcmd_entry, 1, 2, 1, 2,
2908 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2910 exteditor_label = gtk_label_new (_("Editor"));
2911 gtk_widget_show (exteditor_label);
2912 gtk_table_attach (GTK_TABLE (ext_table), exteditor_label, 0, 1, 2, 3,
2913 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2914 gtk_misc_set_alignment (GTK_MISC (exteditor_label), 1, 0.5);
2916 exteditor_combo = gtk_combo_new ();
2917 gtk_widget_show (exteditor_combo);
2918 gtk_table_attach (GTK_TABLE (ext_table), exteditor_combo, 1, 2, 2, 3,
2919 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2920 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2923 "mgedit --no-fork %s",
2929 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2931 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2933 vbox_addr = gtk_vbox_new (FALSE, 0);
2934 gtk_widget_show (vbox_addr);
2935 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2936 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2939 (vbox_addr, checkbtn_addaddrbyclick,
2940 _("Add address to destination when double-clicked"));
2943 PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2945 vbox_cliplog = gtk_vbox_new (FALSE, 0);
2946 gtk_widget_show (vbox_cliplog);
2947 gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2948 gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2949 PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2950 _("Clip the log size"));
2951 hbox_cliplog = gtk_hbox_new (FALSE, 3);
2952 gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2953 gtk_widget_show (hbox_cliplog);
2955 loglength_label = gtk_label_new (_("Log window length"));
2956 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2958 gtk_widget_show (GTK_WIDGET (loglength_label));
2959 loglength_entry = gtk_entry_new ();
2960 gtk_widget_set_usize (GTK_WIDGET (loglength_entry), 64, -1);
2961 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2963 gtk_widget_show (GTK_WIDGET (loglength_entry));
2964 loglength_label = gtk_label_new (_("(0 to stop logging in the log window)"));
2965 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2967 SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2972 PACK_FRAME (vbox1, frame_ssl, _("Security"));
2974 vbox_ssl = gtk_vbox_new (FALSE, 0);
2975 gtk_widget_show (vbox_ssl);
2976 gtk_container_add (GTK_CONTAINER (frame_ssl), vbox_ssl);
2977 gtk_container_set_border_width (GTK_CONTAINER (vbox_ssl), 8);
2978 PACK_CHECK_BUTTON (vbox_ssl, checkbtn_ssl_ask_unknown_valid,
2979 _("Ask before accepting SSL certificates"));
2980 hbox_ssl = gtk_hbox_new (FALSE, 3);
2981 gtk_container_add (GTK_CONTAINER (vbox_ssl), hbox_ssl);
2982 gtk_widget_show (hbox_ssl);
2987 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2989 vbox_exit = gtk_vbox_new (FALSE, 0);
2990 gtk_widget_show (vbox_exit);
2991 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2992 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2994 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2995 _("Confirm on exit"));
2997 hbox1 = gtk_hbox_new (FALSE, 32);
2998 gtk_widget_show (hbox1);
2999 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
3001 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
3002 _("Empty trash on exit"));
3003 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
3004 _("Ask before emptying"));
3005 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
3007 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
3008 _("Warn if there are queued messages"));
3010 other.uri_combo = uri_combo;
3011 other.uri_entry = uri_entry;
3012 other.printcmd_entry = printcmd_entry;
3014 other.exteditor_combo = exteditor_combo;
3015 other.exteditor_entry = exteditor_entry;
3017 other.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
3019 other.checkbtn_cliplog = checkbtn_cliplog;
3020 other.loglength_entry = loglength_entry;
3022 other.checkbtn_confonexit = checkbtn_confonexit;
3023 other.checkbtn_cleanonexit = checkbtn_cleanonexit;
3024 other.checkbtn_askonclean = checkbtn_askonclean;
3025 other.checkbtn_warnqueued = checkbtn_warnqueued;
3029 other.checkbtn_ssl_ask_unknown_valid = checkbtn_ssl_ask_unknown_valid;
3034 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
3036 GtkWidget *datefmt_sample = NULL;
3039 g_return_if_fail(widget != NULL);
3040 g_return_if_fail(*widget != NULL);
3041 g_return_if_fail(display.entry_datefmt != NULL);
3043 datefmt_sample = GTK_WIDGET(gtk_object_get_data
3044 (GTK_OBJECT(*widget), "datefmt_sample"));
3045 g_return_if_fail(datefmt_sample != NULL);
3047 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
3048 g_free(prefs_common.date_format);
3049 prefs_common.date_format = text;
3050 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
3052 gtk_widget_destroy(*widget);
3056 static void date_format_cancel_btn_clicked(GtkButton *button,
3059 g_return_if_fail(widget != NULL);
3060 g_return_if_fail(*widget != NULL);
3062 gtk_widget_destroy(*widget);
3066 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
3069 if (event && event->keyval == GDK_Escape)
3070 date_format_cancel_btn_clicked(NULL, widget);
3073 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
3074 GdkEventAny *event, GtkWidget **widget)
3076 g_return_val_if_fail(widget != NULL, FALSE);
3077 g_return_val_if_fail(*widget != NULL, FALSE);
3083 static void date_format_entry_on_change(GtkEditable *editable,
3087 struct tm *cal_time;
3091 cur_time = time(NULL);
3092 cal_time = localtime(&cur_time);
3094 text = gtk_editable_get_chars(editable, 0, -1);
3096 strftime(buffer, sizeof buffer, text, cal_time);
3098 gtk_label_set_text(example, buffer);
3101 static void date_format_select_row(GtkWidget *date_format_list, gint row,
3102 gint column, GdkEventButton *event,
3103 GtkWidget *date_format)
3109 GtkWidget *datefmt_sample;
3111 /* only on double click */
3112 if (!event || event->type != GDK_2BUTTON_PRESS) return;
3115 datefmt_sample = GTK_WIDGET(gtk_object_get_data
3116 (GTK_OBJECT(date_format), "datefmt_sample"));
3118 g_return_if_fail(date_format_list != NULL);
3119 g_return_if_fail(date_format != NULL);
3120 g_return_if_fail(datefmt_sample != NULL);
3122 /* get format from clist */
3123 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
3125 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
3126 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
3128 /* insert the format into the text entry */
3129 new_format = g_malloc(strlen(old_format) + 3);
3131 strncpy(new_format, old_format, cur_pos);
3132 new_format[cur_pos] = '\0';
3133 strcat(new_format, format);
3134 strcat(new_format, &old_format[cur_pos]);
3136 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
3137 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
3142 static GtkWidget *date_format_create(GtkButton *button, void *data)
3144 static GtkWidget *datefmt_win = NULL;
3146 GtkWidget *scrolledwindow1;
3147 GtkWidget *datefmt_clist;
3152 GtkWidget *confirm_area;
3154 GtkWidget *cancel_btn;
3155 GtkWidget *datefmt_entry;
3184 const gint TIME_FORMAT_ELEMS =
3185 sizeof time_format / sizeof time_format[0];
3187 time_format[0].txt = _("the full abbreviated weekday name");
3188 time_format[1].txt = _("the full weekday name");
3189 time_format[2].txt = _("the abbreviated month name");
3190 time_format[3].txt = _("the full month name");
3191 time_format[4].txt = _("the preferred date and time for the current locale");
3192 time_format[5].txt = _("the century number (year/100)");
3193 time_format[6].txt = _("the day of the month as a decimal number");
3194 time_format[7].txt = _("the hour as a decimal number using a 24-hour clock");
3195 time_format[8].txt = _("the hour as a decimal number using a 12-hour clock");
3196 time_format[9].txt = _("the day of the year as a decimal number");
3197 time_format[10].txt = _("the month as a decimal number");
3198 time_format[11].txt = _("the minute as a decimal number");
3199 time_format[12].txt = _("either AM or PM");
3200 time_format[13].txt = _("the second as a decimal number");
3201 time_format[14].txt = _("the day of the week as a decimal number");
3202 time_format[15].txt = _("the preferred date for the current locale");
3203 time_format[16].txt = _("the last two digits of a year");
3204 time_format[17].txt = _("the year as a decimal number");
3205 time_format[18].txt = _("the time zone or name or abbreviation");
3207 if (datefmt_win) return datefmt_win;
3209 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
3210 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
3211 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
3212 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
3213 gtk_widget_set_usize(datefmt_win, 440, 280);
3215 vbox1 = gtk_vbox_new(FALSE, 10);
3216 gtk_widget_show(vbox1);
3217 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
3219 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
3220 gtk_scrolled_window_set_policy
3221 (GTK_SCROLLED_WINDOW(scrolledwindow1),
3222 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
3223 gtk_widget_show(scrolledwindow1);
3224 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
3226 titles[0] = _("Specifier");
3227 titles[1] = _("Description");
3228 datefmt_clist = gtk_clist_new_with_titles(2, titles);
3229 gtk_widget_show(datefmt_clist);
3230 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
3231 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
3232 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
3233 GTK_SELECTION_BROWSE);
3235 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
3237 /* phoney casting necessary because of gtk... */
3238 text[0] = (gchar *)time_format[i].fmt;
3239 text[1] = (gchar *)time_format[i].txt;
3240 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
3243 table = gtk_table_new(2, 2, FALSE);
3244 gtk_widget_show(table);
3245 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
3246 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
3247 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
3249 label1 = gtk_label_new(_("Date format"));
3250 gtk_widget_show(label1);
3251 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
3253 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
3254 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
3256 datefmt_entry = gtk_entry_new_with_max_length(256);
3257 gtk_widget_show(datefmt_entry);
3258 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
3259 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3261 /* we need the "sample" entry box; add it as data so callbacks can
3262 * get the entry box */
3263 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
3266 label2 = gtk_label_new(_("Example"));
3267 gtk_widget_show(label2);
3268 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
3270 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
3271 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
3273 label3 = gtk_label_new("");
3274 gtk_widget_show(label3);
3275 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
3276 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3277 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
3278 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
3280 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
3281 &cancel_btn, _("Cancel"), NULL, NULL);
3282 gtk_widget_grab_default(ok_btn);
3283 gtk_widget_show(confirm_area);
3285 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
3287 /* set the current format */
3288 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
3289 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
3292 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3293 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
3295 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
3296 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
3298 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
3299 GTK_SIGNAL_FUNC(date_format_key_pressed),
3301 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
3302 GTK_SIGNAL_FUNC(date_format_on_delete),
3304 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
3305 GTK_SIGNAL_FUNC(date_format_entry_on_change),
3308 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
3309 GTK_SIGNAL_FUNC(date_format_select_row),
3312 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
3313 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
3315 gtk_widget_show(datefmt_win);
3316 manage_window_set_transient(GTK_WINDOW(datefmt_win));
3318 gtk_widget_grab_focus(ok_btn);
3323 void prefs_quote_colors_dialog(void)
3325 if (!quote_color_win)
3326 prefs_quote_colors_dialog_create();
3327 gtk_widget_show(quote_color_win);
3328 manage_window_set_transient(GTK_WINDOW(quote_color_win));
3331 gtk_widget_hide(quote_color_win);
3333 textview_update_message_colors();
3334 main_window_reflect_prefs_all();
3337 static void prefs_quote_colors_dialog_create(void)
3342 GtkWidget *quotelevel1_label;
3343 GtkWidget *quotelevel2_label;
3344 GtkWidget *quotelevel3_label;
3345 GtkWidget *uri_label;
3346 GtkWidget *signature_label;
3347 GtkWidget *tgt_folder_label;
3350 GtkWidget *recycle_colors_btn;
3351 GtkWidget *frame_colors;
3353 window = gtk_window_new(GTK_WINDOW_DIALOG);
3354 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
3355 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
3356 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3357 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3358 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3360 vbox = gtk_vbox_new (FALSE, VSPACING);
3361 gtk_container_add (GTK_CONTAINER (window), vbox);
3362 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
3363 PACK_FRAME(vbox, frame_colors, _("Colors"));
3365 table = gtk_table_new (5, 2, FALSE);
3366 gtk_container_add (GTK_CONTAINER (frame_colors), table);
3367 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
3368 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
3369 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
3372 color_buttons.quote_level1_btn = gtk_button_new();
3373 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
3374 0, 1, 0, 1, 0, 0, 0, 0);
3375 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
3376 gtk_container_set_border_width
3377 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
3379 color_buttons.quote_level2_btn = gtk_button_new();
3380 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
3381 0, 1, 1, 2, 0, 0, 0, 0);
3382 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
3383 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
3385 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
3386 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
3387 0, 1, 2, 3, 0, 0, 0, 0);
3388 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
3389 gtk_container_set_border_width
3390 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
3392 color_buttons.uri_btn = gtk_button_new_with_label ("");
3393 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
3394 0, 1, 3, 4, 0, 0, 0, 0);
3395 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
3396 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
3398 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
3399 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
3400 0, 1, 4, 5, 0, 0, 0, 0);
3401 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
3402 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
3404 color_buttons.signature_btn = gtk_button_new_with_label ("");
3405 gtk_table_attach (GTK_TABLE (table), color_buttons.signature_btn,
3406 0, 1, 5, 6, 0, 0, 0, 0);
3407 gtk_widget_set_usize (color_buttons.signature_btn, 40, 30);
3408 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.signature_btn), 5);
3410 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
3411 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
3412 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3413 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
3414 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
3416 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
3417 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
3418 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3419 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
3420 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
3422 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
3423 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
3424 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3425 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
3426 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
3428 uri_label = gtk_label_new (_("URI link"));
3429 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
3430 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3431 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
3432 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
3434 tgt_folder_label = gtk_label_new (_("Target folder"));
3435 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
3436 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3437 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
3438 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
3440 signature_label = gtk_label_new (_("Signatures"));
3441 gtk_table_attach (GTK_TABLE (table), signature_label, 1, 2, 5, 6,
3442 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3443 gtk_label_set_justify (GTK_LABEL (signature_label), GTK_JUSTIFY_LEFT);
3444 gtk_misc_set_alignment (GTK_MISC (signature_label), 0, 0.5);
3446 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
3447 _("Recycle quote colors"));
3449 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3450 NULL, NULL, NULL, NULL);
3451 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3453 gtk_widget_grab_default(ok_btn);
3454 MANAGE_WINDOW_SIGNALS_CONNECT(window);
3455 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3456 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3457 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3458 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
3461 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
3462 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
3463 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
3464 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
3465 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
3466 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
3467 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
3468 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
3469 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
3470 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
3471 gtk_signal_connect(GTK_OBJECT(color_buttons.signature_btn), "clicked",
3472 GTK_SIGNAL_FUNC(quote_color_set_dialog), "SIGNATURE");
3473 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
3474 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
3475 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3476 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3478 /* show message button colors and recycle options */
3479 set_button_bg_color(color_buttons.quote_level1_btn,
3480 prefs_common.quote_level1_col);
3481 set_button_bg_color(color_buttons.quote_level2_btn,