2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2002 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>
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;
89 GtkWidget *spinbtn_maxarticle;
90 GtkObject *spinbtn_maxarticle_adj;
94 GtkWidget *checkbtn_extsend;
95 GtkWidget *entry_extsend;
96 GtkWidget *button_extsend;
98 GtkWidget *checkbtn_savemsg;
99 GtkWidget *checkbtn_queuemsg;
101 GtkWidget *optmenu_charset;
104 static struct Compose {
105 GtkWidget *checkbtn_autosig;
106 GtkWidget *entry_sigsep;
108 GtkWidget *entry_fw_quotemark;
109 GtkWidget *text_fw_quotefmt;
111 GtkWidget *checkbtn_autoextedit;
112 GtkWidget *spinbtn_undolevel;
113 GtkObject *spinbtn_undolevel_adj;
114 GtkWidget *spinbtn_linewrap;
115 GtkObject *spinbtn_linewrap_adj;
116 GtkWidget *checkbtn_wrapquote;
117 GtkWidget *checkbtn_autowrap;
118 GtkWidget *checkbtn_wrapatsend;
120 GtkWidget *checkbtn_reply_account_autosel;
121 GtkWidget *checkbtn_forward_account_autosel;
122 GtkWidget *checkbtn_reedit_account_autosel;
123 GtkWidget *checkbtn_quote;
124 GtkWidget *checkbtn_default_reply_list;
125 GtkWidget *checkbtn_forward_as_attachment;
126 GtkWidget *checkbtn_redirect_keep_from;
127 GtkWidget *checkbtn_smart_wrapping;
128 GtkWidget *checkbtn_block_cursor;
129 GtkWidget *checkbtn_reply_with_quote;
131 GtkWidget *checkbtn_autosave;
132 GtkWidget *entry_autosave_length;
137 static struct Spelling {
138 GtkWidget *checkbtn_enable_aspell;
139 GtkWidget *entry_aspell_path;
140 GtkWidget *btn_aspell_path;
141 GtkWidget *optmenu_dictionary;
142 GtkWidget *optmenu_sugmode;
143 GtkWidget *misspelled_btn;
144 GtkWidget *checkbtn_use_alternate;
145 GtkWidget *checkbtn_check_while_typing;
149 static struct Quote {
150 GtkWidget *entry_quotemark;
151 GtkWidget *text_quotefmt;
153 GtkWidget *entry_fw_quotemark;
154 GtkWidget *text_fw_quotefmt;
156 GtkWidget *entry_quote_chars;
159 static struct Display {
160 GtkWidget *entry_textfont;
161 GtkWidget *button_textfont;
163 GtkWidget *entry_smallfont;
164 GtkWidget *entry_normalfont;
165 GtkWidget *entry_boldfont;
167 GtkWidget *chkbtn_folder_unread;
168 GtkWidget *chkbtn_display_img;
169 GtkWidget *entry_ng_abbrev_len;
170 GtkWidget *spinbtn_ng_abbrev_len;
171 GtkObject *spinbtn_ng_abbrev_len_adj;
173 GtkWidget *chkbtn_transhdr;
175 GtkWidget *chkbtn_swapfrom;
176 GtkWidget *chkbtn_hscrollbar;
177 GtkWidget *chkbtn_useaddrbook;
178 GtkWidget *chkbtn_expand_thread;
179 GtkWidget *chkbtn_bold_unread;
180 GtkWidget *entry_datefmt;
183 static struct Message {
184 GtkWidget *chkbtn_enablecol;
185 GtkWidget *button_edit_col;
186 GtkWidget *chkbtn_mbalnum;
187 GtkWidget *chkbtn_disphdrpane;
188 GtkWidget *chkbtn_disphdr;
189 GtkWidget *spinbtn_linespc;
190 GtkObject *spinbtn_linespc_adj;
191 GtkWidget *chkbtn_headspc;
193 GtkWidget *chkbtn_smoothscroll;
194 GtkWidget *spinbtn_scrollstep;
195 GtkObject *spinbtn_scrollstep_adj;
196 GtkWidget *chkbtn_halfpage;
200 static struct Privacy {
201 GtkWidget *checkbtn_auto_check_signatures;
202 GtkWidget *checkbtn_gpg_signature_popup;
203 GtkWidget *checkbtn_store_passphrase;
204 GtkWidget *spinbtn_store_passphrase;
205 GtkObject *spinbtn_store_passphrase_adj;
206 GtkWidget *checkbtn_passphrase_grab;
207 GtkWidget *checkbtn_gpg_warning;
211 static struct Interface {
212 /* GtkWidget *checkbtn_emacs; */
213 GtkWidget *checkbtn_show_msg_with_cursor;
214 GtkWidget *checkbtn_openunread;
215 GtkWidget *checkbtn_mark_as_read_on_newwin;
216 GtkWidget *checkbtn_openinbox;
217 GtkWidget *checkbtn_immedexec;
218 GtkWidget *checkbtn_addaddrbyclick;
219 GtkWidget *optmenu_recvdialog;
220 GtkWidget *optmenu_senddialog;
221 GtkWidget *checkbtn_no_recv_err_panel;
222 GtkWidget *checkbtn_close_recv_dialog;
223 GtkWidget *optmenu_nextunreadmsgdialog;
224 GtkWidget *entry_pixmap_theme;
225 GtkWidget *combo_pixmap_theme;
228 static struct Other {
229 GtkWidget *uri_combo;
230 GtkWidget *uri_entry;
231 GtkWidget *printcmd_entry;
232 GtkWidget *exteditor_combo;
233 GtkWidget *exteditor_entry;
234 GtkWidget *checkbtn_confonexit;
235 GtkWidget *checkbtn_cleanonexit;
236 GtkWidget *checkbtn_askonclean;
237 GtkWidget *checkbtn_warnqueued;
238 GtkWidget *checkbtn_cliplog;
239 GtkWidget *loglength_entry;
243 static struct MessageColorButtons {
244 GtkWidget *quote_level1_btn;
245 GtkWidget *quote_level2_btn;
246 GtkWidget *quote_level3_btn;
248 GtkWidget *tgt_folder_btn;
249 GtkWidget *signature_btn;
252 static struct KeybindDialog {
257 static GtkWidget *font_sel_win;
258 static guint font_sel_conn_id;
259 static GtkWidget *quote_color_win;
260 static GtkWidget *color_dialog;
262 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
263 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
264 static void prefs_common_recv_dialog_newmail_notify_toggle_cb (GtkWidget *w,
266 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
267 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
268 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam);
269 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam);
270 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
271 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
274 static void prefs_dictionary_set_data_from_optmenu (PrefParam *param);
275 static void prefs_dictionary_set_optmenu (PrefParam *pparam);
276 static void prefs_speller_sugmode_set_data_from_optmenu (PrefParam *pparam);
277 static void prefs_speller_sugmode_set_optmenu (PrefParam *pparam);
282 parameter name, default value, pointer to the prefs variable, data type,
283 pointer to the widget pointer,
284 pointer to the function for data setting,
285 pointer to the function for widget setting
288 static PrefParam param[] = {
290 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
291 &receive.checkbtn_incext,
292 prefs_set_data_from_toggle, prefs_set_toggle},
293 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
294 &receive.entry_incext,
295 prefs_set_data_from_entry, prefs_set_entry},
297 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
298 &receive.checkbtn_local,
299 prefs_set_data_from_toggle, prefs_set_toggle},
300 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
301 &receive.checkbtn_filter_on_inc,
302 prefs_set_data_from_toggle, prefs_set_toggle},
303 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
304 &receive.entry_spool,
305 prefs_set_data_from_entry, prefs_set_entry},
307 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
308 &receive.checkbtn_autochk,
309 prefs_set_data_from_toggle, prefs_set_toggle},
310 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
311 &receive.spinbtn_autochk,
312 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
313 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
314 &receive.checkbtn_chkonstartup,
315 prefs_set_data_from_toggle, prefs_set_toggle},
316 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
317 P_BOOL, &receive.checkbtn_scan_after_inc,
318 prefs_set_data_from_toggle, prefs_set_toggle},
319 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
320 P_BOOL, &receive.checkbtn_newmail_manu,
321 prefs_set_data_from_toggle, prefs_set_toggle},
322 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
323 P_BOOL, &receive.checkbtn_newmail_auto,
324 prefs_set_data_from_toggle, prefs_set_toggle},
325 {"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING,
326 &receive.entry_newmail_notify_cmd,
327 prefs_set_data_from_entry, prefs_set_entry},
329 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
330 &receive.spinbtn_maxarticle,
331 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
334 {"use_ext_sendmail", "FALSE", &prefs_common.use_extsend, P_BOOL,
335 &p_send.checkbtn_extsend,
336 prefs_set_data_from_toggle, prefs_set_toggle},
337 {"ext_sendmail_cmd", DEFAULT_SENDMAIL_CMD,
338 &prefs_common.extsend_cmd, P_STRING,
339 &p_send.entry_extsend, prefs_set_data_from_entry, prefs_set_entry},
340 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
341 &p_send.checkbtn_savemsg,
342 prefs_set_data_from_toggle, prefs_set_toggle},
343 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
344 &p_send.checkbtn_queuemsg,
345 prefs_set_data_from_toggle, prefs_set_toggle},
347 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
348 &p_send.optmenu_charset,
349 prefs_common_charset_set_data_from_optmenu,
350 prefs_common_charset_set_optmenu},
353 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
354 &compose.checkbtn_autosig,
355 prefs_set_data_from_toggle, prefs_set_toggle},
356 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
357 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
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_INT,
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},
489 {"display_img", "TRUE",
490 &prefs_common.display_img, P_BOOL,
491 &display.chkbtn_display_img,
492 prefs_set_data_from_toggle, prefs_set_toggle},
493 {"newsgroup_abbrev_len", "16",
494 &prefs_common.ng_abbrev_len, P_INT,
495 &display.spinbtn_ng_abbrev_len,
496 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
498 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
499 &display.chkbtn_transhdr,
500 prefs_set_data_from_toggle, prefs_set_toggle},
502 /* Display: Summary View */
503 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
504 &display.chkbtn_swapfrom,
505 prefs_set_data_from_toggle, prefs_set_toggle},
506 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
507 &display.chkbtn_hscrollbar,
508 prefs_set_data_from_toggle, prefs_set_toggle},
509 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
510 &display.chkbtn_useaddrbook,
511 prefs_set_data_from_toggle, prefs_set_toggle},
512 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
513 P_STRING, &display.entry_datefmt,
514 prefs_set_data_from_entry, prefs_set_entry},
515 {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
516 &display.chkbtn_expand_thread,
517 prefs_set_data_from_toggle, prefs_set_toggle},
518 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
519 &display.chkbtn_bold_unread,
520 prefs_set_data_from_toggle, prefs_set_toggle},
522 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
524 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
526 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
528 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
531 {"folderview_vscrollbar_policy", "0",
532 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
535 {"summary_col_show_mark", "TRUE",
536 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
537 {"summary_col_show_unread", "TRUE",
538 &prefs_common.summary_col_visible[S_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
539 {"summary_col_show_mime", "TRUE",
540 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
541 {"summary_col_show_subject", "TRUE",
542 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
543 {"summary_col_show_from", "TRUE",
544 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
545 {"summary_col_show_date", "TRUE",
546 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
547 {"summary_col_show_size", "TRUE",
548 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
549 {"summary_col_show_number", "FALSE",
550 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
551 {"summary_col_show_score", "FALSE",
552 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
553 {"summary_col_show_locked", "FALSE",
554 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
556 {"summary_col_pos_mark", "0",
557 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
558 {"summary_col_pos_unread", "1",
559 &prefs_common.summary_col_pos[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
560 {"summary_col_pos_mime", "2",
561 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
562 {"summary_col_pos_subject", "3",
563 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
564 {"summary_col_pos_from", "4",
565 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
566 {"summary_col_pos_date", "5",
567 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
568 {"summary_col_pos_size", "6",
569 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
570 {"summary_col_pos_number", "7",
571 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
572 {"summary_col_pos_score", "8",
573 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
574 {"summary_col_pos_locked", "9",
575 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
577 {"summary_col_size_mark", "10",
578 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
579 {"summary_col_size_unread", "13",
580 &prefs_common.summary_col_size[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
581 {"summary_col_size_mime", "10",
582 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
583 {"summary_col_size_subject", "200",
584 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
585 {"summary_col_size_from", "120",
586 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
587 {"summary_col_size_date", "118",
588 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
589 {"summary_col_size_size", "45",
590 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
591 {"summary_col_size_number", "40",
592 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
593 {"summary_col_size_score", "40",
594 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
595 {"summary_col_size_locked", "13",
596 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
599 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
601 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
603 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
605 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
607 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
609 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
612 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
614 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
617 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
619 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
621 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
623 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
625 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
627 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
629 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
631 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
633 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
635 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
637 {"compose_width", "600", &prefs_common.compose_width, P_INT,
639 {"compose_height", "560", &prefs_common.compose_height, P_INT,
643 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
644 &message.chkbtn_enablecol,
645 prefs_set_data_from_toggle, prefs_set_toggle},
647 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
649 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
651 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
653 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
655 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
657 {"signature_color", "7960953", &prefs_common.signature_col, P_INT,
659 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
660 P_BOOL, NULL, NULL, NULL},
662 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
663 &message.chkbtn_mbalnum,
664 prefs_set_data_from_toggle, prefs_set_toggle},
665 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
666 P_BOOL, &message.chkbtn_disphdrpane,
667 prefs_set_data_from_toggle, prefs_set_toggle},
668 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
669 &message.chkbtn_disphdr,
670 prefs_set_data_from_toggle, prefs_set_toggle},
671 {"line_space", "2", &prefs_common.line_space, P_INT,
672 &message.spinbtn_linespc,
673 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
674 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
675 &message.chkbtn_headspc,
676 prefs_set_data_from_toggle, prefs_set_toggle},
678 {"enable_smooth_scroll", "FALSE",
679 &prefs_common.enable_smooth_scroll, P_BOOL,
680 &message.chkbtn_smoothscroll,
681 prefs_set_data_from_toggle, prefs_set_toggle},
682 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
683 &message.spinbtn_scrollstep,
684 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
685 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
686 &message.chkbtn_halfpage,
687 prefs_set_data_from_toggle, prefs_set_toggle},
689 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
693 {"mime_image_viewer", "display '%s'",
694 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
695 {"mime_audio_player", "play '%s'",
696 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
697 {"mime_open_command", "gedit '%s'",
698 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
702 {"auto_check_signatures", "TRUE",
703 &prefs_common.auto_check_signatures, P_BOOL,
704 &privacy.checkbtn_auto_check_signatures,
705 prefs_set_data_from_toggle, prefs_set_toggle},
706 {"gpg_signature_popup", "FALSE",
707 &prefs_common.gpg_signature_popup, P_BOOL,
708 &privacy.checkbtn_gpg_signature_popup,
709 prefs_set_data_from_toggle, prefs_set_toggle},
710 {"store_passphrase", "FALSE", &prefs_common.store_passphrase, P_BOOL,
711 &privacy.checkbtn_store_passphrase,
712 prefs_set_data_from_toggle, prefs_set_toggle},
713 {"store_passphrase_timeout", "0",
714 &prefs_common.store_passphrase_timeout, P_INT,
715 &privacy.spinbtn_store_passphrase,
716 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
718 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
719 &privacy.checkbtn_passphrase_grab,
720 prefs_set_data_from_toggle, prefs_set_toggle},
721 #endif /* __MINGW32__ */
722 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
723 &privacy.checkbtn_gpg_warning,
724 prefs_set_data_from_toggle, prefs_set_toggle},
725 #endif /* USE_GPGME */
728 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
730 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
733 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
734 NULL, NULL, NULL}, */
735 {"show_message_with_cursor_key", "FALSE",
736 &prefs_common.show_msg_with_cursor_key,
737 P_BOOL, &interface.checkbtn_show_msg_with_cursor,
738 prefs_set_data_from_toggle, prefs_set_toggle},
739 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
740 P_BOOL, &interface.checkbtn_openunread,
741 prefs_set_data_from_toggle, prefs_set_toggle},
742 {"mark_as_read_on_new_window", "FALSE",
743 &prefs_common.mark_as_read_on_new_window,
744 P_BOOL, &interface.checkbtn_mark_as_read_on_newwin,
745 prefs_set_data_from_toggle, prefs_set_toggle},
746 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
747 P_BOOL, &interface.checkbtn_openinbox,
748 prefs_set_data_from_toggle, prefs_set_toggle},
749 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
750 &interface.checkbtn_immedexec,
751 prefs_set_data_from_toggle, prefs_set_toggle},
752 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
753 &interface.optmenu_recvdialog,
754 prefs_common_recv_dialog_set_data_from_optmenu,
755 prefs_common_recv_dialog_set_optmenu},
756 {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
757 &interface.optmenu_senddialog,
758 prefs_common_send_dialog_set_data_from_optmenu,
759 prefs_common_send_dialog_set_optmenu},
760 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
761 P_BOOL, &interface.checkbtn_no_recv_err_panel,
762 prefs_set_data_from_toggle, prefs_set_toggle},
763 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
764 P_BOOL, &interface.checkbtn_close_recv_dialog,
765 prefs_set_data_from_toggle, prefs_set_toggle},
766 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
767 &interface.optmenu_nextunreadmsgdialog,
768 prefs_nextunreadmsgdialog_set_data_from_optmenu,
769 prefs_nextunreadmsgdialog_set_optmenu},
771 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
772 P_BOOL, &interface.checkbtn_addaddrbyclick,
773 prefs_set_data_from_toggle, prefs_set_toggle},
774 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
775 &prefs_common.pixmap_theme_path, P_STRING,
776 &interface.entry_pixmap_theme, prefs_set_data_from_entry, prefs_set_entry},
779 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
780 &prefs_common.uri_cmd, P_STRING,
781 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
782 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
783 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
784 {"ext_editor_command", "gedit %s",
785 &prefs_common.ext_editor_cmd, P_STRING,
786 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
788 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
789 &other.checkbtn_confonexit,
790 prefs_set_data_from_toggle, prefs_set_toggle},
791 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
792 &other.checkbtn_cleanonexit,
793 prefs_set_data_from_toggle, prefs_set_toggle},
794 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
795 &other.checkbtn_askonclean,
796 prefs_set_data_from_toggle, prefs_set_toggle},
797 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
798 P_BOOL, &other.checkbtn_warnqueued,
799 prefs_set_data_from_toggle, prefs_set_toggle},
800 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
803 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
805 {"important_score", "1", &prefs_common.important_score, P_INT,
807 {"clip_log", "FALSE", &prefs_common.cliplog, P_BOOL,
808 &other.checkbtn_cliplog,
809 prefs_set_data_from_toggle, prefs_set_toggle},
810 {"log_length", "1000", &prefs_common.loglength, P_INT,
811 &other.loglength_entry,
812 prefs_set_data_from_entry, prefs_set_entry},
814 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
816 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
819 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
822 /* widget creating functions */
823 static void prefs_common_create (void);
824 static void prefs_receive_create (void);
825 static void prefs_send_create (void);
827 static void prefs_spelling_create (void);
829 static void prefs_compose_create (void);
830 static void prefs_quote_create (void);
831 static void prefs_display_create (void);
832 static void prefs_message_create (void);
834 static void prefs_privacy_create (void);
836 static void prefs_interface_create (void);
837 static void prefs_other_create (void);
839 static void date_format_ok_btn_clicked (GtkButton *button,
841 static void date_format_cancel_btn_clicked (GtkButton *button,
843 static void date_format_key_pressed (GtkWidget *keywidget,
846 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
849 static void date_format_entry_on_change (GtkEditable *editable,
851 static void date_format_select_row (GtkWidget *date_format_list,
854 GdkEventButton *event,
855 GtkWidget *date_format);
856 static GtkWidget *date_format_create (GtkButton *button,
859 static void prefs_quote_colors_dialog (void);
860 static void prefs_quote_colors_dialog_create (void);
861 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
864 static void quote_color_set_dialog (GtkWidget *widget,
866 static void quote_colors_set_dialog_ok (GtkWidget *widget,
868 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
870 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
873 static void set_button_bg_color (GtkWidget *widget,
875 static void prefs_enable_message_color_toggled (void);
876 static void prefs_recycle_colors_toggled (GtkWidget *widget);
878 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
880 static void prefs_font_selection_key_pressed (GtkWidget *widget,
883 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
885 static void prefs_keybind_select (void);
886 static gint prefs_keybind_deleted (GtkWidget *widget,
889 static void prefs_keybind_key_pressed (GtkWidget *widget,
892 static void prefs_keybind_cancel (void);
893 static void prefs_keybind_apply_clicked (GtkWidget *widget);
895 static gint prefs_common_deleted (GtkWidget *widget,
898 static void prefs_common_key_pressed (GtkWidget *widget,
901 static void prefs_common_ok (void);
902 static void prefs_common_apply (void);
903 static void prefs_common_cancel (void);
905 void prefs_common_init() {
906 prefs_common.disphdr_list = NULL;
909 void prefs_common_read_config(void)
913 gchar buf[PREFSBUFSIZE];
915 prefs_read_config(param, "Common", COMMON_RC);
917 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
919 if ((fp = fopen(path, "rb")) == NULL) {
920 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
925 while (fgets(buf, sizeof(buf), fp) != NULL) {
927 if (buf[0] == '\0') continue;
928 prefs_common.mime_open_cmd_history =
929 add_history(prefs_common.mime_open_cmd_history, buf);
933 prefs_common.mime_open_cmd_history =
934 g_list_reverse(prefs_common.mime_open_cmd_history);
937 void prefs_common_save_config(void)
943 prefs_save_config(param, "Common", COMMON_RC);
945 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
947 if ((fp = fopen(path, "wb")) == NULL) {
948 FILE_OP_ERROR(path, "fopen");
953 for (cur = prefs_common.mime_open_cmd_history;
954 cur != NULL; cur = cur->next) {
955 fputs((gchar *)cur->data, fp);
963 void prefs_common_open(void)
965 if (prefs_rc_is_readonly(COMMON_RC))
970 if (!dialog.window) {
971 prefs_common_create();
974 manage_window_set_transient(GTK_WINDOW(dialog.window));
975 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
976 gtk_widget_grab_focus(dialog.ok_btn);
978 prefs_set_dialog(param);
980 gtk_widget_show(dialog.window);
983 static void prefs_common_create(void)
987 debug_print("Creating common preferences window...\n");
989 prefs_dialog_create(&dialog);
990 gtk_window_set_title (GTK_WINDOW(dialog.window),
991 _("Common Preferences"));
992 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
993 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
994 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
995 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
996 MANAGE_WINDOW_SIGNALS_CONNECT(dialog.window);
998 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
999 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
1000 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
1001 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
1002 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
1003 GTK_SIGNAL_FUNC(prefs_common_cancel),
1004 GTK_OBJECT(dialog.window));
1006 /* create all widgets on notebook */
1007 prefs_receive_create();
1008 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
1009 prefs_send_create();
1010 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
1011 prefs_compose_create();
1012 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
1014 prefs_spelling_create();
1015 SET_NOTEBOOK_LABEL(dialog.notebook, _("Spell Checker"), page++);
1017 prefs_quote_create();
1018 SET_NOTEBOOK_LABEL(dialog.notebook, _("Quote"), page++);
1019 prefs_display_create();
1020 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
1021 prefs_message_create();
1022 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
1024 prefs_privacy_create();
1025 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
1027 prefs_interface_create();
1028 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
1029 prefs_other_create();
1030 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
1032 gtk_widget_show_all(dialog.window);
1035 static void prefs_receive_create(void)
1039 GtkWidget *frame_incext;
1040 GtkWidget *checkbtn_incext;
1042 GtkWidget *label_incext;
1043 GtkWidget *entry_incext;
1044 /* GtkWidget *button_incext; */
1046 GtkWidget *frame_spool;
1047 GtkWidget *checkbtn_local;
1048 GtkWidget *checkbtn_filter_on_inc;
1049 GtkWidget *label_spool;
1050 GtkWidget *entry_spool;
1052 GtkWidget *hbox_autochk;
1053 GtkWidget *checkbtn_autochk;
1054 GtkWidget *label_autochk1;
1055 GtkObject *spinbtn_autochk_adj;
1056 GtkWidget *spinbtn_autochk;
1057 GtkWidget *label_autochk2;
1058 GtkWidget *checkbtn_chkonstartup;
1059 GtkWidget *checkbtn_scan_after_inc;
1062 GtkWidget *frame_newmail;
1063 GtkWidget *hbox_newmail_notify;
1064 GtkWidget *checkbtn_newmail_auto;
1065 GtkWidget *checkbtn_newmail_manu;
1066 GtkWidget *entry_newmail_notify_cmd;
1067 GtkWidget *label_newmail_notify_cmd;
1069 GtkWidget *frame_news;
1070 GtkWidget *label_maxarticle;
1071 GtkWidget *spinbtn_maxarticle;
1072 GtkObject *spinbtn_maxarticle_adj;
1074 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1075 gtk_widget_show (vbox1);
1076 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1077 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1079 PACK_FRAME(vbox1, frame_incext, _("External program"));
1081 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1082 gtk_widget_show (vbox2);
1083 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
1084 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1086 /* Use of external incorporation program */
1087 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
1088 _("Use external program for incorporation"));
1090 hbox = gtk_hbox_new (FALSE, 8);
1091 gtk_widget_show (hbox);
1092 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1093 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
1095 label_incext = gtk_label_new (_("Command"));
1096 gtk_widget_show (label_incext);
1097 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
1099 entry_incext = gtk_entry_new ();
1100 gtk_widget_show (entry_incext);
1101 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
1104 button_incext = gtk_button_new_with_label ("... ");
1105 gtk_widget_show (button_incext);
1106 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1109 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
1111 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1112 gtk_widget_show (vbox2);
1113 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
1114 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1116 hbox = gtk_hbox_new (FALSE, 32);
1117 gtk_widget_show (hbox);
1118 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1120 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
1121 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
1122 _("Filter on incorporation"));
1123 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
1125 hbox = gtk_hbox_new (FALSE, 8);
1126 gtk_widget_show (hbox);
1127 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1128 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
1130 label_spool = gtk_label_new (_("Spool directory"));
1131 gtk_widget_show (label_spool);
1132 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
1134 entry_spool = gtk_entry_new ();
1135 gtk_widget_show (entry_spool);
1136 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
1138 vbox2 = gtk_vbox_new (FALSE, 0);
1139 gtk_widget_show (vbox2);
1140 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1143 hbox_autochk = gtk_hbox_new (FALSE, 8);
1144 gtk_widget_show (hbox_autochk);
1145 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1147 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1148 _("Auto-check new mail"));
1150 label_autochk1 = gtk_label_new (_("every"));
1151 gtk_widget_show (label_autochk1);
1152 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1154 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1155 spinbtn_autochk = gtk_spin_button_new
1156 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1157 gtk_widget_show (spinbtn_autochk);
1158 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1159 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
1160 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1162 label_autochk2 = gtk_label_new (_("minute(s)"));
1163 gtk_widget_show (label_autochk2);
1164 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1166 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1167 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1168 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1170 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1171 _("Check new mail on startup"));
1172 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1173 _("Update all local folders after incorporation"));
1176 PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1178 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1179 gtk_widget_show (vbox2);
1180 gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1181 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1183 hbox = gtk_hbox_new (TRUE, 8);
1184 gtk_widget_show (hbox);
1185 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1186 _("after autochecking"));
1187 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1188 _("after manual checking"));
1189 gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1190 gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_auto), "toggled",
1191 GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1193 gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_manu), "toggled",
1194 GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1197 hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1198 gtk_widget_show (hbox);
1199 gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE,
1202 label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1203 "(use %d as number of new "
1205 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd),
1207 gtk_widget_show (label_newmail_notify_cmd);
1208 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1209 label_newmail_notify_cmd, FALSE, FALSE, 0);
1211 entry_newmail_notify_cmd = gtk_entry_new ();
1212 gtk_widget_show (entry_newmail_notify_cmd);
1213 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1214 entry_newmail_notify_cmd, TRUE, TRUE, 0);
1216 gtk_widget_set_sensitive(hbox_newmail_notify,
1217 prefs_common.newmail_notify_auto ||
1218 prefs_common.newmail_notify_manu);
1220 PACK_FRAME(vbox1, frame_news, _("News"));
1222 hbox = gtk_hbox_new (FALSE, 8);
1223 gtk_widget_show (hbox);
1224 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
1225 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
1227 label_maxarticle = gtk_label_new
1228 (_("Maximum number of articles to download\n"
1229 "(unlimited if 0 is specified)"));
1230 gtk_widget_show (label_maxarticle);
1231 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
1232 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
1234 spinbtn_maxarticle_adj =
1235 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
1236 spinbtn_maxarticle = gtk_spin_button_new
1237 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
1238 gtk_widget_show (spinbtn_maxarticle);
1239 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
1241 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
1242 gtk_spin_button_set_numeric
1243 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
1245 receive.checkbtn_incext = checkbtn_incext;
1246 receive.entry_incext = entry_incext;
1247 /* receive.button_incext = button_incext; */
1249 receive.checkbtn_local = checkbtn_local;
1250 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
1251 receive.entry_spool = entry_spool;
1253 receive.checkbtn_autochk = checkbtn_autochk;
1254 receive.spinbtn_autochk = spinbtn_autochk;
1255 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1257 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1258 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1261 receive.checkbtn_newmail_auto = checkbtn_newmail_auto;
1262 receive.checkbtn_newmail_manu = checkbtn_newmail_manu;
1263 receive.hbox_newmail_notify = hbox_newmail_notify;
1264 receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1266 receive.spinbtn_maxarticle = spinbtn_maxarticle;
1267 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
1270 static void prefs_send_create(void)
1274 GtkWidget *frame_extsend;
1275 GtkWidget *vbox_extsend;
1276 GtkWidget *checkbtn_extsend;
1278 GtkWidget *label_extsend;
1279 GtkWidget *entry_extsend;
1280 /* GtkWidget *button_extsend; */
1281 GtkWidget *checkbtn_savemsg;
1282 GtkWidget *checkbtn_queuemsg;
1283 GtkWidget *label_outcharset;
1285 GtkWidget *optmenu_menu;
1286 GtkWidget *menuitem;
1287 GtkWidget *label_charset_desc;
1289 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1290 gtk_widget_show (vbox1);
1291 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1292 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1294 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1296 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1297 gtk_widget_show (vbox_extsend);
1298 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1299 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1301 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1302 _("Use external program for sending"));
1304 hbox1 = gtk_hbox_new (FALSE, 8);
1305 gtk_widget_show (hbox1);
1306 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1307 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1309 label_extsend = gtk_label_new (_("Command"));
1310 gtk_widget_show (label_extsend);
1311 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1313 entry_extsend = gtk_entry_new ();
1314 gtk_widget_show (entry_extsend);
1315 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1318 button_extsend = gtk_button_new_with_label ("... ");
1319 gtk_widget_show (button_extsend);
1320 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1323 vbox2 = gtk_vbox_new (FALSE, 0);
1324 gtk_widget_show (vbox2);
1325 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1327 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1328 _("Save sent messages to Sent"));
1329 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1330 _("Queue messages that fail to send"));
1332 hbox1 = gtk_hbox_new (FALSE, 8);
1333 gtk_widget_show (hbox1);
1334 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1336 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1337 gtk_widget_show (label_outcharset);
1338 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1340 optmenu = gtk_option_menu_new ();
1341 gtk_widget_show (optmenu);
1342 gtk_box_pack_start (GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1344 optmenu_menu = gtk_menu_new ();
1346 #define SET_MENUITEM(str, charset) \
1348 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1351 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1352 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1354 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1356 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1357 SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1358 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1359 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1360 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1361 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1362 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1364 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1366 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1368 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
1369 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1371 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1373 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1374 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1376 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1377 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1379 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1380 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1382 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1383 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1384 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1386 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1388 hbox1 = gtk_hbox_new (FALSE, 8);
1389 gtk_widget_show (hbox1);
1390 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1392 label_charset_desc = gtk_label_new
1393 (_("If `Automatic' is selected, the optimal encoding\n"
1394 "for the current locale will be used."));
1395 gtk_widget_show (label_charset_desc);
1396 gtk_box_pack_start (GTK_BOX (hbox1), label_charset_desc,
1398 gtk_label_set_justify(GTK_LABEL (label_charset_desc), GTK_JUSTIFY_LEFT);
1400 p_send.checkbtn_extsend = checkbtn_extsend;
1401 p_send.entry_extsend = entry_extsend;
1402 /* p_send.button_extsend = button_extsend; */
1404 p_send.checkbtn_savemsg = checkbtn_savemsg;
1405 p_send.checkbtn_queuemsg = checkbtn_queuemsg;
1407 p_send.optmenu_charset = optmenu;
1410 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1414 toggled = gtk_toggle_button_get_active
1415 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1416 gtk_toggle_button_get_active
1417 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1418 gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1422 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1425 gchar *dict_fullname;
1427 g_return_if_fail(param);
1428 g_return_if_fail(param->data);
1429 g_return_if_fail(param->widget);
1430 g_return_if_fail(*(param->widget));
1432 dict_fullname = gtkaspell_get_dictionary_menu_active_item
1433 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1434 str = *((gchar **) param->data);
1437 *((gchar **) param->data) = dict_fullname;
1440 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1443 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1445 GtkWidget *menuitem;
1449 g_return_if_fail(optmenu != NULL);
1450 g_return_if_fail(pparam->data != NULL);
1452 if (*(gchar **) pparam->data) {
1453 menu = gtk_option_menu_get_menu(optmenu);
1454 for (cur = GTK_MENU_SHELL(menu)->children;
1455 cur != NULL; cur = cur->next) {
1456 menuitem = GTK_WIDGET(cur->data);
1457 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem),
1459 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1460 gtk_option_menu_set_history(optmenu, n);
1467 gtk_option_menu_set_history(optmenu, 0);
1468 prefs_dictionary_set_data_from_optmenu(pparam);
1471 static void prefs_speller_sugmode_set_data_from_optmenu(PrefParam *param)
1474 g_return_if_fail(param);
1475 g_return_if_fail(param->data);
1476 g_return_if_fail(param->widget);
1477 g_return_if_fail(*(param->widget));
1479 sugmode = gtkaspell_get_sugmode_from_option_menu
1480 (GTK_OPTION_MENU(*(param->widget)));
1481 *((gint *) param->data) = sugmode;
1484 static void prefs_speller_sugmode_set_optmenu(PrefParam *pparam)
1486 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1489 g_return_if_fail(optmenu != NULL);
1490 g_return_if_fail(pparam->data != NULL);
1492 sugmode = *(gint *) pparam->data;
1493 gtkaspell_sugmode_option_menu_set(optmenu, sugmode);
1497 static void prefs_spelling_checkbtn_enable_aspell_toggle_cb
1503 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1505 gtk_widget_set_sensitive(spelling.entry_aspell_path, toggled);
1506 gtk_widget_set_sensitive(spelling.optmenu_dictionary, toggled);
1507 gtk_widget_set_sensitive(spelling.optmenu_sugmode, toggled);
1508 gtk_widget_set_sensitive(spelling.btn_aspell_path, toggled);
1509 gtk_widget_set_sensitive(spelling.misspelled_btn, toggled);
1510 gtk_widget_set_sensitive(spelling.checkbtn_use_alternate, toggled);
1511 gtk_widget_set_sensitive(spelling.checkbtn_check_while_typing, toggled);
1514 static void prefs_spelling_btn_aspell_path_clicked_cb(GtkWidget *widget,
1517 gchar *file_path, *tmp;
1518 GtkWidget *new_menu;
1520 file_path = filesel_select_file(_("Select dictionaries location"),
1521 prefs_common.aspell_path);
1522 if (file_path == NULL) {
1526 tmp=g_dirname(file_path);
1528 if (prefs_common.aspell_path)
1529 g_free(prefs_common.aspell_path);
1530 prefs_common.aspell_path = g_strdup_printf("%s%s",tmp,
1533 new_menu = gtkaspell_dictionary_option_menu_new(prefs_common.aspell_path);
1534 gtk_option_menu_set_menu(GTK_OPTION_MENU(spelling.optmenu_dictionary),
1537 gtk_entry_set_text(GTK_ENTRY(spelling.entry_aspell_path),
1538 prefs_common.aspell_path);
1539 /* select first one */
1540 gtk_option_menu_set_history(GTK_OPTION_MENU(
1541 spelling.optmenu_dictionary), 0);
1543 if (prefs_common.dictionary)
1544 g_free(prefs_common.dictionary);
1546 prefs_common.dictionary =
1547 gtkaspell_get_dictionary_menu_active_item(
1548 gtk_option_menu_get_menu(
1550 spelling.optmenu_dictionary)));
1556 static void prefs_spelling_create()
1559 GtkWidget *frame_spell;
1560 GtkWidget *vbox_spell;
1561 GtkWidget *hbox_aspell_path;
1562 GtkWidget *checkbtn_enable_aspell;
1563 GtkWidget *label_aspell_path;
1564 GtkWidget *entry_aspell_path;
1565 GtkWidget *btn_aspell_path;
1566 GtkWidget *spell_table;
1567 GtkWidget *label_dictionary;
1568 GtkWidget *optmenu_dictionary;
1569 GtkWidget *sugmode_label;
1570 GtkWidget *sugmode_optmenu;
1571 GtkWidget *checkbtn_use_alternate;
1572 GtkWidget *help_label;
1573 GtkWidget *checkbtn_check_while_typing;
1574 GtkWidget *color_label;
1575 GtkWidget *col_align;
1577 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1578 gtk_widget_show (vbox1);
1579 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1580 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1582 /* spell checker defaults */
1583 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1584 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1585 gtk_widget_show (vbox_spell);
1586 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1587 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1589 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_aspell,
1590 _("Enable spell checker"));
1592 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_aspell), "toggled",
1593 GTK_SIGNAL_FUNC(prefs_spelling_checkbtn_enable_aspell_toggle_cb),
1596 /* Check while typing */
1597 PACK_CHECK_BUTTON(vbox_spell, checkbtn_check_while_typing,
1598 _("Check while typing"));
1600 PACK_CHECK_BUTTON(vbox_spell, checkbtn_use_alternate,
1601 _("Enable alternate dictionary"));
1603 help_label = gtk_label_new(_("Enabling alternate dictionary makes switching\nwith the last used dictionary faster."));
1604 gtk_widget_show(help_label);
1605 gtk_box_pack_start(GTK_BOX(vbox_spell), help_label, FALSE, TRUE, 0);
1607 spell_table = gtk_table_new(4, 3, FALSE);
1608 gtk_container_set_border_width (GTK_CONTAINER (spell_table), VSPACING);
1609 gtk_table_set_row_spacings(GTK_TABLE(spell_table), 8);
1610 gtk_table_set_col_spacings(GTK_TABLE(spell_table), 8);
1612 gtk_box_pack_start(GTK_BOX(vbox_spell), spell_table, TRUE, TRUE, 0);
1614 label_aspell_path = gtk_label_new (_("Dictionaries path:"));
1615 gtk_misc_set_alignment(GTK_MISC(label_aspell_path), 1.0, 0.5);
1616 gtk_widget_show(label_aspell_path);
1617 gtk_table_attach (GTK_TABLE (spell_table), label_aspell_path, 0, 1, 0,
1618 1, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1620 hbox_aspell_path = gtk_hbox_new (FALSE, 8);
1621 gtk_table_attach (GTK_TABLE (spell_table), hbox_aspell_path, 1, 2, 0,
1622 1, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1623 gtk_widget_show(hbox_aspell_path);
1625 entry_aspell_path = gtk_entry_new();
1626 gtk_widget_show(entry_aspell_path);
1627 gtk_box_pack_start(GTK_BOX(hbox_aspell_path), entry_aspell_path, TRUE,
1630 gtk_widget_set_sensitive(entry_aspell_path, prefs_common.enable_aspell);
1632 btn_aspell_path = gtk_button_new_with_label(" ... ");
1633 gtk_widget_show(btn_aspell_path);
1634 gtk_box_pack_start(GTK_BOX(hbox_aspell_path), btn_aspell_path, FALSE, FALSE, 0);
1635 gtk_widget_set_sensitive(btn_aspell_path, prefs_common.enable_aspell);
1637 gtk_signal_connect(GTK_OBJECT(btn_aspell_path), "clicked",
1638 GTK_SIGNAL_FUNC(prefs_spelling_btn_aspell_path_clicked_cb),
1641 label_dictionary = gtk_label_new(_("Default dictionary:"));
1642 gtk_misc_set_alignment(GTK_MISC(label_dictionary), 1.0, 0.5);
1643 gtk_widget_show(label_dictionary);
1644 gtk_table_attach (GTK_TABLE (spell_table), label_dictionary, 0, 1, 1, 2,
1645 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1647 optmenu_dictionary = gtk_option_menu_new();
1648 gtk_widget_show(optmenu_dictionary);
1649 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1650 gtkaspell_dictionary_option_menu_new(
1651 prefs_common.aspell_path));
1652 gtk_table_attach (GTK_TABLE (spell_table), optmenu_dictionary, 1, 2, 1,
1653 2, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1654 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_aspell);
1656 /* Suggestion mode */
1657 sugmode_label = gtk_label_new(_("Default suggestion mode"));
1658 gtk_misc_set_alignment(GTK_MISC(sugmode_label), 1.0, 0.5);
1659 gtk_widget_show(sugmode_label);
1660 gtk_table_attach(GTK_TABLE (spell_table), sugmode_label, 0, 1, 2, 3,
1661 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1663 sugmode_optmenu = gtk_option_menu_new();
1664 gtk_widget_show(sugmode_optmenu);
1665 gtk_option_menu_set_menu(GTK_OPTION_MENU(sugmode_optmenu),
1666 gtkaspell_sugmode_option_menu_new(prefs_common.aspell_sugmode));
1667 gtk_table_attach(GTK_TABLE(spell_table), sugmode_optmenu, 1, 2, 2, 3,
1668 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1669 gtk_widget_set_sensitive(sugmode_optmenu, prefs_common.enable_aspell);
1672 color_label = gtk_label_new(_("Misspelled word color:"));
1673 gtk_misc_set_alignment(GTK_MISC(color_label), 1.0, 0.5);
1674 gtk_table_attach (GTK_TABLE (spell_table), color_label, 0, 1, 3, 4,
1675 GTK_FILL, GTK_SHRINK, 0, 0);
1676 gtk_widget_show(color_label);
1678 col_align = gtk_alignment_new(0.0, 0.5, 0, 0);
1679 gtk_widget_show(col_align);
1680 gtk_table_attach (GTK_TABLE (spell_table), col_align, 1, 2, 3, 4,
1681 GTK_FILL, GTK_SHRINK, 0, 0);
1683 spelling.misspelled_btn = gtk_button_new_with_label ("");
1684 set_button_bg_color(spelling.misspelled_btn,
1685 prefs_common.misspelled_col);
1686 gtk_widget_set_usize (spelling.misspelled_btn, 30, 20);
1687 gtk_widget_set_sensitive(spelling.misspelled_btn, prefs_common.enable_aspell);
1688 gtk_signal_connect (GTK_OBJECT (spelling.misspelled_btn), "clicked",
1689 GTK_SIGNAL_FUNC(quote_color_set_dialog), "Misspelled word");
1690 gtk_container_add(GTK_CONTAINER(col_align), spelling.misspelled_btn);
1693 spelling.checkbtn_enable_aspell = checkbtn_enable_aspell;
1694 spelling.entry_aspell_path = entry_aspell_path;
1695 spelling.btn_aspell_path = btn_aspell_path;
1696 spelling.optmenu_dictionary = optmenu_dictionary;
1697 spelling.optmenu_sugmode = sugmode_optmenu;
1698 spelling.checkbtn_use_alternate = checkbtn_use_alternate;
1699 spelling.checkbtn_check_while_typing = checkbtn_check_while_typing;
1705 static void prefs_compose_create(void)
1711 GtkWidget *frame_sig;
1712 GtkWidget *vbox_sig;
1713 GtkWidget *checkbtn_autosig;
1714 GtkWidget *label_sigsep;
1715 GtkWidget *entry_sigsep;
1717 GtkWidget *checkbtn_autoextedit;
1719 GtkWidget *frame_autosel;
1720 GtkWidget *hbox_autosel;
1721 GtkWidget *checkbtn_reply_account_autosel;
1722 GtkWidget *checkbtn_forward_account_autosel;
1723 GtkWidget *checkbtn_reedit_account_autosel;
1725 GtkWidget *hbox_undolevel;
1726 GtkWidget *label_undolevel;
1727 GtkObject *spinbtn_undolevel_adj;
1728 GtkWidget *spinbtn_undolevel;
1730 GtkWidget *vbox_linewrap;
1735 GtkWidget *label_linewrap;
1736 GtkObject *spinbtn_linewrap_adj;
1737 GtkWidget *spinbtn_linewrap;
1738 GtkWidget *checkbtn_wrapquote;
1739 GtkWidget *checkbtn_autowrap;
1740 GtkWidget *checkbtn_wrapatsend;
1742 GtkWidget *checkbtn_default_reply_list;
1744 GtkWidget *checkbtn_forward_as_attachment;
1745 GtkWidget *checkbtn_redirect_keep_from;
1746 GtkWidget *checkbtn_smart_wrapping;
1747 GtkWidget *checkbtn_block_cursor;
1748 GtkWidget *frame_msgwrap;
1750 GtkWidget *hbox_autosave;
1751 GtkWidget *checkbtn_autosave;
1752 GtkWidget *entry_autosave_length;
1753 GtkWidget *label_autosave_length;
1755 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1756 gtk_widget_show (vbox1);
1757 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1758 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1760 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1762 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1763 gtk_widget_show (vbox_sig);
1764 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1765 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1767 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1768 _("Insert signature automatically"));
1770 hbox1 = gtk_hbox_new (FALSE, 8);
1771 gtk_widget_show (hbox1);
1772 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1773 label_sigsep = gtk_label_new (_("Signature separator"));
1774 gtk_widget_show (label_sigsep);
1775 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1777 entry_sigsep = gtk_entry_new ();
1778 gtk_widget_show (entry_sigsep);
1779 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1781 gtk_widget_set_usize (entry_sigsep, 64, -1);
1783 /* Account autoselection */
1784 PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1786 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1787 gtk_widget_show (hbox_autosel);
1788 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1789 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1791 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1792 _("when replying"));
1793 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1794 _("when forwarding"));
1795 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1796 _("when re-editing"));
1798 vbox2 = gtk_vbox_new (FALSE, 0);
1799 gtk_widget_show (vbox2);
1800 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1802 PACK_CHECK_BUTTON (vbox2, checkbtn_default_reply_list,
1803 _("Reply button invokes mailing list reply"));
1805 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1806 _("Automatically launch the external editor"));
1808 hbox5 = gtk_hbox_new (FALSE, 8);
1809 gtk_widget_show (hbox5);
1810 gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1812 PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1813 _("Forward as attachment"));
1815 PACK_CHECK_BUTTON (hbox5, checkbtn_block_cursor,
1818 PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1819 _("Keep the original 'From' header when redirecting"));
1822 hbox_autosave = gtk_hbox_new (FALSE, 8);
1823 gtk_widget_show (hbox_autosave);
1824 gtk_box_pack_start (GTK_BOX (vbox1), hbox_autosave, FALSE, FALSE, 0);
1826 PACK_CHECK_BUTTON (hbox_autosave, checkbtn_autosave,
1827 _("Autosave to drafts every "));
1829 entry_autosave_length = gtk_entry_new();
1830 gtk_widget_set_usize (entry_autosave_length, 64, -1);
1831 gtk_widget_show (entry_autosave_length);
1832 gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0);
1834 label_autosave_length = gtk_label_new(_("characters"));
1835 gtk_widget_show (label_autosave_length);
1836 gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
1838 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1839 gtk_widget_show (hbox_undolevel);
1840 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1842 label_undolevel = gtk_label_new (_("Undo level"));
1843 gtk_widget_show (label_undolevel);
1844 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1846 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1847 spinbtn_undolevel = gtk_spin_button_new
1848 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1849 gtk_widget_show (spinbtn_undolevel);
1850 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1851 gtk_widget_set_usize (spinbtn_undolevel, 64, -1);
1852 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1855 PACK_FRAME(vbox1, frame_msgwrap, _("Message wrapping"));
1857 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1858 gtk_widget_show (vbox_linewrap);
1859 gtk_container_add (GTK_CONTAINER (frame_msgwrap), vbox_linewrap);
1860 gtk_container_set_border_width (GTK_CONTAINER (vbox_linewrap), 8);
1862 hbox3 = gtk_hbox_new (FALSE, 8);
1863 gtk_widget_show (hbox3);
1864 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1867 label_linewrap = gtk_label_new (_("Wrap messages at"));
1868 gtk_widget_show (label_linewrap);
1869 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1871 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1872 spinbtn_linewrap = gtk_spin_button_new
1873 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1874 gtk_widget_show (spinbtn_linewrap);
1875 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1876 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1877 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1879 label_linewrap = gtk_label_new (_("characters"));
1880 gtk_widget_show (label_linewrap);
1881 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1883 hbox4 = gtk_hbox_new (FALSE, VSPACING);
1884 gtk_widget_show (hbox4);
1885 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1887 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1889 PACK_CHECK_BUTTON (hbox4, checkbtn_autowrap, _("Wrap on input"));
1892 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1894 PACK_CHECK_BUTTON (vbox_linewrap, checkbtn_smart_wrapping,
1895 _("Smart wrapping (EXPERIMENTAL)"));
1898 compose.checkbtn_quote = checkbtn_quote;
1899 compose.entry_quotemark = entry_quotemark;
1900 compose.text_quotefmt = text_quotefmt;
1902 compose.checkbtn_autosig = checkbtn_autosig;
1903 compose.entry_sigsep = entry_sigsep;
1905 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1907 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1908 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1909 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1911 compose.spinbtn_undolevel = spinbtn_undolevel;
1912 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1914 compose.spinbtn_linewrap = spinbtn_linewrap;
1915 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1916 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1917 compose.checkbtn_autowrap = checkbtn_autowrap;
1918 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1920 compose.checkbtn_autosave = checkbtn_autosave;
1921 compose.entry_autosave_length = entry_autosave_length;
1923 compose.checkbtn_forward_as_attachment =
1924 checkbtn_forward_as_attachment;
1925 compose.checkbtn_redirect_keep_from =
1926 checkbtn_redirect_keep_from;
1927 compose.checkbtn_smart_wrapping =
1928 checkbtn_smart_wrapping;
1929 compose.checkbtn_block_cursor =
1930 checkbtn_block_cursor;
1931 compose.checkbtn_default_reply_list = checkbtn_default_reply_list;
1934 static void prefs_quote_create(void)
1937 GtkWidget *frame_quote;
1938 GtkWidget *vbox_quote;
1941 GtkWidget *label_quotemark;
1942 GtkWidget *entry_quotemark;
1943 GtkWidget *scrolledwin_quotefmt;
1944 GtkWidget *text_quotefmt;
1946 GtkWidget *entry_fw_quotemark;
1947 GtkWidget *text_fw_quotefmt;
1949 GtkWidget *entry_quote_chars;
1950 GtkWidget *label_quote_chars;
1952 GtkWidget *btn_quotedesc;
1954 GtkWidget *checkbtn_reply_with_quote;
1956 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1957 gtk_widget_show (vbox1);
1958 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1959 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1963 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1965 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1967 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1968 gtk_widget_show (vbox_quote);
1969 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1970 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1972 hbox1 = gtk_hbox_new (FALSE, 32);
1973 gtk_widget_show (hbox1);
1974 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1976 hbox2 = gtk_hbox_new (FALSE, 8);
1977 gtk_widget_show (hbox2);
1978 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1980 label_quotemark = gtk_label_new (_("Quotation mark"));
1981 gtk_widget_show (label_quotemark);
1982 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1984 entry_quotemark = gtk_entry_new ();
1985 gtk_widget_show (entry_quotemark);
1986 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1987 gtk_widget_set_usize (entry_quotemark, 64, -1);
1989 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1990 gtk_widget_show (scrolledwin_quotefmt);
1991 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1992 gtk_scrolled_window_set_policy
1993 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1994 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1996 text_quotefmt = gtk_text_new (NULL, NULL);
1997 gtk_widget_show (text_quotefmt);
1998 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1999 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
2000 gtk_widget_set_usize(text_quotefmt, -1, 60);
2004 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
2006 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
2007 gtk_widget_show (vbox_quote);
2008 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
2009 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
2011 hbox1 = gtk_hbox_new (FALSE, 32);
2012 gtk_widget_show (hbox1);
2013 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2015 hbox2 = gtk_hbox_new (FALSE, 8);
2016 gtk_widget_show (hbox2);
2017 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
2019 label_quotemark = gtk_label_new (_("Quotation mark"));
2020 gtk_widget_show (label_quotemark);
2021 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
2023 entry_fw_quotemark = gtk_entry_new ();
2024 gtk_widget_show (entry_fw_quotemark);
2025 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
2027 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
2029 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
2030 gtk_widget_show (scrolledwin_quotefmt);
2031 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
2032 gtk_scrolled_window_set_policy
2033 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
2034 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2036 text_fw_quotefmt = gtk_text_new (NULL, NULL);
2037 gtk_widget_show (text_fw_quotefmt);
2038 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
2040 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
2041 gtk_widget_set_usize(text_fw_quotefmt, -1, 60);
2043 hbox1 = gtk_hbox_new (FALSE, 32);
2044 gtk_widget_show (hbox1);
2045 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2048 gtk_button_new_with_label (_(" Description of symbols "));
2049 gtk_widget_show (btn_quotedesc);
2050 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
2051 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
2052 GTK_SIGNAL_FUNC(quote_fmt_quote_description), NULL);
2056 PACK_FRAME (vbox1, frame_quote, _("Quoting characters"));
2058 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
2059 gtk_widget_show (vbox_quote);
2060 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
2061 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
2063 hbox1 = gtk_hbox_new (FALSE, 32);
2064 gtk_widget_show (hbox1);
2065 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2067 hbox2 = gtk_hbox_new (FALSE, 8);
2068 gtk_widget_show (hbox2);
2069 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
2071 label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
2072 gtk_widget_show (label_quote_chars);
2073 gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
2075 entry_quote_chars = gtk_entry_new ();
2076 gtk_widget_show (entry_quote_chars);
2077 gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
2079 gtk_widget_set_usize (entry_quote_chars, 64, -1);
2082 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
2083 quote.entry_quotemark = entry_quotemark;
2084 quote.text_quotefmt = text_quotefmt;
2085 quote.entry_fw_quotemark = entry_fw_quotemark;
2086 quote.text_fw_quotefmt = text_fw_quotefmt;
2087 quote.entry_quote_chars = entry_quote_chars;
2090 static void prefs_display_create(void)
2093 GtkWidget *frame_font;
2095 GtkWidget *label_textfont;
2096 GtkWidget *entry_textfont;
2097 GtkWidget *button_textfont;
2098 GtkWidget *chkbtn_display_img;
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_hscrollbar;
2109 GtkWidget *chkbtn_useaddrbook;
2110 GtkWidget *chkbtn_expand_thread;
2111 GtkWidget *chkbtn_bold_unread;
2113 GtkWidget *label_datefmt;
2114 GtkWidget *button_datefmt;
2115 GtkWidget *entry_datefmt;
2116 GtkWidget *button_dispitem;
2117 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
2119 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2120 gtk_widget_show (vbox1);
2121 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2122 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2124 PACK_FRAME(vbox1, frame_font, _("Font"));
2126 table1 = gtk_table_new (4, 3, FALSE);
2128 gtk_widget_show (table1);
2129 gtk_container_add (GTK_CONTAINER (frame_font), table1);
2130 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
2131 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
2132 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
2134 label_textfont = gtk_label_new (_("Text"));
2135 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
2136 gtk_widget_show (label_textfont);
2137 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
2138 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2140 entry_textfont = gtk_entry_new ();
2141 gtk_widget_show (entry_textfont);
2142 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
2143 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2145 button_textfont = gtk_button_new_with_label (" ... ");
2147 gtk_widget_show (button_textfont);
2148 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
2150 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
2151 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
2153 tmplabel = gtk_label_new (_("Small"));
2154 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2155 gtk_widget_show (tmplabel);
2156 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
2157 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2159 tmpentry = gtk_entry_new ();
2160 gtk_widget_show (tmpentry);
2161 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
2162 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2164 tmpbutton = gtk_button_new_with_label (" ... ");
2165 gtk_widget_show (tmpbutton);
2166 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
2168 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2169 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2170 display.entry_smallfont = tmpentry;
2172 tmplabel = gtk_label_new (_("Normal"));
2173 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2174 gtk_widget_show (tmplabel);
2175 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
2176 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2178 tmpentry = gtk_entry_new ();
2179 gtk_widget_show (tmpentry);
2180 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
2181 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2183 tmpbutton = gtk_button_new_with_label (" ... ");
2184 gtk_widget_show (tmpbutton);
2185 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
2187 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2188 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2189 display.entry_normalfont = tmpentry;
2191 tmplabel = gtk_label_new (_("Bold"));
2192 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2193 gtk_widget_show (tmplabel);
2194 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
2195 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2197 tmpentry = gtk_entry_new ();
2198 gtk_widget_show (tmpentry);
2199 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
2200 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2202 tmpbutton = gtk_button_new_with_label (" ... ");
2203 gtk_widget_show (tmpbutton);
2204 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
2206 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2207 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2208 display.entry_boldfont = tmpentry;
2210 vbox2 = gtk_vbox_new (FALSE, 0);
2211 gtk_widget_show (vbox2);
2212 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
2215 (vbox2, chkbtn_transhdr,
2216 _("Translate header name (such as `From:', `Subject:')"));
2218 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
2219 _("Display unread number next to folder name"));
2221 PACK_CHECK_BUTTON (vbox2, chkbtn_display_img,
2222 _("Automatically display images"));
2224 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2226 hbox1 = gtk_hbox_new (FALSE, 8);
2227 gtk_widget_show (hbox1);
2228 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2230 label_ng_abbrev = gtk_label_new
2231 (_("Abbreviate newsgroups longer than"));
2232 gtk_widget_show (label_ng_abbrev);
2233 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
2235 spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
2236 spinbtn_ng_abbrev_len = gtk_spin_button_new
2237 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
2238 gtk_widget_show (spinbtn_ng_abbrev_len);
2239 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
2241 gtk_widget_set_usize (spinbtn_ng_abbrev_len, 56, -1);
2242 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
2245 label_ng_abbrev = gtk_label_new
2247 gtk_widget_show (label_ng_abbrev);
2248 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
2250 /* ---- Summary ---- */
2252 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
2254 vbox2 = gtk_vbox_new (FALSE, 0);
2255 gtk_widget_show (vbox2);
2256 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
2257 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
2260 (vbox2, chkbtn_swapfrom,
2261 _("Display recipient on `From' column if sender is yourself"));
2263 (vbox2, chkbtn_useaddrbook,
2264 _("Display sender using address book"));
2266 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
2268 (vbox2, chkbtn_expand_thread, _("Expand threads"));
2270 (vbox2, chkbtn_bold_unread,
2271 _("Display unread messages with bold font"));
2273 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2275 hbox1 = gtk_hbox_new (FALSE, 8);
2276 gtk_widget_show (hbox1);
2277 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2279 label_datefmt = gtk_label_new (_("Date format"));
2280 gtk_widget_show (label_datefmt);
2281 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
2283 entry_datefmt = gtk_entry_new ();
2284 gtk_widget_show (entry_datefmt);
2285 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
2287 button_datefmt = gtk_button_new_with_label (" ... ");
2289 gtk_widget_show (button_datefmt);
2290 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
2291 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
2292 GTK_SIGNAL_FUNC (date_format_create), NULL);
2294 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2296 hbox1 = gtk_hbox_new (FALSE, 8);
2297 gtk_widget_show (hbox1);
2298 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2300 button_dispitem = gtk_button_new_with_label
2301 (_(" Set displayed items of summary... "));
2302 gtk_widget_show (button_dispitem);
2303 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
2304 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
2305 GTK_SIGNAL_FUNC (prefs_summary_column_open),
2308 display.entry_textfont = entry_textfont;
2309 display.button_textfont = button_textfont;
2311 display.chkbtn_display_img = chkbtn_display_img;
2312 display.chkbtn_transhdr = chkbtn_transhdr;
2313 display.chkbtn_folder_unread = chkbtn_folder_unread;
2314 display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
2315 display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
2317 display.chkbtn_swapfrom = chkbtn_swapfrom;
2318 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
2319 display.chkbtn_expand_thread = chkbtn_expand_thread;
2320 display.chkbtn_bold_unread = chkbtn_bold_unread;
2321 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
2322 display.entry_datefmt = entry_datefmt;
2325 static void prefs_message_create(void)
2331 GtkWidget *chkbtn_enablecol;
2332 GtkWidget *button_edit_col;
2333 GtkWidget *chkbtn_mbalnum;
2334 GtkWidget *chkbtn_disphdrpane;
2335 GtkWidget *chkbtn_disphdr;
2336 GtkWidget *button_edit_disphdr;
2337 GtkWidget *hbox_linespc;
2338 GtkWidget *label_linespc;
2339 GtkObject *spinbtn_linespc_adj;
2340 GtkWidget *spinbtn_linespc;
2341 GtkWidget *chkbtn_headspc;
2343 GtkWidget *frame_scr;
2344 GtkWidget *vbox_scr;
2345 GtkWidget *chkbtn_smoothscroll;
2346 GtkWidget *hbox_scr;
2347 GtkWidget *label_scr;
2348 GtkObject *spinbtn_scrollstep_adj;
2349 GtkWidget *spinbtn_scrollstep;
2350 GtkWidget *chkbtn_halfpage;
2352 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2353 gtk_widget_show (vbox1);
2354 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2355 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2357 hbox1 = gtk_hbox_new (FALSE, 8);
2358 gtk_widget_show (hbox1);
2359 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
2361 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
2362 _("Enable coloration of message"));
2363 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
2364 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
2367 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
2368 gtk_widget_show (button_edit_col);
2369 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
2370 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
2371 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
2373 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
2375 vbox2 = gtk_vbox_new (FALSE, 0);
2376 gtk_widget_show (vbox2);
2377 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2380 (vbox2, chkbtn_mbalnum,
2381 _("Display 2-byte alphabet and numeric with 1-byte character"));
2382 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
2383 _("Display header pane above message view"));
2385 hbox1 = gtk_hbox_new (FALSE, 8);
2386 gtk_widget_show (hbox1);
2387 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2389 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
2390 _("Display short headers on message view"));
2392 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
2393 gtk_widget_show (button_edit_disphdr);
2394 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
2396 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
2397 GTK_SIGNAL_FUNC (prefs_display_header_open),
2400 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
2402 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2404 hbox1 = gtk_hbox_new (FALSE, 32);
2405 gtk_widget_show (hbox1);
2406 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2408 hbox_linespc = gtk_hbox_new (FALSE, 8);
2409 gtk_widget_show (hbox1);
2410 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
2412 label_linespc = gtk_label_new (_("Line space"));
2413 gtk_widget_show (label_linespc);
2414 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2417 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
2418 spinbtn_linespc = gtk_spin_button_new
2419 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
2420 gtk_widget_show (spinbtn_linespc);
2421 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
2423 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
2424 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
2426 label_linespc = gtk_label_new (_("pixel(s)"));
2427 gtk_widget_show (label_linespc);
2428 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2431 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
2433 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
2435 vbox_scr = gtk_vbox_new (FALSE, 0);
2436 gtk_widget_show (vbox_scr);
2437 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
2438 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
2440 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
2442 hbox1 = gtk_hbox_new (FALSE, 32);
2443 gtk_widget_show (hbox1);
2444 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
2446 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
2448 hbox_scr = gtk_hbox_new (FALSE, 8);
2449 gtk_widget_show (hbox_scr);
2450 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
2452 label_scr = gtk_label_new (_("Step"));
2453 gtk_widget_show (label_scr);
2454 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2456 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
2457 spinbtn_scrollstep = gtk_spin_button_new
2458 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
2459 gtk_widget_show (spinbtn_scrollstep);
2460 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
2462 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
2463 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
2466 label_scr = gtk_label_new (_("pixel(s)"));
2467 gtk_widget_show (label_scr);
2468 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2470 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
2472 message.chkbtn_enablecol = chkbtn_enablecol;
2473 message.button_edit_col = button_edit_col;
2474 message.chkbtn_mbalnum = chkbtn_mbalnum;
2475 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
2476 message.chkbtn_disphdr = chkbtn_disphdr;
2477 message.spinbtn_linespc = spinbtn_linespc;
2478 message.chkbtn_headspc = chkbtn_headspc;
2480 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
2481 message.spinbtn_scrollstep = spinbtn_scrollstep;
2482 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
2483 message.chkbtn_halfpage = chkbtn_halfpage;
2487 static void prefs_privacy_create(void)
2493 GtkWidget *hbox_spc;
2495 GtkWidget *checkbtn_auto_check_signatures;
2496 GtkWidget *checkbtn_gpg_signature_popup;
2497 GtkWidget *checkbtn_store_passphrase;
2498 GtkObject *spinbtn_store_passphrase_adj;
2499 GtkWidget *spinbtn_store_passphrase;
2500 GtkWidget *checkbtn_passphrase_grab;
2501 GtkWidget *checkbtn_gpg_warning;
2503 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2504 gtk_widget_show (vbox1);
2505 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2506 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2508 vbox2 = gtk_vbox_new (FALSE, 0);
2509 gtk_widget_show (vbox2);
2510 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2512 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
2513 _("Automatically check signatures"));
2515 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
2516 _("Show signature check result in a popup window"));
2518 PACK_CHECK_BUTTON (vbox2, checkbtn_store_passphrase,
2519 _("Store passphrase in memory temporarily"));
2521 vbox3 = gtk_vbox_new (FALSE, 0);
2522 gtk_widget_show (vbox3);
2523 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2525 hbox1 = gtk_hbox_new (FALSE, 8);
2526 gtk_widget_show (hbox1);
2527 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2529 hbox_spc = gtk_hbox_new (FALSE, 0);
2530 gtk_widget_show (hbox_spc);
2531 gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
2532 gtk_widget_set_usize (hbox_spc, 12, -1);
2534 label = gtk_label_new (_("Expire after"));
2535 gtk_widget_show (label);
2536 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2538 spinbtn_store_passphrase_adj = gtk_adjustment_new (0, 0, 1440, 1, 5, 5);
2539 spinbtn_store_passphrase = gtk_spin_button_new
2540 (GTK_ADJUSTMENT (spinbtn_store_passphrase_adj), 1, 0);
2541 gtk_widget_show (spinbtn_store_passphrase);
2542 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_store_passphrase, FALSE, FALSE, 0);
2543 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_store_passphrase),
2545 gtk_widget_set_usize (spinbtn_store_passphrase, 64, -1);
2547 label = gtk_label_new (_("minute(s) "));
2548 gtk_widget_show (label);
2549 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2551 hbox1 = gtk_hbox_new (FALSE, 8);
2552 gtk_widget_show (hbox1);
2553 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2555 hbox_spc = gtk_hbox_new (FALSE, 0);
2556 gtk_widget_show (hbox_spc);
2557 gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
2558 gtk_widget_set_usize (hbox_spc, 12, -1);
2560 label = gtk_label_new (_("(Setting to '0' will store the passphrase\n"
2561 " for the whole session)"));
2562 gtk_widget_show (label);
2563 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2564 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2566 SET_TOGGLE_SENSITIVITY (checkbtn_store_passphrase, vbox3);
2569 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
2570 _("Grab input while entering a passphrase"));
2574 (vbox2, checkbtn_gpg_warning,
2575 _("Display warning on startup if GnuPG doesn't work"));
2577 hbox1 = gtk_hbox_new (FALSE, 8);
2578 gtk_widget_show (hbox1);
2579 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2581 privacy.checkbtn_auto_check_signatures
2582 = checkbtn_auto_check_signatures;
2583 privacy.checkbtn_gpg_signature_popup
2584 = checkbtn_gpg_signature_popup;
2585 privacy.checkbtn_store_passphrase = checkbtn_store_passphrase;
2586 privacy.spinbtn_store_passphrase = spinbtn_store_passphrase;
2587 privacy.spinbtn_store_passphrase_adj = spinbtn_store_passphrase_adj;
2588 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2589 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2591 #endif /* USE_GPGME */
2593 static void prefs_interface_create(void)
2598 /* GtkWidget *checkbtn_emacs; */
2599 GtkWidget *checkbtn_show_msg_with_cursor;
2600 GtkWidget *checkbtn_openunread;
2601 GtkWidget *checkbtn_mark_as_read_on_newwin;
2602 GtkWidget *checkbtn_openinbox;
2603 GtkWidget *checkbtn_immedexec;
2606 GtkWidget *dialogs_table;
2607 GtkWidget *optmenu_recvdialog;
2608 GtkWidget *optmenu_senddialog;
2610 GtkWidget *menuitem;
2611 GtkWidget *checkbtn_no_recv_err_panel;
2612 GtkWidget *checkbtn_close_recv_dialog;
2614 GtkWidget *frame_addr;
2615 GtkWidget *vbox_addr;
2616 GtkWidget *checkbtn_addaddrbyclick;
2618 GtkWidget *button_keybind;
2621 GtkWidget *optmenu_nextunreadmsgdialog;
2622 GtkWidget *optmenu_nextunreadmsgdialog_menu;
2623 GtkWidget *nextunreadmsgdialog_menuitem;
2625 GtkWidget *frame_pixmap_theme;
2626 GtkWidget *vbox_pixmap_theme;
2627 GtkWidget *entry_pixmap_theme;
2628 GtkWidget *combo_pixmap_theme;
2629 GList *avail_pixmap_themes = NULL;
2631 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2632 gtk_widget_show (vbox1);
2633 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2634 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2636 vbox2 = gtk_vbox_new (FALSE, 0);
2637 gtk_widget_show (vbox2);
2638 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2640 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2641 _("Emulate the behavior of mouse operation of\n"
2642 "Emacs-based mailer"));
2643 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2644 GTK_JUSTIFY_LEFT); */
2647 (vbox2, checkbtn_show_msg_with_cursor,
2648 _("Open message when cursor keys are pressed on summary"));
2651 (vbox2, checkbtn_openunread,
2652 _("Open first unread message when entering a folder"));
2655 (vbox2, checkbtn_mark_as_read_on_newwin,
2656 _("Only mark message as read when opened in new window"));
2659 (vbox2, checkbtn_openinbox,
2660 _("Go to inbox after receiving new mail"));
2662 vbox3 = gtk_vbox_new (FALSE, 0);
2663 gtk_widget_show (vbox3);
2664 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2667 (vbox3, checkbtn_immedexec,
2668 _("Execute immediately when moving or deleting messages"));
2670 hbox1 = gtk_hbox_new (FALSE, 0);
2671 gtk_widget_show (hbox1);
2672 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2674 label = gtk_label_new
2675 (_("(Messages will be marked until execution\n"
2676 " if this is turned off)"));
2677 gtk_widget_show (label);
2678 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2679 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2681 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2683 dialogs_table = gtk_table_new (2, 2, FALSE);
2684 gtk_widget_show (dialogs_table);
2685 gtk_container_add (GTK_CONTAINER (vbox2), dialogs_table);
2686 gtk_container_set_border_width (GTK_CONTAINER (dialogs_table), 8);
2687 gtk_table_set_row_spacings (GTK_TABLE (dialogs_table), VSPACING_NARROW);
2688 gtk_table_set_col_spacings (GTK_TABLE (dialogs_table), 8);
2690 label = gtk_label_new (_("Show send dialog"));
2691 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
2692 gtk_widget_show (label);
2693 gtk_table_attach (GTK_TABLE (dialogs_table), label, 0, 1, 0, 1,
2694 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2697 optmenu_senddialog = gtk_option_menu_new ();
2698 gtk_widget_show (optmenu_senddialog);
2699 gtk_table_attach (GTK_TABLE (dialogs_table), optmenu_senddialog, 1, 2, 0, 1,
2700 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2702 menu = gtk_menu_new ();
2703 MENUITEM_ADD (menu, menuitem, _("Always"), SEND_DIALOG_ALWAYS);
2704 MENUITEM_ADD (menu, menuitem, _("Never"), SEND_DIALOG_NEVER);
2706 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_senddialog), menu);
2708 label = gtk_label_new (_("Show receive dialog"));
2709 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
2710 gtk_widget_show (label);
2711 gtk_table_attach (GTK_TABLE (dialogs_table), label, 0, 1, 1, 2,
2712 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2714 optmenu_recvdialog = gtk_option_menu_new ();
2715 gtk_widget_show (optmenu_recvdialog);
2716 gtk_table_attach (GTK_TABLE (dialogs_table), optmenu_recvdialog, 1, 2, 1, 2,
2717 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2719 menu = gtk_menu_new ();
2720 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2721 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2722 RECV_DIALOG_ACTIVE);
2723 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2725 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2727 PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
2728 _("Don't popup error dialog on receive error"));
2730 PACK_CHECK_BUTTON (vbox2, checkbtn_close_recv_dialog,
2731 _("Close receive dialog when finished"));
2733 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2735 vbox_addr = gtk_vbox_new (FALSE, 0);
2736 gtk_widget_show (vbox_addr);
2737 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2738 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2741 (vbox_addr, checkbtn_addaddrbyclick,
2742 _("Add address to destination when double-clicked"));
2744 /* Next Unread Message Dialog */
2745 hbox2 = gtk_hbox_new (FALSE, 8);
2746 gtk_widget_show (hbox2);
2747 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
2749 label = gtk_label_new (_("Show no-unread-message dialog"));
2750 gtk_widget_show (label);
2751 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
2753 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2754 gtk_widget_show (optmenu_nextunreadmsgdialog);
2755 gtk_box_pack_start (GTK_BOX (hbox2), optmenu_nextunreadmsgdialog,
2758 optmenu_nextunreadmsgdialog_menu = gtk_menu_new ();
2759 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2760 _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2761 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2762 _("Assume 'Yes'"), NEXTUNREADMSGDIALOG_ASSUME_YES);
2763 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2764 _("Assume 'No'"), NEXTUNREADMSGDIALOG_ASSUME_NO);
2766 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog),
2767 optmenu_nextunreadmsgdialog_menu);
2770 /* Receive Dialog */
2771 /* hbox = gtk_hbox_new (FALSE, 8);
2772 gtk_widget_show (hbox);
2773 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2775 label = gtk_label_new (_("Show receive Dialog"));
2776 gtk_widget_show (label);
2777 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2779 recvdialog_optmenu = gtk_option_menu_new ();
2780 gtk_widget_show (recvdialog_optmenu);
2781 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2783 recvdialog_optmenu_menu = gtk_menu_new ();
2785 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2786 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2787 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2789 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2791 hbox1 = gtk_hbox_new (FALSE, 8);
2792 gtk_widget_show (hbox1);
2793 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2795 button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
2796 gtk_widget_show (button_keybind);
2797 gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
2798 gtk_signal_connect (GTK_OBJECT (button_keybind), "clicked",
2799 GTK_SIGNAL_FUNC (prefs_keybind_select), NULL);
2801 PACK_FRAME(vbox1, frame_pixmap_theme, _("Icon theme"));
2803 vbox_pixmap_theme = gtk_vbox_new(FALSE, 0);
2804 gtk_widget_show(vbox_pixmap_theme);
2805 gtk_container_add(GTK_CONTAINER(frame_pixmap_theme), vbox_pixmap_theme);
2806 gtk_container_set_border_width(GTK_CONTAINER(vbox_pixmap_theme), 8);
2808 avail_pixmap_themes = stock_pixmap_themes_list_new();
2810 combo_pixmap_theme = gtk_combo_new ();
2811 gtk_widget_show (combo_pixmap_theme);
2812 gtk_box_pack_start (GTK_BOX (vbox_pixmap_theme), combo_pixmap_theme, TRUE, TRUE, 0);
2813 gtk_combo_set_popdown_strings(GTK_COMBO(combo_pixmap_theme), avail_pixmap_themes);
2814 entry_pixmap_theme = GTK_COMBO (combo_pixmap_theme)->entry;
2816 stock_pixmap_themes_list_free(avail_pixmap_themes);
2818 /* interface.checkbtn_emacs = checkbtn_emacs; */
2819 interface.checkbtn_show_msg_with_cursor
2820 = checkbtn_show_msg_with_cursor;
2821 interface.checkbtn_openunread = checkbtn_openunread;
2822 interface.checkbtn_mark_as_read_on_newwin
2823 = checkbtn_mark_as_read_on_newwin;
2824 interface.checkbtn_openinbox = checkbtn_openinbox;
2825 interface.checkbtn_immedexec = checkbtn_immedexec;
2826 interface.optmenu_recvdialog = optmenu_recvdialog;
2827 interface.optmenu_senddialog = optmenu_senddialog;
2828 interface.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
2829 interface.checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
2830 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2831 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2832 interface.combo_pixmap_theme = combo_pixmap_theme;
2833 interface.entry_pixmap_theme = entry_pixmap_theme;
2836 static void prefs_other_create(void)
2839 GtkWidget *ext_frame;
2840 GtkWidget *ext_table;
2843 GtkWidget *uri_label;
2844 GtkWidget *uri_combo;
2845 GtkWidget *uri_entry;
2847 GtkWidget *printcmd_label;
2848 GtkWidget *printcmd_entry;
2850 GtkWidget *exteditor_label;
2851 GtkWidget *exteditor_combo;
2852 GtkWidget *exteditor_entry;
2854 GtkWidget *frame_cliplog;
2855 GtkWidget *vbox_cliplog;
2856 GtkWidget *hbox_cliplog;
2857 GtkWidget *checkbtn_cliplog;
2858 GtkWidget *loglength_label;
2859 GtkWidget *loglength_entry;
2861 GtkWidget *frame_exit;
2862 GtkWidget *vbox_exit;
2863 GtkWidget *checkbtn_confonexit;
2864 GtkWidget *checkbtn_cleanonexit;
2865 GtkWidget *checkbtn_askonclean;
2866 GtkWidget *checkbtn_warnqueued;
2868 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2869 gtk_widget_show (vbox1);
2870 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2871 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2873 PACK_FRAME(vbox1, ext_frame,
2874 _("External commands (%s will be replaced with file name / URI)"));
2876 ext_table = gtk_table_new (3, 2, FALSE);
2877 gtk_widget_show (ext_table);
2878 gtk_container_add (GTK_CONTAINER (ext_frame), ext_table);
2879 gtk_container_set_border_width (GTK_CONTAINER (ext_table), 8);
2880 gtk_table_set_row_spacings (GTK_TABLE (ext_table), VSPACING_NARROW);
2881 gtk_table_set_col_spacings (GTK_TABLE (ext_table), 8);
2883 uri_label = gtk_label_new (_("Web browser"));
2884 gtk_widget_show(uri_label);
2885 gtk_table_attach (GTK_TABLE (ext_table), uri_label, 0, 1, 0, 1,
2886 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2887 gtk_misc_set_alignment (GTK_MISC (uri_label), 1, 0.5);
2889 uri_combo = gtk_combo_new ();
2890 gtk_widget_show (uri_combo);
2891 gtk_table_attach (GTK_TABLE (ext_table), uri_combo, 1, 2, 0, 1,
2892 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2893 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2895 "mozilla -remote 'openurl(%s,new-window)'",
2896 "netscape -remote 'openURL(%s,raise)'",
2898 "gnome-moz-remote --raise --newwin '%s'",
2899 "kfmclient openURL '%s'",
2900 "opera -newwindow '%s'",
2901 "kterm -e w3m '%s'",
2902 "kterm -e lynx '%s'",
2904 uri_entry = GTK_COMBO (uri_combo)->entry;
2906 printcmd_label = gtk_label_new (_("Print"));
2907 gtk_widget_show (printcmd_label);
2908 gtk_table_attach (GTK_TABLE (ext_table), printcmd_label, 0, 1, 1, 2,
2909 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2910 gtk_misc_set_alignment (GTK_MISC (printcmd_label), 1, 0.5);
2912 printcmd_entry = gtk_entry_new ();
2913 gtk_widget_show (printcmd_entry);
2914 gtk_table_attach (GTK_TABLE (ext_table), printcmd_entry, 1, 2, 1, 2,
2915 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2917 exteditor_label = gtk_label_new (_("Editor"));
2918 gtk_widget_show (exteditor_label);
2919 gtk_table_attach (GTK_TABLE (ext_table), exteditor_label, 0, 1, 2, 3,
2920 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2921 gtk_misc_set_alignment (GTK_MISC (exteditor_label), 1, 0.5);
2923 exteditor_combo = gtk_combo_new ();
2924 gtk_widget_show (exteditor_combo);
2925 gtk_table_attach (GTK_TABLE (ext_table), exteditor_combo, 1, 2, 2, 3,
2926 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2927 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2930 "mgedit --no-fork %s",
2936 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2939 PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2941 vbox_cliplog = gtk_vbox_new (FALSE, 0);
2942 gtk_widget_show (vbox_cliplog);
2943 gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2944 gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2945 PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2946 _("Clip the log size"));
2947 hbox_cliplog = gtk_hbox_new (FALSE, 3);
2948 gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2949 gtk_widget_show (hbox_cliplog);
2951 loglength_label = gtk_label_new (_("Log window length"));
2952 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2954 gtk_widget_show (GTK_WIDGET (loglength_label));
2955 loglength_entry = gtk_entry_new ();
2956 gtk_widget_set_usize (GTK_WIDGET (loglength_entry), 64, -1);
2957 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2959 gtk_widget_show (GTK_WIDGET (loglength_entry));
2960 loglength_label = gtk_label_new (_("(0 to stop logging in the log window)"));
2961 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2963 SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2966 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2968 vbox_exit = gtk_vbox_new (FALSE, 0);
2969 gtk_widget_show (vbox_exit);
2970 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2971 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2973 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2974 _("Confirm on exit"));
2976 hbox1 = gtk_hbox_new (FALSE, 32);
2977 gtk_widget_show (hbox1);
2978 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2980 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2981 _("Empty trash on exit"));
2982 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2983 _("Ask before emptying"));
2984 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2986 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2987 _("Warn if there are queued messages"));
2989 other.uri_combo = uri_combo;
2990 other.uri_entry = uri_entry;
2991 other.printcmd_entry = printcmd_entry;
2993 other.exteditor_combo = exteditor_combo;
2994 other.exteditor_entry = exteditor_entry;
2996 other.checkbtn_cliplog = checkbtn_cliplog;
2997 other.loglength_entry = loglength_entry;
2999 other.checkbtn_confonexit = checkbtn_confonexit;
3000 other.checkbtn_cleanonexit = checkbtn_cleanonexit;
3001 other.checkbtn_askonclean = checkbtn_askonclean;
3002 other.checkbtn_warnqueued = checkbtn_warnqueued;
3005 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
3007 GtkWidget *datefmt_sample = NULL;
3010 g_return_if_fail(widget != NULL);
3011 g_return_if_fail(*widget != NULL);
3012 g_return_if_fail(display.entry_datefmt != NULL);
3014 datefmt_sample = GTK_WIDGET(gtk_object_get_data
3015 (GTK_OBJECT(*widget), "datefmt_sample"));
3016 g_return_if_fail(datefmt_sample != NULL);
3018 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
3019 g_free(prefs_common.date_format);
3020 prefs_common.date_format = text;
3021 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
3023 gtk_widget_destroy(*widget);
3027 static void date_format_cancel_btn_clicked(GtkButton *button,
3030 g_return_if_fail(widget != NULL);
3031 g_return_if_fail(*widget != NULL);
3033 gtk_widget_destroy(*widget);
3037 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
3040 if (event && event->keyval == GDK_Escape)
3041 date_format_cancel_btn_clicked(NULL, widget);
3044 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
3045 GdkEventAny *event, GtkWidget **widget)
3047 g_return_val_if_fail(widget != NULL, FALSE);
3048 g_return_val_if_fail(*widget != NULL, FALSE);
3054 static void date_format_entry_on_change(GtkEditable *editable,
3058 struct tm *cal_time;
3062 cur_time = time(NULL);
3063 cal_time = localtime(&cur_time);
3065 text = gtk_editable_get_chars(editable, 0, -1);
3067 strftime(buffer, sizeof buffer, text, cal_time);
3069 gtk_label_set_text(example, buffer);
3072 static void date_format_select_row(GtkWidget *date_format_list, gint row,
3073 gint column, GdkEventButton *event,
3074 GtkWidget *date_format)
3080 GtkWidget *datefmt_sample;
3082 /* only on double click */
3083 if (!event || event->type != GDK_2BUTTON_PRESS) return;
3086 datefmt_sample = GTK_WIDGET(gtk_object_get_data
3087 (GTK_OBJECT(date_format), "datefmt_sample"));
3089 g_return_if_fail(date_format_list != NULL);
3090 g_return_if_fail(date_format != NULL);
3091 g_return_if_fail(datefmt_sample != NULL);
3093 /* get format from clist */
3094 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
3096 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
3097 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
3099 /* insert the format into the text entry */
3100 new_format = g_malloc(strlen(old_format) + 3);
3102 strncpy(new_format, old_format, cur_pos);
3103 new_format[cur_pos] = '\0';
3104 strcat(new_format, format);
3105 strcat(new_format, &old_format[cur_pos]);
3107 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
3108 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
3113 static GtkWidget *date_format_create(GtkButton *button, void *data)
3115 static GtkWidget *datefmt_win = NULL;
3117 GtkWidget *scrolledwindow1;
3118 GtkWidget *datefmt_clist;
3123 GtkWidget *confirm_area;
3125 GtkWidget *cancel_btn;
3126 GtkWidget *datefmt_entry;
3155 const gint TIME_FORMAT_ELEMS =
3156 sizeof time_format / sizeof time_format[0];
3158 time_format[0].txt = _("the full abbreviated weekday name");
3159 time_format[1].txt = _("the full weekday name");
3160 time_format[2].txt = _("the abbreviated month name");
3161 time_format[3].txt = _("the full month name");
3162 time_format[4].txt = _("the preferred date and time for the current locale");
3163 time_format[5].txt = _("the century number (year/100)");
3164 time_format[6].txt = _("the day of the month as a decimal number");
3165 time_format[7].txt = _("the hour as a decimal number using a 24-hour clock");
3166 time_format[8].txt = _("the hour as a decimal number using a 12-hour clock");
3167 time_format[9].txt = _("the day of the year as a decimal number");
3168 time_format[10].txt = _("the month as a decimal number");
3169 time_format[11].txt = _("the minute as a decimal number");
3170 time_format[12].txt = _("either AM or PM");
3171 time_format[13].txt = _("the second as a decimal number");
3172 time_format[14].txt = _("the day of the week as a decimal number");
3173 time_format[15].txt = _("the preferred date for the current locale");
3174 time_format[16].txt = _("the last two digits of a year");
3175 time_format[17].txt = _("the year as a decimal number");
3176 time_format[18].txt = _("the time zone or name or abbreviation");
3178 if (datefmt_win) return datefmt_win;
3180 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
3181 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
3182 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
3183 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
3184 gtk_widget_set_usize(datefmt_win, 440, 280);
3186 vbox1 = gtk_vbox_new(FALSE, 10);
3187 gtk_widget_show(vbox1);
3188 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
3190 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
3191 gtk_scrolled_window_set_policy
3192 (GTK_SCROLLED_WINDOW(scrolledwindow1),
3193 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
3194 gtk_widget_show(scrolledwindow1);
3195 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
3197 titles[0] = _("Specifier");
3198 titles[1] = _("Description");
3199 datefmt_clist = gtk_clist_new_with_titles(2, titles);
3200 gtk_widget_show(datefmt_clist);
3201 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
3202 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
3203 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
3204 GTK_SELECTION_BROWSE);
3206 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
3208 /* phoney casting necessary because of gtk... */
3209 text[0] = (gchar *)time_format[i].fmt;
3210 text[1] = (gchar *)time_format[i].txt;
3211 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
3214 table = gtk_table_new(2, 2, FALSE);
3215 gtk_widget_show(table);
3216 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
3217 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
3218 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
3220 label1 = gtk_label_new(_("Date format"));
3221 gtk_widget_show(label1);
3222 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
3224 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
3225 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
3227 datefmt_entry = gtk_entry_new_with_max_length(256);
3228 gtk_widget_show(datefmt_entry);
3229 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
3230 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3232 /* we need the "sample" entry box; add it as data so callbacks can
3233 * get the entry box */
3234 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
3237 label2 = gtk_label_new(_("Example"));
3238 gtk_widget_show(label2);
3239 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
3241 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
3242 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
3244 label3 = gtk_label_new("");
3245 gtk_widget_show(label3);
3246 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
3247 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3248 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
3249 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
3251 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
3252 &cancel_btn, _("Cancel"), NULL, NULL);
3253 gtk_widget_grab_default(ok_btn);
3254 gtk_widget_show(confirm_area);
3256 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
3258 /* set the current format */
3259 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
3260 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
3263 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3264 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
3266 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
3267 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
3269 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
3270 GTK_SIGNAL_FUNC(date_format_key_pressed),
3272 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
3273 GTK_SIGNAL_FUNC(date_format_on_delete),
3275 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
3276 GTK_SIGNAL_FUNC(date_format_entry_on_change),
3279 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
3280 GTK_SIGNAL_FUNC(date_format_select_row),
3283 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
3284 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
3286 gtk_widget_show(datefmt_win);
3287 manage_window_set_transient(GTK_WINDOW(datefmt_win));
3289 gtk_widget_grab_focus(ok_btn);
3294 void prefs_quote_colors_dialog(void)
3296 if (!quote_color_win)
3297 prefs_quote_colors_dialog_create();
3298 gtk_widget_show(quote_color_win);
3299 manage_window_set_transient(GTK_WINDOW(quote_color_win));
3302 gtk_widget_hide(quote_color_win);
3304 textview_update_message_colors();
3305 main_window_reflect_prefs_all();
3308 static void prefs_quote_colors_dialog_create(void)
3313 GtkWidget *quotelevel1_label;
3314 GtkWidget *quotelevel2_label;
3315 GtkWidget *quotelevel3_label;
3316 GtkWidget *uri_label;
3317 GtkWidget *signature_label;
3318 GtkWidget *tgt_folder_label;
3321 GtkWidget *recycle_colors_btn;
3322 GtkWidget *frame_colors;
3324 window = gtk_window_new(GTK_WINDOW_DIALOG);
3325 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
3326 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
3327 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3328 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3329 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3331 vbox = gtk_vbox_new (FALSE, VSPACING);
3332 gtk_container_add (GTK_CONTAINER (window), vbox);
3333 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
3334 PACK_FRAME(vbox, frame_colors, _("Colors"));
3336 table = gtk_table_new (5, 2, FALSE);
3337 gtk_container_add (GTK_CONTAINER (frame_colors), table);
3338 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
3339 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
3340 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
3343 color_buttons.quote_level1_btn = gtk_button_new();
3344 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
3345 0, 1, 0, 1, 0, 0, 0, 0);
3346 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
3347 gtk_container_set_border_width
3348 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
3350 color_buttons.quote_level2_btn = gtk_button_new();
3351 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
3352 0, 1, 1, 2, 0, 0, 0, 0);
3353 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
3354 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
3356 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
3357 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
3358 0, 1, 2, 3, 0, 0, 0, 0);
3359 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
3360 gtk_container_set_border_width
3361 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
3363 color_buttons.uri_btn = gtk_button_new_with_label ("");
3364 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
3365 0, 1, 3, 4, 0, 0, 0, 0);
3366 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
3367 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
3369 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
3370 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
3371 0, 1, 4, 5, 0, 0, 0, 0);
3372 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
3373 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
3375 color_buttons.signature_btn = gtk_button_new_with_label ("");
3376 gtk_table_attach (GTK_TABLE (table), color_buttons.signature_btn,
3377 0, 1, 5, 6, 0, 0, 0, 0);
3378 gtk_widget_set_usize (color_buttons.signature_btn, 40, 30);
3379 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.signature_btn), 5);
3381 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
3382 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
3383 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3384 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
3385 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
3387 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
3388 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
3389 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3390 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
3391 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
3393 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
3394 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
3395 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3396 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
3397 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
3399 uri_label = gtk_label_new (_("URI link"));
3400 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
3401 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3402 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
3403 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
3405 tgt_folder_label = gtk_label_new (_("Target folder"));
3406 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
3407 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3408 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
3409 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
3411 signature_label = gtk_label_new (_("Signatures"));
3412 gtk_table_attach (GTK_TABLE (table), signature_label, 1, 2, 5, 6,
3413 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3414 gtk_label_set_justify (GTK_LABEL (signature_label), GTK_JUSTIFY_LEFT);
3415 gtk_misc_set_alignment (GTK_MISC (signature_label), 0, 0.5);
3417 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
3418 _("Recycle quote colors"));
3420 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3421 NULL, NULL, NULL, NULL);
3422 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3424 gtk_widget_grab_default(ok_btn);
3425 MANAGE_WINDOW_SIGNALS_CONNECT(window);
3426 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3427 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3428 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3429 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
3432 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
3433 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
3434 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
3435 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
3436 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
3437 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
3438 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
3439 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
3440 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
3441 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
3442 gtk_signal_connect(GTK_OBJECT(color_buttons.signature_btn), "clicked",
3443 GTK_SIGNAL_FUNC(quote_color_set_dialog), "SIGNATURE");
3444 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
3445 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
3446 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3447 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3449 /* show message button colors and recycle options */
3450 set_button_bg_color(color_buttons.quote_level1_btn,
3451 prefs_common.quote_level1_col);
3452 set_button_bg_color(color_buttons.quote_level2_btn,
3453 prefs_common.quote_level2_col);
3454 set_button_bg_color(color_buttons.quote_level3_btn,
3455 prefs_common.quote_level3_col);
3456 set_button_bg_color(color_buttons.uri_btn,
3457 prefs_common.uri_col);
3458 set_button_bg_color(color_buttons.tgt_folder_btn,
3459 prefs_common.tgt_folder_col);
3460 set_button_bg_color(color_buttons.signature_btn,
3461 prefs_common.signature_col);
3462 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
3463 prefs_common.recycle_quote_colors);
3465 gtk_widget_show_all(vbox);
3466 quote_color_win = window;
3469 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
3470 GdkEventKey *event, gpointer data)
3472 if (event && event->keyval == GDK_Escape)
3476 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
3478 gchar *type = (gchar *)data;
3479 gchar *title = NULL;