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;
103 GtkWidget *checkbtn_returnreceipt;
106 static struct Compose {
107 GtkWidget *checkbtn_autosig;
108 GtkWidget *entry_sigsep;
110 GtkWidget *entry_fw_quotemark;
111 GtkWidget *text_fw_quotefmt;
113 GtkWidget *checkbtn_autoextedit;
114 GtkWidget *spinbtn_undolevel;
115 GtkObject *spinbtn_undolevel_adj;
116 GtkWidget *spinbtn_linewrap;
117 GtkObject *spinbtn_linewrap_adj;
118 GtkWidget *checkbtn_wrapquote;
119 GtkWidget *checkbtn_autowrap;
120 GtkWidget *checkbtn_wrapatsend;
122 GtkWidget *checkbtn_reply_account_autosel;
123 GtkWidget *checkbtn_forward_account_autosel;
124 GtkWidget *checkbtn_reedit_account_autosel;
125 GtkWidget *checkbtn_quote;
126 GtkWidget *checkbtn_forward_as_attachment;
127 GtkWidget *checkbtn_redirect_keep_from;
128 GtkWidget *checkbtn_smart_wrapping;
129 GtkWidget *checkbtn_block_cursor;
130 GtkWidget *checkbtn_reply_with_quote;
135 static struct Spelling {
136 GtkWidget *checkbtn_enable_pspell;
137 GtkWidget *entry_pspell_path;
138 GtkWidget *btn_pspell_path;
139 GtkWidget *optmenu_dictionary;
140 GtkWidget *optmenu_sugmode;
141 GtkWidget *misspelled_btn;
142 GtkWidget *checkbtn_use_alternate;
143 GtkWidget *checkbtn_check_while_typing;
147 static struct Quote {
148 GtkWidget *entry_quotemark;
149 GtkWidget *text_quotefmt;
151 GtkWidget *entry_fw_quotemark;
152 GtkWidget *text_fw_quotefmt;
154 GtkWidget *entry_quote_chars;
157 static struct Display {
158 GtkWidget *entry_textfont;
159 GtkWidget *button_textfont;
161 GtkWidget *entry_smallfont;
162 GtkWidget *entry_normalfont;
163 GtkWidget *entry_boldfont;
165 GtkWidget *chkbtn_folder_unread;
166 GtkWidget *chkbtn_display_img;
167 GtkWidget *entry_ng_abbrev_len;
168 GtkWidget *spinbtn_ng_abbrev_len;
169 GtkObject *spinbtn_ng_abbrev_len_adj;
171 GtkWidget *chkbtn_transhdr;
173 GtkWidget *chkbtn_swapfrom;
174 GtkWidget *chkbtn_hscrollbar;
175 GtkWidget *chkbtn_useaddrbook;
176 GtkWidget *chkbtn_expand_thread;
177 GtkWidget *chkbtn_bold_unread;
178 GtkWidget *entry_datefmt;
181 static struct Message {
182 GtkWidget *chkbtn_enablecol;
183 GtkWidget *button_edit_col;
184 GtkWidget *chkbtn_mbalnum;
185 GtkWidget *chkbtn_disphdrpane;
186 GtkWidget *chkbtn_disphdr;
187 GtkWidget *spinbtn_linespc;
188 GtkObject *spinbtn_linespc_adj;
189 GtkWidget *chkbtn_headspc;
191 GtkWidget *chkbtn_smoothscroll;
192 GtkWidget *spinbtn_scrollstep;
193 GtkObject *spinbtn_scrollstep_adj;
194 GtkWidget *chkbtn_halfpage;
198 static struct Privacy {
199 GtkWidget *checkbtn_auto_check_signatures;
200 GtkWidget *checkbtn_gpg_signature_popup;
201 GtkWidget *checkbtn_store_passphrase;
202 GtkWidget *spinbtn_store_passphrase;
203 GtkObject *spinbtn_store_passphrase_adj;
204 GtkWidget *checkbtn_passphrase_grab;
205 GtkWidget *checkbtn_gpg_warning;
206 GtkWidget *optmenu_default_signkey;
210 static struct Interface {
211 /* GtkWidget *checkbtn_emacs; */
212 GtkWidget *checkbtn_show_msg_with_cursor;
213 GtkWidget *checkbtn_openunread;
214 GtkWidget *checkbtn_openinbox;
215 GtkWidget *checkbtn_immedexec;
216 GtkWidget *checkbtn_addaddrbyclick;
217 GtkWidget *optmenu_recvdialog;
218 GtkWidget *checkbtn_no_recv_err_panel;
219 GtkWidget *optmenu_nextunreadmsgdialog;
220 GtkWidget *entry_pixmap_theme;
221 GtkWidget *combo_pixmap_theme;
224 static struct Other {
225 GtkWidget *uri_combo;
226 GtkWidget *uri_entry;
227 GtkWidget *printcmd_entry;
228 GtkWidget *exteditor_combo;
229 GtkWidget *exteditor_entry;
230 GtkWidget *checkbtn_confonexit;
231 GtkWidget *checkbtn_cleanonexit;
232 GtkWidget *checkbtn_askonclean;
233 GtkWidget *checkbtn_warnqueued;
234 GtkWidget *checkbtn_cliplog;
235 GtkWidget *loglength_entry;
239 static struct MessageColorButtons {
240 GtkWidget *quote_level1_btn;
241 GtkWidget *quote_level2_btn;
242 GtkWidget *quote_level3_btn;
244 GtkWidget *tgt_folder_btn;
247 static struct KeybindDialog {
252 static GtkWidget *font_sel_win;
253 static guint font_sel_conn_id;
254 static GtkWidget *quote_color_win;
255 static GtkWidget *color_dialog;
257 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
258 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
260 static void prefs_common_default_signkey_set_data_from_optmenu
262 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
264 static void prefs_common_recv_dialog_newmail_notify_toggle_cb (GtkWidget *w,
266 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
267 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
268 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
269 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
272 static void prefs_dictionary_set_data_from_optmenu (PrefParam *param);
273 static void prefs_dictionary_set_optmenu (PrefParam *pparam);
274 static void prefs_speller_sugmode_set_data_from_optmenu (PrefParam *pparam);
275 static void prefs_speller_sugmode_set_optmenu (PrefParam *pparam);
280 parameter name, default value, pointer to the prefs variable, data type,
281 pointer to the widget pointer,
282 pointer to the function for data setting,
283 pointer to the function for widget setting
286 static PrefParam param[] = {
288 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
289 &receive.checkbtn_incext,
290 prefs_set_data_from_toggle, prefs_set_toggle},
291 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
292 &receive.entry_incext,
293 prefs_set_data_from_entry, prefs_set_entry},
295 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
296 &receive.checkbtn_local,
297 prefs_set_data_from_toggle, prefs_set_toggle},
298 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
299 &receive.checkbtn_filter_on_inc,
300 prefs_set_data_from_toggle, prefs_set_toggle},
301 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
302 &receive.entry_spool,
303 prefs_set_data_from_entry, prefs_set_entry},
305 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
306 &receive.checkbtn_autochk,
307 prefs_set_data_from_toggle, prefs_set_toggle},
308 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
309 &receive.spinbtn_autochk,
310 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
311 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
312 &receive.checkbtn_chkonstartup,
313 prefs_set_data_from_toggle, prefs_set_toggle},
314 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
315 P_BOOL, &receive.checkbtn_scan_after_inc,
316 prefs_set_data_from_toggle, prefs_set_toggle},
317 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
318 P_BOOL, &receive.checkbtn_newmail_manu,
319 prefs_set_data_from_toggle, prefs_set_toggle},
320 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
321 P_BOOL, &receive.checkbtn_newmail_auto,
322 prefs_set_data_from_toggle, prefs_set_toggle},
323 {"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING,
324 &receive.entry_newmail_notify_cmd,
325 prefs_set_data_from_entry, prefs_set_entry},
327 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
328 &receive.spinbtn_maxarticle,
329 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
332 {"use_ext_sendmail", "FALSE", &prefs_common.use_extsend, P_BOOL,
333 &send.checkbtn_extsend,
334 prefs_set_data_from_toggle, prefs_set_toggle},
335 {"ext_sendmail_cmd", DEFAULT_SENDMAIL_CMD,
336 &prefs_common.extsend_cmd, P_STRING,
337 &send.entry_extsend, prefs_set_data_from_entry, prefs_set_entry},
338 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
339 &send.checkbtn_savemsg,
340 prefs_set_data_from_toggle, prefs_set_toggle},
341 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
342 &send.checkbtn_queuemsg,
343 prefs_set_data_from_toggle, prefs_set_toggle},
345 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
346 &send.optmenu_charset,
347 prefs_common_charset_set_data_from_optmenu,
348 prefs_common_charset_set_optmenu},
351 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
352 &compose.checkbtn_autosig,
353 prefs_set_data_from_toggle, prefs_set_toggle},
354 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
355 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
357 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
358 &compose.checkbtn_autoextedit,
359 prefs_set_data_from_toggle, prefs_set_toggle},
360 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
361 P_BOOL, &compose.checkbtn_forward_as_attachment,
362 prefs_set_data_from_toggle, prefs_set_toggle},
363 {"redirect_keep_from", "FALSE",
364 &prefs_common.redirect_keep_from, P_BOOL,
365 &compose.checkbtn_redirect_keep_from,
366 prefs_set_data_from_toggle, prefs_set_toggle},
367 {"undo_level", "50", &prefs_common.undolevels, P_INT,
368 &compose.spinbtn_undolevel,
369 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
370 {"block_cursor", "FALSE", &prefs_common.block_cursor,
371 P_BOOL, &compose.checkbtn_block_cursor,
372 prefs_set_data_from_toggle, prefs_set_toggle},
374 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
375 &compose.spinbtn_linewrap,
376 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
377 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
378 &compose.checkbtn_wrapquote,
379 prefs_set_data_from_toggle, prefs_set_toggle},
380 {"linewrap_auto", "FALSE", &prefs_common.autowrap, P_BOOL,
381 &compose.checkbtn_autowrap,
382 prefs_set_data_from_toggle, prefs_set_toggle},
383 {"linewrap_before_sending", "FALSE",
384 &prefs_common.linewrap_at_send, P_BOOL,
385 &compose.checkbtn_wrapatsend,
386 prefs_set_data_from_toggle, prefs_set_toggle},
387 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
388 P_BOOL, &compose.checkbtn_smart_wrapping,
389 prefs_set_data_from_toggle, prefs_set_toggle},
391 {"enable_pspell", "TRUE", &prefs_common.enable_pspell,
392 P_BOOL, &spelling.checkbtn_enable_pspell,
393 prefs_set_data_from_toggle, prefs_set_toggle},
394 {"pspell_path", PSPELL_PATH, &prefs_common.pspell_path,
395 P_STRING, &spelling.entry_pspell_path,
396 prefs_set_data_from_entry, prefs_set_entry},
397 {"dictionary", "", &prefs_common.dictionary,
398 P_STRING, &spelling.optmenu_dictionary,
399 prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
400 {"pspell_sugmode", "1", &prefs_common.pspell_sugmode,
401 P_INT, &spelling.optmenu_sugmode,
402 prefs_speller_sugmode_set_data_from_optmenu, prefs_speller_sugmode_set_optmenu },
403 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate,
404 P_BOOL, &spelling.checkbtn_use_alternate,
405 prefs_set_data_from_toggle, prefs_set_toggle},
406 {"check_while_typing", "TRUE", &prefs_common.check_while_typing,
407 P_BOOL, &spelling.checkbtn_check_while_typing,
408 prefs_set_data_from_toggle, prefs_set_toggle},
409 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_INT,
412 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
413 &compose.checkbtn_reply_with_quote, prefs_set_data_from_toggle, prefs_set_toggle},
415 /* Account autoselection */
416 {"reply_account_autoselect", "TRUE",
417 &prefs_common.reply_account_autosel, P_BOOL,
418 &compose.checkbtn_reply_account_autosel,
419 prefs_set_data_from_toggle, prefs_set_toggle},
420 {"forward_account_autoselect", "TRUE",
421 &prefs_common.forward_account_autosel, P_BOOL,
422 &compose.checkbtn_forward_account_autosel,
423 prefs_set_data_from_toggle, prefs_set_toggle},
424 {"reedit_account_autoselect", "TRUE",
425 &prefs_common.reedit_account_autosel, P_BOOL,
426 &compose.checkbtn_reedit_account_autosel,
427 prefs_set_data_from_toggle, prefs_set_toggle},
429 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
433 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
434 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
435 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
436 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
437 prefs_set_data_from_text, prefs_set_text},
439 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
440 "e.entry_fw_quotemark,
441 prefs_set_data_from_entry, prefs_set_entry},
442 {"forward_quote_format",
443 "\\n\\nBegin forwarded message:\\n\\n"
444 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
445 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
446 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
447 prefs_set_data_from_text, prefs_set_text},
448 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
449 "e.entry_quote_chars, prefs_set_data_from_entry, prefs_set_entry},
452 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
454 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
455 &prefs_common.textfont, P_STRING,
456 &display.entry_textfont,
457 prefs_set_data_from_entry, prefs_set_entry},
458 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
459 &prefs_common.smallfont, P_STRING,
460 &display.entry_smallfont,
461 prefs_set_data_from_entry, prefs_set_entry},
462 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
463 &prefs_common.boldfont, P_STRING,
464 &display.entry_boldfont,
465 prefs_set_data_from_entry, prefs_set_entry},
466 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
467 &prefs_common.normalfont, P_STRING,
468 &display.entry_normalfont,
469 prefs_set_data_from_entry, prefs_set_entry},
472 {"display_folder_unread_num", "TRUE",
473 &prefs_common.display_folder_unread, P_BOOL,
474 &display.chkbtn_folder_unread,
475 prefs_set_data_from_toggle, prefs_set_toggle},
477 {"display_img", "TRUE",
478 &prefs_common.display_img, P_BOOL,
479 &display.chkbtn_display_img,
480 prefs_set_data_from_toggle, prefs_set_toggle},
481 {"newsgroup_abbrev_len", "16",
482 &prefs_common.ng_abbrev_len, P_INT,
483 &display.spinbtn_ng_abbrev_len,
484 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
486 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
487 &display.chkbtn_transhdr,
488 prefs_set_data_from_toggle, prefs_set_toggle},
490 /* Display: Summary View */
491 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
492 &display.chkbtn_swapfrom,
493 prefs_set_data_from_toggle, prefs_set_toggle},
494 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
495 &display.chkbtn_hscrollbar,
496 prefs_set_data_from_toggle, prefs_set_toggle},
497 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
498 &display.chkbtn_useaddrbook,
499 prefs_set_data_from_toggle, prefs_set_toggle},
500 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
501 P_STRING, &display.entry_datefmt,
502 prefs_set_data_from_entry, prefs_set_entry},
503 {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
504 &display.chkbtn_expand_thread,
505 prefs_set_data_from_toggle, prefs_set_toggle},
506 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
507 &display.chkbtn_bold_unread,
508 prefs_set_data_from_toggle, prefs_set_toggle},
510 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
512 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
514 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
517 {"folderview_vscrollbar_policy", "0",
518 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
521 {"summary_col_show_mark", "TRUE",
522 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
523 {"summary_col_show_unread", "TRUE",
524 &prefs_common.summary_col_visible[S_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
525 {"summary_col_show_mime", "TRUE",
526 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
527 {"summary_col_show_subject", "TRUE",
528 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
529 {"summary_col_show_from", "TRUE",
530 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
531 {"summary_col_show_date", "TRUE",
532 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
533 {"summary_col_show_size", "TRUE",
534 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
535 {"summary_col_show_number", "FALSE",
536 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
537 {"summary_col_show_score", "FALSE",
538 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
539 {"summary_col_show_locked", "FALSE",
540 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
542 {"summary_col_pos_mark", "0",
543 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
544 {"summary_col_pos_unread", "1",
545 &prefs_common.summary_col_pos[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
546 {"summary_col_pos_mime", "2",
547 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
548 {"summary_col_pos_subject", "3",
549 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
550 {"summary_col_pos_from", "4",
551 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
552 {"summary_col_pos_date", "5",
553 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
554 {"summary_col_pos_size", "6",
555 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
556 {"summary_col_pos_number", "7",
557 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
558 {"summary_col_pos_score", "8",
559 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
560 {"summary_col_pos_locked", "9",
561 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
563 {"summary_col_size_mark", "10",
564 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
565 {"summary_col_size_unread", "13",
566 &prefs_common.summary_col_size[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
567 {"summary_col_size_mime", "10",
568 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
569 {"summary_col_size_subject", "200",
570 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
571 {"summary_col_size_from", "120",
572 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
573 {"summary_col_size_date", "118",
574 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
575 {"summary_col_size_size", "45",
576 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
577 {"summary_col_size_number", "40",
578 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
579 {"summary_col_size_score", "40",
580 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
581 {"summary_col_size_locked", "13",
582 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
585 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
587 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
589 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
591 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
593 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
595 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
598 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
600 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
603 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
605 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
607 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
609 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
611 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
613 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
615 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
617 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
619 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
621 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
623 {"compose_width", "600", &prefs_common.compose_width, P_INT,
625 {"compose_height", "560", &prefs_common.compose_height, P_INT,
629 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
630 &message.chkbtn_enablecol,
631 prefs_set_data_from_toggle, prefs_set_toggle},
633 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
635 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
637 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
639 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
641 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
643 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
645 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
646 P_BOOL, NULL, NULL, NULL},
648 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
649 &message.chkbtn_mbalnum,
650 prefs_set_data_from_toggle, prefs_set_toggle},
651 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
652 P_BOOL, &message.chkbtn_disphdrpane,
653 prefs_set_data_from_toggle, prefs_set_toggle},
654 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
655 &message.chkbtn_disphdr,
656 prefs_set_data_from_toggle, prefs_set_toggle},
657 {"line_space", "2", &prefs_common.line_space, P_INT,
658 &message.spinbtn_linespc,
659 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
660 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
661 &message.chkbtn_headspc,
662 prefs_set_data_from_toggle, prefs_set_toggle},
664 {"enable_smooth_scroll", "FALSE",
665 &prefs_common.enable_smooth_scroll, P_BOOL,
666 &message.chkbtn_smoothscroll,
667 prefs_set_data_from_toggle, prefs_set_toggle},
668 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
669 &message.spinbtn_scrollstep,
670 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
671 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
672 &message.chkbtn_halfpage,
673 prefs_set_data_from_toggle, prefs_set_toggle},
675 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
679 {"mime_image_viewer", "display '%s'",
680 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
681 {"mime_audio_player", "play '%s'",
682 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
683 {"mime_open_command", "gedit '%s'",
684 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
688 {"auto_check_signatures", "TRUE",
689 &prefs_common.auto_check_signatures, P_BOOL,
690 &privacy.checkbtn_auto_check_signatures,
691 prefs_set_data_from_toggle, prefs_set_toggle},
692 {"gpg_signature_popup", "FALSE",
693 &prefs_common.gpg_signature_popup, P_BOOL,
694 &privacy.checkbtn_gpg_signature_popup,
695 prefs_set_data_from_toggle, prefs_set_toggle},
696 {"store_passphrase", "FALSE", &prefs_common.store_passphrase, P_BOOL,
697 &privacy.checkbtn_store_passphrase,
698 prefs_set_data_from_toggle, prefs_set_toggle},
699 {"store_passphrase_timeout", "0", &prefs_common.store_passphrase_timeout,
700 P_INT, &privacy.spinbtn_store_passphrase,
701 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
703 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
704 &privacy.checkbtn_passphrase_grab,
705 prefs_set_data_from_toggle, prefs_set_toggle},
706 #endif /* __MINGW32__ */
707 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
708 &privacy.checkbtn_gpg_warning,
709 prefs_set_data_from_toggle, prefs_set_toggle},
710 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
711 &privacy.optmenu_default_signkey,
712 prefs_common_default_signkey_set_data_from_optmenu,
713 prefs_common_default_signkey_set_optmenu},
714 #endif /* USE_GPGME */
717 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
719 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
722 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
723 NULL, NULL, NULL}, */
724 {"show_message_with_cursor_key", "FALSE",
725 &prefs_common.show_msg_with_cursor_key,
726 P_BOOL, &interface.checkbtn_show_msg_with_cursor,
727 prefs_set_data_from_toggle, prefs_set_toggle},
728 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
729 P_BOOL, &interface.checkbtn_openunread,
730 prefs_set_data_from_toggle, prefs_set_toggle},
731 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
732 P_BOOL, &interface.checkbtn_openinbox,
733 prefs_set_data_from_toggle, prefs_set_toggle},
734 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
735 &interface.checkbtn_immedexec,
736 prefs_set_data_from_toggle, prefs_set_toggle},
737 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
738 &interface.optmenu_recvdialog,
739 prefs_common_recv_dialog_set_data_from_optmenu,
740 prefs_common_recv_dialog_set_optmenu},
741 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
742 P_BOOL, &interface.checkbtn_no_recv_err_panel,
743 prefs_set_data_from_toggle, prefs_set_toggle},
744 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
745 &interface.optmenu_nextunreadmsgdialog,
746 prefs_nextunreadmsgdialog_set_data_from_optmenu,
747 prefs_nextunreadmsgdialog_set_optmenu},
749 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
750 P_BOOL, &interface.checkbtn_addaddrbyclick,
751 prefs_set_data_from_toggle, prefs_set_toggle},
752 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
753 &prefs_common.pixmap_theme_path, P_STRING,
754 &interface.entry_pixmap_theme, prefs_set_data_from_entry, prefs_set_entry},
757 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
758 &prefs_common.uri_cmd, P_STRING,
759 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
760 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
761 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
762 {"ext_editor_command", "gedit %s",
763 &prefs_common.ext_editor_cmd, P_STRING,
764 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
766 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
767 &other.checkbtn_confonexit,
768 prefs_set_data_from_toggle, prefs_set_toggle},
769 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
770 &send.checkbtn_returnreceipt,
771 prefs_set_data_from_toggle, prefs_set_toggle},
772 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
773 &other.checkbtn_cleanonexit,
774 prefs_set_data_from_toggle, prefs_set_toggle},
775 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
776 &other.checkbtn_askonclean,
777 prefs_set_data_from_toggle, prefs_set_toggle},
778 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
779 P_BOOL, &other.checkbtn_warnqueued,
780 prefs_set_data_from_toggle, prefs_set_toggle},
781 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
784 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
786 {"important_score", "1", &prefs_common.important_score, P_INT,
788 {"clip_log", "FALSE", &prefs_common.cliplog, P_BOOL,
789 &other.checkbtn_cliplog,
790 prefs_set_data_from_toggle, prefs_set_toggle},
791 {"log_length", "1000", &prefs_common.loglength, P_INT,
792 &other.loglength_entry,
793 prefs_set_data_from_entry, prefs_set_entry},
795 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
797 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
800 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
803 /* widget creating functions */
804 static void prefs_common_create (void);
805 static void prefs_receive_create (void);
806 static void prefs_send_create (void);
807 static void prefs_compose_create (void);
808 static void prefs_spelling_create (void);
809 static void prefs_quote_create (void);
810 static void prefs_display_create (void);
811 static void prefs_message_create (void);
813 static void prefs_privacy_create (void);
815 static void prefs_interface_create (void);
816 static void prefs_other_create (void);
818 static void date_format_ok_btn_clicked (GtkButton *button,
820 static void date_format_cancel_btn_clicked (GtkButton *button,
822 static void date_format_key_pressed (GtkWidget *keywidget,
825 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
828 static void date_format_entry_on_change (GtkEditable *editable,
830 static void date_format_select_row (GtkWidget *date_format_list,
833 GdkEventButton *event,
834 GtkWidget *date_format);
835 static GtkWidget *date_format_create (GtkButton *button,
838 static void prefs_quote_colors_dialog (void);
839 static void prefs_quote_colors_dialog_create (void);
840 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
843 static void quote_color_set_dialog (GtkWidget *widget,
845 static void quote_colors_set_dialog_ok (GtkWidget *widget,
847 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
849 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
852 static void set_button_bg_color (GtkWidget *widget,
854 static void prefs_enable_message_color_toggled (void);
855 static void prefs_recycle_colors_toggled (GtkWidget *widget);
857 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
859 static void prefs_font_selection_key_pressed (GtkWidget *widget,
862 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
864 static void prefs_keybind_select (void);
865 static gint prefs_keybind_deleted (GtkWidget *widget,
868 static void prefs_keybind_key_pressed (GtkWidget *widget,
871 static void prefs_keybind_cancel (void);
872 static void prefs_keybind_apply_clicked (GtkWidget *widget);
874 static gint prefs_common_deleted (GtkWidget *widget,
877 static void prefs_common_key_pressed (GtkWidget *widget,
880 static void prefs_common_ok (void);
881 static void prefs_common_apply (void);
882 static void prefs_common_cancel (void);
884 void prefs_common_init() {
885 prefs_common.fltlist = NULL;
886 prefs_common.disphdr_list = NULL;
889 void prefs_common_read_config(void)
893 gchar buf[PREFSBUFSIZE];
895 prefs_read_config(param, "Common", COMMON_RC);
897 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
899 if ((fp = fopen(path, "rb")) == NULL) {
900 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
905 while (fgets(buf, sizeof(buf), fp) != NULL) {
907 if (buf[0] == '\0') continue;
908 prefs_common.mime_open_cmd_history =
909 add_history(prefs_common.mime_open_cmd_history, buf);
913 prefs_common.mime_open_cmd_history =
914 g_list_reverse(prefs_common.mime_open_cmd_history);
917 void prefs_common_save_config(void)
923 prefs_save_config(param, "Common", COMMON_RC);
925 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
927 if ((fp = fopen(path, "wb")) == NULL) {
928 FILE_OP_ERROR(path, "fopen");
933 for (cur = prefs_common.mime_open_cmd_history;
934 cur != NULL; cur = cur->next) {
935 fputs((gchar *)cur->data, fp);
943 void prefs_common_open(void)
945 if (prefs_rc_is_readonly(COMMON_RC))
950 if (!dialog.window) {
951 prefs_common_create();
954 manage_window_set_transient(GTK_WINDOW(dialog.window));
955 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
956 gtk_widget_grab_focus(dialog.ok_btn);
958 prefs_set_dialog(param);
960 gtk_widget_show(dialog.window);
963 static void prefs_common_create(void)
967 debug_print(_("Creating common preferences window...\n"));
969 prefs_dialog_create(&dialog);
970 gtk_window_set_title (GTK_WINDOW(dialog.window),
971 _("Common Preferences"));
972 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
973 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
974 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
975 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
976 MANAGE_WINDOW_SIGNALS_CONNECT(dialog.window);
978 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
979 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
980 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
981 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
982 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
983 GTK_SIGNAL_FUNC(prefs_common_cancel),
984 GTK_OBJECT(dialog.window));
986 /* create all widgets on notebook */
987 prefs_receive_create();
988 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
990 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
991 prefs_compose_create();
992 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
994 prefs_spelling_create();
995 SET_NOTEBOOK_LABEL(dialog.notebook, _("Spell Checker"), page++);
997 prefs_quote_create();
998 SET_NOTEBOOK_LABEL(dialog.notebook, _("Quote"), page++);
999 prefs_display_create();
1000 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
1001 prefs_message_create();
1002 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
1004 prefs_privacy_create();
1005 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
1007 prefs_interface_create();
1008 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
1009 prefs_other_create();
1010 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
1012 gtk_widget_show_all(dialog.window);
1015 static void prefs_receive_create(void)
1019 GtkWidget *frame_incext;
1020 GtkWidget *checkbtn_incext;
1022 GtkWidget *label_incext;
1023 GtkWidget *entry_incext;
1024 /* GtkWidget *button_incext; */
1026 GtkWidget *frame_spool;
1027 GtkWidget *checkbtn_local;
1028 GtkWidget *checkbtn_filter_on_inc;
1029 GtkWidget *label_spool;
1030 GtkWidget *entry_spool;
1032 GtkWidget *hbox_autochk;
1033 GtkWidget *checkbtn_autochk;
1034 GtkWidget *label_autochk1;
1035 GtkObject *spinbtn_autochk_adj;
1036 GtkWidget *spinbtn_autochk;
1037 GtkWidget *label_autochk2;
1038 GtkWidget *checkbtn_chkonstartup;
1039 GtkWidget *checkbtn_scan_after_inc;
1042 GtkWidget *frame_newmail;
1043 GtkWidget *hbox_newmail_notify;
1044 GtkWidget *checkbtn_newmail_auto;
1045 GtkWidget *checkbtn_newmail_manu;
1046 GtkWidget *entry_newmail_notify_cmd;
1047 GtkWidget *label_newmail_notify_cmd;
1049 GtkWidget *frame_news;
1050 GtkWidget *label_maxarticle;
1051 GtkWidget *spinbtn_maxarticle;
1052 GtkObject *spinbtn_maxarticle_adj;
1054 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1055 gtk_widget_show (vbox1);
1056 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1057 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1059 PACK_FRAME(vbox1, frame_incext, _("External program"));
1061 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1062 gtk_widget_show (vbox2);
1063 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
1064 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1066 /* Use of external incorporation program */
1067 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
1068 _("Use external program for incorporation"));
1070 hbox = gtk_hbox_new (FALSE, 8);
1071 gtk_widget_show (hbox);
1072 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1073 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
1075 label_incext = gtk_label_new (_("Command"));
1076 gtk_widget_show (label_incext);
1077 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
1079 entry_incext = gtk_entry_new ();
1080 gtk_widget_show (entry_incext);
1081 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
1084 button_incext = gtk_button_new_with_label ("... ");
1085 gtk_widget_show (button_incext);
1086 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1089 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
1091 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1092 gtk_widget_show (vbox2);
1093 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
1094 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1096 hbox = gtk_hbox_new (FALSE, 32);
1097 gtk_widget_show (hbox);
1098 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1100 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
1101 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
1102 _("Filter on incorporation"));
1103 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
1105 hbox = gtk_hbox_new (FALSE, 8);
1106 gtk_widget_show (hbox);
1107 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1108 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
1110 label_spool = gtk_label_new (_("Spool directory"));
1111 gtk_widget_show (label_spool);
1112 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
1114 entry_spool = gtk_entry_new ();
1115 gtk_widget_show (entry_spool);
1116 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
1118 vbox2 = gtk_vbox_new (FALSE, 0);
1119 gtk_widget_show (vbox2);
1120 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1123 hbox_autochk = gtk_hbox_new (FALSE, 8);
1124 gtk_widget_show (hbox_autochk);
1125 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1127 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1128 _("Auto-check new mail"));
1130 label_autochk1 = gtk_label_new (_("every"));
1131 gtk_widget_show (label_autochk1);
1132 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1134 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1135 spinbtn_autochk = gtk_spin_button_new
1136 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1137 gtk_widget_show (spinbtn_autochk);
1138 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1139 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
1140 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1142 label_autochk2 = gtk_label_new (_("minute(s)"));
1143 gtk_widget_show (label_autochk2);
1144 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1146 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1147 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1148 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1150 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1151 _("Check new mail on startup"));
1152 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1153 _("Update all local folders after incorporation"));
1156 PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1158 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1159 gtk_widget_show (vbox2);
1160 gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1161 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1163 hbox = gtk_hbox_new (TRUE, 8);
1164 gtk_widget_show (hbox);
1165 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1166 _("after autochecking"));
1167 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1168 _("after manual checking"));
1169 gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1170 gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_auto), "toggled",
1171 GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1173 gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_manu), "toggled",
1174 GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1177 hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1178 gtk_widget_show (hbox);
1179 gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE,
1182 label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1183 "(use %d as number of new "
1185 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd),
1187 gtk_widget_show (label_newmail_notify_cmd);
1188 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1189 label_newmail_notify_cmd, FALSE, FALSE, 0);
1191 entry_newmail_notify_cmd = gtk_entry_new ();
1192 gtk_widget_show (entry_newmail_notify_cmd);
1193 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1194 entry_newmail_notify_cmd, TRUE, TRUE, 0);
1196 gtk_widget_set_sensitive(hbox_newmail_notify,
1197 prefs_common.newmail_notify_auto ||
1198 prefs_common.newmail_notify_manu);
1200 PACK_FRAME(vbox1, frame_news, _("News"));
1202 hbox = gtk_hbox_new (FALSE, 8);
1203 gtk_widget_show (hbox);
1204 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
1205 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
1207 label_maxarticle = gtk_label_new
1208 (_("Maximum number of articles to download\n"
1209 "(unlimited if 0 is specified)"));
1210 gtk_widget_show (label_maxarticle);
1211 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
1212 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
1214 spinbtn_maxarticle_adj =
1215 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
1216 spinbtn_maxarticle = gtk_spin_button_new
1217 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
1218 gtk_widget_show (spinbtn_maxarticle);
1219 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
1221 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
1222 gtk_spin_button_set_numeric
1223 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
1225 receive.checkbtn_incext = checkbtn_incext;
1226 receive.entry_incext = entry_incext;
1227 /* receive.button_incext = button_incext; */
1229 receive.checkbtn_local = checkbtn_local;
1230 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
1231 receive.entry_spool = entry_spool;
1233 receive.checkbtn_autochk = checkbtn_autochk;
1234 receive.spinbtn_autochk = spinbtn_autochk;
1235 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1237 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1238 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1241 receive.checkbtn_newmail_auto = checkbtn_newmail_auto;
1242 receive.checkbtn_newmail_manu = checkbtn_newmail_manu;
1243 receive.hbox_newmail_notify = hbox_newmail_notify;
1244 receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1246 receive.spinbtn_maxarticle = spinbtn_maxarticle;
1247 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
1250 static void prefs_send_create(void)
1254 GtkWidget *frame_extsend;
1255 GtkWidget *vbox_extsend;
1256 GtkWidget *checkbtn_extsend;
1258 GtkWidget *label_extsend;
1259 GtkWidget *entry_extsend;
1260 /* GtkWidget *button_extsend; */
1261 GtkWidget *checkbtn_savemsg;
1262 GtkWidget *checkbtn_queuemsg;
1263 GtkWidget *label_outcharset;
1265 GtkWidget *optmenu_menu;
1266 GtkWidget *menuitem;
1267 GtkWidget *checkbtn_returnreceipt;
1268 GtkWidget *label_charset_desc;
1270 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1271 gtk_widget_show (vbox1);
1272 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1273 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1275 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1277 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1278 gtk_widget_show (vbox_extsend);
1279 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1280 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1282 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1283 _("Use external program for sending"));
1285 hbox1 = gtk_hbox_new (FALSE, 8);
1286 gtk_widget_show (hbox1);
1287 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1288 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1290 label_extsend = gtk_label_new (_("Command"));
1291 gtk_widget_show (label_extsend);
1292 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1294 entry_extsend = gtk_entry_new ();
1295 gtk_widget_show (entry_extsend);
1296 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1299 button_extsend = gtk_button_new_with_label ("... ");
1300 gtk_widget_show (button_extsend);
1301 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1304 vbox2 = gtk_vbox_new (FALSE, 0);
1305 gtk_widget_show (vbox2);
1306 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1308 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1309 _("Save sent messages to Sent"));
1310 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1311 _("Queue messages that fail to send"));
1312 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1313 _("Send return receipt on request"));
1315 hbox1 = gtk_hbox_new (FALSE, 8);
1316 gtk_widget_show (hbox1);
1317 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1319 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1320 gtk_widget_show (label_outcharset);
1321 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1323 optmenu = gtk_option_menu_new ();
1324 gtk_widget_show (optmenu);
1325 gtk_box_pack_start (GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1327 optmenu_menu = gtk_menu_new ();
1329 #define SET_MENUITEM(str, charset) \
1331 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1334 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1335 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1337 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1339 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1340 SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1341 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1342 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1343 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1344 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1345 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1347 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1349 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1351 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
1352 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1354 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1356 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1357 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1359 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1360 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1362 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1363 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1365 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1366 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1367 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1369 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1371 hbox1 = gtk_hbox_new (FALSE, 8);
1372 gtk_widget_show (hbox1);
1373 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1375 label_charset_desc = gtk_label_new
1376 (_("If `Automatic' is selected, the optimal encoding\n"
1377 "for the current locale will be used."));
1378 gtk_widget_show (label_charset_desc);
1379 gtk_box_pack_start (GTK_BOX (hbox1), label_charset_desc,
1381 gtk_label_set_justify(GTK_LABEL (label_charset_desc), GTK_JUSTIFY_LEFT);
1383 send.checkbtn_extsend = checkbtn_extsend;
1384 send.entry_extsend = entry_extsend;
1385 /* send.button_extsend = button_extsend; */
1387 send.checkbtn_savemsg = checkbtn_savemsg;
1388 send.checkbtn_queuemsg = checkbtn_queuemsg;
1389 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1391 send.optmenu_charset = optmenu;
1394 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1398 toggled = gtk_toggle_button_get_active
1399 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1400 gtk_toggle_button_get_active
1401 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1402 gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1406 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1409 gchar *dict_fullname;
1411 g_return_if_fail(param);
1412 g_return_if_fail(param->data);
1413 g_return_if_fail(param->widget);
1414 g_return_if_fail(*(param->widget));
1416 dict_fullname = gtkpspell_get_dictionary_menu_active_item
1417 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1418 str = *((gchar **) param->data);
1421 *((gchar **) param->data) = dict_fullname;
1424 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1427 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1429 GtkWidget *menuitem;
1433 g_return_if_fail(optmenu != NULL);
1434 g_return_if_fail(pparam->data != NULL);
1436 if (*(gchar **) pparam->data) {
1437 menu = gtk_option_menu_get_menu(optmenu);
1438 for (cur = GTK_MENU_SHELL(menu)->children;
1439 cur != NULL; cur = cur->next) {
1440 menuitem = GTK_WIDGET(cur->data);
1441 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem),
1443 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1444 gtk_option_menu_set_history(optmenu, n);
1451 gtk_option_menu_set_history(optmenu, 0);
1452 prefs_dictionary_set_data_from_optmenu(pparam);
1455 static void prefs_speller_sugmode_set_data_from_optmenu(PrefParam *param)
1458 g_return_if_fail(param);
1459 g_return_if_fail(param->data);
1460 g_return_if_fail(param->widget);
1461 g_return_if_fail(*(param->widget));
1463 sugmode = gtkpspell_get_sugmode_from_option_menu
1464 (GTK_OPTION_MENU(*(param->widget)));
1465 *((gint *) param->data) = sugmode;
1468 static void prefs_speller_sugmode_set_optmenu(PrefParam *pparam)
1470 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1473 g_return_if_fail(optmenu != NULL);
1474 g_return_if_fail(pparam->data != NULL);
1476 sugmode = *(gint *) pparam->data;
1477 gtkpspell_sugmode_option_menu_set(optmenu, sugmode);
1481 static void prefs_spelling_checkbtn_enable_pspell_toggle_cb
1487 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1489 gtk_widget_set_sensitive(spelling.entry_pspell_path, toggled);
1490 gtk_widget_set_sensitive(spelling.optmenu_dictionary, toggled);
1491 gtk_widget_set_sensitive(spelling.optmenu_sugmode, toggled);
1492 gtk_widget_set_sensitive(spelling.btn_pspell_path, toggled);
1493 gtk_widget_set_sensitive(spelling.misspelled_btn, toggled);
1494 gtk_widget_set_sensitive(spelling.checkbtn_use_alternate, toggled);
1495 gtk_widget_set_sensitive(spelling.checkbtn_check_while_typing, toggled);
1498 static void prefs_spelling_btn_pspell_path_clicked_cb(GtkWidget *widget,
1501 gchar *file_path, *tmp;
1502 GtkWidget *new_menu;
1504 file_path = filesel_select_file(_("Select dictionaries location"),
1505 prefs_common.pspell_path);
1506 if (file_path == NULL) {
1510 tmp=g_dirname(file_path);
1512 if (prefs_common.pspell_path)
1513 g_free(prefs_common.pspell_path);
1514 prefs_common.pspell_path = g_strdup_printf("%s%s",tmp,
1517 new_menu = gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path);
1518 gtk_option_menu_set_menu(GTK_OPTION_MENU(spelling.optmenu_dictionary),
1521 gtk_entry_set_text(GTK_ENTRY(spelling.entry_pspell_path),
1522 prefs_common.pspell_path);
1523 /* select first one */
1524 gtk_option_menu_set_history(GTK_OPTION_MENU(
1525 spelling.optmenu_dictionary), 0);
1527 if (prefs_common.dictionary)
1528 g_free(prefs_common.dictionary);
1530 prefs_common.dictionary =
1531 gtkpspell_get_dictionary_menu_active_item(
1532 gtk_option_menu_get_menu(
1534 spelling.optmenu_dictionary)));
1540 static void prefs_spelling_create()
1543 GtkWidget *frame_spell;
1544 GtkWidget *vbox_spell;
1545 GtkWidget *hbox_pspell_path;
1546 GtkWidget *checkbtn_enable_pspell;
1547 GtkWidget *label_pspell_path;
1548 GtkWidget *entry_pspell_path;
1549 GtkWidget *btn_pspell_path;
1550 GtkWidget *spell_table;
1551 GtkWidget *label_dictionary;
1552 GtkWidget *optmenu_dictionary;
1553 GtkWidget *sugmode_label;
1554 GtkWidget *sugmode_optmenu;
1555 GtkWidget *checkbtn_use_alternate;
1556 GtkWidget *help_label;
1557 GtkWidget *checkbtn_check_while_typing;
1558 GtkWidget *color_label;
1559 GtkWidget *col_align;
1561 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1562 gtk_widget_show (vbox1);
1563 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1564 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1566 /* spell checker defaults */
1567 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1568 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1569 gtk_widget_show (vbox_spell);
1570 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1571 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1573 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_pspell,
1574 _("Enable spell checker (EXPERIMENTAL)"));
1576 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_pspell), "toggled",
1577 GTK_SIGNAL_FUNC(prefs_spelling_checkbtn_enable_pspell_toggle_cb),
1580 /* Check while typing */
1581 PACK_CHECK_BUTTON(vbox_spell, checkbtn_check_while_typing,
1582 _("Check while typing"));
1584 PACK_CHECK_BUTTON(vbox_spell, checkbtn_use_alternate,
1585 _("Enable alternate dictionary"));
1587 help_label = gtk_label_new(_("Enabling alternate dictionary makes switching\nwith the last used dictionary faster."));
1588 gtk_widget_show(help_label);
1589 gtk_box_pack_start(GTK_BOX(vbox_spell), help_label, FALSE, TRUE, 0);
1591 spell_table = gtk_table_new(4, 3, FALSE);
1592 gtk_container_set_border_width (GTK_CONTAINER (spell_table), VSPACING);
1593 gtk_table_set_row_spacings(GTK_TABLE(spell_table), 8);
1594 gtk_table_set_col_spacings(GTK_TABLE(spell_table), 8);
1596 gtk_box_pack_start(GTK_BOX(vbox_spell), spell_table, TRUE, TRUE, 0);
1598 label_pspell_path = gtk_label_new (_("Dictionaries path:"));
1599 gtk_misc_set_alignment(GTK_MISC(label_pspell_path), 1.0, 0.5);
1600 gtk_widget_show(label_pspell_path);
1601 gtk_table_attach (GTK_TABLE (spell_table), label_pspell_path, 0, 1, 0,
1602 1, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1604 hbox_pspell_path = gtk_hbox_new (FALSE, 8);
1605 gtk_table_attach (GTK_TABLE (spell_table), hbox_pspell_path, 1, 2, 0,
1606 1, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1607 gtk_widget_show(hbox_pspell_path);
1609 entry_pspell_path = gtk_entry_new();
1610 gtk_widget_show(entry_pspell_path);
1611 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), entry_pspell_path, TRUE,
1614 gtk_widget_set_sensitive(entry_pspell_path, prefs_common.enable_pspell);
1616 btn_pspell_path = gtk_button_new_with_label(" ... ");
1617 gtk_widget_show(btn_pspell_path);
1618 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), btn_pspell_path, FALSE, FALSE, 0);
1619 gtk_widget_set_sensitive(btn_pspell_path, prefs_common.enable_pspell);
1621 gtk_signal_connect(GTK_OBJECT(btn_pspell_path), "clicked",
1622 GTK_SIGNAL_FUNC(prefs_spelling_btn_pspell_path_clicked_cb),
1625 label_dictionary = gtk_label_new(_("Default dictionary:"));
1626 gtk_misc_set_alignment(GTK_MISC(label_dictionary), 1.0, 0.5);
1627 gtk_widget_show(label_dictionary);
1628 gtk_table_attach (GTK_TABLE (spell_table), label_dictionary, 0, 1, 1, 2,
1629 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1631 optmenu_dictionary = gtk_option_menu_new();
1632 gtk_widget_show(optmenu_dictionary);
1633 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1634 gtkpspell_dictionary_option_menu_new(
1635 prefs_common.pspell_path));
1636 gtk_table_attach (GTK_TABLE (spell_table), optmenu_dictionary, 1, 2, 1,
1637 2, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1638 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_pspell);
1640 /* Suggestion mode */
1641 sugmode_label = gtk_label_new(_("Default suggestion mode"));
1642 gtk_misc_set_alignment(GTK_MISC(sugmode_label), 1.0, 0.5);
1643 gtk_widget_show(sugmode_label);
1644 gtk_table_attach(GTK_TABLE (spell_table), sugmode_label, 0, 1, 2, 3,
1645 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1647 sugmode_optmenu = gtk_option_menu_new();
1648 gtk_widget_show(sugmode_optmenu);
1649 gtk_option_menu_set_menu(GTK_OPTION_MENU(sugmode_optmenu),
1650 gtkpspell_sugmode_option_menu_new(prefs_common.pspell_sugmode));
1651 gtk_table_attach(GTK_TABLE(spell_table), sugmode_optmenu, 1, 2, 2, 3,
1652 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1653 gtk_widget_set_sensitive(sugmode_optmenu, prefs_common.enable_pspell);
1656 color_label = gtk_label_new(_("Misspelled word color:"));
1657 gtk_misc_set_alignment(GTK_MISC(color_label), 1.0, 0.5);
1658 gtk_table_attach (GTK_TABLE (spell_table), color_label, 0, 1, 3, 4,
1659 GTK_FILL, GTK_SHRINK, 0, 0);
1660 gtk_widget_show(color_label);
1662 col_align = gtk_alignment_new(0.0, 0.5, 0, 0);
1663 gtk_widget_show(col_align);
1664 gtk_table_attach (GTK_TABLE (spell_table), col_align, 1, 2, 3, 4,
1665 GTK_FILL, GTK_SHRINK, 0, 0);
1667 spelling.misspelled_btn = gtk_button_new_with_label ("");
1668 set_button_bg_color(spelling.misspelled_btn,
1669 prefs_common.misspelled_col);
1670 gtk_widget_set_usize (spelling.misspelled_btn, 30, 20);
1671 gtk_widget_set_sensitive(spelling.misspelled_btn, prefs_common.enable_pspell);
1672 gtk_signal_connect (GTK_OBJECT (spelling.misspelled_btn), "clicked",
1673 GTK_SIGNAL_FUNC(quote_color_set_dialog), "Misspelled word");
1674 gtk_container_add(GTK_CONTAINER(col_align), spelling.misspelled_btn);
1677 spelling.checkbtn_enable_pspell = checkbtn_enable_pspell;
1678 spelling.entry_pspell_path = entry_pspell_path;
1679 spelling.btn_pspell_path = btn_pspell_path;
1680 spelling.optmenu_dictionary = optmenu_dictionary;
1681 spelling.optmenu_sugmode = sugmode_optmenu;
1682 spelling.checkbtn_use_alternate = checkbtn_use_alternate;
1683 spelling.checkbtn_check_while_typing = checkbtn_check_while_typing;
1689 static void prefs_compose_create(void)
1695 GtkWidget *frame_sig;
1696 GtkWidget *vbox_sig;
1697 GtkWidget *checkbtn_autosig;
1698 GtkWidget *label_sigsep;
1699 GtkWidget *entry_sigsep;
1701 GtkWidget *checkbtn_autoextedit;
1703 GtkWidget *frame_autosel;
1704 GtkWidget *hbox_autosel;
1705 GtkWidget *checkbtn_reply_account_autosel;
1706 GtkWidget *checkbtn_forward_account_autosel;
1707 GtkWidget *checkbtn_reedit_account_autosel;
1709 GtkWidget *hbox_undolevel;
1710 GtkWidget *label_undolevel;
1711 GtkObject *spinbtn_undolevel_adj;
1712 GtkWidget *spinbtn_undolevel;
1714 GtkWidget *vbox_linewrap;
1719 GtkWidget *label_linewrap;
1720 GtkObject *spinbtn_linewrap_adj;
1721 GtkWidget *spinbtn_linewrap;
1722 GtkWidget *checkbtn_wrapquote;
1723 GtkWidget *checkbtn_autowrap;
1724 GtkWidget *checkbtn_wrapatsend;
1726 GtkWidget *checkbtn_forward_as_attachment;
1727 GtkWidget *checkbtn_redirect_keep_from;
1728 GtkWidget *checkbtn_smart_wrapping;
1729 GtkWidget *checkbtn_block_cursor;
1730 GtkWidget *frame_msgwrap;
1732 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1733 gtk_widget_show (vbox1);
1734 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1735 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1737 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1739 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1740 gtk_widget_show (vbox_sig);
1741 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1742 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1744 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1745 _("Insert signature automatically"));
1747 hbox1 = gtk_hbox_new (FALSE, 8);
1748 gtk_widget_show (hbox1);
1749 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1750 label_sigsep = gtk_label_new (_("Signature separator"));
1751 gtk_widget_show (label_sigsep);
1752 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1754 entry_sigsep = gtk_entry_new ();
1755 gtk_widget_show (entry_sigsep);
1756 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1758 gtk_widget_set_usize (entry_sigsep, 64, -1);
1760 /* Account autoselection */
1761 PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1763 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1764 gtk_widget_show (hbox_autosel);
1765 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1766 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1768 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1769 _("when replying"));
1770 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1771 _("when forwarding"));
1772 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1773 _("when re-editing"));
1775 vbox2 = gtk_vbox_new (FALSE, 0);
1776 gtk_widget_show (vbox2);
1777 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1779 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1780 _("Automatically launch the external editor"));
1782 hbox5 = gtk_hbox_new (FALSE, 8);
1783 gtk_widget_show (hbox5);
1784 gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1786 PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1787 _("Forward as attachment"));
1789 PACK_CHECK_BUTTON (hbox5, checkbtn_block_cursor,
1792 PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1793 _("Keep the original 'From' header when redirecting"));
1795 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1796 gtk_widget_show (hbox_undolevel);
1797 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1799 label_undolevel = gtk_label_new (_("Undo level"));
1800 gtk_widget_show (label_undolevel);
1801 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1803 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1804 spinbtn_undolevel = gtk_spin_button_new
1805 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1806 gtk_widget_show (spinbtn_undolevel);
1807 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1808 gtk_widget_set_usize (spinbtn_undolevel, 64, -1);
1809 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1812 PACK_FRAME(vbox1, frame_msgwrap, _("Message wrapping"));
1814 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1815 gtk_widget_show (vbox_linewrap);
1816 gtk_container_add (GTK_CONTAINER (frame_msgwrap), vbox_linewrap);
1817 gtk_container_set_border_width (GTK_CONTAINER (vbox_linewrap), 8);
1819 hbox3 = gtk_hbox_new (FALSE, 8);
1820 gtk_widget_show (hbox3);
1821 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1824 label_linewrap = gtk_label_new (_("Wrap messages at"));
1825 gtk_widget_show (label_linewrap);
1826 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1828 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1829 spinbtn_linewrap = gtk_spin_button_new
1830 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1831 gtk_widget_show (spinbtn_linewrap);
1832 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1833 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1834 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1836 label_linewrap = gtk_label_new (_("characters"));
1837 gtk_widget_show (label_linewrap);
1838 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1840 hbox4 = gtk_hbox_new (FALSE, VSPACING);
1841 gtk_widget_show (hbox4);
1842 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1844 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1846 PACK_CHECK_BUTTON (hbox4, checkbtn_autowrap, _("Wrap on input"));
1849 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1851 PACK_CHECK_BUTTON (vbox_linewrap, checkbtn_smart_wrapping,
1852 _("Smart wrapping (EXPERIMENTAL)"));
1855 compose.checkbtn_quote = checkbtn_quote;
1856 compose.entry_quotemark = entry_quotemark;
1857 compose.text_quotefmt = text_quotefmt;
1859 compose.checkbtn_autosig = checkbtn_autosig;
1860 compose.entry_sigsep = entry_sigsep;
1862 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1864 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1865 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1866 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1868 compose.spinbtn_undolevel = spinbtn_undolevel;
1869 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1871 compose.spinbtn_linewrap = spinbtn_linewrap;
1872 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1873 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1874 compose.checkbtn_autowrap = checkbtn_autowrap;
1875 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1877 compose.checkbtn_forward_as_attachment =
1878 checkbtn_forward_as_attachment;
1879 compose.checkbtn_redirect_keep_from =
1880 checkbtn_redirect_keep_from;
1881 compose.checkbtn_smart_wrapping =
1882 checkbtn_smart_wrapping;
1883 compose.checkbtn_block_cursor =
1884 checkbtn_block_cursor;
1888 static void prefs_quote_create(void)
1891 GtkWidget *frame_quote;
1892 GtkWidget *vbox_quote;
1895 GtkWidget *label_quotemark;
1896 GtkWidget *entry_quotemark;
1897 GtkWidget *scrolledwin_quotefmt;
1898 GtkWidget *text_quotefmt;
1900 GtkWidget *entry_fw_quotemark;
1901 GtkWidget *text_fw_quotefmt;
1903 GtkWidget *entry_quote_chars;
1904 GtkWidget *label_quote_chars;
1906 GtkWidget *btn_quotedesc;
1908 GtkWidget *checkbtn_reply_with_quote;
1910 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1911 gtk_widget_show (vbox1);
1912 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1913 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1917 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1919 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1921 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1922 gtk_widget_show (vbox_quote);
1923 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1924 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1926 hbox1 = gtk_hbox_new (FALSE, 32);
1927 gtk_widget_show (hbox1);
1928 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1930 hbox2 = gtk_hbox_new (FALSE, 8);
1931 gtk_widget_show (hbox2);
1932 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1934 label_quotemark = gtk_label_new (_("Quotation mark"));
1935 gtk_widget_show (label_quotemark);
1936 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1938 entry_quotemark = gtk_entry_new ();
1939 gtk_widget_show (entry_quotemark);
1940 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1941 gtk_widget_set_usize (entry_quotemark, 64, -1);
1943 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1944 gtk_widget_show (scrolledwin_quotefmt);
1945 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1946 gtk_scrolled_window_set_policy
1947 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1948 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1950 text_quotefmt = gtk_text_new (NULL, NULL);
1951 gtk_widget_show (text_quotefmt);
1952 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1953 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1954 gtk_widget_set_usize(text_quotefmt, -1, 60);
1958 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1960 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1961 gtk_widget_show (vbox_quote);
1962 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1963 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1965 hbox1 = gtk_hbox_new (FALSE, 32);
1966 gtk_widget_show (hbox1);
1967 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1969 hbox2 = gtk_hbox_new (FALSE, 8);
1970 gtk_widget_show (hbox2);
1971 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1973 label_quotemark = gtk_label_new (_("Quotation mark"));
1974 gtk_widget_show (label_quotemark);
1975 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1977 entry_fw_quotemark = gtk_entry_new ();
1978 gtk_widget_show (entry_fw_quotemark);
1979 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1981 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
1983 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1984 gtk_widget_show (scrolledwin_quotefmt);
1985 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1986 gtk_scrolled_window_set_policy
1987 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1988 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1990 text_fw_quotefmt = gtk_text_new (NULL, NULL);
1991 gtk_widget_show (text_fw_quotefmt);
1992 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1994 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
1995 gtk_widget_set_usize(text_fw_quotefmt, -1, 60);
1997 hbox1 = gtk_hbox_new (FALSE, 32);
1998 gtk_widget_show (hbox1);
1999 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2002 gtk_button_new_with_label (_(" Description of symbols "));
2003 gtk_widget_show (btn_quotedesc);
2004 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
2005 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
2006 GTK_SIGNAL_FUNC(quote_fmt_quote_description), NULL);
2010 PACK_FRAME (vbox1, frame_quote, _("Quoting characters"));
2012 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
2013 gtk_widget_show (vbox_quote);
2014 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
2015 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
2017 hbox1 = gtk_hbox_new (FALSE, 32);
2018 gtk_widget_show (hbox1);
2019 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2021 hbox2 = gtk_hbox_new (FALSE, 8);
2022 gtk_widget_show (hbox2);
2023 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
2025 label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
2026 gtk_widget_show (label_quote_chars);
2027 gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
2029 entry_quote_chars = gtk_entry_new ();
2030 gtk_widget_show (entry_quote_chars);
2031 gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
2033 gtk_widget_set_usize (entry_quote_chars, 64, -1);
2036 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
2037 quote.entry_quotemark = entry_quotemark;
2038 quote.text_quotefmt = text_quotefmt;
2039 quote.entry_fw_quotemark = entry_fw_quotemark;
2040 quote.text_fw_quotefmt = text_fw_quotefmt;
2041 quote.entry_quote_chars = entry_quote_chars;
2044 static void prefs_display_create(void)
2047 GtkWidget *frame_font;
2049 GtkWidget *label_textfont;
2050 GtkWidget *entry_textfont;
2051 GtkWidget *button_textfont;
2052 GtkWidget *chkbtn_display_img;
2053 GtkWidget *chkbtn_transhdr;
2054 GtkWidget *chkbtn_folder_unread;
2056 GtkWidget *label_ng_abbrev;
2057 GtkWidget *spinbtn_ng_abbrev_len;
2058 GtkObject *spinbtn_ng_abbrev_len_adj;
2059 GtkWidget *frame_summary;
2061 GtkWidget *chkbtn_swapfrom;
2062 GtkWidget *chkbtn_hscrollbar;
2063 GtkWidget *chkbtn_useaddrbook;
2064 GtkWidget *chkbtn_expand_thread;
2065 GtkWidget *chkbtn_bold_unread;
2067 GtkWidget *label_datefmt;
2068 GtkWidget *button_datefmt;
2069 GtkWidget *entry_datefmt;
2070 GtkWidget *button_dispitem;
2071 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
2073 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2074 gtk_widget_show (vbox1);
2075 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2076 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2078 PACK_FRAME(vbox1, frame_font, _("Font"));
2080 table1 = gtk_table_new (4, 3, FALSE);
2082 gtk_widget_show (table1);
2083 gtk_container_add (GTK_CONTAINER (frame_font), table1);
2084 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
2085 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
2086 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
2088 label_textfont = gtk_label_new (_("Text"));
2089 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
2090 gtk_widget_show (label_textfont);
2091 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
2092 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2094 entry_textfont = gtk_entry_new ();
2095 gtk_widget_show (entry_textfont);
2096 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
2097 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2099 button_textfont = gtk_button_new_with_label (" ... ");
2101 gtk_widget_show (button_textfont);
2102 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
2104 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
2105 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
2107 tmplabel = gtk_label_new (_("Small"));
2108 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2109 gtk_widget_show (tmplabel);
2110 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
2111 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2113 tmpentry = gtk_entry_new ();
2114 gtk_widget_show (tmpentry);
2115 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
2116 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2118 tmpbutton = gtk_button_new_with_label (" ... ");
2119 gtk_widget_show (tmpbutton);
2120 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
2122 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2123 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2124 display.entry_smallfont = tmpentry;
2126 tmplabel = gtk_label_new (_("Normal"));
2127 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2128 gtk_widget_show (tmplabel);
2129 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
2130 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2132 tmpentry = gtk_entry_new ();
2133 gtk_widget_show (tmpentry);
2134 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
2135 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2137 tmpbutton = gtk_button_new_with_label (" ... ");
2138 gtk_widget_show (tmpbutton);
2139 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
2141 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2142 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2143 display.entry_normalfont = tmpentry;
2145 tmplabel = gtk_label_new (_("Bold"));
2146 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2147 gtk_widget_show (tmplabel);
2148 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
2149 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2151 tmpentry = gtk_entry_new ();
2152 gtk_widget_show (tmpentry);
2153 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
2154 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2156 tmpbutton = gtk_button_new_with_label (" ... ");
2157 gtk_widget_show (tmpbutton);
2158 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
2160 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2161 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2162 display.entry_boldfont = tmpentry;
2164 vbox2 = gtk_vbox_new (FALSE, 0);
2165 gtk_widget_show (vbox2);
2166 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
2169 (vbox2, chkbtn_transhdr,
2170 _("Translate header name (such as `From:', `Subject:')"));
2172 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
2173 _("Display unread number next to folder name"));
2175 PACK_CHECK_BUTTON (vbox2, chkbtn_display_img,
2176 _("Automatically display images"));
2178 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2180 hbox1 = gtk_hbox_new (FALSE, 8);
2181 gtk_widget_show (hbox1);
2182 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2184 label_ng_abbrev = gtk_label_new
2185 (_("Abbreviate newsgroups longer than"));
2186 gtk_widget_show (label_ng_abbrev);
2187 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
2189 spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
2190 spinbtn_ng_abbrev_len = gtk_spin_button_new
2191 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
2192 gtk_widget_show (spinbtn_ng_abbrev_len);
2193 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
2195 gtk_widget_set_usize (spinbtn_ng_abbrev_len, 56, -1);
2196 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
2199 label_ng_abbrev = gtk_label_new
2201 gtk_widget_show (label_ng_abbrev);
2202 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
2204 /* ---- Summary ---- */
2206 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
2208 vbox2 = gtk_vbox_new (FALSE, 0);
2209 gtk_widget_show (vbox2);
2210 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
2211 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
2214 (vbox2, chkbtn_swapfrom,
2215 _("Display recipient on `From' column if sender is yourself"));
2217 (vbox2, chkbtn_useaddrbook,
2218 _("Display sender using address book"));
2220 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
2222 (vbox2, chkbtn_expand_thread, _("Expand threads"));
2224 (vbox2, chkbtn_bold_unread,
2225 _("Display unread messages with bold font"));
2227 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2229 hbox1 = gtk_hbox_new (FALSE, 8);
2230 gtk_widget_show (hbox1);
2231 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2233 label_datefmt = gtk_label_new (_("Date format"));
2234 gtk_widget_show (label_datefmt);
2235 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
2237 entry_datefmt = gtk_entry_new ();
2238 gtk_widget_show (entry_datefmt);
2239 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
2241 button_datefmt = gtk_button_new_with_label (" ... ");
2243 gtk_widget_show (button_datefmt);
2244 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
2245 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
2246 GTK_SIGNAL_FUNC (date_format_create), NULL);
2248 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2250 hbox1 = gtk_hbox_new (FALSE, 8);
2251 gtk_widget_show (hbox1);
2252 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2254 button_dispitem = gtk_button_new_with_label
2255 (_(" Set display item of summary... "));
2256 gtk_widget_show (button_dispitem);
2257 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
2258 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
2259 GTK_SIGNAL_FUNC (prefs_summary_column_open),
2262 display.entry_textfont = entry_textfont;
2263 display.button_textfont = button_textfont;
2265 display.chkbtn_display_img = chkbtn_display_img;
2266 display.chkbtn_transhdr = chkbtn_transhdr;
2267 display.chkbtn_folder_unread = chkbtn_folder_unread;
2268 display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
2269 display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
2271 display.chkbtn_swapfrom = chkbtn_swapfrom;
2272 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
2273 display.chkbtn_expand_thread = chkbtn_expand_thread;
2274 display.chkbtn_bold_unread = chkbtn_bold_unread;
2275 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
2276 display.entry_datefmt = entry_datefmt;
2279 static void prefs_message_create(void)
2285 GtkWidget *chkbtn_enablecol;
2286 GtkWidget *button_edit_col;
2287 GtkWidget *chkbtn_mbalnum;
2288 GtkWidget *chkbtn_disphdrpane;
2289 GtkWidget *chkbtn_disphdr;
2290 GtkWidget *button_edit_disphdr;
2291 GtkWidget *hbox_linespc;
2292 GtkWidget *label_linespc;
2293 GtkObject *spinbtn_linespc_adj;
2294 GtkWidget *spinbtn_linespc;
2295 GtkWidget *chkbtn_headspc;
2297 GtkWidget *frame_scr;
2298 GtkWidget *vbox_scr;
2299 GtkWidget *chkbtn_smoothscroll;
2300 GtkWidget *hbox_scr;
2301 GtkWidget *label_scr;
2302 GtkObject *spinbtn_scrollstep_adj;
2303 GtkWidget *spinbtn_scrollstep;
2304 GtkWidget *chkbtn_halfpage;
2306 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2307 gtk_widget_show (vbox1);
2308 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2309 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2311 hbox1 = gtk_hbox_new (FALSE, 8);
2312 gtk_widget_show (hbox1);
2313 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
2315 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
2316 _("Enable coloration of message"));
2317 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
2318 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
2321 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
2322 gtk_widget_show (button_edit_col);
2323 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
2324 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
2325 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
2327 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
2329 vbox2 = gtk_vbox_new (FALSE, 0);
2330 gtk_widget_show (vbox2);
2331 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2334 (vbox2, chkbtn_mbalnum,
2335 _("Display 2-byte alphabet and numeric with 1-byte character"));
2336 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
2337 _("Display header pane above message view"));
2339 hbox1 = gtk_hbox_new (FALSE, 8);
2340 gtk_widget_show (hbox1);
2341 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2343 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
2344 _("Display short headers on message view"));
2346 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
2347 gtk_widget_show (button_edit_disphdr);
2348 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
2350 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
2351 GTK_SIGNAL_FUNC (prefs_display_header_open),
2354 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
2356 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2358 hbox1 = gtk_hbox_new (FALSE, 32);
2359 gtk_widget_show (hbox1);
2360 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2362 hbox_linespc = gtk_hbox_new (FALSE, 8);
2363 gtk_widget_show (hbox1);
2364 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
2366 label_linespc = gtk_label_new (_("Line space"));
2367 gtk_widget_show (label_linespc);
2368 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2371 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
2372 spinbtn_linespc = gtk_spin_button_new
2373 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
2374 gtk_widget_show (spinbtn_linespc);
2375 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
2377 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
2378 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
2380 label_linespc = gtk_label_new (_("pixel(s)"));
2381 gtk_widget_show (label_linespc);
2382 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2385 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
2387 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
2389 vbox_scr = gtk_vbox_new (FALSE, 0);
2390 gtk_widget_show (vbox_scr);
2391 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
2392 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
2394 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
2396 hbox1 = gtk_hbox_new (FALSE, 32);
2397 gtk_widget_show (hbox1);
2398 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
2400 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
2402 hbox_scr = gtk_hbox_new (FALSE, 8);
2403 gtk_widget_show (hbox_scr);
2404 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
2406 label_scr = gtk_label_new (_("Step"));
2407 gtk_widget_show (label_scr);
2408 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2410 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
2411 spinbtn_scrollstep = gtk_spin_button_new
2412 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
2413 gtk_widget_show (spinbtn_scrollstep);
2414 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
2416 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
2417 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
2420 label_scr = gtk_label_new (_("pixel(s)"));
2421 gtk_widget_show (label_scr);
2422 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2424 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
2426 message.chkbtn_enablecol = chkbtn_enablecol;
2427 message.button_edit_col = button_edit_col;
2428 message.chkbtn_mbalnum = chkbtn_mbalnum;
2429 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
2430 message.chkbtn_disphdr = chkbtn_disphdr;
2431 message.spinbtn_linespc = spinbtn_linespc;
2432 message.chkbtn_headspc = chkbtn_headspc;
2434 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
2435 message.spinbtn_scrollstep = spinbtn_scrollstep;
2436 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
2437 message.chkbtn_halfpage = chkbtn_halfpage;
2441 static void prefs_privacy_create(void)
2446 GtkWidget *checkbtn_auto_check_signatures;
2447 GtkWidget *checkbtn_gpg_signature_popup;
2448 GtkWidget *hbox_stpass;
2449 GtkWidget *checkbtn_store_passphrase;
2450 GtkWidget *label_stpass1;
2451 GtkObject *spinbtn_store_passphrase_adj;
2452 GtkWidget *spinbtn_store_passphrase;
2453 GtkWidget *label_stpass2;
2454 GtkWidget *hbox_stpassinfo;
2455 GtkWidget *label_stpassinfo;
2456 GtkWidget *checkbtn_passphrase_grab;
2457 GtkWidget *checkbtn_gpg_warning;
2459 GtkWidget *menuitem;
2461 GtkWidget *optmenu_menu;
2463 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2464 gtk_widget_show (vbox1);
2465 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2466 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2468 vbox2 = gtk_vbox_new (FALSE, 0);
2469 gtk_widget_show (vbox2);
2470 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2472 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
2473 _("Automatically check signatures"));
2475 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
2476 _("Show signature check result in a popup window"));
2478 hbox_stpass = gtk_hbox_new(FALSE, 8);
2479 gtk_box_pack_start(GTK_BOX(vbox2), hbox_stpass, FALSE, FALSE, 0);
2481 PACK_CHECK_BUTTON (hbox_stpass, checkbtn_store_passphrase,
2482 _("Store passphrase temporarily"));
2484 label_stpass1 = gtk_label_new(_("- remove after"));
2485 gtk_box_pack_start(GTK_BOX(hbox_stpass), label_stpass1, FALSE, FALSE, 0);
2487 spinbtn_store_passphrase_adj = gtk_adjustment_new(0, 0, 1440, 1, 5, 5);
2488 spinbtn_store_passphrase = gtk_spin_button_new(
2489 GTK_ADJUSTMENT(spinbtn_store_passphrase_adj), 1, 0);
2490 gtk_box_pack_start(GTK_BOX(hbox_stpass), spinbtn_store_passphrase, FALSE,
2492 gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spinbtn_store_passphrase),
2494 gtk_widget_set_usize(spinbtn_store_passphrase, 50, -1);
2496 label_stpass2 = gtk_label_new(_("minute(s)"));
2497 gtk_box_pack_start(GTK_BOX(hbox_stpass), label_stpass2, FALSE, FALSE, 0);
2498 gtk_widget_show_all(hbox_stpass);
2500 hbox_stpassinfo = gtk_hbox_new(FALSE, 8);
2501 gtk_box_pack_start(GTK_BOX(vbox2), hbox_stpassinfo, FALSE, FALSE, 0);
2503 label_stpassinfo = gtk_label_new
2504 (_("(A setting of '0' will store the passphrase\n"
2505 " for the whole session)"));
2506 gtk_box_pack_start (GTK_BOX (hbox_stpassinfo), label_stpassinfo, FALSE, FALSE, 0);
2507 gtk_label_set_justify (GTK_LABEL (label_stpassinfo), GTK_JUSTIFY_LEFT);
2508 gtk_widget_show_all(hbox_stpassinfo);
2510 SET_TOGGLE_SENSITIVITY(checkbtn_store_passphrase, label_stpass1);
2511 SET_TOGGLE_SENSITIVITY(checkbtn_store_passphrase, spinbtn_store_passphrase);
2512 SET_TOGGLE_SENSITIVITY(checkbtn_store_passphrase, label_stpass2);
2513 SET_TOGGLE_SENSITIVITY(checkbtn_store_passphrase, label_stpassinfo);
2516 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
2517 _("Grab input while entering a passphrase"));
2521 (vbox2, checkbtn_gpg_warning,
2522 _("Display warning on startup if GnuPG doesn't work"));
2524 hbox1 = gtk_hbox_new (FALSE, 8);
2525 gtk_widget_show (hbox1);
2526 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2528 /* create default signkey box */
2529 label = gtk_label_new (_("Default Sign Key"));
2530 gtk_widget_show (label);
2531 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2532 optmenu = gtk_option_menu_new ();
2533 gtk_widget_show (optmenu);
2534 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
2535 optmenu_menu = gtk_menu_new ();
2537 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
2538 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
2539 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
2540 /* FIXME: disabled because not implemented */
2541 gtk_widget_set_sensitive(optmenu, FALSE);
2543 privacy.checkbtn_auto_check_signatures
2544 = checkbtn_auto_check_signatures;
2545 privacy.checkbtn_gpg_signature_popup
2546 = checkbtn_gpg_signature_popup;
2547 privacy.checkbtn_store_passphrase = checkbtn_store_passphrase;
2548 privacy.spinbtn_store_passphrase = spinbtn_store_passphrase;
2549 privacy.spinbtn_store_passphrase_adj = spinbtn_store_passphrase_adj;
2550 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2551 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2552 privacy.optmenu_default_signkey = optmenu;
2556 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
2560 GtkWidget *menuitem;
2563 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2564 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2565 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2566 g_free(*((gchar **)pparam->data));
2567 *((gchar **)pparam->data) = g_strdup(charset);
2571 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
2575 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2577 GtkWidget *menuitem;
2581 g_return_if_fail(optmenu != NULL);
2582 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2584 menu = gtk_option_menu_get_menu(optmenu);
2585 for (cur = GTK_MENU_SHELL(menu)->children;
2586 cur != NULL; cur = cur->next) {
2587 menuitem = GTK_WIDGET(cur->data);
2588 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2589 if (!strcmp(charset, *((gchar **)pparam->data))) {
2590 gtk_option_menu_set_history(optmenu, n);
2596 gtk_option_menu_set_history(optmenu, 0);
2597 prefs_common_charset_set_data_from_optmenu(pparam);
2600 #endif /* USE_GPGME */
2602 static void prefs_interface_create(void)
2607 /* GtkWidget *checkbtn_emacs; */
2608 GtkWidget *checkbtn_show_msg_with_cursor;
2609 GtkWidget *checkbtn_openunread;
2610 GtkWidget *checkbtn_openinbox;
2611 GtkWidget *checkbtn_immedexec;
2614 GtkWidget *optmenu_recvdialog;
2616 GtkWidget *menuitem;
2617 GtkWidget *checkbtn_no_recv_err_panel;
2619 GtkWidget *frame_addr;
2620 GtkWidget *vbox_addr;
2621 GtkWidget *checkbtn_addaddrbyclick;
2623 GtkWidget *button_keybind;
2626 GtkWidget *optmenu_nextunreadmsgdialog;
2627 GtkWidget *optmenu_nextunreadmsgdialog_menu;
2628 GtkWidget *nextunreadmsgdialog_menuitem;
2630 GtkWidget *frame_pixmap_theme;
2631 GtkWidget *vbox_pixmap_theme;
2632 GtkWidget *entry_pixmap_theme;
2633 GtkWidget *combo_pixmap_theme;
2634 GList *avail_pixmap_themes = NULL;
2636 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2637 gtk_widget_show (vbox1);
2638 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2639 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2641 vbox2 = gtk_vbox_new (FALSE, 0);
2642 gtk_widget_show (vbox2);
2643 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2645 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2646 _("Emulate the behavior of mouse operation of\n"
2647 "Emacs-based mailer"));
2648 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2649 GTK_JUSTIFY_LEFT); */
2652 (vbox2, checkbtn_show_msg_with_cursor,
2653 _("Open message when cursor keys are pressed on summary"));
2656 (vbox2, checkbtn_openunread,
2657 _("Open first unread message when entering a folder"));
2660 (vbox2, checkbtn_openinbox,
2661 _("Go to inbox after receiving new mail"));
2663 vbox3 = gtk_vbox_new (FALSE, 0);
2664 gtk_widget_show (vbox3);
2665 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2668 (vbox3, checkbtn_immedexec,
2669 _("Execute immediately when moving or deleting messages"));
2671 hbox1 = gtk_hbox_new (FALSE, 0);
2672 gtk_widget_show (hbox1);
2673 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2675 label = gtk_label_new
2676 (_("(Messages will be marked until execution\n"
2677 " if this is turned off)"));
2678 gtk_widget_show (label);
2679 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2680 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2682 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2684 PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
2685 _("No popup error dialog on receive error"));
2687 hbox1 = gtk_hbox_new (FALSE, 8);
2688 gtk_widget_show (hbox1);
2689 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2691 label = gtk_label_new (_("Show receive dialog"));
2692 gtk_widget_show (label);
2693 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2695 optmenu_recvdialog = gtk_option_menu_new ();
2696 gtk_widget_show (optmenu_recvdialog);
2697 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2700 menu = gtk_menu_new ();
2701 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2702 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2703 RECV_DIALOG_ACTIVE);
2704 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2706 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2708 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2710 vbox_addr = gtk_vbox_new (FALSE, 0);
2711 gtk_widget_show (vbox_addr);
2712 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2713 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2716 (vbox_addr, checkbtn_addaddrbyclick,
2717 _("Add address to destination when double-clicked"));
2719 /* Next Unread Message Dialog */
2720 hbox2 = gtk_hbox_new (FALSE, 8);
2721 gtk_widget_show (hbox2);
2722 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
2724 label = gtk_label_new (_("Show no-unread-message dialog"));
2725 gtk_widget_show (label);
2726 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
2728 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2729 gtk_widget_show (optmenu_nextunreadmsgdialog);
2730 gtk_box_pack_start (GTK_BOX (hbox2), optmenu_nextunreadmsgdialog,
2733 optmenu_nextunreadmsgdialog_menu = gtk_menu_new ();
2734 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2735 _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2736 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2737 _("Assume 'Yes'"), NEXTUNREADMSGDIALOG_ASSUME_YES);
2738 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2739 _("Assume 'No'"), NEXTUNREADMSGDIALOG_ASSUME_NO);
2741 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog),
2742 optmenu_nextunreadmsgdialog_menu);
2745 /* Receive Dialog */
2746 /* hbox = gtk_hbox_new (FALSE, 8);
2747 gtk_widget_show (hbox);
2748 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2750 label = gtk_label_new (_("Show receive Dialog"));
2751 gtk_widget_show (label);
2752 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2754 recvdialog_optmenu = gtk_option_menu_new ();
2755 gtk_widget_show (recvdialog_optmenu);
2756 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2758 recvdialog_optmenu_menu = gtk_menu_new ();
2760 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2761 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2762 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2764 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2766 hbox1 = gtk_hbox_new (FALSE, 8);
2767 gtk_widget_show (hbox1);
2768 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2770 button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
2771 gtk_widget_show (button_keybind);
2772 gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
2773 gtk_signal_connect (GTK_OBJECT (button_keybind), "clicked",
2774 GTK_SIGNAL_FUNC (prefs_keybind_select), NULL);
2776 PACK_FRAME(vbox1, frame_pixmap_theme, _("Pixmap theme"));
2778 vbox_pixmap_theme = gtk_vbox_new(FALSE, 0);
2779 gtk_widget_show(vbox_pixmap_theme);
2780 gtk_container_add(GTK_CONTAINER(frame_pixmap_theme), vbox_pixmap_theme);
2781 gtk_container_set_border_width(GTK_CONTAINER(vbox_pixmap_theme), 8);
2783 avail_pixmap_themes = stock_pixmap_themes_list_new();
2785 combo_pixmap_theme = gtk_combo_new ();
2786 gtk_widget_show (combo_pixmap_theme);
2787 gtk_box_pack_start (GTK_BOX (vbox_pixmap_theme), combo_pixmap_theme, TRUE, TRUE, 0);
2788 gtk_combo_set_popdown_strings(GTK_COMBO(combo_pixmap_theme), avail_pixmap_themes);
2789 entry_pixmap_theme = GTK_COMBO (combo_pixmap_theme)->entry;
2791 stock_pixmap_themes_list_free(avail_pixmap_themes);
2793 /* interface.checkbtn_emacs = checkbtn_emacs; */
2794 interface.checkbtn_show_msg_with_cursor
2795 = checkbtn_show_msg_with_cursor;
2796 interface.checkbtn_openunread = checkbtn_openunread;
2797 interface.checkbtn_openinbox = checkbtn_openinbox;
2798 interface.checkbtn_immedexec = checkbtn_immedexec;
2799 interface.optmenu_recvdialog = optmenu_recvdialog;
2800 interface.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
2801 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2802 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2803 interface.combo_pixmap_theme = combo_pixmap_theme;
2804 interface.entry_pixmap_theme = entry_pixmap_theme;
2807 static void prefs_other_create(void)
2810 GtkWidget *ext_frame;
2811 GtkWidget *ext_table;
2814 GtkWidget *uri_label;
2815 GtkWidget *uri_combo;
2816 GtkWidget *uri_entry;
2818 GtkWidget *printcmd_label;
2819 GtkWidget *printcmd_entry;
2821 GtkWidget *exteditor_label;
2822 GtkWidget *exteditor_combo;
2823 GtkWidget *exteditor_entry;
2825 GtkWidget *frame_cliplog;
2826 GtkWidget *vbox_cliplog;
2827 GtkWidget *hbox_cliplog;
2828 GtkWidget *checkbtn_cliplog;
2829 GtkWidget *loglength_label;
2830 GtkWidget *loglength_entry;
2832 GtkWidget *frame_exit;
2833 GtkWidget *vbox_exit;
2834 GtkWidget *checkbtn_confonexit;
2835 GtkWidget *checkbtn_cleanonexit;
2836 GtkWidget *checkbtn_askonclean;
2837 GtkWidget *checkbtn_warnqueued;
2839 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2840 gtk_widget_show (vbox1);
2841 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2842 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2844 PACK_FRAME(vbox1, ext_frame,
2845 _("External commands (%s will be replaced with file name / URI)"));
2847 ext_table = gtk_table_new (3, 2, FALSE);
2848 gtk_widget_show (ext_table);
2849 gtk_container_add (GTK_CONTAINER (ext_frame), ext_table);
2850 gtk_container_set_border_width (GTK_CONTAINER (ext_table), 8);
2851 gtk_table_set_row_spacings (GTK_TABLE (ext_table), VSPACING_NARROW);
2852 gtk_table_set_col_spacings (GTK_TABLE (ext_table), 8);
2854 uri_label = gtk_label_new (_("Web browser"));
2855 gtk_widget_show(uri_label);
2856 gtk_table_attach (GTK_TABLE (ext_table), uri_label, 0, 1, 0, 1,
2857 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2858 gtk_misc_set_alignment (GTK_MISC (uri_label), 1, 0.5);
2860 uri_combo = gtk_combo_new ();
2861 gtk_widget_show (uri_combo);
2862 gtk_table_attach (GTK_TABLE (ext_table), uri_combo, 1, 2, 0, 1,
2863 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2864 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2865 "mozilla -remote 'openurl(%s,new-window)'",
2866 "netscape -remote 'openURL(%s,raise)'",
2868 "gnome-moz-remote --raise --newwin '%s'",
2869 "kfmclient openURL '%s'",
2870 "opera -newwindow '%s'",
2871 "kterm -e w3m '%s'",
2872 "kterm -e lynx '%s'",
2874 uri_entry = GTK_COMBO (uri_combo)->entry;
2876 printcmd_label = gtk_label_new (_("Print"));
2877 gtk_widget_show (printcmd_label);
2878 gtk_table_attach (GTK_TABLE (ext_table), printcmd_label, 0, 1, 1, 2,
2879 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2880 gtk_misc_set_alignment (GTK_MISC (printcmd_label), 1, 0.5);
2882 printcmd_entry = gtk_entry_new ();
2883 gtk_widget_show (printcmd_entry);
2884 gtk_table_attach (GTK_TABLE (ext_table), printcmd_entry, 1, 2, 1, 2,
2885 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2887 exteditor_label = gtk_label_new (_("Editor"));
2888 gtk_widget_show (exteditor_label);
2889 gtk_table_attach (GTK_TABLE (ext_table), exteditor_label, 0, 1, 2, 3,
2890 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2891 gtk_misc_set_alignment (GTK_MISC (exteditor_label), 1, 0.5);
2893 exteditor_combo = gtk_combo_new ();
2894 gtk_widget_show (exteditor_combo);
2895 gtk_table_attach (GTK_TABLE (ext_table), exteditor_combo, 1, 2, 2, 3,
2896 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2897 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2900 "mgedit --no-fork %s",
2906 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2909 PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2911 vbox_cliplog = gtk_vbox_new (FALSE, 0);
2912 gtk_widget_show (vbox_cliplog);
2913 gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2914 gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2915 PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2916 _("Clip the log size"));
2917 hbox_cliplog = gtk_hbox_new (FALSE, 3);
2918 gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2919 gtk_widget_show (hbox_cliplog);
2921 loglength_label = gtk_label_new (_("Log window length"));
2922 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2924 gtk_widget_show (GTK_WIDGET (loglength_label));
2925 loglength_entry = gtk_entry_new ();
2926 gtk_widget_set_usize (GTK_WIDGET (loglength_entry), 64, -1);
2927 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2929 gtk_widget_show (GTK_WIDGET (loglength_entry));
2930 SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2933 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2935 vbox_exit = gtk_vbox_new (FALSE, 0);
2936 gtk_widget_show (vbox_exit);
2937 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2938 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2940 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2941 _("Confirm on exit"));
2943 hbox1 = gtk_hbox_new (FALSE, 32);
2944 gtk_widget_show (hbox1);
2945 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2947 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2948 _("Empty trash on exit"));
2949 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2950 _("Ask before emptying"));
2951 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2953 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2954 _("Warn if there are queued messages"));
2956 other.uri_combo = uri_combo;
2957 other.uri_entry = uri_entry;
2958 other.printcmd_entry = printcmd_entry;
2960 other.exteditor_combo = exteditor_combo;
2961 other.exteditor_entry = exteditor_entry;
2963 other.checkbtn_cliplog = checkbtn_cliplog;
2964 other.loglength_entry = loglength_entry;
2966 other.checkbtn_confonexit = checkbtn_confonexit;
2967 other.checkbtn_cleanonexit = checkbtn_cleanonexit;
2968 other.checkbtn_askonclean = checkbtn_askonclean;
2969 other.checkbtn_warnqueued = checkbtn_warnqueued;
2972 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2974 GtkWidget *datefmt_sample = NULL;
2977 g_return_if_fail(widget != NULL);
2978 g_return_if_fail(*widget != NULL);
2979 g_return_if_fail(display.entry_datefmt != NULL);
2981 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2982 (GTK_OBJECT(*widget), "datefmt_sample"));
2983 g_return_if_fail(datefmt_sample != NULL);
2985 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2986 g_free(prefs_common.date_format);
2987 prefs_common.date_format = text;
2988 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2990 gtk_widget_destroy(*widget);
2994 static void date_format_cancel_btn_clicked(GtkButton *button,
2997 g_return_if_fail(widget != NULL);
2998 g_return_if_fail(*widget != NULL);
3000 gtk_widget_destroy(*widget);
3004 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
3007 if (event && event->keyval == GDK_Escape)
3008 date_format_cancel_btn_clicked(NULL, widget);
3011 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
3012 GdkEventAny *event, GtkWidget **widget)
3014 g_return_val_if_fail(widget != NULL, FALSE);
3015 g_return_val_if_fail(*widget != NULL, FALSE);
3021 static void date_format_entry_on_change(GtkEditable *editable,
3025 struct tm *cal_time;
3029 cur_time = time(NULL);
3030 cal_time = localtime(&cur_time);
3032 text = gtk_editable_get_chars(editable, 0, -1);
3034 strftime(buffer, sizeof buffer, text, cal_time);
3035 gtk_label_set_text(example, buffer);
3038 static void date_format_select_row(GtkWidget *date_format_list, gint row,
3039 gint column, GdkEventButton *event,
3040 GtkWidget *date_format)
3046 GtkWidget *datefmt_sample;
3048 /* only on double click */
3049 if (!event || event->type != GDK_2BUTTON_PRESS) return;
3052 datefmt_sample = GTK_WIDGET(gtk_object_get_data
3053 (GTK_OBJECT(date_format), "datefmt_sample"));
3055 g_return_if_fail(date_format_list != NULL);
3056 g_return_if_fail(date_format != NULL);
3057 g_return_if_fail(datefmt_sample != NULL);
3059 /* get format from clist */
3060 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
3062 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
3063 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
3065 /* insert the format into the text entry */
3066 new_format = g_malloc(strlen(old_format) + 3);
3068 strncpy(new_format, old_format, cur_pos);
3069 new_format[cur_pos] = '\0';
3070 strcat(new_format, format);
3071 strcat(new_format, &old_format[cur_pos]);
3073 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
3074 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
3079 static GtkWidget *date_format_create(GtkButton *button, void *data)
3081 static GtkWidget *datefmt_win = NULL;
3083 GtkWidget *scrolledwindow1;
3084 GtkWidget *datefmt_clist;
3089 GtkWidget *confirm_area;
3091 GtkWidget *cancel_btn;
3092 GtkWidget *datefmt_entry;
3121 const gint TIME_FORMAT_ELEMS =
3122 sizeof time_format / sizeof time_format[0];
3124 time_format[0].txt = _("the full abbreviated weekday name");
3125 time_format[1].txt = _("the full weekday name");
3126 time_format[2].txt = _("the abbreviated month name");
3127 time_format[3].txt = _("the full month name");
3128 time_format[4].txt = _("the preferred date and time for the current locale");
3129 time_format[5].txt = _("the century number (year/100)");
3130 time_format[6].txt = _("the day of the month as a decimal number");
3131 time_format[7].txt = _("the hour as a decimal number using a 24-hour clock");
3132 time_format[8].txt = _("the hour as a decimal number using a 12-hour clock");
3133 time_format[9].txt = _("the day of the year as a decimal number");
3134 time_format[10].txt = _("the month as a decimal number");
3135 time_format[11].txt = _("the minute as a decimal number");
3136 time_format[12].txt = _("either AM or PM");
3137 time_format[13].txt = _("the second as a decimal number");
3138 time_format[14].txt = _("the day of the week as a decimal number");
3139 time_format[15].txt = _("the preferred date for the current locale");
3140 time_format[16].txt = _("the last two digits of a year");
3141 time_format[17].txt = _("the year as a decimal number");
3142 time_format[18].txt = _("the time zone or name or abbreviation");
3144 if (datefmt_win) return datefmt_win;
3146 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
3147 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
3148 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
3149 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
3150 gtk_widget_set_usize(datefmt_win, 440, 280);
3152 vbox1 = gtk_vbox_new(FALSE, 10);
3153 gtk_widget_show(vbox1);
3154 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
3156 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
3157 gtk_scrolled_window_set_policy
3158 (GTK_SCROLLED_WINDOW(scrolledwindow1),
3159 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
3160 gtk_widget_show(scrolledwindow1);
3161 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
3163 titles[0] = _("Specifier");
3164 titles[1] = _("Description");
3165 datefmt_clist = gtk_clist_new_with_titles(2, titles);
3166 gtk_widget_show(datefmt_clist);
3167 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
3168 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
3169 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
3170 GTK_SELECTION_BROWSE);
3172 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
3174 /* phoney casting necessary because of gtk... */
3175 text[0] = (gchar *)time_format[i].fmt;
3176 text[1] = (gchar *)time_format[i].txt;
3177 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
3180 table = gtk_table_new(2, 2, FALSE);
3181 gtk_widget_show(table);
3182 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
3183 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
3184 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
3186 label1 = gtk_label_new(_("Date format"));
3187 gtk_widget_show(label1);
3188 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
3190 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
3191 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
3193 datefmt_entry = gtk_entry_new_with_max_length(256);
3194 gtk_widget_show(datefmt_entry);
3195 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
3196 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3198 /* we need the "sample" entry box; add it as data so callbacks can
3199 * get the entry box */
3200 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
3203 label2 = gtk_label_new(_("Example"));
3204 gtk_widget_show(label2);
3205 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
3207 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
3208 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
3210 label3 = gtk_label_new("");
3211 gtk_widget_show(label3);
3212 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
3213 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3214 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
3215 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
3217 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
3218 &cancel_btn, _("Cancel"), NULL, NULL);
3219 gtk_widget_grab_default(ok_btn);
3220 gtk_widget_show(confirm_area);
3222 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
3224 /* set the current format */
3225 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
3226 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
3229 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3230 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
3232 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
3233 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
3235 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
3236 GTK_SIGNAL_FUNC(date_format_key_pressed),
3238 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
3239 GTK_SIGNAL_FUNC(date_format_on_delete),
3241 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
3242 GTK_SIGNAL_FUNC(date_format_entry_on_change),
3245 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
3246 GTK_SIGNAL_FUNC(date_format_select_row),
3249 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
3250 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
3252 gtk_widget_show(datefmt_win);
3253 manage_window_set_transient(GTK_WINDOW(datefmt_win));
3255 gtk_widget_grab_focus(ok_btn);
3260 void prefs_quote_colors_dialog(void)
3262 if (!quote_color_win)
3263 prefs_quote_colors_dialog_create();
3264 gtk_widget_show(quote_color_win);
3265 manage_window_set_transient(GTK_WINDOW(quote_color_win));
3268 gtk_widget_hide(quote_color_win);
3270 textview_update_message_colors();
3271 main_window_reflect_prefs_all();
3274 static void prefs_quote_colors_dialog_create(void)
3279 GtkWidget *quotelevel1_label;
3280 GtkWidget *quotelevel2_label;
3281 GtkWidget *quotelevel3_label;
3282 GtkWidget *uri_label;
3283 GtkWidget *tgt_folder_label;
3286 GtkWidget *recycle_colors_btn;
3287 GtkWidget *frame_colors;
3289 window = gtk_window_new(GTK_WINDOW_DIALOG);
3290 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
3291 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
3292 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3293 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3294 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3296 vbox = gtk_vbox_new (FALSE, VSPACING);
3297 gtk_container_add (GTK_CONTAINER (window), vbox);
3298 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
3299 PACK_FRAME(vbox, frame_colors, _("Colors"));
3301 table = gtk_table_new (4, 2, FALSE);
3302 gtk_container_add (GTK_CONTAINER (frame_colors), table);
3303 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
3304 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
3305 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
3308 color_buttons.quote_level1_btn = gtk_button_new();
3309 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
3310 0, 1, 0, 1, 0, 0, 0, 0);
3311 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
3312 gtk_container_set_border_width
3313 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
3315 color_buttons.quote_level2_btn = gtk_button_new();
3316 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
3317 0, 1, 1, 2, 0, 0, 0, 0);
3318 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
3319 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
3321 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
3322 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
3323 0, 1, 2, 3, 0, 0, 0, 0);
3324 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
3325 gtk_container_set_border_width
3326 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
3328 color_buttons.uri_btn = gtk_button_new_with_label ("");
3329 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
3330 0, 1, 3, 4, 0, 0, 0, 0);
3331 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
3332 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
3334 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
3335 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
3336 0, 1, 4, 5, 0, 0, 0, 0);
3337 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
3338 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
3340 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
3341 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
3342 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3343 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
3344 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
3346 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
3347 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
3348 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3349 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
3350 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
3352 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
3353 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
3354 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3355 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
3356 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
3358 uri_label = gtk_label_new (_("URI link"));
3359 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
3360 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3361 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
3362 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
3364 tgt_folder_label = gtk_label_new (_("Target folder"));
3365 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
3366 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3367 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
3368 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
3370 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
3371 _("Recycle quote colors"));
3373 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3374 NULL, NULL, NULL, NULL);
3375 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3377 gtk_widget_grab_default(ok_btn);
3378 MANAGE_WINDOW_SIGNALS_CONNECT(window);
3379 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3380 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3381 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3382 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
3385 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
3386 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
3387 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
3388 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
3389 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
3390 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
3391 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
3392 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
3393 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
3394 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
3395 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
3396 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
3397 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3398 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3400 /* show message button colors and recycle options */
3401 set_button_bg_color(color_buttons.quote_level1_btn,
3402 prefs_common.quote_level1_col);
3403 set_button_bg_color(color_buttons.quote_level2_btn,
3404 prefs_common.quote_level2_col);
3405 set_button_bg_color(color_buttons.quote_level3_btn,
3406 prefs_common.quote_level3_col);
3407 set_button_bg_color(color_buttons.uri_btn,
3408 prefs_common.uri_col);
3409 set_button_bg_color(color_buttons.tgt_folder_btn,
3410 prefs_common.tgt_folder_col);
3411 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
3412 prefs_common.recycle_quote_colors);
3414 gtk_widget_show_all(vbox);
3415 quote_color_win = window;
3418 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
3419 GdkEventKey *event, gpointer data)
3421 if (event && event->keyval == GDK_Escape)
3425 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
3427 gchar *type = (gchar *)data;
3428 gchar *title = NULL;
3429 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
3431 GtkColorSelectionDialog *dialog;
3433 if(g_strcasecmp(type, "LEVEL1") == 0) {
3434 title = _("Pick color for quotation level 1");
3435 rgbvalue = prefs_common.quote_level1_col;
3436 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
3437 title = _("Pick color for quotation level 2");
3438 rgbvalue = prefs_common.quote_level2_col;
3439 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
3440 title = _("Pick color for quotation level 3");
3441 rgbvalue = prefs_common.quote_level3_col;
3442 } else if(g_strcasecmp(type, "URI") == 0) {
3443 title = _("Pick color for URI");
3444 rgbvalue = prefs_common.uri_col;
3445 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
3446 title = _("Pick color for target folder");
3447 rgbvalue = prefs_common.tgt_folder_col;
3449 } else if(g_strcasecmp(type, "Misspelled word") == 0) {
3450 title = _("Pick color for misspelled word");
3451 rgbvalue = prefs_common.misspelled_col;
3453 } else { /* Should never be called */
3454 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
3458 color_dialog = gtk_color_selection_dialog_new(title);
3459 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
3460 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
3461 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
3462 manage_window_set_transient(GTK_WINDOW(color_dialog));
3464 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
3465 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
3466 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
3467 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
3468 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
3469 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
3472 /* preselect the previous color in the color selection dialog */
3473 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
3474 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
3475 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
3476 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
3477 gtk_color_selection_set_color
3478 (GTK_COLOR_SELECTION(dialog->colorsel), color);
3480 gtk_widget_show(color_dialog);
3483 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
3485 GtkColorSelection *colorsel = (GtkColorSelection *)