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"
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_forward_as_attachment;
125 GtkWidget *checkbtn_redirect_keep_from;
126 GtkWidget *checkbtn_smart_wrapping;
127 GtkWidget *checkbtn_block_cursor;
128 GtkWidget *checkbtn_reply_with_quote;
133 static struct Spelling {
134 GtkWidget *checkbtn_enable_pspell;
135 GtkWidget *entry_pspell_path;
136 GtkWidget *btn_pspell_path;
137 GtkWidget *optmenu_dictionary;
138 GtkWidget *optmenu_sugmode;
139 GtkWidget *misspelled_btn;
140 GtkWidget *checkbtn_use_alternate;
141 GtkWidget *checkbtn_check_while_typing;
145 static struct Quote {
146 GtkWidget *entry_quotemark;
147 GtkWidget *text_quotefmt;
149 GtkWidget *entry_fw_quotemark;
150 GtkWidget *text_fw_quotefmt;
152 GtkWidget *entry_quote_chars;
155 static struct Display {
156 GtkWidget *entry_textfont;
157 GtkWidget *button_textfont;
159 GtkWidget *entry_smallfont;
160 GtkWidget *entry_normalfont;
161 GtkWidget *entry_boldfont;
163 GtkWidget *chkbtn_folder_unread;
164 GtkWidget *chkbtn_display_img;
165 GtkWidget *entry_ng_abbrev_len;
166 GtkWidget *spinbtn_ng_abbrev_len;
167 GtkObject *spinbtn_ng_abbrev_len_adj;
169 GtkWidget *chkbtn_transhdr;
171 GtkWidget *chkbtn_swapfrom;
172 GtkWidget *chkbtn_hscrollbar;
173 GtkWidget *chkbtn_useaddrbook;
174 GtkWidget *chkbtn_expand_thread;
175 GtkWidget *chkbtn_bold_unread;
176 GtkWidget *entry_datefmt;
179 static struct Message {
180 GtkWidget *chkbtn_enablecol;
181 GtkWidget *button_edit_col;
182 GtkWidget *chkbtn_mbalnum;
183 GtkWidget *chkbtn_disphdrpane;
184 GtkWidget *chkbtn_disphdr;
185 GtkWidget *spinbtn_linespc;
186 GtkObject *spinbtn_linespc_adj;
187 GtkWidget *chkbtn_headspc;
189 GtkWidget *chkbtn_smoothscroll;
190 GtkWidget *spinbtn_scrollstep;
191 GtkObject *spinbtn_scrollstep_adj;
192 GtkWidget *chkbtn_halfpage;
196 static struct Privacy {
197 GtkWidget *checkbtn_auto_check_signatures;
198 GtkWidget *checkbtn_gpg_signature_popup;
199 GtkWidget *checkbtn_store_passphrase;
200 GtkWidget *spinbtn_store_passphrase;
201 GtkObject *spinbtn_store_passphrase_adj;
202 GtkWidget *checkbtn_passphrase_grab;
203 GtkWidget *checkbtn_gpg_warning;
207 static struct Interface {
208 /* GtkWidget *checkbtn_emacs; */
209 GtkWidget *checkbtn_show_msg_with_cursor;
210 GtkWidget *checkbtn_openunread;
211 GtkWidget *checkbtn_openinbox;
212 GtkWidget *checkbtn_immedexec;
213 GtkWidget *checkbtn_addaddrbyclick;
214 GtkWidget *optmenu_recvdialog;
215 GtkWidget *checkbtn_no_recv_err_panel;
216 GtkWidget *optmenu_nextunreadmsgdialog;
217 GtkWidget *entry_pixmap_theme;
218 GtkWidget *combo_pixmap_theme;
221 static struct Other {
222 GtkWidget *uri_combo;
223 GtkWidget *uri_entry;
224 GtkWidget *printcmd_entry;
225 GtkWidget *exteditor_combo;
226 GtkWidget *exteditor_entry;
227 GtkWidget *checkbtn_confonexit;
228 GtkWidget *checkbtn_cleanonexit;
229 GtkWidget *checkbtn_askonclean;
230 GtkWidget *checkbtn_warnqueued;
231 GtkWidget *checkbtn_cliplog;
232 GtkWidget *loglength_entry;
236 static struct MessageColorButtons {
237 GtkWidget *quote_level1_btn;
238 GtkWidget *quote_level2_btn;
239 GtkWidget *quote_level3_btn;
241 GtkWidget *tgt_folder_btn;
244 static struct KeybindDialog {
249 static GtkWidget *font_sel_win;
250 static guint font_sel_conn_id;
251 static GtkWidget *quote_color_win;
252 static GtkWidget *color_dialog;
254 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
255 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
256 static void prefs_common_recv_dialog_newmail_notify_toggle_cb (GtkWidget *w,
258 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
259 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
260 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
261 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
264 static void prefs_dictionary_set_data_from_optmenu (PrefParam *param);
265 static void prefs_dictionary_set_optmenu (PrefParam *pparam);
266 static void prefs_speller_sugmode_set_data_from_optmenu (PrefParam *pparam);
267 static void prefs_speller_sugmode_set_optmenu (PrefParam *pparam);
272 parameter name, default value, pointer to the prefs variable, data type,
273 pointer to the widget pointer,
274 pointer to the function for data setting,
275 pointer to the function for widget setting
278 static PrefParam param[] = {
280 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
281 &receive.checkbtn_incext,
282 prefs_set_data_from_toggle, prefs_set_toggle},
283 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
284 &receive.entry_incext,
285 prefs_set_data_from_entry, prefs_set_entry},
287 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
288 &receive.checkbtn_local,
289 prefs_set_data_from_toggle, prefs_set_toggle},
290 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
291 &receive.checkbtn_filter_on_inc,
292 prefs_set_data_from_toggle, prefs_set_toggle},
293 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
294 &receive.entry_spool,
295 prefs_set_data_from_entry, prefs_set_entry},
297 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
298 &receive.checkbtn_autochk,
299 prefs_set_data_from_toggle, prefs_set_toggle},
300 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
301 &receive.spinbtn_autochk,
302 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
303 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
304 &receive.checkbtn_chkonstartup,
305 prefs_set_data_from_toggle, prefs_set_toggle},
306 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
307 P_BOOL, &receive.checkbtn_scan_after_inc,
308 prefs_set_data_from_toggle, prefs_set_toggle},
309 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
310 P_BOOL, &receive.checkbtn_newmail_manu,
311 prefs_set_data_from_toggle, prefs_set_toggle},
312 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
313 P_BOOL, &receive.checkbtn_newmail_auto,
314 prefs_set_data_from_toggle, prefs_set_toggle},
315 {"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING,
316 &receive.entry_newmail_notify_cmd,
317 prefs_set_data_from_entry, prefs_set_entry},
319 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
320 &receive.spinbtn_maxarticle,
321 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
324 {"use_ext_sendmail", "FALSE", &prefs_common.use_extsend, P_BOOL,
325 &p_send.checkbtn_extsend,
326 prefs_set_data_from_toggle, prefs_set_toggle},
327 {"ext_sendmail_cmd", DEFAULT_SENDMAIL_CMD,
328 &prefs_common.extsend_cmd, P_STRING,
329 &p_send.entry_extsend, prefs_set_data_from_entry, prefs_set_entry},
330 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
331 &p_send.checkbtn_savemsg,
332 prefs_set_data_from_toggle, prefs_set_toggle},
333 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
334 &p_send.checkbtn_queuemsg,
335 prefs_set_data_from_toggle, prefs_set_toggle},
337 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
338 &p_send.optmenu_charset,
339 prefs_common_charset_set_data_from_optmenu,
340 prefs_common_charset_set_optmenu},
343 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
344 &compose.checkbtn_autosig,
345 prefs_set_data_from_toggle, prefs_set_toggle},
346 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
347 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
349 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
350 &compose.checkbtn_autoextedit,
351 prefs_set_data_from_toggle, prefs_set_toggle},
352 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
353 P_BOOL, &compose.checkbtn_forward_as_attachment,
354 prefs_set_data_from_toggle, prefs_set_toggle},
355 {"redirect_keep_from", "FALSE",
356 &prefs_common.redirect_keep_from, P_BOOL,
357 &compose.checkbtn_redirect_keep_from,
358 prefs_set_data_from_toggle, prefs_set_toggle},
359 {"undo_level", "50", &prefs_common.undolevels, P_INT,
360 &compose.spinbtn_undolevel,
361 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
362 {"block_cursor", "FALSE", &prefs_common.block_cursor,
363 P_BOOL, &compose.checkbtn_block_cursor,
364 prefs_set_data_from_toggle, prefs_set_toggle},
366 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
367 &compose.spinbtn_linewrap,
368 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
369 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
370 &compose.checkbtn_wrapquote,
371 prefs_set_data_from_toggle, prefs_set_toggle},
372 {"linewrap_auto", "FALSE", &prefs_common.autowrap, P_BOOL,
373 &compose.checkbtn_autowrap,
374 prefs_set_data_from_toggle, prefs_set_toggle},
375 {"linewrap_before_sending", "FALSE",
376 &prefs_common.linewrap_at_send, P_BOOL,
377 &compose.checkbtn_wrapatsend,
378 prefs_set_data_from_toggle, prefs_set_toggle},
379 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
380 P_BOOL, &compose.checkbtn_smart_wrapping,
381 prefs_set_data_from_toggle, prefs_set_toggle},
383 {"enable_pspell", "TRUE", &prefs_common.enable_pspell,
384 P_BOOL, &spelling.checkbtn_enable_pspell,
385 prefs_set_data_from_toggle, prefs_set_toggle},
386 {"pspell_path", PSPELL_PATH, &prefs_common.pspell_path,
387 P_STRING, &spelling.entry_pspell_path,
388 prefs_set_data_from_entry, prefs_set_entry},
389 {"dictionary", "", &prefs_common.dictionary,
390 P_STRING, &spelling.optmenu_dictionary,
391 prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
392 {"pspell_sugmode", "1", &prefs_common.pspell_sugmode,
393 P_INT, &spelling.optmenu_sugmode,
394 prefs_speller_sugmode_set_data_from_optmenu, prefs_speller_sugmode_set_optmenu },
395 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate,
396 P_BOOL, &spelling.checkbtn_use_alternate,
397 prefs_set_data_from_toggle, prefs_set_toggle},
398 {"check_while_typing", "TRUE", &prefs_common.check_while_typing,
399 P_BOOL, &spelling.checkbtn_check_while_typing,
400 prefs_set_data_from_toggle, prefs_set_toggle},
401 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_INT,
404 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
405 &compose.checkbtn_reply_with_quote, prefs_set_data_from_toggle, prefs_set_toggle},
407 /* Account autoselection */
408 {"reply_account_autoselect", "TRUE",
409 &prefs_common.reply_account_autosel, P_BOOL,
410 &compose.checkbtn_reply_account_autosel,
411 prefs_set_data_from_toggle, prefs_set_toggle},
412 {"forward_account_autoselect", "TRUE",
413 &prefs_common.forward_account_autosel, P_BOOL,
414 &compose.checkbtn_forward_account_autosel,
415 prefs_set_data_from_toggle, prefs_set_toggle},
416 {"reedit_account_autoselect", "TRUE",
417 &prefs_common.reedit_account_autosel, P_BOOL,
418 &compose.checkbtn_reedit_account_autosel,
419 prefs_set_data_from_toggle, prefs_set_toggle},
421 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
425 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
426 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
427 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
428 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
429 prefs_set_data_from_text, prefs_set_text},
431 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
432 "e.entry_fw_quotemark,
433 prefs_set_data_from_entry, prefs_set_entry},
434 {"forward_quote_format",
435 "\\n\\nBegin forwarded message:\\n\\n"
436 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
437 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
438 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
439 prefs_set_data_from_text, prefs_set_text},
440 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
441 "e.entry_quote_chars, prefs_set_data_from_entry, prefs_set_entry},
444 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
446 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
447 &prefs_common.textfont, P_STRING,
448 &display.entry_textfont,
449 prefs_set_data_from_entry, prefs_set_entry},
450 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
451 &prefs_common.smallfont, P_STRING,
452 &display.entry_smallfont,
453 prefs_set_data_from_entry, prefs_set_entry},
454 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
455 &prefs_common.boldfont, P_STRING,
456 &display.entry_boldfont,
457 prefs_set_data_from_entry, prefs_set_entry},
458 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
459 &prefs_common.normalfont, P_STRING,
460 &display.entry_normalfont,
461 prefs_set_data_from_entry, prefs_set_entry},
464 {"display_folder_unread_num", "TRUE",
465 &prefs_common.display_folder_unread, P_BOOL,
466 &display.chkbtn_folder_unread,
467 prefs_set_data_from_toggle, prefs_set_toggle},
469 {"display_img", "TRUE",
470 &prefs_common.display_img, P_BOOL,
471 &display.chkbtn_display_img,
472 prefs_set_data_from_toggle, prefs_set_toggle},
473 {"newsgroup_abbrev_len", "16",
474 &prefs_common.ng_abbrev_len, P_INT,
475 &display.spinbtn_ng_abbrev_len,
476 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
478 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
479 &display.chkbtn_transhdr,
480 prefs_set_data_from_toggle, prefs_set_toggle},
482 /* Display: Summary View */
483 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
484 &display.chkbtn_swapfrom,
485 prefs_set_data_from_toggle, prefs_set_toggle},
486 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
487 &display.chkbtn_hscrollbar,
488 prefs_set_data_from_toggle, prefs_set_toggle},
489 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
490 &display.chkbtn_useaddrbook,
491 prefs_set_data_from_toggle, prefs_set_toggle},
492 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
493 P_STRING, &display.entry_datefmt,
494 prefs_set_data_from_entry, prefs_set_entry},
495 {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
496 &display.chkbtn_expand_thread,
497 prefs_set_data_from_toggle, prefs_set_toggle},
498 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
499 &display.chkbtn_bold_unread,
500 prefs_set_data_from_toggle, prefs_set_toggle},
502 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
504 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
506 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
509 {"folderview_vscrollbar_policy", "0",
510 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
513 {"summary_col_show_mark", "TRUE",
514 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
515 {"summary_col_show_unread", "TRUE",
516 &prefs_common.summary_col_visible[S_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
517 {"summary_col_show_mime", "TRUE",
518 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
519 {"summary_col_show_subject", "TRUE",
520 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
521 {"summary_col_show_from", "TRUE",
522 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
523 {"summary_col_show_date", "TRUE",
524 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
525 {"summary_col_show_size", "TRUE",
526 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
527 {"summary_col_show_number", "FALSE",
528 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
529 {"summary_col_show_score", "FALSE",
530 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
531 {"summary_col_show_locked", "FALSE",
532 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
534 {"summary_col_pos_mark", "0",
535 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
536 {"summary_col_pos_unread", "1",
537 &prefs_common.summary_col_pos[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
538 {"summary_col_pos_mime", "2",
539 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
540 {"summary_col_pos_subject", "3",
541 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
542 {"summary_col_pos_from", "4",
543 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
544 {"summary_col_pos_date", "5",
545 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
546 {"summary_col_pos_size", "6",
547 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
548 {"summary_col_pos_number", "7",
549 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
550 {"summary_col_pos_score", "8",
551 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
552 {"summary_col_pos_locked", "9",
553 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
555 {"summary_col_size_mark", "10",
556 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
557 {"summary_col_size_unread", "13",
558 &prefs_common.summary_col_size[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
559 {"summary_col_size_mime", "10",
560 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
561 {"summary_col_size_subject", "200",
562 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
563 {"summary_col_size_from", "120",
564 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
565 {"summary_col_size_date", "118",
566 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
567 {"summary_col_size_size", "45",
568 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
569 {"summary_col_size_number", "40",
570 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
571 {"summary_col_size_score", "40",
572 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
573 {"summary_col_size_locked", "13",
574 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
577 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
579 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
581 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
583 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
585 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
587 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
590 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
592 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
595 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
597 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
599 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
601 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
603 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
605 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
607 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
609 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
611 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
613 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
615 {"compose_width", "600", &prefs_common.compose_width, P_INT,
617 {"compose_height", "560", &prefs_common.compose_height, P_INT,
621 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
622 &message.chkbtn_enablecol,
623 prefs_set_data_from_toggle, prefs_set_toggle},
625 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
627 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
629 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
631 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
633 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
635 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
637 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
638 P_BOOL, NULL, NULL, NULL},
640 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
641 &message.chkbtn_mbalnum,
642 prefs_set_data_from_toggle, prefs_set_toggle},
643 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
644 P_BOOL, &message.chkbtn_disphdrpane,
645 prefs_set_data_from_toggle, prefs_set_toggle},
646 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
647 &message.chkbtn_disphdr,
648 prefs_set_data_from_toggle, prefs_set_toggle},
649 {"line_space", "2", &prefs_common.line_space, P_INT,
650 &message.spinbtn_linespc,
651 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
652 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
653 &message.chkbtn_headspc,
654 prefs_set_data_from_toggle, prefs_set_toggle},
656 {"enable_smooth_scroll", "FALSE",
657 &prefs_common.enable_smooth_scroll, P_BOOL,
658 &message.chkbtn_smoothscroll,
659 prefs_set_data_from_toggle, prefs_set_toggle},
660 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
661 &message.spinbtn_scrollstep,
662 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
663 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
664 &message.chkbtn_halfpage,
665 prefs_set_data_from_toggle, prefs_set_toggle},
667 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
671 {"mime_image_viewer", "display '%s'",
672 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
673 {"mime_audio_player", "play '%s'",
674 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
675 {"mime_open_command", "gedit '%s'",
676 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
680 {"auto_check_signatures", "TRUE",
681 &prefs_common.auto_check_signatures, P_BOOL,
682 &privacy.checkbtn_auto_check_signatures,
683 prefs_set_data_from_toggle, prefs_set_toggle},
684 {"gpg_signature_popup", "FALSE",
685 &prefs_common.gpg_signature_popup, P_BOOL,
686 &privacy.checkbtn_gpg_signature_popup,
687 prefs_set_data_from_toggle, prefs_set_toggle},
688 {"store_passphrase", "FALSE", &prefs_common.store_passphrase, P_BOOL,
689 &privacy.checkbtn_store_passphrase,
690 prefs_set_data_from_toggle, prefs_set_toggle},
691 {"store_passphrase_timeout", "0",
692 &prefs_common.store_passphrase_timeout, P_INT,
693 &privacy.spinbtn_store_passphrase,
694 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
696 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
697 &privacy.checkbtn_passphrase_grab,
698 prefs_set_data_from_toggle, prefs_set_toggle},
699 #endif /* __MINGW32__ */
700 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
701 &privacy.checkbtn_gpg_warning,
702 prefs_set_data_from_toggle, prefs_set_toggle},
703 #endif /* USE_GPGME */
706 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
708 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
711 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
712 NULL, NULL, NULL}, */
713 {"show_message_with_cursor_key", "FALSE",
714 &prefs_common.show_msg_with_cursor_key,
715 P_BOOL, &interface.checkbtn_show_msg_with_cursor,
716 prefs_set_data_from_toggle, prefs_set_toggle},
717 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
718 P_BOOL, &interface.checkbtn_openunread,
719 prefs_set_data_from_toggle, prefs_set_toggle},
720 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
721 P_BOOL, &interface.checkbtn_openinbox,
722 prefs_set_data_from_toggle, prefs_set_toggle},
723 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
724 &interface.checkbtn_immedexec,
725 prefs_set_data_from_toggle, prefs_set_toggle},
726 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
727 &interface.optmenu_recvdialog,
728 prefs_common_recv_dialog_set_data_from_optmenu,
729 prefs_common_recv_dialog_set_optmenu},
730 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
731 P_BOOL, &interface.checkbtn_no_recv_err_panel,
732 prefs_set_data_from_toggle, prefs_set_toggle},
733 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
734 &interface.optmenu_nextunreadmsgdialog,
735 prefs_nextunreadmsgdialog_set_data_from_optmenu,
736 prefs_nextunreadmsgdialog_set_optmenu},
738 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
739 P_BOOL, &interface.checkbtn_addaddrbyclick,
740 prefs_set_data_from_toggle, prefs_set_toggle},
741 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
742 &prefs_common.pixmap_theme_path, P_STRING,
743 &interface.entry_pixmap_theme, prefs_set_data_from_entry, prefs_set_entry},
746 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
747 &prefs_common.uri_cmd, P_STRING,
748 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
749 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
750 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
751 {"ext_editor_command", "gedit %s",
752 &prefs_common.ext_editor_cmd, P_STRING,
753 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
755 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
756 &other.checkbtn_confonexit,
757 prefs_set_data_from_toggle, prefs_set_toggle},
758 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
759 &other.checkbtn_cleanonexit,
760 prefs_set_data_from_toggle, prefs_set_toggle},
761 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
762 &other.checkbtn_askonclean,
763 prefs_set_data_from_toggle, prefs_set_toggle},
764 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
765 P_BOOL, &other.checkbtn_warnqueued,
766 prefs_set_data_from_toggle, prefs_set_toggle},
767 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
770 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
772 {"important_score", "1", &prefs_common.important_score, P_INT,
774 {"clip_log", "FALSE", &prefs_common.cliplog, P_BOOL,
775 &other.checkbtn_cliplog,
776 prefs_set_data_from_toggle, prefs_set_toggle},
777 {"log_length", "1000", &prefs_common.loglength, P_INT,
778 &other.loglength_entry,
779 prefs_set_data_from_entry, prefs_set_entry},
781 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
783 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
786 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
789 /* widget creating functions */
790 static void prefs_common_create (void);
791 static void prefs_receive_create (void);
792 static void prefs_send_create (void);
793 static void prefs_compose_create (void);
794 static void prefs_spelling_create (void);
795 static void prefs_quote_create (void);
796 static void prefs_display_create (void);
797 static void prefs_message_create (void);
799 static void prefs_privacy_create (void);
801 static void prefs_interface_create (void);
802 static void prefs_other_create (void);
804 static void date_format_ok_btn_clicked (GtkButton *button,
806 static void date_format_cancel_btn_clicked (GtkButton *button,
808 static void date_format_key_pressed (GtkWidget *keywidget,
811 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
814 static void date_format_entry_on_change (GtkEditable *editable,
816 static void date_format_select_row (GtkWidget *date_format_list,
819 GdkEventButton *event,
820 GtkWidget *date_format);
821 static GtkWidget *date_format_create (GtkButton *button,
824 static void prefs_quote_colors_dialog (void);
825 static void prefs_quote_colors_dialog_create (void);
826 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
829 static void quote_color_set_dialog (GtkWidget *widget,
831 static void quote_colors_set_dialog_ok (GtkWidget *widget,
833 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
835 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
838 static void set_button_bg_color (GtkWidget *widget,
840 static void prefs_enable_message_color_toggled (void);
841 static void prefs_recycle_colors_toggled (GtkWidget *widget);
843 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
845 static void prefs_font_selection_key_pressed (GtkWidget *widget,
848 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
850 static void prefs_keybind_select (void);
851 static gint prefs_keybind_deleted (GtkWidget *widget,
854 static void prefs_keybind_key_pressed (GtkWidget *widget,
857 static void prefs_keybind_cancel (void);
858 static void prefs_keybind_apply_clicked (GtkWidget *widget);
860 static gint prefs_common_deleted (GtkWidget *widget,
863 static void prefs_common_key_pressed (GtkWidget *widget,
866 static void prefs_common_ok (void);
867 static void prefs_common_apply (void);
868 static void prefs_common_cancel (void);
870 void prefs_common_init() {
871 prefs_common.fltlist = NULL;
872 prefs_common.disphdr_list = NULL;
875 void prefs_common_read_config(void)
879 gchar buf[PREFSBUFSIZE];
881 prefs_read_config(param, "Common", COMMON_RC);
883 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
885 if ((fp = fopen(path, "rb")) == NULL) {
886 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
891 while (fgets(buf, sizeof(buf), fp) != NULL) {
893 if (buf[0] == '\0') continue;
894 prefs_common.mime_open_cmd_history =
895 add_history(prefs_common.mime_open_cmd_history, buf);
899 prefs_common.mime_open_cmd_history =
900 g_list_reverse(prefs_common.mime_open_cmd_history);
903 void prefs_common_save_config(void)
909 prefs_save_config(param, "Common", COMMON_RC);
911 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
913 if ((fp = fopen(path, "wb")) == NULL) {
914 FILE_OP_ERROR(path, "fopen");
919 for (cur = prefs_common.mime_open_cmd_history;
920 cur != NULL; cur = cur->next) {
921 fputs((gchar *)cur->data, fp);
929 void prefs_common_open(void)
931 if (prefs_rc_is_readonly(COMMON_RC))
936 if (!dialog.window) {
937 prefs_common_create();
940 manage_window_set_transient(GTK_WINDOW(dialog.window));
941 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
942 gtk_widget_grab_focus(dialog.ok_btn);
944 prefs_set_dialog(param);
946 gtk_widget_show(dialog.window);
949 static void prefs_common_create(void)
953 debug_print(_("Creating common preferences window...\n"));
955 prefs_dialog_create(&dialog);
956 gtk_window_set_title (GTK_WINDOW(dialog.window),
957 _("Common Preferences"));
958 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
959 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
960 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
961 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
962 MANAGE_WINDOW_SIGNALS_CONNECT(dialog.window);
964 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
965 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
966 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
967 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
968 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
969 GTK_SIGNAL_FUNC(prefs_common_cancel),
970 GTK_OBJECT(dialog.window));
972 /* create all widgets on notebook */
973 prefs_receive_create();
974 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
976 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
977 prefs_compose_create();
978 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
980 prefs_spelling_create();
981 SET_NOTEBOOK_LABEL(dialog.notebook, _("Spell Checker"), page++);
983 prefs_quote_create();
984 SET_NOTEBOOK_LABEL(dialog.notebook, _("Quote"), page++);
985 prefs_display_create();
986 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
987 prefs_message_create();
988 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
990 prefs_privacy_create();
991 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
993 prefs_interface_create();
994 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
995 prefs_other_create();
996 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
998 gtk_widget_show_all(dialog.window);
1001 static void prefs_receive_create(void)
1005 GtkWidget *frame_incext;
1006 GtkWidget *checkbtn_incext;
1008 GtkWidget *label_incext;
1009 GtkWidget *entry_incext;
1010 /* GtkWidget *button_incext; */
1012 GtkWidget *frame_spool;
1013 GtkWidget *checkbtn_local;
1014 GtkWidget *checkbtn_filter_on_inc;
1015 GtkWidget *label_spool;
1016 GtkWidget *entry_spool;
1018 GtkWidget *hbox_autochk;
1019 GtkWidget *checkbtn_autochk;
1020 GtkWidget *label_autochk1;
1021 GtkObject *spinbtn_autochk_adj;
1022 GtkWidget *spinbtn_autochk;
1023 GtkWidget *label_autochk2;
1024 GtkWidget *checkbtn_chkonstartup;
1025 GtkWidget *checkbtn_scan_after_inc;
1028 GtkWidget *frame_newmail;
1029 GtkWidget *hbox_newmail_notify;
1030 GtkWidget *checkbtn_newmail_auto;
1031 GtkWidget *checkbtn_newmail_manu;
1032 GtkWidget *entry_newmail_notify_cmd;
1033 GtkWidget *label_newmail_notify_cmd;
1035 GtkWidget *frame_news;
1036 GtkWidget *label_maxarticle;
1037 GtkWidget *spinbtn_maxarticle;
1038 GtkObject *spinbtn_maxarticle_adj;
1040 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1041 gtk_widget_show (vbox1);
1042 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1043 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1045 PACK_FRAME(vbox1, frame_incext, _("External program"));
1047 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1048 gtk_widget_show (vbox2);
1049 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
1050 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1052 /* Use of external incorporation program */
1053 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
1054 _("Use external program for incorporation"));
1056 hbox = gtk_hbox_new (FALSE, 8);
1057 gtk_widget_show (hbox);
1058 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1059 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
1061 label_incext = gtk_label_new (_("Command"));
1062 gtk_widget_show (label_incext);
1063 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
1065 entry_incext = gtk_entry_new ();
1066 gtk_widget_show (entry_incext);
1067 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
1070 button_incext = gtk_button_new_with_label ("... ");
1071 gtk_widget_show (button_incext);
1072 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1075 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
1077 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1078 gtk_widget_show (vbox2);
1079 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
1080 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1082 hbox = gtk_hbox_new (FALSE, 32);
1083 gtk_widget_show (hbox);
1084 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1086 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
1087 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
1088 _("Filter on incorporation"));
1089 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
1091 hbox = gtk_hbox_new (FALSE, 8);
1092 gtk_widget_show (hbox);
1093 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1094 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
1096 label_spool = gtk_label_new (_("Spool directory"));
1097 gtk_widget_show (label_spool);
1098 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
1100 entry_spool = gtk_entry_new ();
1101 gtk_widget_show (entry_spool);
1102 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
1104 vbox2 = gtk_vbox_new (FALSE, 0);
1105 gtk_widget_show (vbox2);
1106 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1109 hbox_autochk = gtk_hbox_new (FALSE, 8);
1110 gtk_widget_show (hbox_autochk);
1111 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1113 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1114 _("Auto-check new mail"));
1116 label_autochk1 = gtk_label_new (_("every"));
1117 gtk_widget_show (label_autochk1);
1118 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1120 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1121 spinbtn_autochk = gtk_spin_button_new
1122 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1123 gtk_widget_show (spinbtn_autochk);
1124 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1125 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
1126 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1128 label_autochk2 = gtk_label_new (_("minute(s)"));
1129 gtk_widget_show (label_autochk2);
1130 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1132 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1133 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1134 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1136 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1137 _("Check new mail on startup"));
1138 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1139 _("Update all local folders after incorporation"));
1142 PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1144 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1145 gtk_widget_show (vbox2);
1146 gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1147 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1149 hbox = gtk_hbox_new (TRUE, 8);
1150 gtk_widget_show (hbox);
1151 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1152 _("after autochecking"));
1153 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1154 _("after manual checking"));
1155 gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1156 gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_auto), "toggled",
1157 GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1159 gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_manu), "toggled",
1160 GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1163 hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1164 gtk_widget_show (hbox);
1165 gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE,
1168 label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1169 "(use %d as number of new "
1171 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd),
1173 gtk_widget_show (label_newmail_notify_cmd);
1174 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1175 label_newmail_notify_cmd, FALSE, FALSE, 0);
1177 entry_newmail_notify_cmd = gtk_entry_new ();
1178 gtk_widget_show (entry_newmail_notify_cmd);
1179 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1180 entry_newmail_notify_cmd, TRUE, TRUE, 0);
1182 gtk_widget_set_sensitive(hbox_newmail_notify,
1183 prefs_common.newmail_notify_auto ||
1184 prefs_common.newmail_notify_manu);
1186 PACK_FRAME(vbox1, frame_news, _("News"));
1188 hbox = gtk_hbox_new (FALSE, 8);
1189 gtk_widget_show (hbox);
1190 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
1191 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
1193 label_maxarticle = gtk_label_new
1194 (_("Maximum number of articles to download\n"
1195 "(unlimited if 0 is specified)"));
1196 gtk_widget_show (label_maxarticle);
1197 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
1198 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
1200 spinbtn_maxarticle_adj =
1201 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
1202 spinbtn_maxarticle = gtk_spin_button_new
1203 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
1204 gtk_widget_show (spinbtn_maxarticle);
1205 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
1207 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
1208 gtk_spin_button_set_numeric
1209 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
1211 receive.checkbtn_incext = checkbtn_incext;
1212 receive.entry_incext = entry_incext;
1213 /* receive.button_incext = button_incext; */
1215 receive.checkbtn_local = checkbtn_local;
1216 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
1217 receive.entry_spool = entry_spool;
1219 receive.checkbtn_autochk = checkbtn_autochk;
1220 receive.spinbtn_autochk = spinbtn_autochk;
1221 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1223 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1224 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1227 receive.checkbtn_newmail_auto = checkbtn_newmail_auto;
1228 receive.checkbtn_newmail_manu = checkbtn_newmail_manu;
1229 receive.hbox_newmail_notify = hbox_newmail_notify;
1230 receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1232 receive.spinbtn_maxarticle = spinbtn_maxarticle;
1233 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
1236 static void prefs_send_create(void)
1240 GtkWidget *frame_extsend;
1241 GtkWidget *vbox_extsend;
1242 GtkWidget *checkbtn_extsend;
1244 GtkWidget *label_extsend;
1245 GtkWidget *entry_extsend;
1246 /* GtkWidget *button_extsend; */
1247 GtkWidget *checkbtn_savemsg;
1248 GtkWidget *checkbtn_queuemsg;
1249 GtkWidget *label_outcharset;
1251 GtkWidget *optmenu_menu;
1252 GtkWidget *menuitem;
1253 GtkWidget *label_charset_desc;
1255 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1256 gtk_widget_show (vbox1);
1257 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1258 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1260 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1262 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1263 gtk_widget_show (vbox_extsend);
1264 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1265 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1267 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1268 _("Use external program for sending"));
1270 hbox1 = gtk_hbox_new (FALSE, 8);
1271 gtk_widget_show (hbox1);
1272 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1273 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1275 label_extsend = gtk_label_new (_("Command"));
1276 gtk_widget_show (label_extsend);
1277 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1279 entry_extsend = gtk_entry_new ();
1280 gtk_widget_show (entry_extsend);
1281 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1284 button_extsend = gtk_button_new_with_label ("... ");
1285 gtk_widget_show (button_extsend);
1286 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1289 vbox2 = gtk_vbox_new (FALSE, 0);
1290 gtk_widget_show (vbox2);
1291 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1293 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1294 _("Save sent messages to Sent"));
1295 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1296 _("Queue messages that fail to send"));
1298 hbox1 = gtk_hbox_new (FALSE, 8);
1299 gtk_widget_show (hbox1);
1300 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1302 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1303 gtk_widget_show (label_outcharset);
1304 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1306 optmenu = gtk_option_menu_new ();
1307 gtk_widget_show (optmenu);
1308 gtk_box_pack_start (GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1310 optmenu_menu = gtk_menu_new ();
1312 #define SET_MENUITEM(str, charset) \
1314 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1317 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1318 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1320 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1322 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1323 SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1324 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1325 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1326 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1327 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1328 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1330 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1332 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1334 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
1335 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1337 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1339 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1340 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1342 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1343 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1345 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1346 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1348 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1349 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1350 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1352 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1354 hbox1 = gtk_hbox_new (FALSE, 8);
1355 gtk_widget_show (hbox1);
1356 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1358 label_charset_desc = gtk_label_new
1359 (_("If `Automatic' is selected, the optimal encoding\n"
1360 "for the current locale will be used."));
1361 gtk_widget_show (label_charset_desc);
1362 gtk_box_pack_start (GTK_BOX (hbox1), label_charset_desc,
1364 gtk_label_set_justify(GTK_LABEL (label_charset_desc), GTK_JUSTIFY_LEFT);
1366 p_send.checkbtn_extsend = checkbtn_extsend;
1367 p_send.entry_extsend = entry_extsend;
1368 /* p_send.button_extsend = button_extsend; */
1370 p_send.checkbtn_savemsg = checkbtn_savemsg;
1371 p_send.checkbtn_queuemsg = checkbtn_queuemsg;
1373 p_send.optmenu_charset = optmenu;
1376 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1380 toggled = gtk_toggle_button_get_active
1381 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1382 gtk_toggle_button_get_active
1383 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1384 gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1388 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1391 gchar *dict_fullname;
1393 g_return_if_fail(param);
1394 g_return_if_fail(param->data);
1395 g_return_if_fail(param->widget);
1396 g_return_if_fail(*(param->widget));
1398 dict_fullname = gtkpspell_get_dictionary_menu_active_item
1399 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1400 str = *((gchar **) param->data);
1403 *((gchar **) param->data) = dict_fullname;
1406 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1409 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1411 GtkWidget *menuitem;
1415 g_return_if_fail(optmenu != NULL);
1416 g_return_if_fail(pparam->data != NULL);
1418 if (*(gchar **) pparam->data) {
1419 menu = gtk_option_menu_get_menu(optmenu);
1420 for (cur = GTK_MENU_SHELL(menu)->children;
1421 cur != NULL; cur = cur->next) {
1422 menuitem = GTK_WIDGET(cur->data);
1423 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem),
1425 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1426 gtk_option_menu_set_history(optmenu, n);
1433 gtk_option_menu_set_history(optmenu, 0);
1434 prefs_dictionary_set_data_from_optmenu(pparam);
1437 static void prefs_speller_sugmode_set_data_from_optmenu(PrefParam *param)
1440 g_return_if_fail(param);
1441 g_return_if_fail(param->data);
1442 g_return_if_fail(param->widget);
1443 g_return_if_fail(*(param->widget));
1445 sugmode = gtkpspell_get_sugmode_from_option_menu
1446 (GTK_OPTION_MENU(*(param->widget)));
1447 *((gint *) param->data) = sugmode;
1450 static void prefs_speller_sugmode_set_optmenu(PrefParam *pparam)
1452 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1455 g_return_if_fail(optmenu != NULL);
1456 g_return_if_fail(pparam->data != NULL);
1458 sugmode = *(gint *) pparam->data;
1459 gtkpspell_sugmode_option_menu_set(optmenu, sugmode);
1463 static void prefs_spelling_checkbtn_enable_pspell_toggle_cb
1469 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1471 gtk_widget_set_sensitive(spelling.entry_pspell_path, toggled);
1472 gtk_widget_set_sensitive(spelling.optmenu_dictionary, toggled);
1473 gtk_widget_set_sensitive(spelling.optmenu_sugmode, toggled);
1474 gtk_widget_set_sensitive(spelling.btn_pspell_path, toggled);
1475 gtk_widget_set_sensitive(spelling.misspelled_btn, toggled);
1476 gtk_widget_set_sensitive(spelling.checkbtn_use_alternate, toggled);
1477 gtk_widget_set_sensitive(spelling.checkbtn_check_while_typing, toggled);
1480 static void prefs_spelling_btn_pspell_path_clicked_cb(GtkWidget *widget,
1483 gchar *file_path, *tmp;
1484 GtkWidget *new_menu;
1486 file_path = filesel_select_file(_("Select dictionaries location"),
1487 prefs_common.pspell_path);
1488 if (file_path == NULL) {
1492 tmp=g_dirname(file_path);
1494 if (prefs_common.pspell_path)
1495 g_free(prefs_common.pspell_path);
1496 prefs_common.pspell_path = g_strdup_printf("%s%s",tmp,
1499 new_menu = gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path);
1500 gtk_option_menu_set_menu(GTK_OPTION_MENU(spelling.optmenu_dictionary),
1503 gtk_entry_set_text(GTK_ENTRY(spelling.entry_pspell_path),
1504 prefs_common.pspell_path);
1505 /* select first one */
1506 gtk_option_menu_set_history(GTK_OPTION_MENU(
1507 spelling.optmenu_dictionary), 0);
1509 if (prefs_common.dictionary)
1510 g_free(prefs_common.dictionary);
1512 prefs_common.dictionary =
1513 gtkpspell_get_dictionary_menu_active_item(
1514 gtk_option_menu_get_menu(
1516 spelling.optmenu_dictionary)));
1522 static void prefs_spelling_create()
1525 GtkWidget *frame_spell;
1526 GtkWidget *vbox_spell;
1527 GtkWidget *hbox_pspell_path;
1528 GtkWidget *checkbtn_enable_pspell;
1529 GtkWidget *label_pspell_path;
1530 GtkWidget *entry_pspell_path;
1531 GtkWidget *btn_pspell_path;
1532 GtkWidget *spell_table;
1533 GtkWidget *label_dictionary;
1534 GtkWidget *optmenu_dictionary;
1535 GtkWidget *sugmode_label;
1536 GtkWidget *sugmode_optmenu;
1537 GtkWidget *checkbtn_use_alternate;
1538 GtkWidget *help_label;
1539 GtkWidget *checkbtn_check_while_typing;
1540 GtkWidget *color_label;
1541 GtkWidget *col_align;
1543 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1544 gtk_widget_show (vbox1);
1545 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1546 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1548 /* spell checker defaults */
1549 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1550 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1551 gtk_widget_show (vbox_spell);
1552 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1553 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1555 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_pspell,
1556 _("Enable spell checker (EXPERIMENTAL)"));
1558 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_pspell), "toggled",
1559 GTK_SIGNAL_FUNC(prefs_spelling_checkbtn_enable_pspell_toggle_cb),
1562 /* Check while typing */
1563 PACK_CHECK_BUTTON(vbox_spell, checkbtn_check_while_typing,
1564 _("Check while typing"));
1566 PACK_CHECK_BUTTON(vbox_spell, checkbtn_use_alternate,
1567 _("Enable alternate dictionary"));
1569 help_label = gtk_label_new(_("Enabling alternate dictionary makes switching\nwith the last used dictionary faster."));
1570 gtk_widget_show(help_label);
1571 gtk_box_pack_start(GTK_BOX(vbox_spell), help_label, FALSE, TRUE, 0);
1573 spell_table = gtk_table_new(4, 3, FALSE);
1574 gtk_container_set_border_width (GTK_CONTAINER (spell_table), VSPACING);
1575 gtk_table_set_row_spacings(GTK_TABLE(spell_table), 8);
1576 gtk_table_set_col_spacings(GTK_TABLE(spell_table), 8);
1578 gtk_box_pack_start(GTK_BOX(vbox_spell), spell_table, TRUE, TRUE, 0);
1580 label_pspell_path = gtk_label_new (_("Dictionaries path:"));
1581 gtk_misc_set_alignment(GTK_MISC(label_pspell_path), 1.0, 0.5);
1582 gtk_widget_show(label_pspell_path);
1583 gtk_table_attach (GTK_TABLE (spell_table), label_pspell_path, 0, 1, 0,
1584 1, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1586 hbox_pspell_path = gtk_hbox_new (FALSE, 8);
1587 gtk_table_attach (GTK_TABLE (spell_table), hbox_pspell_path, 1, 2, 0,
1588 1, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1589 gtk_widget_show(hbox_pspell_path);
1591 entry_pspell_path = gtk_entry_new();
1592 gtk_widget_show(entry_pspell_path);
1593 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), entry_pspell_path, TRUE,
1596 gtk_widget_set_sensitive(entry_pspell_path, prefs_common.enable_pspell);
1598 btn_pspell_path = gtk_button_new_with_label(" ... ");
1599 gtk_widget_show(btn_pspell_path);
1600 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), btn_pspell_path, FALSE, FALSE, 0);
1601 gtk_widget_set_sensitive(btn_pspell_path, prefs_common.enable_pspell);
1603 gtk_signal_connect(GTK_OBJECT(btn_pspell_path), "clicked",
1604 GTK_SIGNAL_FUNC(prefs_spelling_btn_pspell_path_clicked_cb),
1607 label_dictionary = gtk_label_new(_("Default dictionary:"));
1608 gtk_misc_set_alignment(GTK_MISC(label_dictionary), 1.0, 0.5);
1609 gtk_widget_show(label_dictionary);
1610 gtk_table_attach (GTK_TABLE (spell_table), label_dictionary, 0, 1, 1, 2,
1611 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1613 optmenu_dictionary = gtk_option_menu_new();
1614 gtk_widget_show(optmenu_dictionary);
1615 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1616 gtkpspell_dictionary_option_menu_new(
1617 prefs_common.pspell_path));
1618 gtk_table_attach (GTK_TABLE (spell_table), optmenu_dictionary, 1, 2, 1,
1619 2, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1620 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_pspell);
1622 /* Suggestion mode */
1623 sugmode_label = gtk_label_new(_("Default suggestion mode"));
1624 gtk_misc_set_alignment(GTK_MISC(sugmode_label), 1.0, 0.5);
1625 gtk_widget_show(sugmode_label);
1626 gtk_table_attach(GTK_TABLE (spell_table), sugmode_label, 0, 1, 2, 3,
1627 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1629 sugmode_optmenu = gtk_option_menu_new();
1630 gtk_widget_show(sugmode_optmenu);
1631 gtk_option_menu_set_menu(GTK_OPTION_MENU(sugmode_optmenu),
1632 gtkpspell_sugmode_option_menu_new(prefs_common.pspell_sugmode));
1633 gtk_table_attach(GTK_TABLE(spell_table), sugmode_optmenu, 1, 2, 2, 3,
1634 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1635 gtk_widget_set_sensitive(sugmode_optmenu, prefs_common.enable_pspell);
1638 color_label = gtk_label_new(_("Misspelled word color:"));
1639 gtk_misc_set_alignment(GTK_MISC(color_label), 1.0, 0.5);
1640 gtk_table_attach (GTK_TABLE (spell_table), color_label, 0, 1, 3, 4,
1641 GTK_FILL, GTK_SHRINK, 0, 0);
1642 gtk_widget_show(color_label);
1644 col_align = gtk_alignment_new(0.0, 0.5, 0, 0);
1645 gtk_widget_show(col_align);
1646 gtk_table_attach (GTK_TABLE (spell_table), col_align, 1, 2, 3, 4,
1647 GTK_FILL, GTK_SHRINK, 0, 0);
1649 spelling.misspelled_btn = gtk_button_new_with_label ("");
1650 set_button_bg_color(spelling.misspelled_btn,
1651 prefs_common.misspelled_col);
1652 gtk_widget_set_usize (spelling.misspelled_btn, 30, 20);
1653 gtk_widget_set_sensitive(spelling.misspelled_btn, prefs_common.enable_pspell);
1654 gtk_signal_connect (GTK_OBJECT (spelling.misspelled_btn), "clicked",
1655 GTK_SIGNAL_FUNC(quote_color_set_dialog), "Misspelled word");
1656 gtk_container_add(GTK_CONTAINER(col_align), spelling.misspelled_btn);
1659 spelling.checkbtn_enable_pspell = checkbtn_enable_pspell;
1660 spelling.entry_pspell_path = entry_pspell_path;
1661 spelling.btn_pspell_path = btn_pspell_path;
1662 spelling.optmenu_dictionary = optmenu_dictionary;
1663 spelling.optmenu_sugmode = sugmode_optmenu;
1664 spelling.checkbtn_use_alternate = checkbtn_use_alternate;
1665 spelling.checkbtn_check_while_typing = checkbtn_check_while_typing;
1671 static void prefs_compose_create(void)
1677 GtkWidget *frame_sig;
1678 GtkWidget *vbox_sig;
1679 GtkWidget *checkbtn_autosig;
1680 GtkWidget *label_sigsep;
1681 GtkWidget *entry_sigsep;
1683 GtkWidget *checkbtn_autoextedit;
1685 GtkWidget *frame_autosel;
1686 GtkWidget *hbox_autosel;
1687 GtkWidget *checkbtn_reply_account_autosel;
1688 GtkWidget *checkbtn_forward_account_autosel;
1689 GtkWidget *checkbtn_reedit_account_autosel;
1691 GtkWidget *hbox_undolevel;
1692 GtkWidget *label_undolevel;
1693 GtkObject *spinbtn_undolevel_adj;
1694 GtkWidget *spinbtn_undolevel;
1696 GtkWidget *vbox_linewrap;
1701 GtkWidget *label_linewrap;
1702 GtkObject *spinbtn_linewrap_adj;
1703 GtkWidget *spinbtn_linewrap;
1704 GtkWidget *checkbtn_wrapquote;
1705 GtkWidget *checkbtn_autowrap;
1706 GtkWidget *checkbtn_wrapatsend;
1708 GtkWidget *checkbtn_forward_as_attachment;
1709 GtkWidget *checkbtn_redirect_keep_from;
1710 GtkWidget *checkbtn_smart_wrapping;
1711 GtkWidget *checkbtn_block_cursor;
1712 GtkWidget *frame_msgwrap;
1714 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1715 gtk_widget_show (vbox1);
1716 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1717 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1719 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1721 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1722 gtk_widget_show (vbox_sig);
1723 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1724 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1726 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1727 _("Insert signature automatically"));
1729 hbox1 = gtk_hbox_new (FALSE, 8);
1730 gtk_widget_show (hbox1);
1731 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1732 label_sigsep = gtk_label_new (_("Signature separator"));
1733 gtk_widget_show (label_sigsep);
1734 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1736 entry_sigsep = gtk_entry_new ();
1737 gtk_widget_show (entry_sigsep);
1738 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1740 gtk_widget_set_usize (entry_sigsep, 64, -1);
1742 /* Account autoselection */
1743 PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1745 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1746 gtk_widget_show (hbox_autosel);
1747 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1748 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1750 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1751 _("when replying"));
1752 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1753 _("when forwarding"));
1754 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1755 _("when re-editing"));
1757 vbox2 = gtk_vbox_new (FALSE, 0);
1758 gtk_widget_show (vbox2);
1759 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1761 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1762 _("Automatically launch the external editor"));
1764 hbox5 = gtk_hbox_new (FALSE, 8);
1765 gtk_widget_show (hbox5);
1766 gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1768 PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1769 _("Forward as attachment"));
1771 PACK_CHECK_BUTTON (hbox5, checkbtn_block_cursor,
1774 PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1775 _("Keep the original 'From' header when redirecting"));
1777 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1778 gtk_widget_show (hbox_undolevel);
1779 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1781 label_undolevel = gtk_label_new (_("Undo level"));
1782 gtk_widget_show (label_undolevel);
1783 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1785 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1786 spinbtn_undolevel = gtk_spin_button_new
1787 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1788 gtk_widget_show (spinbtn_undolevel);
1789 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1790 gtk_widget_set_usize (spinbtn_undolevel, 64, -1);
1791 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1794 PACK_FRAME(vbox1, frame_msgwrap, _("Message wrapping"));
1796 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1797 gtk_widget_show (vbox_linewrap);
1798 gtk_container_add (GTK_CONTAINER (frame_msgwrap), vbox_linewrap);
1799 gtk_container_set_border_width (GTK_CONTAINER (vbox_linewrap), 8);
1801 hbox3 = gtk_hbox_new (FALSE, 8);
1802 gtk_widget_show (hbox3);
1803 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1806 label_linewrap = gtk_label_new (_("Wrap messages at"));
1807 gtk_widget_show (label_linewrap);
1808 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1810 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1811 spinbtn_linewrap = gtk_spin_button_new
1812 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1813 gtk_widget_show (spinbtn_linewrap);
1814 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1815 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1816 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1818 label_linewrap = gtk_label_new (_("characters"));
1819 gtk_widget_show (label_linewrap);
1820 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1822 hbox4 = gtk_hbox_new (FALSE, VSPACING);
1823 gtk_widget_show (hbox4);
1824 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1826 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1828 PACK_CHECK_BUTTON (hbox4, checkbtn_autowrap, _("Wrap on input"));
1831 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1833 PACK_CHECK_BUTTON (vbox_linewrap, checkbtn_smart_wrapping,
1834 _("Smart wrapping (EXPERIMENTAL)"));
1837 compose.checkbtn_quote = checkbtn_quote;
1838 compose.entry_quotemark = entry_quotemark;
1839 compose.text_quotefmt = text_quotefmt;
1841 compose.checkbtn_autosig = checkbtn_autosig;
1842 compose.entry_sigsep = entry_sigsep;
1844 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1846 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1847 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1848 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1850 compose.spinbtn_undolevel = spinbtn_undolevel;
1851 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1853 compose.spinbtn_linewrap = spinbtn_linewrap;
1854 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1855 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1856 compose.checkbtn_autowrap = checkbtn_autowrap;
1857 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1859 compose.checkbtn_forward_as_attachment =
1860 checkbtn_forward_as_attachment;
1861 compose.checkbtn_redirect_keep_from =
1862 checkbtn_redirect_keep_from;
1863 compose.checkbtn_smart_wrapping =
1864 checkbtn_smart_wrapping;
1865 compose.checkbtn_block_cursor =
1866 checkbtn_block_cursor;
1870 static void prefs_quote_create(void)
1873 GtkWidget *frame_quote;
1874 GtkWidget *vbox_quote;
1877 GtkWidget *label_quotemark;
1878 GtkWidget *entry_quotemark;
1879 GtkWidget *scrolledwin_quotefmt;
1880 GtkWidget *text_quotefmt;
1882 GtkWidget *entry_fw_quotemark;
1883 GtkWidget *text_fw_quotefmt;
1885 GtkWidget *entry_quote_chars;
1886 GtkWidget *label_quote_chars;
1888 GtkWidget *btn_quotedesc;
1890 GtkWidget *checkbtn_reply_with_quote;
1892 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1893 gtk_widget_show (vbox1);
1894 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1895 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1899 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1901 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1903 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1904 gtk_widget_show (vbox_quote);
1905 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1906 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1908 hbox1 = gtk_hbox_new (FALSE, 32);
1909 gtk_widget_show (hbox1);
1910 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1912 hbox2 = gtk_hbox_new (FALSE, 8);
1913 gtk_widget_show (hbox2);
1914 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1916 label_quotemark = gtk_label_new (_("Quotation mark"));
1917 gtk_widget_show (label_quotemark);
1918 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1920 entry_quotemark = gtk_entry_new ();
1921 gtk_widget_show (entry_quotemark);
1922 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1923 gtk_widget_set_usize (entry_quotemark, 64, -1);
1925 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1926 gtk_widget_show (scrolledwin_quotefmt);
1927 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1928 gtk_scrolled_window_set_policy
1929 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1930 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1932 text_quotefmt = gtk_text_new (NULL, NULL);
1933 gtk_widget_show (text_quotefmt);
1934 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1935 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1936 gtk_widget_set_usize(text_quotefmt, -1, 60);
1940 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1942 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1943 gtk_widget_show (vbox_quote);
1944 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1945 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1947 hbox1 = gtk_hbox_new (FALSE, 32);
1948 gtk_widget_show (hbox1);
1949 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1951 hbox2 = gtk_hbox_new (FALSE, 8);
1952 gtk_widget_show (hbox2);
1953 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1955 label_quotemark = gtk_label_new (_("Quotation mark"));
1956 gtk_widget_show (label_quotemark);
1957 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1959 entry_fw_quotemark = gtk_entry_new ();
1960 gtk_widget_show (entry_fw_quotemark);
1961 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1963 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
1965 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1966 gtk_widget_show (scrolledwin_quotefmt);
1967 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1968 gtk_scrolled_window_set_policy
1969 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1970 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1972 text_fw_quotefmt = gtk_text_new (NULL, NULL);
1973 gtk_widget_show (text_fw_quotefmt);
1974 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1976 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
1977 gtk_widget_set_usize(text_fw_quotefmt, -1, 60);
1979 hbox1 = gtk_hbox_new (FALSE, 32);
1980 gtk_widget_show (hbox1);
1981 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1984 gtk_button_new_with_label (_(" Description of symbols "));
1985 gtk_widget_show (btn_quotedesc);
1986 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1987 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1988 GTK_SIGNAL_FUNC(quote_fmt_quote_description), NULL);
1992 PACK_FRAME (vbox1, frame_quote, _("Quoting characters"));
1994 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1995 gtk_widget_show (vbox_quote);
1996 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1997 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1999 hbox1 = gtk_hbox_new (FALSE, 32);
2000 gtk_widget_show (hbox1);
2001 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2003 hbox2 = gtk_hbox_new (FALSE, 8);
2004 gtk_widget_show (hbox2);
2005 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
2007 label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
2008 gtk_widget_show (label_quote_chars);
2009 gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
2011 entry_quote_chars = gtk_entry_new ();
2012 gtk_widget_show (entry_quote_chars);
2013 gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
2015 gtk_widget_set_usize (entry_quote_chars, 64, -1);
2018 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
2019 quote.entry_quotemark = entry_quotemark;
2020 quote.text_quotefmt = text_quotefmt;
2021 quote.entry_fw_quotemark = entry_fw_quotemark;
2022 quote.text_fw_quotefmt = text_fw_quotefmt;
2023 quote.entry_quote_chars = entry_quote_chars;
2026 static void prefs_display_create(void)
2029 GtkWidget *frame_font;
2031 GtkWidget *label_textfont;
2032 GtkWidget *entry_textfont;
2033 GtkWidget *button_textfont;
2034 GtkWidget *chkbtn_display_img;
2035 GtkWidget *chkbtn_transhdr;
2036 GtkWidget *chkbtn_folder_unread;
2038 GtkWidget *label_ng_abbrev;
2039 GtkWidget *spinbtn_ng_abbrev_len;
2040 GtkObject *spinbtn_ng_abbrev_len_adj;
2041 GtkWidget *frame_summary;
2043 GtkWidget *chkbtn_swapfrom;
2044 GtkWidget *chkbtn_hscrollbar;
2045 GtkWidget *chkbtn_useaddrbook;
2046 GtkWidget *chkbtn_expand_thread;
2047 GtkWidget *chkbtn_bold_unread;
2049 GtkWidget *label_datefmt;
2050 GtkWidget *button_datefmt;
2051 GtkWidget *entry_datefmt;
2052 GtkWidget *button_dispitem;
2053 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
2055 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2056 gtk_widget_show (vbox1);
2057 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2058 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2060 PACK_FRAME(vbox1, frame_font, _("Font"));
2062 table1 = gtk_table_new (4, 3, FALSE);
2064 gtk_widget_show (table1);
2065 gtk_container_add (GTK_CONTAINER (frame_font), table1);
2066 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
2067 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
2068 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
2070 label_textfont = gtk_label_new (_("Text"));
2071 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
2072 gtk_widget_show (label_textfont);
2073 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
2074 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2076 entry_textfont = gtk_entry_new ();
2077 gtk_widget_show (entry_textfont);
2078 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
2079 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2081 button_textfont = gtk_button_new_with_label (" ... ");
2083 gtk_widget_show (button_textfont);
2084 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
2086 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
2087 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
2089 tmplabel = gtk_label_new (_("Small"));
2090 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2091 gtk_widget_show (tmplabel);
2092 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
2093 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2095 tmpentry = gtk_entry_new ();
2096 gtk_widget_show (tmpentry);
2097 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
2098 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2100 tmpbutton = gtk_button_new_with_label (" ... ");
2101 gtk_widget_show (tmpbutton);
2102 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
2104 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2105 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2106 display.entry_smallfont = tmpentry;
2108 tmplabel = gtk_label_new (_("Normal"));
2109 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2110 gtk_widget_show (tmplabel);
2111 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
2112 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2114 tmpentry = gtk_entry_new ();
2115 gtk_widget_show (tmpentry);
2116 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
2117 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2119 tmpbutton = gtk_button_new_with_label (" ... ");
2120 gtk_widget_show (tmpbutton);
2121 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
2123 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2124 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2125 display.entry_normalfont = tmpentry;
2127 tmplabel = gtk_label_new (_("Bold"));
2128 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2129 gtk_widget_show (tmplabel);
2130 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
2131 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2133 tmpentry = gtk_entry_new ();
2134 gtk_widget_show (tmpentry);
2135 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
2136 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2138 tmpbutton = gtk_button_new_with_label (" ... ");
2139 gtk_widget_show (tmpbutton);
2140 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
2142 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2143 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2144 display.entry_boldfont = tmpentry;
2146 vbox2 = gtk_vbox_new (FALSE, 0);
2147 gtk_widget_show (vbox2);
2148 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
2151 (vbox2, chkbtn_transhdr,
2152 _("Translate header name (such as `From:', `Subject:')"));
2154 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
2155 _("Display unread number next to folder name"));
2157 PACK_CHECK_BUTTON (vbox2, chkbtn_display_img,
2158 _("Automatically display images"));
2160 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2162 hbox1 = gtk_hbox_new (FALSE, 8);
2163 gtk_widget_show (hbox1);
2164 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2166 label_ng_abbrev = gtk_label_new
2167 (_("Abbreviate newsgroups longer than"));
2168 gtk_widget_show (label_ng_abbrev);
2169 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
2171 spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
2172 spinbtn_ng_abbrev_len = gtk_spin_button_new
2173 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
2174 gtk_widget_show (spinbtn_ng_abbrev_len);
2175 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
2177 gtk_widget_set_usize (spinbtn_ng_abbrev_len, 56, -1);
2178 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
2181 label_ng_abbrev = gtk_label_new
2183 gtk_widget_show (label_ng_abbrev);
2184 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
2186 /* ---- Summary ---- */
2188 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
2190 vbox2 = gtk_vbox_new (FALSE, 0);
2191 gtk_widget_show (vbox2);
2192 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
2193 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
2196 (vbox2, chkbtn_swapfrom,
2197 _("Display recipient on `From' column if sender is yourself"));
2199 (vbox2, chkbtn_useaddrbook,
2200 _("Display sender using address book"));
2202 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
2204 (vbox2, chkbtn_expand_thread, _("Expand threads"));
2206 (vbox2, chkbtn_bold_unread,
2207 _("Display unread messages with bold font"));
2209 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2211 hbox1 = gtk_hbox_new (FALSE, 8);
2212 gtk_widget_show (hbox1);
2213 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2215 label_datefmt = gtk_label_new (_("Date format"));
2216 gtk_widget_show (label_datefmt);
2217 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
2219 entry_datefmt = gtk_entry_new ();
2220 gtk_widget_show (entry_datefmt);
2221 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
2223 button_datefmt = gtk_button_new_with_label (" ... ");
2225 gtk_widget_show (button_datefmt);
2226 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
2227 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
2228 GTK_SIGNAL_FUNC (date_format_create), NULL);
2230 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2232 hbox1 = gtk_hbox_new (FALSE, 8);
2233 gtk_widget_show (hbox1);
2234 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2236 button_dispitem = gtk_button_new_with_label
2237 (_(" Set display item of summary... "));
2238 gtk_widget_show (button_dispitem);
2239 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
2240 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
2241 GTK_SIGNAL_FUNC (prefs_summary_column_open),
2244 display.entry_textfont = entry_textfont;
2245 display.button_textfont = button_textfont;
2247 display.chkbtn_display_img = chkbtn_display_img;
2248 display.chkbtn_transhdr = chkbtn_transhdr;
2249 display.chkbtn_folder_unread = chkbtn_folder_unread;
2250 display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
2251 display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
2253 display.chkbtn_swapfrom = chkbtn_swapfrom;
2254 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
2255 display.chkbtn_expand_thread = chkbtn_expand_thread;
2256 display.chkbtn_bold_unread = chkbtn_bold_unread;
2257 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
2258 display.entry_datefmt = entry_datefmt;
2261 static void prefs_message_create(void)
2267 GtkWidget *chkbtn_enablecol;
2268 GtkWidget *button_edit_col;
2269 GtkWidget *chkbtn_mbalnum;
2270 GtkWidget *chkbtn_disphdrpane;
2271 GtkWidget *chkbtn_disphdr;
2272 GtkWidget *button_edit_disphdr;
2273 GtkWidget *hbox_linespc;
2274 GtkWidget *label_linespc;
2275 GtkObject *spinbtn_linespc_adj;
2276 GtkWidget *spinbtn_linespc;
2277 GtkWidget *chkbtn_headspc;
2279 GtkWidget *frame_scr;
2280 GtkWidget *vbox_scr;
2281 GtkWidget *chkbtn_smoothscroll;
2282 GtkWidget *hbox_scr;
2283 GtkWidget *label_scr;
2284 GtkObject *spinbtn_scrollstep_adj;
2285 GtkWidget *spinbtn_scrollstep;
2286 GtkWidget *chkbtn_halfpage;
2288 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2289 gtk_widget_show (vbox1);
2290 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2291 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2293 hbox1 = gtk_hbox_new (FALSE, 8);
2294 gtk_widget_show (hbox1);
2295 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
2297 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
2298 _("Enable coloration of message"));
2299 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
2300 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
2303 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
2304 gtk_widget_show (button_edit_col);
2305 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
2306 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
2307 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
2309 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
2311 vbox2 = gtk_vbox_new (FALSE, 0);
2312 gtk_widget_show (vbox2);
2313 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2316 (vbox2, chkbtn_mbalnum,
2317 _("Display 2-byte alphabet and numeric with 1-byte character"));
2318 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
2319 _("Display header pane above message view"));
2321 hbox1 = gtk_hbox_new (FALSE, 8);
2322 gtk_widget_show (hbox1);
2323 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2325 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
2326 _("Display short headers on message view"));
2328 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
2329 gtk_widget_show (button_edit_disphdr);
2330 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
2332 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
2333 GTK_SIGNAL_FUNC (prefs_display_header_open),
2336 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
2338 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2340 hbox1 = gtk_hbox_new (FALSE, 32);
2341 gtk_widget_show (hbox1);
2342 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2344 hbox_linespc = gtk_hbox_new (FALSE, 8);
2345 gtk_widget_show (hbox1);
2346 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
2348 label_linespc = gtk_label_new (_("Line space"));
2349 gtk_widget_show (label_linespc);
2350 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2353 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
2354 spinbtn_linespc = gtk_spin_button_new
2355 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
2356 gtk_widget_show (spinbtn_linespc);
2357 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
2359 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
2360 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
2362 label_linespc = gtk_label_new (_("pixel(s)"));
2363 gtk_widget_show (label_linespc);
2364 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2367 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
2369 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
2371 vbox_scr = gtk_vbox_new (FALSE, 0);
2372 gtk_widget_show (vbox_scr);
2373 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
2374 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
2376 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
2378 hbox1 = gtk_hbox_new (FALSE, 32);
2379 gtk_widget_show (hbox1);
2380 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
2382 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
2384 hbox_scr = gtk_hbox_new (FALSE, 8);
2385 gtk_widget_show (hbox_scr);
2386 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
2388 label_scr = gtk_label_new (_("Step"));
2389 gtk_widget_show (label_scr);
2390 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2392 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
2393 spinbtn_scrollstep = gtk_spin_button_new
2394 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
2395 gtk_widget_show (spinbtn_scrollstep);
2396 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
2398 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
2399 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
2402 label_scr = gtk_label_new (_("pixel(s)"));
2403 gtk_widget_show (label_scr);
2404 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2406 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
2408 message.chkbtn_enablecol = chkbtn_enablecol;
2409 message.button_edit_col = button_edit_col;
2410 message.chkbtn_mbalnum = chkbtn_mbalnum;
2411 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
2412 message.chkbtn_disphdr = chkbtn_disphdr;
2413 message.spinbtn_linespc = spinbtn_linespc;
2414 message.chkbtn_headspc = chkbtn_headspc;
2416 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
2417 message.spinbtn_scrollstep = spinbtn_scrollstep;
2418 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
2419 message.chkbtn_halfpage = chkbtn_halfpage;
2423 static void prefs_privacy_create(void)
2429 GtkWidget *hbox_spc;
2431 GtkWidget *checkbtn_auto_check_signatures;
2432 GtkWidget *checkbtn_gpg_signature_popup;
2433 GtkWidget *checkbtn_store_passphrase;
2434 GtkObject *spinbtn_store_passphrase_adj;
2435 GtkWidget *spinbtn_store_passphrase;
2436 GtkWidget *checkbtn_passphrase_grab;
2437 GtkWidget *checkbtn_gpg_warning;
2439 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2440 gtk_widget_show (vbox1);
2441 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2442 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2444 vbox2 = gtk_vbox_new (FALSE, 0);
2445 gtk_widget_show (vbox2);
2446 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2448 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
2449 _("Automatically check signatures"));
2451 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
2452 _("Show signature check result in a popup window"));
2454 PACK_CHECK_BUTTON (vbox2, checkbtn_store_passphrase,
2455 _("Store passphrase in memory temporarily"));
2457 vbox3 = gtk_vbox_new (FALSE, 0);
2458 gtk_widget_show (vbox3);
2459 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2461 hbox1 = gtk_hbox_new (FALSE, 8);
2462 gtk_widget_show (hbox1);
2463 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2465 hbox_spc = gtk_hbox_new (FALSE, 0);
2466 gtk_widget_show (hbox_spc);
2467 gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
2468 gtk_widget_set_usize (hbox_spc, 12, -1);
2470 label = gtk_label_new (_("Expire after"));
2471 gtk_widget_show (label);
2472 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2474 spinbtn_store_passphrase_adj = gtk_adjustment_new (0, 0, 1440, 1, 5, 5);
2475 spinbtn_store_passphrase = gtk_spin_button_new
2476 (GTK_ADJUSTMENT (spinbtn_store_passphrase_adj), 1, 0);
2477 gtk_widget_show (spinbtn_store_passphrase);
2478 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_store_passphrase, FALSE, FALSE, 0);
2479 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_store_passphrase),
2481 gtk_widget_set_usize (spinbtn_store_passphrase, 64, -1);
2483 label = gtk_label_new (_("minute(s) "));
2484 gtk_widget_show (label);
2485 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2487 hbox1 = gtk_hbox_new (FALSE, 8);
2488 gtk_widget_show (hbox1);
2489 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2491 hbox_spc = gtk_hbox_new (FALSE, 0);
2492 gtk_widget_show (hbox_spc);
2493 gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
2494 gtk_widget_set_usize (hbox_spc, 12, -1);
2496 label = gtk_label_new (_("(Setting to '0' will store the passphrase\n"
2497 " for the whole session)"));
2498 gtk_widget_show (label);
2499 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2500 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2502 SET_TOGGLE_SENSITIVITY (checkbtn_store_passphrase, vbox3);
2505 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
2506 _("Grab input while entering a passphrase"));
2510 (vbox2, checkbtn_gpg_warning,
2511 _("Display warning on startup if GnuPG doesn't work"));
2513 hbox1 = gtk_hbox_new (FALSE, 8);
2514 gtk_widget_show (hbox1);
2515 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2517 privacy.checkbtn_auto_check_signatures
2518 = checkbtn_auto_check_signatures;
2519 privacy.checkbtn_gpg_signature_popup
2520 = checkbtn_gpg_signature_popup;
2521 privacy.checkbtn_store_passphrase = checkbtn_store_passphrase;
2522 privacy.spinbtn_store_passphrase = spinbtn_store_passphrase;
2523 privacy.spinbtn_store_passphrase_adj = spinbtn_store_passphrase_adj;
2524 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2525 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2527 #endif /* USE_GPGME */
2529 static void prefs_interface_create(void)
2534 /* GtkWidget *checkbtn_emacs; */
2535 GtkWidget *checkbtn_show_msg_with_cursor;
2536 GtkWidget *checkbtn_openunread;
2537 GtkWidget *checkbtn_openinbox;
2538 GtkWidget *checkbtn_immedexec;
2541 GtkWidget *optmenu_recvdialog;
2543 GtkWidget *menuitem;
2544 GtkWidget *checkbtn_no_recv_err_panel;
2546 GtkWidget *frame_addr;
2547 GtkWidget *vbox_addr;
2548 GtkWidget *checkbtn_addaddrbyclick;
2550 GtkWidget *button_keybind;
2553 GtkWidget *optmenu_nextunreadmsgdialog;
2554 GtkWidget *optmenu_nextunreadmsgdialog_menu;
2555 GtkWidget *nextunreadmsgdialog_menuitem;
2557 GtkWidget *frame_pixmap_theme;
2558 GtkWidget *vbox_pixmap_theme;
2559 GtkWidget *entry_pixmap_theme;
2560 GtkWidget *combo_pixmap_theme;
2561 GList *avail_pixmap_themes = NULL;
2563 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2564 gtk_widget_show (vbox1);
2565 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2566 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2568 vbox2 = gtk_vbox_new (FALSE, 0);
2569 gtk_widget_show (vbox2);
2570 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2572 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2573 _("Emulate the behavior of mouse operation of\n"
2574 "Emacs-based mailer"));
2575 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2576 GTK_JUSTIFY_LEFT); */
2579 (vbox2, checkbtn_show_msg_with_cursor,
2580 _("Open message when cursor keys are pressed on summary"));
2583 (vbox2, checkbtn_openunread,
2584 _("Open first unread message when entering a folder"));
2587 (vbox2, checkbtn_openinbox,
2588 _("Go to inbox after receiving new mail"));
2590 vbox3 = gtk_vbox_new (FALSE, 0);
2591 gtk_widget_show (vbox3);
2592 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2595 (vbox3, checkbtn_immedexec,
2596 _("Execute immediately when moving or deleting messages"));
2598 hbox1 = gtk_hbox_new (FALSE, 0);
2599 gtk_widget_show (hbox1);
2600 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2602 label = gtk_label_new
2603 (_("(Messages will be marked until execution\n"
2604 " if this is turned off)"));
2605 gtk_widget_show (label);
2606 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2607 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2609 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2611 PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
2612 _("No popup error dialog on receive error"));
2614 hbox1 = gtk_hbox_new (FALSE, 8);
2615 gtk_widget_show (hbox1);
2616 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2618 label = gtk_label_new (_("Show receive dialog"));
2619 gtk_widget_show (label);
2620 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2622 optmenu_recvdialog = gtk_option_menu_new ();
2623 gtk_widget_show (optmenu_recvdialog);
2624 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2627 menu = gtk_menu_new ();
2628 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2629 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2630 RECV_DIALOG_ACTIVE);
2631 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2633 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2635 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2637 vbox_addr = gtk_vbox_new (FALSE, 0);
2638 gtk_widget_show (vbox_addr);
2639 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2640 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2643 (vbox_addr, checkbtn_addaddrbyclick,
2644 _("Add address to destination when double-clicked"));
2646 /* Next Unread Message Dialog */
2647 hbox2 = gtk_hbox_new (FALSE, 8);
2648 gtk_widget_show (hbox2);
2649 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
2651 label = gtk_label_new (_("Show no-unread-message dialog"));
2652 gtk_widget_show (label);
2653 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
2655 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2656 gtk_widget_show (optmenu_nextunreadmsgdialog);
2657 gtk_box_pack_start (GTK_BOX (hbox2), optmenu_nextunreadmsgdialog,
2660 optmenu_nextunreadmsgdialog_menu = gtk_menu_new ();
2661 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2662 _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2663 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2664 _("Assume 'Yes'"), NEXTUNREADMSGDIALOG_ASSUME_YES);
2665 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2666 _("Assume 'No'"), NEXTUNREADMSGDIALOG_ASSUME_NO);
2668 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog),
2669 optmenu_nextunreadmsgdialog_menu);
2672 /* Receive Dialog */
2673 /* hbox = gtk_hbox_new (FALSE, 8);
2674 gtk_widget_show (hbox);
2675 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2677 label = gtk_label_new (_("Show receive Dialog"));
2678 gtk_widget_show (label);
2679 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2681 recvdialog_optmenu = gtk_option_menu_new ();
2682 gtk_widget_show (recvdialog_optmenu);
2683 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2685 recvdialog_optmenu_menu = gtk_menu_new ();
2687 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2688 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2689 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2691 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2693 hbox1 = gtk_hbox_new (FALSE, 8);
2694 gtk_widget_show (hbox1);
2695 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2697 button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
2698 gtk_widget_show (button_keybind);
2699 gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
2700 gtk_signal_connect (GTK_OBJECT (button_keybind), "clicked",
2701 GTK_SIGNAL_FUNC (prefs_keybind_select), NULL);
2703 PACK_FRAME(vbox1, frame_pixmap_theme, _("Icon theme"));
2705 vbox_pixmap_theme = gtk_vbox_new(FALSE, 0);
2706 gtk_widget_show(vbox_pixmap_theme);
2707 gtk_container_add(GTK_CONTAINER(frame_pixmap_theme), vbox_pixmap_theme);
2708 gtk_container_set_border_width(GTK_CONTAINER(vbox_pixmap_theme), 8);
2710 avail_pixmap_themes = stock_pixmap_themes_list_new();
2712 combo_pixmap_theme = gtk_combo_new ();
2713 gtk_widget_show (combo_pixmap_theme);
2714 gtk_box_pack_start (GTK_BOX (vbox_pixmap_theme), combo_pixmap_theme, TRUE, TRUE, 0);
2715 gtk_combo_set_popdown_strings(GTK_COMBO(combo_pixmap_theme), avail_pixmap_themes);
2716 entry_pixmap_theme = GTK_COMBO (combo_pixmap_theme)->entry;
2718 stock_pixmap_themes_list_free(avail_pixmap_themes);
2720 /* interface.checkbtn_emacs = checkbtn_emacs; */
2721 interface.checkbtn_show_msg_with_cursor
2722 = checkbtn_show_msg_with_cursor;
2723 interface.checkbtn_openunread = checkbtn_openunread;
2724 interface.checkbtn_openinbox = checkbtn_openinbox;
2725 interface.checkbtn_immedexec = checkbtn_immedexec;
2726 interface.optmenu_recvdialog = optmenu_recvdialog;
2727 interface.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
2728 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2729 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2730 interface.combo_pixmap_theme = combo_pixmap_theme;
2731 interface.entry_pixmap_theme = entry_pixmap_theme;
2734 static void prefs_other_create(void)
2737 GtkWidget *ext_frame;
2738 GtkWidget *ext_table;
2741 GtkWidget *uri_label;
2742 GtkWidget *uri_combo;
2743 GtkWidget *uri_entry;
2745 GtkWidget *printcmd_label;
2746 GtkWidget *printcmd_entry;
2748 GtkWidget *exteditor_label;
2749 GtkWidget *exteditor_combo;
2750 GtkWidget *exteditor_entry;
2752 GtkWidget *frame_cliplog;
2753 GtkWidget *vbox_cliplog;
2754 GtkWidget *hbox_cliplog;
2755 GtkWidget *checkbtn_cliplog;
2756 GtkWidget *loglength_label;
2757 GtkWidget *loglength_entry;
2759 GtkWidget *frame_exit;
2760 GtkWidget *vbox_exit;
2761 GtkWidget *checkbtn_confonexit;
2762 GtkWidget *checkbtn_cleanonexit;
2763 GtkWidget *checkbtn_askonclean;
2764 GtkWidget *checkbtn_warnqueued;
2766 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2767 gtk_widget_show (vbox1);
2768 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2769 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2771 PACK_FRAME(vbox1, ext_frame,
2772 _("External commands (%s will be replaced with file name / URI)"));
2774 ext_table = gtk_table_new (3, 2, FALSE);
2775 gtk_widget_show (ext_table);
2776 gtk_container_add (GTK_CONTAINER (ext_frame), ext_table);
2777 gtk_container_set_border_width (GTK_CONTAINER (ext_table), 8);
2778 gtk_table_set_row_spacings (GTK_TABLE (ext_table), VSPACING_NARROW);
2779 gtk_table_set_col_spacings (GTK_TABLE (ext_table), 8);
2781 uri_label = gtk_label_new (_("Web browser"));
2782 gtk_widget_show(uri_label);
2783 gtk_table_attach (GTK_TABLE (ext_table), uri_label, 0, 1, 0, 1,
2784 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2785 gtk_misc_set_alignment (GTK_MISC (uri_label), 1, 0.5);
2787 uri_combo = gtk_combo_new ();
2788 gtk_widget_show (uri_combo);
2789 gtk_table_attach (GTK_TABLE (ext_table), uri_combo, 1, 2, 0, 1,
2790 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2791 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2793 "mozilla -remote 'openurl(%s,new-window)'",
2794 "netscape -remote 'openURL(%s,raise)'",
2796 "gnome-moz-remote --raise --newwin '%s'",
2797 "kfmclient openURL '%s'",
2798 "opera -newwindow '%s'",
2799 "kterm -e w3m '%s'",
2800 "kterm -e lynx '%s'",
2802 uri_entry = GTK_COMBO (uri_combo)->entry;
2804 printcmd_label = gtk_label_new (_("Print"));
2805 gtk_widget_show (printcmd_label);
2806 gtk_table_attach (GTK_TABLE (ext_table), printcmd_label, 0, 1, 1, 2,
2807 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2808 gtk_misc_set_alignment (GTK_MISC (printcmd_label), 1, 0.5);
2810 printcmd_entry = gtk_entry_new ();
2811 gtk_widget_show (printcmd_entry);
2812 gtk_table_attach (GTK_TABLE (ext_table), printcmd_entry, 1, 2, 1, 2,
2813 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2815 exteditor_label = gtk_label_new (_("Editor"));
2816 gtk_widget_show (exteditor_label);
2817 gtk_table_attach (GTK_TABLE (ext_table), exteditor_label, 0, 1, 2, 3,
2818 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2819 gtk_misc_set_alignment (GTK_MISC (exteditor_label), 1, 0.5);
2821 exteditor_combo = gtk_combo_new ();
2822 gtk_widget_show (exteditor_combo);
2823 gtk_table_attach (GTK_TABLE (ext_table), exteditor_combo, 1, 2, 2, 3,
2824 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2825 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2828 "mgedit --no-fork %s",
2834 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2837 PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2839 vbox_cliplog = gtk_vbox_new (FALSE, 0);
2840 gtk_widget_show (vbox_cliplog);
2841 gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2842 gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2843 PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2844 _("Clip the log size"));
2845 hbox_cliplog = gtk_hbox_new (FALSE, 3);
2846 gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2847 gtk_widget_show (hbox_cliplog);
2849 loglength_label = gtk_label_new (_("Log window length"));
2850 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2852 gtk_widget_show (GTK_WIDGET (loglength_label));
2853 loglength_entry = gtk_entry_new ();
2854 gtk_widget_set_usize (GTK_WIDGET (loglength_entry), 64, -1);
2855 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2857 gtk_widget_show (GTK_WIDGET (loglength_entry));
2858 SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2861 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2863 vbox_exit = gtk_vbox_new (FALSE, 0);
2864 gtk_widget_show (vbox_exit);
2865 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2866 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2868 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2869 _("Confirm on exit"));
2871 hbox1 = gtk_hbox_new (FALSE, 32);
2872 gtk_widget_show (hbox1);
2873 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2875 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2876 _("Empty trash on exit"));
2877 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2878 _("Ask before emptying"));
2879 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2881 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2882 _("Warn if there are queued messages"));
2884 other.uri_combo = uri_combo;
2885 other.uri_entry = uri_entry;
2886 other.printcmd_entry = printcmd_entry;
2888 other.exteditor_combo = exteditor_combo;
2889 other.exteditor_entry = exteditor_entry;
2891 other.checkbtn_cliplog = checkbtn_cliplog;
2892 other.loglength_entry = loglength_entry;
2894 other.checkbtn_confonexit = checkbtn_confonexit;
2895 other.checkbtn_cleanonexit = checkbtn_cleanonexit;
2896 other.checkbtn_askonclean = checkbtn_askonclean;
2897 other.checkbtn_warnqueued = checkbtn_warnqueued;
2900 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2902 GtkWidget *datefmt_sample = NULL;
2905 g_return_if_fail(widget != NULL);
2906 g_return_if_fail(*widget != NULL);
2907 g_return_if_fail(display.entry_datefmt != NULL);
2909 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2910 (GTK_OBJECT(*widget), "datefmt_sample"));
2911 g_return_if_fail(datefmt_sample != NULL);
2913 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2914 g_free(prefs_common.date_format);
2915 prefs_common.date_format = text;
2916 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2918 gtk_widget_destroy(*widget);
2922 static void date_format_cancel_btn_clicked(GtkButton *button,
2925 g_return_if_fail(widget != NULL);
2926 g_return_if_fail(*widget != NULL);
2928 gtk_widget_destroy(*widget);
2932 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2935 if (event && event->keyval == GDK_Escape)
2936 date_format_cancel_btn_clicked(NULL, widget);
2939 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2940 GdkEventAny *event, GtkWidget **widget)
2942 g_return_val_if_fail(widget != NULL, FALSE);
2943 g_return_val_if_fail(*widget != NULL, FALSE);
2949 static void date_format_entry_on_change(GtkEditable *editable,
2953 struct tm *cal_time;
2957 cur_time = time(NULL);
2958 cal_time = localtime(&cur_time);
2960 text = gtk_editable_get_chars(editable, 0, -1);
2962 strftime(buffer, sizeof buffer, text, cal_time);
2964 gtk_label_set_text(example, buffer);
2967 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2968 gint column, GdkEventButton *event,
2969 GtkWidget *date_format)
2975 GtkWidget *datefmt_sample;
2977 /* only on double click */
2978 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2981 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2982 (GTK_OBJECT(date_format), "datefmt_sample"));
2984 g_return_if_fail(date_format_list != NULL);
2985 g_return_if_fail(date_format != NULL);
2986 g_return_if_fail(datefmt_sample != NULL);
2988 /* get format from clist */
2989 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2991 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2992 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2994 /* insert the format into the text entry */
2995 new_format = g_malloc(strlen(old_format) + 3);
2997 strncpy(new_format, old_format, cur_pos);
2998 new_format[cur_pos] = '\0';
2999 strcat(new_format, format);
3000 strcat(new_format, &old_format[cur_pos]);
3002 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
3003 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
3008 static GtkWidget *date_format_create(GtkButton *button, void *data)
3010 static GtkWidget *datefmt_win = NULL;
3012 GtkWidget *scrolledwindow1;
3013 GtkWidget *datefmt_clist;
3018 GtkWidget *confirm_area;
3020 GtkWidget *cancel_btn;
3021 GtkWidget *datefmt_entry;
3050 const gint TIME_FORMAT_ELEMS =
3051 sizeof time_format / sizeof time_format[0];
3053 time_format[0].txt = _("the full abbreviated weekday name");
3054 time_format[1].txt = _("the full weekday name");
3055 time_format[2].txt = _("the abbreviated month name");
3056 time_format[3].txt = _("the full month name");
3057 time_format[4].txt = _("the preferred date and time for the current locale");
3058 time_format[5].txt = _("the century number (year/100)");
3059 time_format[6].txt = _("the day of the month as a decimal number");
3060 time_format[7].txt = _("the hour as a decimal number using a 24-hour clock");
3061 time_format[8].txt = _("the hour as a decimal number using a 12-hour clock");
3062 time_format[9].txt = _("the day of the year as a decimal number");
3063 time_format[10].txt = _("the month as a decimal number");
3064 time_format[11].txt = _("the minute as a decimal number");
3065 time_format[12].txt = _("either AM or PM");
3066 time_format[13].txt = _("the second as a decimal number");
3067 time_format[14].txt = _("the day of the week as a decimal number");
3068 time_format[15].txt = _("the preferred date for the current locale");
3069 time_format[16].txt = _("the last two digits of a year");
3070 time_format[17].txt = _("the year as a decimal number");
3071 time_format[18].txt = _("the time zone or name or abbreviation");
3073 if (datefmt_win) return datefmt_win;
3075 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
3076 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
3077 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
3078 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
3079 gtk_widget_set_usize(datefmt_win, 440, 280);
3081 vbox1 = gtk_vbox_new(FALSE, 10);
3082 gtk_widget_show(vbox1);
3083 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
3085 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
3086 gtk_scrolled_window_set_policy
3087 (GTK_SCROLLED_WINDOW(scrolledwindow1),
3088 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
3089 gtk_widget_show(scrolledwindow1);
3090 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
3092 titles[0] = _("Specifier");
3093 titles[1] = _("Description");
3094 datefmt_clist = gtk_clist_new_with_titles(2, titles);
3095 gtk_widget_show(datefmt_clist);
3096 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
3097 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
3098 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
3099 GTK_SELECTION_BROWSE);
3101 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
3103 /* phoney casting necessary because of gtk... */
3104 text[0] = (gchar *)time_format[i].fmt;
3105 text[1] = (gchar *)time_format[i].txt;
3106 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
3109 table = gtk_table_new(2, 2, FALSE);
3110 gtk_widget_show(table);
3111 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
3112 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
3113 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
3115 label1 = gtk_label_new(_("Date format"));
3116 gtk_widget_show(label1);
3117 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
3119 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
3120 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
3122 datefmt_entry = gtk_entry_new_with_max_length(256);
3123 gtk_widget_show(datefmt_entry);
3124 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
3125 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3127 /* we need the "sample" entry box; add it as data so callbacks can
3128 * get the entry box */
3129 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
3132 label2 = gtk_label_new(_("Example"));
3133 gtk_widget_show(label2);
3134 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
3136 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
3137 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
3139 label3 = gtk_label_new("");
3140 gtk_widget_show(label3);
3141 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
3142 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3143 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
3144 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
3146 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
3147 &cancel_btn, _("Cancel"), NULL, NULL);
3148 gtk_widget_grab_default(ok_btn);
3149 gtk_widget_show(confirm_area);
3151 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
3153 /* set the current format */
3154 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
3155 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
3158 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3159 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
3161 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
3162 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
3164 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
3165 GTK_SIGNAL_FUNC(date_format_key_pressed),
3167 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
3168 GTK_SIGNAL_FUNC(date_format_on_delete),
3170 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
3171 GTK_SIGNAL_FUNC(date_format_entry_on_change),
3174 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
3175 GTK_SIGNAL_FUNC(date_format_select_row),
3178 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
3179 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
3181 gtk_widget_show(datefmt_win);
3182 manage_window_set_transient(GTK_WINDOW(datefmt_win));
3184 gtk_widget_grab_focus(ok_btn);
3189 void prefs_quote_colors_dialog(void)
3191 if (!quote_color_win)
3192 prefs_quote_colors_dialog_create();
3193 gtk_widget_show(quote_color_win);
3194 manage_window_set_transient(GTK_WINDOW(quote_color_win));
3197 gtk_widget_hide(quote_color_win);
3199 textview_update_message_colors();
3200 main_window_reflect_prefs_all();
3203 static void prefs_quote_colors_dialog_create(void)
3208 GtkWidget *quotelevel1_label;
3209 GtkWidget *quotelevel2_label;
3210 GtkWidget *quotelevel3_label;
3211 GtkWidget *uri_label;
3212 GtkWidget *tgt_folder_label;
3215 GtkWidget *recycle_colors_btn;
3216 GtkWidget *frame_colors;
3218 window = gtk_window_new(GTK_WINDOW_DIALOG);
3219 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
3220 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
3221 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3222 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3223 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3225 vbox = gtk_vbox_new (FALSE, VSPACING);
3226 gtk_container_add (GTK_CONTAINER (window), vbox);
3227 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
3228 PACK_FRAME(vbox, frame_colors, _("Colors"));
3230 table = gtk_table_new (4, 2, FALSE);
3231 gtk_container_add (GTK_CONTAINER (frame_colors), table);
3232 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
3233 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
3234 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
3237 color_buttons.quote_level1_btn = gtk_button_new();
3238 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
3239 0, 1, 0, 1, 0, 0, 0, 0);
3240 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
3241 gtk_container_set_border_width
3242 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
3244 color_buttons.quote_level2_btn = gtk_button_new();
3245 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
3246 0, 1, 1, 2, 0, 0, 0, 0);
3247 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
3248 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
3250 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
3251 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
3252 0, 1, 2, 3, 0, 0, 0, 0);
3253 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
3254 gtk_container_set_border_width
3255 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
3257 color_buttons.uri_btn = gtk_button_new_with_label ("");
3258 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
3259 0, 1, 3, 4, 0, 0, 0, 0);
3260 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
3261 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
3263 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
3264 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
3265 0, 1, 4, 5, 0, 0, 0, 0);
3266 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
3267 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
3269 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
3270 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
3271 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3272 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
3273 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
3275 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
3276 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
3277 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3278 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
3279 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
3281 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
3282 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
3283 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3284 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
3285 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
3287 uri_label = gtk_label_new (_("URI link"));
3288 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
3289 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3290 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
3291 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
3293 tgt_folder_label = gtk_label_new (_("Target folder"));
3294 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
3295 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3296 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
3297 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
3299 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
3300 _("Recycle quote colors"));
3302 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3303 NULL, NULL, NULL, NULL);
3304 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3306 gtk_widget_grab_default(ok_btn);
3307 MANAGE_WINDOW_SIGNALS_CONNECT(window);
3308 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3309 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3310 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3311 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
3314 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
3315 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
3316 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
3317 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
3318 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
3319 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
3320 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
3321 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
3322 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
3323 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
3324 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
3325 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
3326 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3327 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3329 /* show message button colors and recycle options */
3330 set_button_bg_color(color_buttons.quote_level1_btn,
3331 prefs_common.quote_level1_col);
3332 set_button_bg_color(color_buttons.quote_level2_btn,
3333 prefs_common.quote_level2_col);
3334 set_button_bg_color(color_buttons.quote_level3_btn,
3335 prefs_common.quote_level3_col);
3336 set_button_bg_color(color_buttons.uri_btn,
3337 prefs_common.uri_col);
3338 set_button_bg_color(color_buttons.tgt_folder_btn,
3339 prefs_common.tgt_folder_col);
3340 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
3341 prefs_common.recycle_quote_colors);
3343 gtk_widget_show_all(vbox);
3344 quote_color_win = window;
3347 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
3348 GdkEventKey *event, gpointer data)
3350 if (event && event->keyval == GDK_Escape)
3354 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
3356 gchar *type = (gchar *)data;
3357 gchar *title = NULL;
3358 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
3360 GtkColorSelectionDialog *dialog;
3362 if(g_strcasecmp(type, "LEVEL1") == 0) {
3363 title = _("Pick color for quotation level 1");
3364 rgbvalue = prefs_common.quote_level1_col;
3365 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
3366 title = _("Pick color for quotation level 2");
3367 rgbvalue = prefs_common.quote_level2_col;
3368 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
3369 title = _("Pick color for quotation level 3");
3370 rgbvalue = prefs_common.quote_level3_col;
3371 } else if(g_strcasecmp(type, "URI") == 0) {
3372 title = _("Pick color for URI");
3373 rgbvalue = prefs_common.uri_col;
3374 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
3375 title = _("Pick color for target folder");
3376 rgbvalue = prefs_common.tgt_folder_col;
3378 } else if(g_strcasecmp(type, "Misspelled word") == 0) {
3379 title = _("Pick color for misspelled word");
3380 rgbvalue = prefs_common.misspelled_col;
3382 } else { /* Should never be called */
3383 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
3387 color_dialog = gtk_color_selection_dialog_new(title);
3388 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
3389 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
3390 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
3391 manage_window_set_transient(GTK_WINDOW(color_dialog));
3393 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
3394 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
3395 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
3396 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
3397 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
3398 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
3401 /* preselect the previous color in the color selection dialog */
3402 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
3403 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
3404 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
3405 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
3406 gtk_color_selection_set_color
3407 (GTK_COLOR_SELECTION(dialog->colorsel), color);
3409 gtk_widget_show(color_dialog);
3412 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
3414 GtkColorSelection *colorsel = (GtkColorSelection *)
3415 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
3417 gint red, green, blue, rgbvalue;
3418 gchar *type = (gchar *)data;
3420 gtk_color_selection_get_color(colorsel, color);
3422 red = (gint) (color[0] * 255.0);
3423 green = (gint) (color[1] * 255.0);
3424 blue = (gint) (color[2] * 255.0);
3425 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
3428 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
3429 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
3430 fprintf(stderr, "Color is %x\n", rgbvalue);
3433 if (g_strcasecmp(type, "LEVEL1") == 0) {
3434 prefs_common.quote_level1_col = rgbvalue;
3435 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
3436 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
3437 prefs_common.quote_level2_col = rgbvalue;
3438 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
3439 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
3440 prefs_common.quote_level3_col = rgbvalue;
3441 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
3442 } else if (g_strcasecmp(type, "URI") == 0) {
3443 prefs_common.uri_col = rgbvalue;
3444 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
3445 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
3446 prefs_common.tgt_folder_col = rgbvalue;
3447 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
3448 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
3450 } else if (g_strcasecmp(type, "Misspelled word") == 0) {
3451 prefs_common.misspelled_col = rgbvalue;
3452 set_button_bg_color(spelling.misspelled_btn, rgbvalue);
3455 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
3457 gtk_widget_destroy(color_dialog);
3460 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
3462 gtk_widget_destroy(color_dialog);
3465 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
3469 gtk_widget_destroy(color_dialog);
3472 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
3477 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
3478 newstyle = gtk_style_copy(gtk_widget_get_default_style());