2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2001 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"
61 PrefsCommon prefs_common;
63 static PrefsDialog dialog;
65 static struct Receive {
66 GtkWidget *checkbtn_incext;
67 GtkWidget *entry_incext;
68 GtkWidget *button_incext;
70 GtkWidget *checkbtn_local;
71 GtkWidget *checkbtn_filter_on_inc;
72 GtkWidget *entry_spool;
74 GtkWidget *checkbtn_autochk;
75 GtkWidget *spinbtn_autochk;
76 GtkObject *spinbtn_autochk_adj;
78 GtkWidget *checkbtn_chkonstartup;
79 GtkWidget *checkbtn_noerrorpanel;
80 GtkWidget *checkbtn_scan_after_inc;
83 GtkWidget *spinbtn_maxarticle;
84 GtkObject *spinbtn_maxarticle_adj;
88 GtkWidget *checkbtn_extsend;
89 GtkWidget *entry_extsend;
90 GtkWidget *button_extsend;
92 GtkWidget *checkbtn_savemsg;
93 GtkWidget *checkbtn_queuemsg;
95 GtkWidget *optmenu_charset;
97 GtkWidget *checkbtn_returnreceipt;
100 static struct Compose {
101 GtkWidget *checkbtn_autosig;
102 GtkWidget *entry_sigsep;
104 GtkWidget *entry_fw_quotemark;
105 GtkWidget *text_fw_quotefmt;
107 GtkWidget *checkbtn_autoextedit;
108 GtkWidget *spinbtn_undolevel;
109 GtkObject *spinbtn_undolevel_adj;
110 GtkWidget *checkbtn_reply_account_autosel;
111 GtkWidget *checkbtn_forward_account_autosel;
112 GtkWidget *checkbtn_reedit_account_autosel;
114 GtkWidget *spinbtn_linewrap;
115 GtkObject *spinbtn_linewrap_adj;
116 GtkWidget *checkbtn_wrapquote;
117 GtkWidget *checkbtn_wrapatsend;
119 GtkWidget *checkbtn_quote;
120 GtkWidget *checkbtn_forward_as_attachment;
121 GtkWidget *checkbtn_smart_wrapping;
122 GtkWidget *checkbtn_block_cursor;
123 GtkWidget *checkbtn_reply_with_quote;
128 static struct Spelling {
129 GtkWidget *checkbtn_enable_pspell;
130 GtkWidget *entry_pspell_path;
131 GtkWidget *btn_pspell_path;
132 GtkWidget *optmenu_dictionary;
133 GtkWidget *optmenu_sugmode;
137 static struct Quote {
138 GtkWidget *entry_quotemark;
139 GtkWidget *text_quotefmt;
141 GtkWidget *entry_fw_quotemark;
142 GtkWidget *text_fw_quotefmt;
145 static struct Display {
146 GtkWidget *entry_textfont;
147 GtkWidget *button_textfont;
149 GtkWidget *entry_smallfont;
150 GtkWidget *entry_normalfont;
151 GtkWidget *entry_boldfont;
153 GtkWidget *chkbtn_folder_unread;
155 GtkWidget *chkbtn_transhdr;
157 GtkWidget *chkbtn_swapfrom;
158 GtkWidget *chkbtn_hscrollbar;
159 GtkWidget *chkbtn_useaddrbook;
160 GtkWidget *chkbtn_expand_thread;
161 GtkWidget *chkbtn_bold_unread;
163 GtkWidget *entry_datefmt;
166 static struct Message {
167 GtkWidget *chkbtn_enablecol;
168 GtkWidget *button_edit_col;
169 GtkWidget *chkbtn_mbalnum;
170 GtkWidget *chkbtn_disphdrpane;
171 GtkWidget *chkbtn_disphdr;
172 GtkWidget *spinbtn_linespc;
173 GtkObject *spinbtn_linespc_adj;
174 GtkWidget *chkbtn_headspc;
176 GtkWidget *chkbtn_smoothscroll;
177 GtkWidget *spinbtn_scrollstep;
178 GtkObject *spinbtn_scrollstep_adj;
179 GtkWidget *chkbtn_halfpage;
183 static struct Privacy {
184 GtkWidget *checkbtn_default_encrypt;
185 GtkWidget *checkbtn_ascii_armored;
186 GtkWidget *checkbtn_default_sign;
187 GtkWidget *checkbtn_auto_check_signatures;
188 GtkWidget *checkbtn_gpg_signature_popup;
189 GtkWidget *checkbtn_passphrase_grab;
190 GtkWidget *checkbtn_gpg_warning;
191 GtkWidget *optmenu_default_signkey;
195 static struct Interface {
196 /* GtkWidget *checkbtn_emacs; */
197 GtkWidget *checkbtn_openunread;
198 GtkWidget *checkbtn_openinbox;
199 GtkWidget *checkbtn_immedexec;
200 GtkWidget *checkbtn_confonexit;
201 GtkWidget *checkbtn_cleanonexit;
202 GtkWidget *checkbtn_askonclean;
203 GtkWidget *checkbtn_warnqueued;
204 GtkWidget *checkbtn_addaddrbyclick;
205 GtkWidget *optmenu_recvdialog;
206 GtkWidget *optmenu_nextunreadmsgdialog;
209 static struct Other {
210 GtkWidget *uri_combo;
211 GtkWidget *uri_entry;
212 GtkWidget *printcmd_entry;
213 GtkWidget *exteditor_combo;
214 GtkWidget *exteditor_entry;
217 static struct MessageColorButtons {
218 GtkWidget *quote_level1_btn;
219 GtkWidget *quote_level2_btn;
220 GtkWidget *quote_level3_btn;
222 GtkWidget *tgt_folder_btn;
223 GtkWidget *misspelled_btn;
226 static GtkWidget *quote_desc_win;
227 static GtkWidget *font_sel_win;
228 static guint font_sel_conn_id;
229 static GtkWidget *quote_color_win;
230 static GtkWidget *color_dialog;
232 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
233 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
235 static void prefs_common_default_signkey_set_data_from_optmenu
237 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
238 static void prefs_common_ascii_armored_warning(GtkWidget* widget,
241 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
242 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
243 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
244 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
247 static void prefs_dictionary_set_data_from_optmenu (PrefParam *param);
248 static void prefs_dictionary_set_optmenu (PrefParam *pparam);
249 static void prefs_speller_sugmode_set_data_from_optmenu (PrefParam *pparam);
250 static void prefs_speller_sugmode_set_optmenu (PrefParam *pparam);
255 parameter name, default value, pointer to the prefs variable, data type,
256 pointer to the widget pointer,
257 pointer to the function for data setting,
258 pointer to the function for widget setting
261 static PrefParam param[] = {
263 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
264 &receive.checkbtn_incext,
265 prefs_set_data_from_toggle, prefs_set_toggle},
266 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
267 &receive.entry_incext,
268 prefs_set_data_from_entry, prefs_set_entry},
270 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
271 &receive.checkbtn_local,
272 prefs_set_data_from_toggle, prefs_set_toggle},
273 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
274 &receive.checkbtn_filter_on_inc,
275 prefs_set_data_from_toggle, prefs_set_toggle},
276 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
277 &receive.entry_spool,
278 prefs_set_data_from_entry, prefs_set_entry},
280 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
281 &receive.checkbtn_autochk,
282 prefs_set_data_from_toggle, prefs_set_toggle},
283 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
284 &receive.spinbtn_autochk,
285 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
286 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
287 &receive.checkbtn_chkonstartup,
288 prefs_set_data_from_toggle, prefs_set_toggle},
289 {"noerrorpanel", "FALSE", &prefs_common.noerrorpanel, P_BOOL,
290 &receive.checkbtn_noerrorpanel,
291 prefs_set_data_from_toggle, prefs_set_toggle},
292 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
293 P_BOOL, &receive.checkbtn_scan_after_inc,
294 prefs_set_data_from_toggle, prefs_set_toggle},
295 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
296 &receive.spinbtn_maxarticle,
297 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
300 {"use_ext_sendmail", "FALSE", &prefs_common.use_extsend, P_BOOL,
301 &send.checkbtn_extsend,
302 prefs_set_data_from_toggle, prefs_set_toggle},
303 {"ext_sendmail_cmd", DEFAULT_SENDMAIL_CMD,
304 &prefs_common.extsend_cmd, P_STRING,
305 &send.entry_extsend, prefs_set_data_from_entry, prefs_set_entry},
306 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
307 &send.checkbtn_savemsg,
308 prefs_set_data_from_toggle, prefs_set_toggle},
309 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
310 &send.checkbtn_queuemsg,
311 prefs_set_data_from_toggle, prefs_set_toggle},
313 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
314 &send.optmenu_charset,
315 prefs_common_charset_set_data_from_optmenu,
316 prefs_common_charset_set_optmenu},
319 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
320 &compose.checkbtn_autosig,
321 prefs_set_data_from_toggle, prefs_set_toggle},
322 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
323 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
325 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
326 &compose.checkbtn_autoextedit,
327 prefs_set_data_from_toggle, prefs_set_toggle},
329 {"undo_level", "50", &prefs_common.undolevels, P_INT,
330 &compose.spinbtn_undolevel,
331 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
333 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
334 &compose.spinbtn_linewrap,
335 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
336 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
337 &compose.checkbtn_wrapquote,
338 prefs_set_data_from_toggle, prefs_set_toggle},
339 {"linewrap_before_sending", "FALSE",
340 &prefs_common.linewrap_at_send, P_BOOL,
341 &compose.checkbtn_wrapatsend,
342 prefs_set_data_from_toggle, prefs_set_toggle},
343 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
344 P_BOOL, &compose.checkbtn_forward_as_attachment,
345 prefs_set_data_from_toggle, prefs_set_toggle},
346 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
347 P_BOOL, &compose.checkbtn_smart_wrapping,
348 prefs_set_data_from_toggle, prefs_set_toggle},
349 {"block_cursor", "FALSE", &prefs_common.block_cursor,
350 P_BOOL, &compose.checkbtn_block_cursor,
351 prefs_set_data_from_toggle, prefs_set_toggle},
353 {"enable_pspell", "TRUE", &prefs_common.enable_pspell,
354 P_BOOL, &spelling.checkbtn_enable_pspell,
355 prefs_set_data_from_toggle, prefs_set_toggle},
356 {"pspell_path", "/usr/local/share/pspell/", &prefs_common.pspell_path,
357 P_STRING, &spelling.entry_pspell_path,
358 prefs_set_data_from_entry, prefs_set_entry},
359 {"dictionary", "", &prefs_common.dictionary,
360 P_STRING, &spelling.optmenu_dictionary,
361 prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
362 {"pspell_sugmode", "1", &prefs_common.pspell_sugmode,
363 P_INT, &spelling.optmenu_sugmode,
364 prefs_speller_sugmode_set_data_from_optmenu, prefs_speller_sugmode_set_optmenu },
365 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_INT,
368 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
369 &compose.checkbtn_reply_with_quote, prefs_set_data_from_toggle, prefs_set_toggle},
371 /* Account autoselection */
372 {"reply_account_autoselect", "TRUE",
373 &prefs_common.reply_account_autosel, P_BOOL,
374 &compose.checkbtn_reply_account_autosel,
375 prefs_set_data_from_toggle, prefs_set_toggle},
376 {"forward_account_autoselect", "TRUE",
377 &prefs_common.forward_account_autosel, P_BOOL,
378 &compose.checkbtn_forward_account_autosel,
379 prefs_set_data_from_toggle, prefs_set_toggle},
380 {"reedit_account_autoselect", "TRUE",
381 &prefs_common.reedit_account_autosel, P_BOOL,
382 &compose.checkbtn_reedit_account_autosel,
383 prefs_set_data_from_toggle, prefs_set_toggle},
385 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
389 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
390 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
391 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
392 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
393 prefs_set_data_from_text, prefs_set_text},
395 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
396 "e.entry_fw_quotemark,
397 prefs_set_data_from_entry, prefs_set_entry},
398 {"forward_quote_format",
399 "\\n\\nBegin forwarded message:\\n\\n"
400 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
401 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
402 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
403 prefs_set_data_from_text, prefs_set_text},
406 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
408 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
409 &prefs_common.textfont, P_STRING,
410 &display.entry_textfont,
411 prefs_set_data_from_entry, prefs_set_entry},
412 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
413 &prefs_common.smallfont, P_STRING,
414 &display.entry_smallfont,
415 prefs_set_data_from_entry, prefs_set_entry},
416 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
417 &prefs_common.boldfont, P_STRING,
418 &display.entry_boldfont,
419 prefs_set_data_from_entry, prefs_set_entry},
420 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
421 &prefs_common.normalfont, P_STRING,
422 &display.entry_normalfont,
423 prefs_set_data_from_entry, prefs_set_entry},
426 {"display_folder_unread_num", "TRUE",
427 &prefs_common.display_folder_unread, P_BOOL,
428 &display.chkbtn_folder_unread,
429 prefs_set_data_from_toggle, prefs_set_toggle},
431 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
432 &display.chkbtn_transhdr,
433 prefs_set_data_from_toggle, prefs_set_toggle},
435 /* Display: Summary View */
436 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
437 &display.chkbtn_swapfrom,
438 prefs_set_data_from_toggle, prefs_set_toggle},
439 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
440 &display.chkbtn_hscrollbar,
441 prefs_set_data_from_toggle, prefs_set_toggle},
442 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
443 &display.chkbtn_useaddrbook,
444 prefs_set_data_from_toggle, prefs_set_toggle},
445 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
446 P_STRING, &display.entry_datefmt,
447 prefs_set_data_from_entry, prefs_set_entry},
448 {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
449 &display.chkbtn_expand_thread,
450 prefs_set_data_from_toggle, prefs_set_toggle},
451 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
452 &display.chkbtn_bold_unread,
453 prefs_set_data_from_toggle, prefs_set_toggle},
455 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
458 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
460 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
463 {"summary_col_show_mark", "TRUE",
464 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
465 {"summary_col_show_unread", "TRUE",
466 &prefs_common.summary_col_visible[S_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
467 {"summary_col_show_mime", "TRUE",
468 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
469 {"summary_col_show_subject", "TRUE",
470 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
471 {"summary_col_show_from", "TRUE",
472 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
473 {"summary_col_show_date", "TRUE",
474 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
475 {"summary_col_show_size", "TRUE",
476 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
477 {"summary_col_show_number", "FALSE",
478 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
479 {"summary_col_show_score", "FALSE",
480 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
481 {"summary_col_show_locked", "FALSE",
482 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
484 {"summary_col_pos_mark", "0",
485 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
486 {"summary_col_pos_unread", "1",
487 &prefs_common.summary_col_pos[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
488 {"summary_col_pos_mime", "2",
489 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
490 {"summary_col_pos_subject", "3",
491 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
492 {"summary_col_pos_from", "4",
493 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
494 {"summary_col_pos_date", "5",
495 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
496 {"summary_col_pos_size", "6",
497 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
498 {"summary_col_pos_number", "7",
499 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
500 {"summary_col_pos_score", "8",
501 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
502 {"summary_col_pos_locked", "9",
503 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
505 {"summary_col_size_mark", "10",
506 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
507 {"summary_col_size_unread", "13",
508 &prefs_common.summary_col_size[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
509 {"summary_col_size_mime", "10",
510 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
511 {"summary_col_size_subject", "200",
512 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
513 {"summary_col_size_from", "120",
514 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
515 {"summary_col_size_date", "118",
516 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
517 {"summary_col_size_size", "45",
518 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
519 {"summary_col_size_number", "40",
520 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
521 {"summary_col_size_score", "40",
522 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
523 {"summary_col_size_locked", "13",
524 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
527 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
529 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
531 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
533 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
535 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
537 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
540 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
542 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
545 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
547 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
549 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
551 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
553 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
555 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
557 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
559 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
561 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
563 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
565 {"compose_width", "600", &prefs_common.compose_width, P_INT,
567 {"compose_height", "560", &prefs_common.compose_height, P_INT,
571 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
572 &message.chkbtn_enablecol,
573 prefs_set_data_from_toggle, prefs_set_toggle},
575 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
577 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
579 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
581 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
583 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
585 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
587 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
588 P_BOOL, NULL, NULL, NULL},
590 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
591 &message.chkbtn_mbalnum,
592 prefs_set_data_from_toggle, prefs_set_toggle},
593 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
594 P_BOOL, &message.chkbtn_disphdrpane,
595 prefs_set_data_from_toggle, prefs_set_toggle},
596 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
597 &message.chkbtn_disphdr,
598 prefs_set_data_from_toggle, prefs_set_toggle},
599 {"line_space", "2", &prefs_common.line_space, P_INT,
600 &message.spinbtn_linespc,
601 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
602 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
603 &message.chkbtn_headspc,
604 prefs_set_data_from_toggle, prefs_set_toggle},
606 {"enable_smooth_scroll", "FALSE",
607 &prefs_common.enable_smooth_scroll, P_BOOL,
608 &message.chkbtn_smoothscroll,
609 prefs_set_data_from_toggle, prefs_set_toggle},
610 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
611 &message.spinbtn_scrollstep,
612 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
613 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
614 &message.chkbtn_halfpage,
615 prefs_set_data_from_toggle, prefs_set_toggle},
617 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
621 {"mime_image_viewer", "display '%s'",
622 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
623 {"mime_audio_player", "play '%s'",
624 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
625 {"mime_open_command", "gedit '%s'",
626 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
630 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
631 &privacy.checkbtn_default_encrypt,
632 prefs_set_data_from_toggle, prefs_set_toggle},
633 {"ascii_armored", "FALSE", &prefs_common.ascii_armored, P_BOOL,
634 &privacy.checkbtn_ascii_armored,
635 prefs_set_data_from_toggle, prefs_set_toggle},
636 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
637 &privacy.checkbtn_default_sign,
638 prefs_set_data_from_toggle, prefs_set_toggle},
639 {"auto_check_signatures", "TRUE",
640 &prefs_common.auto_check_signatures, P_BOOL,
641 &privacy.checkbtn_auto_check_signatures,
642 prefs_set_data_from_toggle, prefs_set_toggle},
643 {"gpg_signature_popup", "FALSE",
644 &prefs_common.gpg_signature_popup, P_BOOL,
645 &privacy.checkbtn_gpg_signature_popup,
646 prefs_set_data_from_toggle, prefs_set_toggle},
648 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
649 &privacy.checkbtn_passphrase_grab,
650 prefs_set_data_from_toggle, prefs_set_toggle},
651 #endif /* __MINGW32__ */
652 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
653 &privacy.checkbtn_gpg_warning,
654 prefs_set_data_from_toggle, prefs_set_toggle},
655 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
656 &privacy.optmenu_default_signkey,
657 prefs_common_default_signkey_set_data_from_optmenu,
658 prefs_common_default_signkey_set_optmenu},
659 #endif /* USE_GPGME */
662 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
664 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
667 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
668 NULL, NULL, NULL}, */
670 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
671 P_BOOL, &interface.checkbtn_openunread,
672 prefs_set_data_from_toggle, prefs_set_toggle},
673 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
674 P_BOOL, &interface.checkbtn_openinbox,
675 prefs_set_data_from_toggle, prefs_set_toggle},
676 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
677 &interface.checkbtn_immedexec,
678 prefs_set_data_from_toggle, prefs_set_toggle},
679 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
680 &interface.optmenu_recvdialog,
681 prefs_common_recv_dialog_set_data_from_optmenu,
682 prefs_common_recv_dialog_set_optmenu},
683 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
684 &interface.optmenu_nextunreadmsgdialog,
685 prefs_nextunreadmsgdialog_set_data_from_optmenu,
686 prefs_nextunreadmsgdialog_set_optmenu},
688 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
689 P_BOOL, &interface.checkbtn_addaddrbyclick,
690 prefs_set_data_from_toggle, prefs_set_toggle},
691 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
692 &interface.checkbtn_confonexit,
693 prefs_set_data_from_toggle, prefs_set_toggle},
694 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
695 &send.checkbtn_returnreceipt,
696 prefs_set_data_from_toggle, prefs_set_toggle},
697 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
698 &interface.checkbtn_cleanonexit,
699 prefs_set_data_from_toggle, prefs_set_toggle},
700 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
701 &interface.checkbtn_askonclean,
702 prefs_set_data_from_toggle, prefs_set_toggle},
703 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
704 P_BOOL, &interface.checkbtn_warnqueued,
705 prefs_set_data_from_toggle, prefs_set_toggle},
708 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
709 &prefs_common.uri_cmd, P_STRING,
710 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
711 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
712 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
713 {"ext_editor_command", "gedit %s",
714 &prefs_common.ext_editor_cmd, P_STRING,
715 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
717 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
719 {"important_score", "1", &prefs_common.important_score, P_INT,
722 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
725 /* widget creating functions */
726 static void prefs_common_create (void);
727 static void prefs_receive_create (void);
728 static void prefs_send_create (void);
729 static void prefs_compose_create (void);
730 static void prefs_spelling_create (void);
731 static void prefs_quote_create (void);
732 static void prefs_display_create (void);
733 static void prefs_message_create (void);
735 static void prefs_privacy_create (void);
737 static void prefs_interface_create (void);
738 static void prefs_other_create (void);
740 static void date_format_ok_btn_clicked (GtkButton *button,
742 static void date_format_cancel_btn_clicked (GtkButton *button,
744 static void date_format_key_pressed (GtkWidget *keywidget,
747 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
750 static void date_format_entry_on_change (GtkEditable *editable,
752 static void date_format_select_row (GtkWidget *date_format_list,
755 GdkEventButton *event,
756 GtkWidget *date_format);
757 static GtkWidget *date_format_create (GtkButton *button,
760 static void prefs_quote_description_create (void);
761 static void prefs_quote_description_key_pressed (GtkWidget *widget,
765 static void prefs_quote_colors_dialog (void);
766 static void prefs_quote_colors_dialog_create (void);
767 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
770 static void quote_color_set_dialog (GtkWidget *widget,
772 static void quote_colors_set_dialog_ok (GtkWidget *widget,
774 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
776 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
779 static void set_button_bg_color (GtkWidget *widget,
781 static void prefs_enable_message_color_toggled (void);
782 static void prefs_recycle_colors_toggled (GtkWidget *widget);
784 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
786 static void prefs_font_selection_key_pressed (GtkWidget *widget,
789 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
791 static gint prefs_common_deleted (GtkWidget *widget,
794 static void prefs_common_key_pressed (GtkWidget *widget,
797 static void prefs_common_ok (void);
798 static void prefs_common_apply (void);
799 static void prefs_common_cancel (void);
801 void prefs_common_init() {
802 prefs_common.fltlist = NULL;
803 prefs_common.disphdr_list = NULL;
806 void prefs_common_read_config(void)
810 gchar buf[PREFSBUFSIZE];
812 prefs_read_config(param, "Common", COMMON_RC);
814 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
816 if ((fp = fopen(path, "r")) == NULL) {
817 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
822 while (fgets(buf, sizeof(buf), fp) != NULL) {
824 if (buf[0] == '\0') continue;
825 prefs_common.mime_open_cmd_history =
826 add_history(prefs_common.mime_open_cmd_history, buf);
830 prefs_common.mime_open_cmd_history =
831 g_list_reverse(prefs_common.mime_open_cmd_history);
834 void prefs_common_save_config(void)
840 prefs_save_config(param, "Common", COMMON_RC);
842 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
844 if ((fp = fopen(path, "w")) == NULL) {
845 FILE_OP_ERROR(path, "fopen");
850 for (cur = prefs_common.mime_open_cmd_history;
851 cur != NULL; cur = cur->next) {
852 fputs((gchar *)cur->data, fp);
860 void prefs_common_open(void)
862 if (prefs_rc_is_readonly(COMMON_RC))
867 if (!dialog.window) {
868 prefs_common_create();
871 manage_window_set_transient(GTK_WINDOW(dialog.window));
872 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
873 gtk_widget_grab_focus(dialog.ok_btn);
875 prefs_set_dialog(param);
877 gtk_widget_show(dialog.window);
880 static void prefs_common_create(void)
884 debug_print(_("Creating common preferences window...\n"));
886 prefs_dialog_create(&dialog);
887 gtk_window_set_title (GTK_WINDOW(dialog.window),
888 _("Common Preferences"));
889 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
890 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
891 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
892 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
893 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
894 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
895 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
896 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
897 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
898 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
899 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
900 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
901 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
902 GTK_SIGNAL_FUNC(prefs_common_cancel),
903 GTK_OBJECT(dialog.window));
905 /* create all widgets on notebook */
906 prefs_receive_create();
907 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
909 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
910 prefs_compose_create();
911 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
913 prefs_spelling_create();
914 SET_NOTEBOOK_LABEL(dialog.notebook, _("Spell Checker"), page++);
916 prefs_quote_create();
917 SET_NOTEBOOK_LABEL(dialog.notebook, _("Quote"), page++);
918 prefs_display_create();
919 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
920 prefs_message_create();
921 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
923 prefs_privacy_create();
924 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
926 prefs_interface_create();
927 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
928 prefs_other_create();
929 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
931 gtk_widget_show_all(dialog.window);
934 static void prefs_receive_create(void)
938 GtkWidget *frame_incext;
939 GtkWidget *checkbtn_incext;
941 GtkWidget *label_incext;
942 GtkWidget *entry_incext;
943 /* GtkWidget *button_incext; */
945 GtkWidget *frame_spool;
946 GtkWidget *checkbtn_local;
947 GtkWidget *checkbtn_filter_on_inc;
948 GtkWidget *label_spool;
949 GtkWidget *entry_spool;
951 GtkWidget *hbox_autochk;
952 GtkWidget *checkbtn_autochk;
953 GtkWidget *label_autochk1;
954 GtkObject *spinbtn_autochk_adj;
955 GtkWidget *spinbtn_autochk;
956 GtkWidget *label_autochk2;
957 GtkWidget *checkbtn_chkonstartup;
958 GtkWidget *checkbtn_noerrorpanel;
959 GtkWidget *checkbtn_scan_after_inc;
962 GtkWidget *frame_news;
963 GtkWidget *label_maxarticle;
964 GtkWidget *spinbtn_maxarticle;
965 GtkObject *spinbtn_maxarticle_adj;
967 vbox1 = gtk_vbox_new (FALSE, VSPACING);
968 gtk_widget_show (vbox1);
969 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
970 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
972 PACK_FRAME(vbox1, frame_incext, _("External program"));
974 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
975 gtk_widget_show (vbox2);
976 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
977 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
979 /* Use of external incorporation program */
980 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
981 _("Use external program for incorporation"));
983 hbox = gtk_hbox_new (FALSE, 8);
984 gtk_widget_show (hbox);
985 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
986 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
988 label_incext = gtk_label_new (_("Command"));
989 gtk_widget_show (label_incext);
990 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
992 entry_incext = gtk_entry_new ();
993 gtk_widget_show (entry_incext);
994 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
997 button_incext = gtk_button_new_with_label ("... ");
998 gtk_widget_show (button_incext);
999 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1002 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
1004 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1005 gtk_widget_show (vbox2);
1006 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
1007 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1009 hbox = gtk_hbox_new (FALSE, 32);
1010 gtk_widget_show (hbox);
1011 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1013 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
1014 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
1015 _("Filter on incorporation"));
1016 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
1018 hbox = gtk_hbox_new (FALSE, 8);
1019 gtk_widget_show (hbox);
1020 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1021 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
1023 label_spool = gtk_label_new (_("Spool directory"));
1024 gtk_widget_show (label_spool);
1025 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
1027 entry_spool = gtk_entry_new ();
1028 gtk_widget_show (entry_spool);
1029 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
1031 vbox2 = gtk_vbox_new (FALSE, 0);
1032 gtk_widget_show (vbox2);
1033 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1036 hbox_autochk = gtk_hbox_new (FALSE, 8);
1037 gtk_widget_show (hbox_autochk);
1038 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1040 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1041 _("Auto-check new mail"));
1043 label_autochk1 = gtk_label_new (_("every"));
1044 gtk_widget_show (label_autochk1);
1045 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1047 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1048 spinbtn_autochk = gtk_spin_button_new
1049 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1050 gtk_widget_show (spinbtn_autochk);
1051 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1052 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
1053 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1055 label_autochk2 = gtk_label_new (_("minute(s)"));
1056 gtk_widget_show (label_autochk2);
1057 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1059 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1060 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1061 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1063 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1064 _("Check new mail on startup"));
1066 PACK_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel,
1067 _("No error popup on receive error"));
1068 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1069 _("Update all local folders after incorporation"));
1071 PACK_FRAME(vbox1, frame_news, _("News"));
1073 hbox = gtk_hbox_new (FALSE, 8);
1074 gtk_widget_show (hbox);
1075 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
1076 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
1078 label_maxarticle = gtk_label_new
1079 (_("Maximum number of articles to download\n"
1080 "(unlimited if 0 is specified)"));
1081 gtk_widget_show (label_maxarticle);
1082 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
1083 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
1085 spinbtn_maxarticle_adj =
1086 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
1087 spinbtn_maxarticle = gtk_spin_button_new
1088 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
1089 gtk_widget_show (spinbtn_maxarticle);
1090 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
1092 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
1093 gtk_spin_button_set_numeric
1094 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
1096 receive.checkbtn_incext = checkbtn_incext;
1097 receive.entry_incext = entry_incext;
1098 /* receive.button_incext = button_incext; */
1100 receive.checkbtn_local = checkbtn_local;
1101 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
1102 receive.entry_spool = entry_spool;
1104 receive.checkbtn_autochk = checkbtn_autochk;
1105 receive.spinbtn_autochk = spinbtn_autochk;
1106 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1108 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1109 receive.checkbtn_noerrorpanel = checkbtn_noerrorpanel;
1110 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1113 receive.spinbtn_maxarticle = spinbtn_maxarticle;
1114 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
1117 static void prefs_send_create(void)
1121 GtkWidget *frame_extsend;
1122 GtkWidget *vbox_extsend;
1123 GtkWidget *checkbtn_extsend;
1125 GtkWidget *label_extsend;
1126 GtkWidget *entry_extsend;
1127 /* GtkWidget *button_extsend; */
1128 GtkWidget *checkbtn_savemsg;
1129 GtkWidget *checkbtn_queuemsg;
1130 GtkWidget *label_outcharset;
1132 GtkWidget *optmenu_menu;
1133 GtkWidget *menuitem;
1134 GtkWidget *checkbtn_returnreceipt;
1135 GtkWidget *label_charset_desc;
1137 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1138 gtk_widget_show (vbox1);
1139 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1140 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1142 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1144 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1145 gtk_widget_show (vbox_extsend);
1146 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1147 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1149 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1150 _("Use external program for sending"));
1152 hbox1 = gtk_hbox_new (FALSE, 8);
1153 gtk_widget_show (hbox1);
1154 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1155 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1157 label_extsend = gtk_label_new (_("Command"));
1158 gtk_widget_show (label_extsend);
1159 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1161 entry_extsend = gtk_entry_new ();
1162 gtk_widget_show (entry_extsend);
1163 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1166 button_extsend = gtk_button_new_with_label ("... ");
1167 gtk_widget_show (button_extsend);
1168 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1171 vbox2 = gtk_vbox_new (FALSE, 0);
1172 gtk_widget_show (vbox2);
1173 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1175 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1176 _("Save sent messages to outbox"));
1177 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1178 _("Queue messages that fail to send"));
1179 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1180 _("Send return receipt on request"));
1182 hbox1 = gtk_hbox_new (FALSE, 8);
1183 gtk_widget_show (hbox1);
1184 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1186 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1187 gtk_widget_show (label_outcharset);
1188 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1190 optmenu = gtk_option_menu_new ();
1191 gtk_widget_show (optmenu);
1192 gtk_box_pack_start (GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1194 optmenu_menu = gtk_menu_new ();
1196 #define SET_MENUITEM(str, charset) \
1198 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1201 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1202 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1204 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1206 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1207 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1208 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1209 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1210 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1211 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1213 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1215 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1217 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1218 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1220 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1222 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1223 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1225 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1226 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1228 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1229 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1231 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1232 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1233 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1235 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1237 hbox1 = gtk_hbox_new (FALSE, 8);
1238 gtk_widget_show (hbox1);
1239 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1241 label_charset_desc = gtk_label_new
1242 (_("If `Automatic' is selected, the optimal encoding\n"
1243 "for the current locale will be used."));
1244 gtk_widget_show (label_charset_desc);
1245 gtk_box_pack_start (GTK_BOX (hbox1), label_charset_desc,
1247 gtk_label_set_justify(GTK_LABEL (label_charset_desc), GTK_JUSTIFY_LEFT);
1249 send.checkbtn_extsend = checkbtn_extsend;
1250 send.entry_extsend = entry_extsend;
1251 /* send.button_extsend = button_extsend; */
1253 send.checkbtn_savemsg = checkbtn_savemsg;
1254 send.checkbtn_queuemsg = checkbtn_queuemsg;
1255 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1257 send.optmenu_charset = optmenu;
1261 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1266 g_return_if_fail(param);
1267 g_return_if_fail(param->data);
1268 g_return_if_fail(param->widget);
1269 g_return_if_fail(*(param->widget));
1271 dict_name = gtkpspell_get_dictionary_menu_active_item
1272 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1273 str = *((gchar **) param->data);
1276 *((gchar **) param->data) = dict_name;
1279 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1282 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1284 GtkWidget *menuitem;
1288 g_return_if_fail(optmenu != NULL);
1289 g_return_if_fail(pparam->data != NULL);
1291 if (*(gchar **) pparam->data) {
1292 menu = gtk_option_menu_get_menu(optmenu);
1293 for (cur = GTK_MENU_SHELL(menu)->children;
1294 cur != NULL; cur = cur->next) {
1295 menuitem = GTK_WIDGET(cur->data);
1296 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem), "dict_name");
1297 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1298 gtk_option_menu_set_history(optmenu, n);
1305 gtk_option_menu_set_history(optmenu, 0);
1306 prefs_dictionary_set_data_from_optmenu(pparam);
1309 static void prefs_speller_sugmode_set_data_from_optmenu(PrefParam *param)
1312 g_return_if_fail(param);
1313 g_return_if_fail(param->data);
1314 g_return_if_fail(param->widget);
1315 g_return_if_fail(*(param->widget));
1317 sugmode = gtkpspell_get_sugmode_from_option_menu
1318 (GTK_OPTION_MENU(*(param->widget)));
1319 *((gint *) param->data) = sugmode;
1322 static void prefs_speller_sugmode_set_optmenu(PrefParam *pparam)
1324 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1326 GtkWidget *menuitem;
1329 g_return_if_fail(optmenu != NULL);
1330 g_return_if_fail(pparam->data != NULL);
1332 sugmode = *(gint *) pparam->data;
1333 gtkpspell_sugmode_option_menu_set(optmenu, sugmode);
1337 static void prefs_spelling_checkbtn_enable_pspell_toggle_cb
1343 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1345 gtk_widget_set_sensitive(spelling.entry_pspell_path, toggled);
1346 gtk_widget_set_sensitive(spelling.optmenu_dictionary, toggled);
1347 gtk_widget_set_sensitive(spelling.optmenu_sugmode, toggled);
1348 gtk_widget_set_sensitive(spelling.btn_pspell_path, toggled);
1349 gtk_widget_set_sensitive(color_buttons.misspelled_btn, toggled);
1352 static void prefs_spelling_btn_pspell_path_clicked_cb(GtkWidget *widget,
1355 gchar *file_path, *tmp;
1356 GtkWidget *new_menu;
1358 file_path = filesel_select_file(_("Select dictionaries location"),
1359 prefs_common.pspell_path);
1360 if (file_path == NULL) {
1364 tmp=g_dirname(file_path);
1366 if (prefs_common.pspell_path)
1367 g_free(prefs_common.pspell_path);
1368 prefs_common.pspell_path = g_strdup_printf("%s%s",tmp,G_DIR_SEPARATOR_S);
1370 new_menu = gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path);
1371 gtk_option_menu_set_menu(GTK_OPTION_MENU(spelling.optmenu_dictionary),
1374 gtk_entry_set_text(GTK_ENTRY(spelling.entry_pspell_path), prefs_common.pspell_path);
1375 /* select first one */
1376 gtk_option_menu_set_history(GTK_OPTION_MENU(spelling.optmenu_dictionary), 0);
1378 prefs_common.dictionary = gtkpspell_get_dictionary_menu_active_item(
1379 gtk_option_menu_get_menu(GTK_OPTION_MENU(spelling.optmenu_dictionary)));
1386 static void prefs_spelling_create()
1389 GtkWidget *frame_spell;
1390 GtkWidget *hbox_spell;
1391 GtkWidget *vbox_spell;
1392 GtkWidget *hbox_pspell_path;
1393 GtkWidget *checkbtn_enable_pspell;
1394 GtkWidget *label_pspell_path;
1395 GtkWidget *entry_pspell_path;
1396 GtkWidget *btn_pspell_path;
1397 GtkWidget *spell_table;
1398 GtkWidget *label_dictionary;
1399 GtkWidget *optmenu_dictionary;
1400 GtkWidget *sugmode_label;
1401 GtkWidget *sugmode_optmenu;
1402 GtkWidget *color_label;
1403 GtkWidget *hbox_col;
1404 GtkWidget *col_align;
1407 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1408 gtk_widget_show (vbox1);
1409 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1410 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1412 /* spell checker defaults */
1413 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1414 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1415 gtk_widget_show (vbox_spell);
1416 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1417 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1419 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_pspell,
1420 _("Enable spell checker (EXPERIMENTAL)"));
1422 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_pspell), "toggled",
1423 GTK_SIGNAL_FUNC(prefs_spelling_checkbtn_enable_pspell_toggle_cb),
1426 spell_table = gtk_table_new(4, 3, FALSE);
1427 gtk_container_set_border_width (GTK_CONTAINER (spell_table), 0);
1428 gtk_table_set_row_spacings(GTK_TABLE(spell_table), 8);
1429 gtk_table_set_col_spacings(GTK_TABLE(spell_table), 8);
1431 gtk_box_pack_start(GTK_BOX(vbox_spell), spell_table, TRUE, TRUE, 0);
1434 label_pspell_path = gtk_label_new (_("Dictionaries path:"));
1435 gtk_misc_set_alignment(GTK_MISC(label_pspell_path), 1.0, 0.5);
1436 gtk_widget_show(label_pspell_path);
1437 gtk_table_attach (GTK_TABLE (spell_table), label_pspell_path, 0, 1, 0, 1,
1438 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1440 hbox_pspell_path = gtk_hbox_new (FALSE, 8);
1441 gtk_table_attach (GTK_TABLE (spell_table), hbox_pspell_path, 1, 2, 0, 1,
1442 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1443 gtk_widget_show(hbox_pspell_path);
1445 entry_pspell_path = gtk_entry_new();
1446 gtk_widget_show(entry_pspell_path);
1447 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), entry_pspell_path, TRUE, TRUE, 0);
1449 gtk_widget_set_sensitive(entry_pspell_path, prefs_common.enable_pspell);
1451 btn_pspell_path = gtk_button_new_with_label(" ... ");
1452 gtk_widget_show(btn_pspell_path);
1453 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), btn_pspell_path, FALSE, FALSE, 0);
1454 gtk_widget_set_sensitive(btn_pspell_path, prefs_common.enable_pspell);
1456 gtk_signal_connect(GTK_OBJECT(btn_pspell_path), "clicked",
1457 GTK_SIGNAL_FUNC(prefs_spelling_btn_pspell_path_clicked_cb),
1460 label_dictionary = gtk_label_new(_("Default dictionary:"));
1461 gtk_misc_set_alignment(GTK_MISC(label_dictionary), 1.0, 0.5);
1462 gtk_widget_show(label_dictionary);
1463 gtk_table_attach (GTK_TABLE (spell_table), label_dictionary, 0, 1, 1, 2,
1464 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1466 optmenu_dictionary = gtk_option_menu_new();
1467 gtk_widget_show(optmenu_dictionary);
1468 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1469 gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path));
1470 gtk_table_attach (GTK_TABLE (spell_table), optmenu_dictionary, 1, 2, 1, 2,
1471 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1472 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_pspell);
1474 /* Suggestion mode */
1475 sugmode_label = gtk_label_new(_("Default suggestion mode"));
1476 gtk_misc_set_alignment(GTK_MISC(sugmode_label), 1.0, 0.5);
1477 gtk_widget_show(sugmode_label);
1478 gtk_table_attach(GTK_TABLE (spell_table), sugmode_label, 0, 1, 2, 3,
1479 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1481 sugmode_optmenu = gtk_option_menu_new();
1482 gtk_widget_show(sugmode_optmenu);
1483 gtk_option_menu_set_menu(GTK_OPTION_MENU(sugmode_optmenu),
1484 gtkpspell_sugmode_option_menu_new(prefs_common.pspell_sugmode));
1485 gtk_table_attach(GTK_TABLE(spell_table), sugmode_optmenu, 1, 2, 2, 3,
1486 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1487 gtk_widget_set_sensitive(sugmode_optmenu, prefs_common.enable_pspell);
1490 color_label = gtk_label_new(_("Misspelled word color:"));
1491 gtk_misc_set_alignment(GTK_MISC(color_label), 1.0, 0.5);
1492 gtk_table_attach (GTK_TABLE (spell_table), color_label, 0, 1, 3, 4,
1493 GTK_FILL, GTK_SHRINK, 0, 0);
1494 gtk_widget_show(color_label);
1496 col_align = gtk_alignment_new(0.0, 0.5, 0, 0);
1497 gtk_widget_show(col_align);
1498 gtk_table_attach (GTK_TABLE (spell_table), col_align, 1, 2, 3, 4,
1499 GTK_FILL, GTK_SHRINK, 0, 0);
1501 color_buttons.misspelled_btn = gtk_button_new_with_label ("");
1502 set_button_bg_color(color_buttons.misspelled_btn,
1503 prefs_common.misspelled_col);
1504 gtk_widget_set_usize (color_buttons.misspelled_btn, 30, 20);
1505 gtk_widget_set_sensitive(color_buttons.misspelled_btn, prefs_common.enable_pspell);
1506 gtk_signal_connect (GTK_OBJECT (color_buttons.misspelled_btn), "clicked",
1507 GTK_SIGNAL_FUNC(quote_color_set_dialog), "Misspelled word");
1508 gtk_container_add(GTK_CONTAINER(col_align), color_buttons.misspelled_btn);
1511 spelling.checkbtn_enable_pspell = checkbtn_enable_pspell;
1512 spelling.entry_pspell_path = entry_pspell_path;
1513 spelling.btn_pspell_path = btn_pspell_path;
1514 spelling.optmenu_dictionary = optmenu_dictionary;
1515 spelling.optmenu_sugmode = sugmode_optmenu;
1521 static void prefs_compose_create(void)
1528 GtkWidget *btn_quotefmt;
1530 GtkWidget *frame_sig;
1531 GtkWidget *vbox_sig;
1532 GtkWidget *checkbtn_autosig;
1533 GtkWidget *label_sigsep;
1534 GtkWidget *entry_sigsep;
1536 GtkWidget *frame_editor;
1537 GtkWidget *hbox_editor;
1538 GtkWidget *checkbtn_autoextedit;
1540 GtkWidget *frame_autosel;
1541 GtkWidget *hbox_autosel;
1542 GtkWidget *vbox_autosel;
1543 GtkWidget *checkbtn_reply_account_autosel;
1544 GtkWidget *checkbtn_forward_account_autosel;
1545 GtkWidget *checkbtn_reedit_account_autosel;
1547 GtkWidget *hbox_undolevel;
1548 GtkWidget *label_undolevel;
1549 GtkObject *spinbtn_undolevel_adj;
1550 GtkWidget *spinbtn_undolevel;
1552 GtkWidget *vbox_linewrap;
1557 GtkWidget *label_linewrap;
1558 GtkObject *spinbtn_linewrap_adj;
1559 GtkWidget *spinbtn_linewrap;
1560 GtkWidget *checkbtn_wrapquote;
1561 GtkWidget *checkbtn_wrapatsend;
1563 GtkWidget *frame_reply;
1564 GtkWidget *checkbtn_quote;
1565 GtkWidget *checkbtn_forward_as_attachment;
1566 GtkWidget *checkbtn_smart_wrapping;
1567 GtkWidget *checkbtn_block_cursor;
1569 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1570 gtk_widget_show (vbox1);
1571 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1572 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1576 hbox1 = gtk_hbox_new (FALSE, 32);
1577 gtk_widget_show (hbox1);
1579 hbox2 = gtk_hbox_new (FALSE, 8);
1580 gtk_widget_show (hbox2);
1581 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1584 hbox1 = gtk_hbox_new (FALSE, 32);
1585 gtk_widget_show (hbox1);
1586 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1588 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1590 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1591 gtk_widget_show (vbox_sig);
1592 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1593 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1595 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1596 _("Insert signature automatically"));
1598 hbox1 = gtk_hbox_new (FALSE, 8);
1599 gtk_widget_show (hbox1);
1600 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1601 label_sigsep = gtk_label_new (_("Signature separator"));
1602 gtk_widget_show (label_sigsep);
1603 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1605 entry_sigsep = gtk_entry_new ();
1606 gtk_widget_show (entry_sigsep);
1607 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1609 gtk_widget_set_usize (entry_sigsep, 64, -1);
1611 /* Account autoselection */
1612 PACK_FRAME(vbox1, frame_autosel, _("Automatic Account Selection"));
1614 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1615 gtk_widget_show (hbox_autosel);
1616 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1617 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1619 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1620 _("when replying"));
1621 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1622 _("when forwarding"));
1623 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1624 _("when re-editing"));
1626 vbox2 = gtk_vbox_new (FALSE, 0);
1627 gtk_widget_show (vbox2);
1628 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1630 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1631 _("Automatically launch the external editor"));
1633 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1636 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1637 gtk_widget_show (vbox_linewrap);
1638 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1640 hbox3 = gtk_hbox_new (FALSE, 8);
1641 gtk_widget_show (hbox3);
1642 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1645 label_linewrap = gtk_label_new (_("Wrap messages at"));
1646 gtk_widget_show (label_linewrap);
1647 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1649 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1650 spinbtn_linewrap = gtk_spin_button_new
1651 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1652 gtk_widget_show (spinbtn_linewrap);
1653 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1654 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1655 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1657 label_linewrap = gtk_label_new (_("characters"));
1658 gtk_widget_show (label_linewrap);
1659 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1661 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1663 hbox4 = gtk_hbox_new (FALSE, 32);
1664 gtk_widget_show (hbox4);
1665 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1667 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1669 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1671 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1672 _("Forward as attachment"));
1674 PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping,
1675 _("Smart wrapping (EXPERIMENTAL)"));
1677 PACK_CHECK_BUTTON (vbox1, checkbtn_block_cursor,
1680 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1682 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1683 gtk_widget_show (hbox3);
1684 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1686 label_undolevel = gtk_label_new (_("Undo level"));
1687 gtk_widget_show (label_undolevel);
1688 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1690 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1691 spinbtn_undolevel = gtk_spin_button_new
1692 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1693 gtk_widget_show (spinbtn_undolevel);
1694 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1695 gtk_widget_set_usize (spinbtn_undolevel, 64, -1);
1696 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1699 compose.checkbtn_quote = checkbtn_quote;
1700 compose.entry_quotemark = entry_quotemark;
1701 compose.text_quotefmt = text_quotefmt;
1703 compose.checkbtn_autosig = checkbtn_autosig;
1704 compose.entry_sigsep = entry_sigsep;
1706 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1708 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1709 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1710 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1712 compose.spinbtn_undolevel = spinbtn_undolevel;
1713 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1715 compose.spinbtn_linewrap = spinbtn_linewrap;
1716 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1717 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1718 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1720 compose.checkbtn_forward_as_attachment =
1721 checkbtn_forward_as_attachment;
1722 compose.checkbtn_smart_wrapping =
1723 checkbtn_smart_wrapping;
1724 compose.checkbtn_block_cursor =
1725 checkbtn_block_cursor;
1729 static void prefs_quote_create(void)
1732 GtkWidget *frame_quote;
1733 GtkWidget *vbox_quote;
1736 GtkWidget *label_quotemark;
1737 GtkWidget *entry_quotemark;
1738 GtkWidget *scrolledwin_quotefmt;
1739 GtkWidget *text_quotefmt;
1741 GtkWidget *entry_fw_quotemark;
1742 GtkWidget *text_fw_quotefmt;
1744 GtkWidget *btn_quotedesc;
1746 GtkWidget *checkbtn_reply_with_quote;
1748 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1749 gtk_widget_show (vbox1);
1750 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1751 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1755 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1757 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1759 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1760 gtk_widget_show (vbox_quote);
1761 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1762 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1764 hbox1 = gtk_hbox_new (FALSE, 32);
1765 gtk_widget_show (hbox1);
1766 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1768 hbox2 = gtk_hbox_new (FALSE, 8);
1769 gtk_widget_show (hbox2);
1770 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1772 label_quotemark = gtk_label_new (_("Quotation mark"));
1773 gtk_widget_show (label_quotemark);
1774 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1776 entry_quotemark = gtk_entry_new ();
1777 gtk_widget_show (entry_quotemark);
1778 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1779 gtk_widget_set_usize (entry_quotemark, 64, -1);
1781 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1782 gtk_widget_show (scrolledwin_quotefmt);
1783 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1784 gtk_scrolled_window_set_policy
1785 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1786 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1788 text_quotefmt = gtk_text_new (NULL, NULL);
1789 gtk_widget_show (text_quotefmt);
1790 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1791 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1792 gtk_widget_set_usize(text_quotefmt, -1, 60);
1796 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1798 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1799 gtk_widget_show (vbox_quote);
1800 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1801 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1803 hbox1 = gtk_hbox_new (FALSE, 32);
1804 gtk_widget_show (hbox1);
1805 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1807 hbox2 = gtk_hbox_new (FALSE, 8);
1808 gtk_widget_show (hbox2);
1809 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1811 label_quotemark = gtk_label_new (_("Quotation mark"));
1812 gtk_widget_show (label_quotemark);
1813 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1815 entry_fw_quotemark = gtk_entry_new ();
1816 gtk_widget_show (entry_fw_quotemark);
1817 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1819 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
1821 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1822 gtk_widget_show (scrolledwin_quotefmt);
1823 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1824 gtk_scrolled_window_set_policy
1825 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1826 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1828 text_fw_quotefmt = gtk_text_new (NULL, NULL);
1829 gtk_widget_show (text_fw_quotefmt);
1830 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1832 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
1833 gtk_widget_set_usize(text_fw_quotefmt, -1, 60);
1835 hbox1 = gtk_hbox_new (FALSE, 32);
1836 gtk_widget_show (hbox1);
1837 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1840 gtk_button_new_with_label (_(" Description of symbols "));
1841 gtk_widget_show (btn_quotedesc);
1842 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1843 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1844 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1846 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
1847 quote.entry_quotemark = entry_quotemark;
1848 quote.text_quotefmt = text_quotefmt;
1849 quote.entry_fw_quotemark = entry_fw_quotemark;
1850 quote.text_fw_quotefmt = text_fw_quotefmt;
1853 static void prefs_display_create(void)
1856 GtkWidget *frame_font;
1858 GtkWidget *label_textfont;
1859 GtkWidget *entry_textfont;
1860 GtkWidget *button_textfont;
1861 GtkWidget *chkbtn_folder_unread;
1862 GtkWidget *chkbtn_transhdr;
1863 GtkWidget *frame_summary;
1865 GtkWidget *chkbtn_swapfrom;
1866 GtkWidget *chkbtn_hscrollbar;
1867 GtkWidget *chkbtn_useaddrbook;
1868 GtkWidget *chkbtn_expand_thread;
1869 GtkWidget *chkbtn_bold_unread;
1872 GtkWidget *label_datefmt;
1873 GtkWidget *button_datefmt;
1874 GtkWidget *entry_datefmt;
1875 GtkWidget *button_dispitem;
1876 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
1878 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1879 gtk_widget_show (vbox1);
1880 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1881 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1883 PACK_FRAME(vbox1, frame_font, _("Font"));
1885 table1 = gtk_table_new (4, 3, FALSE);
1887 gtk_widget_show (table1);
1888 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1889 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1890 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1891 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1893 label_textfont = gtk_label_new (_("Text"));
1894 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1895 gtk_widget_show (label_textfont);
1896 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1897 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1899 entry_textfont = gtk_entry_new ();
1900 gtk_widget_show (entry_textfont);
1901 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1902 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1904 button_textfont = gtk_button_new_with_label (" ... ");
1906 gtk_widget_show (button_textfont);
1907 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1909 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1910 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1912 tmplabel = gtk_label_new (_("Small"));
1913 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1914 gtk_widget_show (tmplabel);
1915 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1916 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1918 tmpentry = gtk_entry_new ();
1919 gtk_widget_show (tmpentry);
1920 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1921 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1923 tmpbutton = gtk_button_new_with_label (" ... ");
1924 gtk_widget_show (tmpbutton);
1925 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1927 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1928 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1929 display.entry_smallfont = tmpentry;
1931 tmplabel = gtk_label_new (_("Normal"));
1932 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1933 gtk_widget_show (tmplabel);
1934 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1935 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1937 tmpentry = gtk_entry_new ();
1938 gtk_widget_show (tmpentry);
1939 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1940 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1942 tmpbutton = gtk_button_new_with_label (" ... ");
1943 gtk_widget_show (tmpbutton);
1944 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1946 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1947 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1948 display.entry_normalfont = tmpentry;
1950 tmplabel = gtk_label_new (_("Bold"));
1951 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1952 gtk_widget_show (tmplabel);
1953 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1954 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1956 tmpentry = gtk_entry_new ();
1957 gtk_widget_show (tmpentry);
1958 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1959 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1961 tmpbutton = gtk_button_new_with_label (" ... ");
1962 gtk_widget_show (tmpbutton);
1963 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1965 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1966 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1967 display.entry_boldfont = tmpentry;
1969 vbox2 = gtk_vbox_new (FALSE, 0);
1970 gtk_widget_show (vbox2);
1971 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1974 (vbox2, chkbtn_transhdr,
1975 _("Translate header name (such as `From:', `Subject:')"));
1977 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1978 _("Display unread number next to folder name"));
1980 /* ---- Summary ---- */
1982 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1984 vbox2 = gtk_vbox_new (FALSE, 0);
1985 gtk_widget_show (vbox2);
1986 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1987 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1990 (vbox2, chkbtn_swapfrom,
1991 _("Display recipient on `From' column if sender is yourself"));
1993 (vbox2, chkbtn_useaddrbook,
1994 _("Display sender using address book"));
1996 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1998 (vbox2, chkbtn_expand_thread, _("Expand threads"));
2000 (vbox2, chkbtn_bold_unread,
2001 _("Display unread messages with bold font"));
2003 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2005 hbox1 = gtk_hbox_new (FALSE, 8);
2006 gtk_widget_show (hbox1);
2007 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2009 label_datefmt = gtk_label_new (_("Date format"));
2010 gtk_widget_show (label_datefmt);
2011 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
2013 entry_datefmt = gtk_entry_new ();
2014 gtk_widget_show (entry_datefmt);
2015 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
2017 button_datefmt = gtk_button_new_with_label (" ... ");
2019 gtk_widget_show (button_datefmt);
2020 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
2021 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
2022 GTK_SIGNAL_FUNC (date_format_create), NULL);
2024 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2026 hbox1 = gtk_hbox_new (FALSE, 8);
2027 gtk_widget_show (hbox1);
2028 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2030 button_dispitem = gtk_button_new_with_label
2031 (_(" Set display item of summary... "));
2032 gtk_widget_show (button_dispitem);
2033 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
2034 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
2035 GTK_SIGNAL_FUNC (prefs_summary_column_open),
2038 display.entry_textfont = entry_textfont;
2039 display.button_textfont = button_textfont;
2041 display.chkbtn_folder_unread = chkbtn_folder_unread;
2042 display.chkbtn_transhdr = chkbtn_transhdr;
2044 display.chkbtn_swapfrom = chkbtn_swapfrom;
2045 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
2046 display.chkbtn_expand_thread = chkbtn_expand_thread;
2047 display.chkbtn_bold_unread = chkbtn_bold_unread;
2048 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
2049 display.entry_datefmt = entry_datefmt;
2052 static void prefs_message_create(void)
2058 GtkWidget *chkbtn_enablecol;
2059 GtkWidget *button_edit_col;
2060 GtkWidget *chkbtn_mbalnum;
2061 GtkWidget *chkbtn_disphdrpane;
2062 GtkWidget *chkbtn_disphdr;
2063 GtkWidget *button_edit_disphdr;
2064 GtkWidget *hbox_linespc;
2065 GtkWidget *label_linespc;
2066 GtkObject *spinbtn_linespc_adj;
2067 GtkWidget *spinbtn_linespc;
2068 GtkWidget *chkbtn_headspc;
2070 GtkWidget *frame_scr;
2071 GtkWidget *vbox_scr;
2072 GtkWidget *chkbtn_smoothscroll;
2073 GtkWidget *hbox_scr;
2074 GtkWidget *label_scr;
2075 GtkObject *spinbtn_scrollstep_adj;
2076 GtkWidget *spinbtn_scrollstep;
2077 GtkWidget *chkbtn_halfpage;
2079 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2080 gtk_widget_show (vbox1);
2081 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2082 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2084 hbox1 = gtk_hbox_new (FALSE, 8);
2085 gtk_widget_show (hbox1);
2086 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
2088 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
2089 _("Enable coloration of message"));
2090 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
2091 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
2094 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
2095 gtk_widget_show (button_edit_col);
2096 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
2097 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
2098 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
2100 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
2102 vbox2 = gtk_vbox_new (FALSE, 0);
2103 gtk_widget_show (vbox2);
2104 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2107 (vbox2, chkbtn_mbalnum,
2108 _("Display 2-byte alphabet and numeric with 1-byte character"));
2109 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
2110 _("Display header pane above message view"));
2112 hbox1 = gtk_hbox_new (FALSE, 8);
2113 gtk_widget_show (hbox1);
2114 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2116 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
2117 _("Display short headers on message view"));
2119 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
2120 gtk_widget_show (button_edit_disphdr);
2121 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
2123 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
2124 GTK_SIGNAL_FUNC (prefs_display_header_open),
2127 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
2129 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2131 hbox1 = gtk_hbox_new (FALSE, 32);
2132 gtk_widget_show (hbox1);
2133 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2135 hbox_linespc = gtk_hbox_new (FALSE, 8);
2136 gtk_widget_show (hbox1);
2137 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
2139 label_linespc = gtk_label_new (_("Line space"));
2140 gtk_widget_show (label_linespc);
2141 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2144 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
2145 spinbtn_linespc = gtk_spin_button_new
2146 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
2147 gtk_widget_show (spinbtn_linespc);
2148 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
2150 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
2151 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
2153 label_linespc = gtk_label_new (_("pixel(s)"));
2154 gtk_widget_show (label_linespc);
2155 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2158 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
2160 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
2162 vbox_scr = gtk_vbox_new (FALSE, 0);
2163 gtk_widget_show (vbox_scr);
2164 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
2165 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
2167 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
2169 hbox1 = gtk_hbox_new (FALSE, 32);
2170 gtk_widget_show (hbox1);
2171 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
2173 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
2175 hbox_scr = gtk_hbox_new (FALSE, 8);
2176 gtk_widget_show (hbox_scr);
2177 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
2179 label_scr = gtk_label_new (_("Step"));
2180 gtk_widget_show (label_scr);
2181 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2183 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
2184 spinbtn_scrollstep = gtk_spin_button_new
2185 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
2186 gtk_widget_show (spinbtn_scrollstep);
2187 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
2189 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
2190 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
2193 label_scr = gtk_label_new (_("pixel(s)"));
2194 gtk_widget_show (label_scr);
2195 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2197 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
2199 message.chkbtn_enablecol = chkbtn_enablecol;
2200 message.button_edit_col = button_edit_col;
2201 message.chkbtn_mbalnum = chkbtn_mbalnum;
2202 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
2203 message.chkbtn_disphdr = chkbtn_disphdr;
2204 message.spinbtn_linespc = spinbtn_linespc;
2205 message.chkbtn_headspc = chkbtn_headspc;
2207 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
2208 message.spinbtn_scrollstep = spinbtn_scrollstep;
2209 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
2210 message.chkbtn_halfpage = chkbtn_halfpage;
2214 static void prefs_privacy_create(void)
2219 GtkWidget *checkbtn_default_encrypt;
2220 GtkWidget *checkbtn_ascii_armored;
2221 GtkWidget *checkbtn_default_sign;
2222 GtkWidget *checkbtn_auto_check_signatures;
2223 GtkWidget *checkbtn_gpg_signature_popup;
2224 GtkWidget *checkbtn_passphrase_grab;
2225 GtkWidget *checkbtn_gpg_warning;
2227 GtkWidget *menuitem;
2229 GtkWidget *optmenu_menu;
2231 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2232 gtk_widget_show (vbox1);
2233 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2234 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2236 vbox2 = gtk_vbox_new (FALSE, 0);
2237 gtk_widget_show (vbox2);
2238 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2240 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
2241 _("Encrypt message by default"));
2243 PACK_CHECK_BUTTON (vbox2, checkbtn_ascii_armored,
2244 _("Plain ASCII armored"));
2245 gtk_signal_connect(GTK_OBJECT(checkbtn_ascii_armored), "toggled",
2246 prefs_common_ascii_armored_warning, (gpointer)0);
2248 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
2249 _("Sign message by default"));
2251 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
2252 _("Automatically check signatures"));
2254 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
2255 _("Show signature check result in a popup window"));
2258 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
2259 _("Grab input while entering a passphrase"));
2263 (vbox2, checkbtn_gpg_warning,
2264 _("Display warning on startup if GnuPG doesn't work"));
2266 hbox1 = gtk_hbox_new (FALSE, 8);
2267 gtk_widget_show (hbox1);
2268 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2270 /* create default signkey box */
2271 label = gtk_label_new (_("Default Sign Key"));
2272 gtk_widget_show (label);
2273 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2274 optmenu = gtk_option_menu_new ();
2275 gtk_widget_show (optmenu);
2276 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
2277 optmenu_menu = gtk_menu_new ();
2279 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
2280 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
2281 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
2282 /* FIXME: disabled because not implemented */
2283 gtk_widget_set_sensitive(optmenu, FALSE);
2285 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
2286 privacy.checkbtn_ascii_armored = checkbtn_ascii_armored;
2287 privacy.checkbtn_default_sign = checkbtn_default_sign;
2288 privacy.checkbtn_auto_check_signatures
2289 = checkbtn_auto_check_signatures;
2290 privacy.checkbtn_gpg_signature_popup
2291 = checkbtn_gpg_signature_popup;
2292 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2293 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2294 privacy.optmenu_default_signkey = optmenu;
2298 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
2302 GtkWidget *menuitem;
2305 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2306 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2307 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2308 g_free(*((gchar **)pparam->data));
2309 *((gchar **)pparam->data) = g_strdup(charset);
2313 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
2317 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2319 GtkWidget *menuitem;
2323 g_return_if_fail(optmenu != NULL);
2324 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2326 menu = gtk_option_menu_get_menu(optmenu);
2327 for (cur = GTK_MENU_SHELL(menu)->children;
2328 cur != NULL; cur = cur->next) {
2329 menuitem = GTK_WIDGET(cur->data);
2330 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2331 if (!strcmp(charset, *((gchar **)pparam->data))) {
2332 gtk_option_menu_set_history(optmenu, n);
2338 gtk_option_menu_set_history(optmenu, 0);
2339 prefs_common_charset_set_data_from_optmenu(pparam);
2343 static void prefs_common_ascii_armored_warning(GtkWidget* widget,
2346 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))
2347 && gtk_notebook_get_current_page(GTK_NOTEBOOK(dialog.notebook))) {
2348 alertpanel_message(_("Warning - Privacy/Plain ASCII armored"),
2349 _("Its not recommend to use the old style plain ASCII\n"
2350 "armored mode for encypted messages. It doesn't comply\n"
2351 "with the RFC 3156 - MIME security with OpenPGP."));
2354 #endif /* USE_GPGME */
2356 static void prefs_interface_create(void)
2361 /* GtkWidget *checkbtn_emacs; */
2362 GtkWidget *checkbtn_openunread;
2363 GtkWidget *checkbtn_openinbox;
2364 GtkWidget *checkbtn_immedexec;
2367 GtkWidget *optmenu_recvdialog;
2369 GtkWidget *menuitem;
2371 GtkWidget *frame_addr;
2372 GtkWidget *vbox_addr;
2373 GtkWidget *checkbtn_addaddrbyclick;
2375 GtkWidget *frame_exit;
2376 GtkWidget *vbox_exit;
2377 GtkWidget *checkbtn_confonexit;
2378 GtkWidget *checkbtn_cleanonexit;
2379 GtkWidget *checkbtn_askonclean;
2380 GtkWidget *checkbtn_warnqueued;
2383 GtkWidget *optmenu_nextunreadmsgdialog;
2384 GtkWidget *optmenu_nextunreadmsgdialog_menu;
2385 GtkWidget *nextunreadmsgdialog_menuitem;
2387 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2388 gtk_widget_show (vbox1);
2389 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2390 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2392 vbox2 = gtk_vbox_new (FALSE, 0);
2393 gtk_widget_show (vbox2);
2394 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2396 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2397 _("Emulate the behavior of mouse operation of\n"
2398 "Emacs-based mailer"));
2399 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2400 GTK_JUSTIFY_LEFT); */
2403 (vbox2, checkbtn_openunread,
2404 _("Open first unread message when entering a folder"));
2407 (vbox2, checkbtn_openinbox,
2408 _("Go to inbox after receiving new mail"));
2410 vbox3 = gtk_vbox_new (FALSE, 0);
2411 gtk_widget_show (vbox3);
2412 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2415 (vbox3, checkbtn_immedexec,
2416 _("Execute immediately when moving or deleting messages"));
2418 hbox1 = gtk_hbox_new (FALSE, 0);
2419 gtk_widget_show (hbox1);
2420 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2422 label = gtk_label_new
2423 (_("(Messages will be marked until execution\n"
2424 " if this is turned off)"));
2425 gtk_widget_show (label);
2426 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2427 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2429 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2431 hbox1 = gtk_hbox_new (FALSE, 8);
2432 gtk_widget_show (hbox1);
2433 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2435 label = gtk_label_new (_("Show receive dialog"));
2436 gtk_widget_show (label);
2437 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2439 optmenu_recvdialog = gtk_option_menu_new ();
2440 gtk_widget_show (optmenu_recvdialog);
2441 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2444 menu = gtk_menu_new ();
2445 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2446 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2447 RECV_DIALOG_ACTIVE);
2448 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2450 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2452 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2454 vbox_addr = gtk_vbox_new (FALSE, 0);
2455 gtk_widget_show (vbox_addr);
2456 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2457 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2460 (vbox_addr, checkbtn_addaddrbyclick,
2461 _("Add address to destination when double-clicked"));
2463 /* Next Unread Message Dialog */
2464 hbox2 = gtk_hbox_new (FALSE, 8);
2465 gtk_widget_show (hbox2);
2466 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
2468 label = gtk_label_new (_("Show no-unread-message dialog"));
2469 gtk_widget_show (label);
2470 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
2472 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2473 gtk_widget_show (optmenu_nextunreadmsgdialog);
2474 gtk_box_pack_start (GTK_BOX (hbox2), optmenu_nextunreadmsgdialog,
2477 optmenu_nextunreadmsgdialog_menu = gtk_menu_new ();
2478 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2479 _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2480 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2481 _("Assume 'Yes'"), NEXTUNREADMSGDIALOG_ASSUME_YES);
2482 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2483 _("Assume 'No'"), NEXTUNREADMSGDIALOG_ASSUME_NO);
2485 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog),
2486 optmenu_nextunreadmsgdialog_menu);
2489 /* Receive Dialog */
2490 /* hbox = gtk_hbox_new (FALSE, 8);
2491 gtk_widget_show (hbox);
2492 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2494 label = gtk_label_new (_("Show receive Dialog"));
2495 gtk_widget_show (label);
2496 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2498 recvdialog_optmenu = gtk_option_menu_new ();
2499 gtk_widget_show (recvdialog_optmenu);
2500 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2502 recvdialog_optmenu_menu = gtk_menu_new ();
2504 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2505 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2506 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2508 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2511 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2513 vbox_exit = gtk_vbox_new (FALSE, 0);
2514 gtk_widget_show (vbox_exit);
2515 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2516 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2518 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2519 _("Confirm on exit"));
2521 hbox1 = gtk_hbox_new (FALSE, 32);
2522 gtk_widget_show (hbox1);
2523 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2525 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2526 _("Empty trash on exit"));
2527 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2528 _("Ask before emptying"));
2529 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2531 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2532 _("Warn if there are queued messages"));
2534 /* interface.checkbtn_emacs = checkbtn_emacs; */
2535 interface.checkbtn_openunread = checkbtn_openunread;
2536 interface.checkbtn_openinbox = checkbtn_openinbox;
2537 interface.checkbtn_immedexec = checkbtn_immedexec;
2538 interface.optmenu_recvdialog = optmenu_recvdialog;
2539 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2540 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2541 interface.checkbtn_confonexit = checkbtn_confonexit;
2542 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2543 interface.checkbtn_askonclean = checkbtn_askonclean;
2544 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2547 static void prefs_other_create(void)
2552 GtkWidget *uri_frame;
2553 GtkWidget *uri_label;
2554 GtkWidget *uri_combo;
2555 GtkWidget *uri_entry;
2557 GtkWidget *print_frame;
2558 GtkWidget *printcmd_label;
2559 GtkWidget *printcmd_entry;
2561 GtkWidget *exteditor_frame;
2562 GtkWidget *exteditor_label;
2563 GtkWidget *exteditor_combo;
2564 GtkWidget *exteditor_entry;
2566 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2567 gtk_widget_show (vbox1);
2568 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2569 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2571 PACK_FRAME(vbox1, uri_frame,
2572 _("External Web browser (%s will be replaced with URI)"));
2574 hbox1 = gtk_hbox_new (FALSE, 8);
2575 gtk_widget_show (hbox1);
2576 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2577 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2579 uri_label = gtk_label_new (_("Command"));
2580 gtk_widget_show(uri_label);
2581 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2583 uri_combo = gtk_combo_new ();
2584 gtk_widget_show (uri_combo);
2585 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2586 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2587 "netscape -remote 'openURL(%s,raise)'",
2589 "gnome-moz-remote --raise --newwin '%s'",
2590 "kterm -e w3m '%s'",
2591 "kterm -e lynx '%s'",
2594 uri_entry = GTK_COMBO (uri_combo)->entry;
2596 PACK_FRAME(vbox1, print_frame,
2597 _("Printing (%s will be replaced with file name)"));
2599 hbox1 = gtk_hbox_new (FALSE, 8);
2600 gtk_widget_show (hbox1);
2601 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2602 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2604 printcmd_label = gtk_label_new (_("Command"));
2605 gtk_widget_show (printcmd_label);
2606 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2608 printcmd_entry = gtk_entry_new ();
2609 gtk_widget_show (printcmd_entry);
2610 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2612 PACK_FRAME(vbox1, exteditor_frame,
2613 _("External editor (%s will be replaced with file name)"));
2615 hbox1 = gtk_hbox_new (FALSE, 8);
2616 gtk_widget_show (hbox1);
2617 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2618 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2620 exteditor_label = gtk_label_new (_("Command"));
2621 gtk_widget_show (exteditor_label);
2622 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2624 exteditor_combo = gtk_combo_new ();
2625 gtk_widget_show (exteditor_combo);
2626 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2627 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2630 "mgedit --no-fork %s",
2636 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2638 other.uri_combo = uri_combo;
2639 other.uri_entry = uri_entry;
2640 other.printcmd_entry = printcmd_entry;
2642 other.exteditor_combo = exteditor_combo;
2643 other.exteditor_entry = exteditor_entry;
2646 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2648 GtkWidget *datefmt_sample = NULL;
2651 g_return_if_fail(widget != NULL);
2652 g_return_if_fail(*widget != NULL);
2653 g_return_if_fail(display.entry_datefmt != NULL);
2655 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2656 (GTK_OBJECT(*widget), "datefmt_sample"));
2657 g_return_if_fail(datefmt_sample != NULL);
2659 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2660 g_free(prefs_common.date_format);
2661 prefs_common.date_format = text;
2662 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2664 gtk_widget_destroy(*widget);
2668 static void date_format_cancel_btn_clicked(GtkButton *button,
2671 g_return_if_fail(widget != NULL);
2672 g_return_if_fail(*widget != NULL);
2674 gtk_widget_destroy(*widget);
2678 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2681 if (event && event->keyval == GDK_Escape)
2682 date_format_cancel_btn_clicked(NULL, widget);
2685 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2686 GdkEventAny *event, GtkWidget **widget)
2688 g_return_val_if_fail(widget != NULL, FALSE);
2689 g_return_val_if_fail(*widget != NULL, FALSE);
2695 static void date_format_entry_on_change(GtkEditable *editable,
2699 struct tm *cal_time;
2703 cur_time = time(NULL);
2704 cal_time = localtime(&cur_time);
2706 text = gtk_editable_get_chars(editable, 0, -1);
2708 strftime(buffer, sizeof buffer, text, cal_time);
2709 gtk_label_set_text(example, buffer);
2712 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2713 gint column, GdkEventButton *event,
2714 GtkWidget *date_format)
2720 GtkWidget *datefmt_sample;
2722 /* only on double click */
2723 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2726 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2727 (GTK_OBJECT(date_format), "datefmt_sample"));
2729 g_return_if_fail(date_format_list != NULL);
2730 g_return_if_fail(date_format != NULL);
2731 g_return_if_fail(datefmt_sample != NULL);
2733 /* get format from clist */
2734 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2736 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2737 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2739 /* insert the format into the text entry */
2740 new_format = g_malloc(strlen(old_format) + 3);
2742 strncpy(new_format, old_format, cur_pos);
2743 new_format[cur_pos] = '\0';
2744 strcat(new_format, format);
2745 strcat(new_format, &old_format[cur_pos]);
2747 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2748 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2753 static GtkWidget *date_format_create(GtkButton *button, void *data)
2755 static GtkWidget *datefmt_win = NULL;
2757 GtkWidget *scrolledwindow1;
2758 GtkWidget *datefmt_clist;
2763 GtkWidget *confirm_area;
2765 GtkWidget *cancel_btn;
2766 GtkWidget *datefmt_entry;
2772 { "%a", _("the full abbreviated weekday name") },
2773 { "%A", _("the full weekday name") },
2774 { "%b", _("the abbreviated month name") },
2775 { "%B", _("the full month name") },
2776 { "%c", _("the preferred date and time for the current locale") },
2777 { "%C", _("the century number (year/100)") },
2778 { "%d", _("the day of the month as a decimal number") },
2779 { "%H", _("the hour as a decimal number using a 24-hour clock") },
2780 { "%I", _("the hour as a decimal number using a 12-hour clock") },
2781 { "%j", _("the day of the year as a decimal number") },
2782 { "%m", _("the month as a decimal number") },
2783 { "%M", _("the minute as a decimal number") },
2784 { "%p", _("either AM or PM") },
2785 { "%S", _("the second as a decimal number") },
2786 { "%w", _("the day of the week as a decimal number") },
2787 { "%x", _("the preferred date for the current locale") },
2788 { "%y", _("the last two digits of a year") },
2789 { "%Y", _("the year as a decimal number") },
2790 { "%Z", _("the time zone or name or abbreviation") }
2795 const gint TIME_FORMAT_ELEMS =
2796 sizeof time_format / sizeof time_format[0];
2798 if (datefmt_win) return datefmt_win;
2800 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2801 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2802 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2803 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2804 gtk_widget_set_usize(datefmt_win, 440, 280);
2806 vbox1 = gtk_vbox_new(FALSE, 10);
2807 gtk_widget_show(vbox1);
2808 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2810 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2811 gtk_scrolled_window_set_policy
2812 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2813 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2814 gtk_widget_show(scrolledwindow1);
2815 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2817 titles[0] = _("Specifier");
2818 titles[1] = _("Description");
2819 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2820 gtk_widget_show(datefmt_clist);
2821 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2822 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2823 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2824 GTK_SELECTION_BROWSE);
2826 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2828 /* phoney casting necessary because of gtk... */
2829 text[0] = (gchar *)time_format[i].fmt;
2830 text[1] = (gchar *)time_format[i].txt;
2831 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2834 table = gtk_table_new(2, 2, FALSE);
2835 gtk_widget_show(table);
2836 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2837 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2838 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2840 label1 = gtk_label_new(_("Date format"));
2841 gtk_widget_show(label1);
2842 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2844 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2845 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2847 datefmt_entry = gtk_entry_new_with_max_length(256);
2848 gtk_widget_show(datefmt_entry);
2849 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2850 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2852 /* we need the "sample" entry box; add it as data so callbacks can
2853 * get the entry box */
2854 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2857 label2 = gtk_label_new(_("Example"));
2858 gtk_widget_show(label2);
2859 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2861 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2862 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2864 label3 = gtk_label_new("");
2865 gtk_widget_show(label3);
2866 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2867 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2868 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2869 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2871 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2872 &cancel_btn, _("Cancel"), NULL, NULL);
2873 gtk_widget_grab_default(ok_btn);
2874 gtk_widget_show(confirm_area);
2876 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2878 /* set the current format */
2879 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2880 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2883 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2884 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2886 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2887 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2889 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2890 GTK_SIGNAL_FUNC(date_format_key_pressed),
2892 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2893 GTK_SIGNAL_FUNC(date_format_on_delete),
2895 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2896 GTK_SIGNAL_FUNC(date_format_entry_on_change),
2899 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2900 GTK_SIGNAL_FUNC(date_format_select_row),
2903 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2904 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2906 gtk_widget_show(datefmt_win);
2907 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2909 gtk_widget_grab_focus(ok_btn);
2914 void prefs_quote_colors_dialog(void)
2916 if (!quote_color_win)
2917 prefs_quote_colors_dialog_create();
2918 gtk_widget_show(quote_color_win);
2919 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2922 gtk_widget_hide(quote_color_win);
2924 textview_update_message_colors();
2925 main_window_reflect_prefs_all();
2928 static void prefs_quote_colors_dialog_create(void)
2933 GtkWidget *quotelevel1_label;
2934 GtkWidget *quotelevel2_label;
2935 GtkWidget *quotelevel3_label;
2936 GtkWidget *uri_label;
2937 GtkWidget *tgt_folder_label;
2940 GtkWidget *recycle_colors_btn;
2941 GtkWidget *frame_colors;
2943 window = gtk_window_new(GTK_WINDOW_DIALOG);
2944 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2945 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2946 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2947 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2948 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2950 vbox = gtk_vbox_new (FALSE, VSPACING);
2951 gtk_container_add (GTK_CONTAINER (window), vbox);
2952 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2953 PACK_FRAME(vbox, frame_colors, _("Colors"));
2955 table = gtk_table_new (4, 2, FALSE);
2956 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2957 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2958 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2959 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2962 color_buttons.quote_level1_btn = gtk_button_new();
2963 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2964 0, 1, 0, 1, 0, 0, 0, 0);
2965 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2966 gtk_container_set_border_width
2967 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2969 color_buttons.quote_level2_btn = gtk_button_new();
2970 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2971 0, 1, 1, 2, 0, 0, 0, 0);
2972 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2973 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2975 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2976 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2977 0, 1, 2, 3, 0, 0, 0, 0);
2978 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2979 gtk_container_set_border_width
2980 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2982 color_buttons.uri_btn = gtk_button_new_with_label ("");
2983 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2984 0, 1, 3, 4, 0, 0, 0, 0);
2985 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2986 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2988 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2989 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2990 0, 1, 4, 5, 0, 0, 0, 0);
2991 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
2992 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2994 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2995 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2996 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2997 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2998 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
3000 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
3001 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
3002 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3003 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
3004 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
3006 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
3007 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
3008 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3009 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
3010 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
3012 uri_label = gtk_label_new (_("URI link"));
3013 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
3014 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3015 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
3016 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
3018 tgt_folder_label = gtk_label_new (_("Target folder"));
3019 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
3020 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3021 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
3022 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
3024 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
3025 _("Recycle quote colors"));
3027 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3028 NULL, NULL, NULL, NULL);
3029 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3031 gtk_widget_grab_default(ok_btn);
3032 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
3033 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
3034 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
3035 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
3036 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3037 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3038 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3039 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
3042 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
3043 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
3044 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
3045 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
3046 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
3047 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
3048 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
3049 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
3050 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
3051 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
3052 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
3053 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
3054 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3055 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3057 /* show message button colors and recycle options */
3058 set_button_bg_color(color_buttons.quote_level1_btn,
3059 prefs_common.quote_level1_col);
3060 set_button_bg_color(color_buttons.quote_level2_btn,
3061 prefs_common.quote_level2_col);
3062 set_button_bg_color(color_buttons.quote_level3_btn,
3063 prefs_common.quote_level3_col);
3064 set_button_bg_color(color_buttons.uri_btn,
3065 prefs_common.uri_col);
3066 set_button_bg_color(color_buttons.tgt_folder_btn,
3067 prefs_common.tgt_folder_col);
3068 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
3069 prefs_common.recycle_quote_colors);
3071 gtk_widget_show_all(vbox);
3072 quote_color_win = window;
3075 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
3076 GdkEventKey *event, gpointer data)
3078 if (event && event->keyval == GDK_Escape)
3082 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
3084 gchar *type = (gchar *)data;
3085 gchar *title = NULL;
3086 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
3088 GtkColorSelectionDialog *dialog;
3090 if(g_strcasecmp(type, "LEVEL1") == 0) {
3091 title = _("Pick color for quotation level 1");
3092 rgbvalue = prefs_common.quote_level1_col;
3093 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
3094 title = _("Pick color for quotation level 2");
3095 rgbvalue = prefs_common.quote_level2_col;
3096 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
3097 title = _("Pick color for quotation level 3");
3098 rgbvalue = prefs_common.quote_level3_col;
3099 } else if(g_strcasecmp(type, "URI") == 0) {
3100 title = _("Pick color for URI");
3101 rgbvalue = prefs_common.uri_col;
3102 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
3103 title = _("Pick color for target folder");
3104 rgbvalue = prefs_common.tgt_folder_col;
3106 } else if(g_strcasecmp(type, "Misspelled word") == 0) {
3107 title = _("Pick color for misspelled word");
3108 rgbvalue = prefs_common.misspelled_col;
3110 } else { /* Should never be called */
3111 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
3115 color_dialog = gtk_color_selection_dialog_new(title);
3116 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
3117 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
3118 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
3119 manage_window_set_transient(GTK_WINDOW(color_dialog));
3121 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
3122 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
3123 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
3124 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
3125 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
3126 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
3129 /* preselect the previous color in the color selection dialog */
3130 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
3131 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
3132 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
3133 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
3134 gtk_color_selection_set_color
3135 (GTK_COLOR_SELECTION(dialog->colorsel), color);
3137 gtk_widget_show(color_dialog);
3140 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
3142 GtkColorSelection *colorsel = (GtkColorSelection *)
3143 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
3145 gint red, green, blue, rgbvalue;
3146 gchar *type = (gchar *)data;
3148 gtk_color_selection_get_color(colorsel, color);
3150 red = (gint) (color[0] * 255.0);
3151 green = (gint) (color[1] * 255.0);
3152 blue = (gint) (color[2] * 255.0);
3153 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
3156 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
3157 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
3158 fprintf(stderr, "Color is %x\n", rgbvalue);
3161 if (g_strcasecmp(type, "LEVEL1") == 0) {
3162 prefs_common.quote_level1_col = rgbvalue;
3163 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
3164 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
3165 prefs_common.quote_level2_col = rgbvalue;
3166 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
3167 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
3168 prefs_common.quote_level3_col = rgbvalue;
3169 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
3170 } else if (g_strcasecmp(type, "URI") == 0) {
3171 prefs_common.uri_col = rgbvalue;
3172 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
3173 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
3174 prefs_common.tgt_folder_col = rgbvalue;
3175 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
3176 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
3178 } else if (g_strcasecmp(type, "Misspelled word") == 0) {
3179 prefs_common.misspelled_col = rgbvalue;
3180 set_button_bg_color(color_buttons.misspelled_btn, rgbvalue);
3183 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
3185 gtk_widget_destroy(color_dialog);
3188 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
3190 gtk_widget_destroy(color_dialog);
3193 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
3197 gtk_widget_destroy(color_dialog);
3200 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
3205 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
3206 newstyle = gtk_style_copy(gtk_widget_get_default_style());
3207 newstyle->bg[GTK_STATE_NORMAL] = color;
3208 newstyle->bg[GTK_STATE_PRELIGHT] = color;
3209 newstyle->bg[GTK_STATE_ACTIVE] = color;
3211 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
3214 static void prefs_enable_message_color_toggled(void)
3218 is_active = gtk_toggle_button_get_active
3219 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
3220 gtk_widget_set_sensitive(message.button_edit_col, is_active);
3221 prefs_common.enable_color = is_active;
3224 static void prefs_recycle_colors_toggled(GtkWidget *widget)
3228 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
3229 prefs_common.recycle_quote_colors = is_active;
3232 void prefs_quote_description(void)
3234 if (!quote_desc_win)
3235 prefs_quote_description_create();
3237 manage_window_set_transient(GTK_WINDOW(quote_desc_win));
3238 gtk_widget_show(quote_desc_win);
3240 gtk_widget_hide(quote_desc_win);
3243 static void prefs_quote_description_create(void)
3252 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
3253 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
3254 _("Description of symbols"));
3255 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
3256 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
3257 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
3258 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, FALSE, FALSE);
3260 vbox = gtk_vbox_new(FALSE, 8);
3261 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
3263 hbox = gtk_hbox_new(FALSE, 8);
3264 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
3266 vbox2 = gtk_vbox_new(FALSE, 8);
3267 gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
3269 #define PACK_LABEL() \
3270 gtk_box_pack_start(GTK_BOX(vbox2), label, TRUE, TRUE, 0); \
3271 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); \
3272 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
3274 label = gtk_label_new
3277 "%N\n" /* full name of sender */
3278 "%F\n" /* first name of sender */
3279 "%I\n" /* initial of sender */
3280 "%s\n" /* subject */
3283 "%n\n" /* newsgroups */
3284 "%r\n" /* references */
3285 "%i"); /* message id */
3288 label = gtk_label_new
3289 ("?x{expr}"); /* condition */
3292 label = gtk_label_new
3293 ("%M\n" /* message body */
3294 "%Q\n" /* quoted message body */
3295 "%m\n" /* message body without signature */
3296 "%q\n" /* quoted message body without signature */
3297 "%%"); /* literal percent */
3300 label = gtk_label_new
3301 ("\\\\\n" /* literal backslash */
3302 "\\?\n" /* literal question mark */
3303 "\\{\n" /* literal opening curly brace */
3304 "\\}"); /* literal closing curly brace */
3307 vbox2 = gtk_vbox_new(FALSE, 8);
3308 gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
3310 label = gtk_label_new
3313 "Full Name of Sender\n"
3314 "First Name of Sender\n"
3315 "Initial of Sender\n"
3324 label = gtk_label_new
3325 (_("If x is set, displays expr"));
3328 label = gtk_label_new
3330 "Quoted message body\n"
3331 "Message body without signature\n"
3332 "Quoted message body without signature\n"
3336 label = gtk_label_new
3337 (_("Literal backslash\n"
3338 "Literal question mark\n"
3339 "Literal opening curly brace\n"
3340 "Literal closing curly brace"));
3345 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3346 NULL, NULL, NULL, NULL);
3347 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3349 gtk_widget_grab_default(ok_btn);
3350 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3351 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3353 (GTK_OBJECT(quote_desc_win), "key_press_event",
3354 GTK_SIGNAL_FUNC(prefs_quote_description_key_pressed),
3356 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
3357 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3359 gtk_widget_show_all(vbox);
3362 static void prefs_quote_description_key_pressed(GtkWidget *widget,
3366 if (event && event->keyval == GDK_Escape)
3370 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3374 g_return_if_fail(entry != NULL);
3376 if (!font_sel_win) {
3377 font_sel_win = gtk_font_selection_dialog_new
3378 (_("Font selection"));
3379 gtk_window_position(GTK_WINDOW(font_sel_win),
3380 GTK_WIN_POS_CENTER);
3381 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3382 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3385 (GTK_OBJECT(font_sel_win), "key_press_event",
3386 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3388 gtk_signal_connect_object
3389 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3391 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3392 GTK_OBJECT(font_sel_win));
3395 if(font_sel_conn_id) {
3396 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3398 font_sel_conn_id = gtk_signal_connect
3399 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3401 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3403 printf("%i\n", font_sel_conn_id);
3405 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3406 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3408 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3409 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3410 gtk_widget_grab_focus
3411 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3412 gtk_widget_show(font_sel_win);
3415 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3419 if (event && event->keyval == GDK_Escape)
3420 gtk_widget_hide(font_sel_win);
3423 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3427 fontname = gtk_font_selection_dialog_get_font_name
3428 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3431 gtk_entry_set_text(entry, fontname);
3436 gtk_widget_hide(font_sel_win);
3439 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3442 GtkWidget *menuitem;
3445 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3446 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3447 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3448 g_free(*((gchar **)pparam->data));
3449 *((gchar **)pparam->data) = g_strdup(charset);
3452 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3455 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3457 GtkWidget *menuitem;
3461 g_return_if_fail(optmenu != NULL);
3462 g_return_if_fail(*((gchar **)pparam->data) != NULL);
3464 menu = gtk_option_menu_get_menu(optmenu);
3465 for (cur = GTK_MENU_SHELL(menu)->children;
3466 cur != NULL; cur = cur->next) {
3467 menuitem = GTK_WIDGET(cur->data);
3468 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3469 if (!strcmp(charset, *((gchar **)pparam->data))) {
3470 gtk_option_menu_set_history(optmenu, n);
3476 gtk_option_menu_set_history(optmenu, 0);
3477 prefs_common_charset_set_data_from_optmenu(pparam);
3480 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3483 GtkWidget *menuitem;
3485 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3486 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3487 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3488 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3491 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3493 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3494 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3496 GtkWidget *menuitem;
3499 case RECV_DIALOG_ALWAYS:
3500 gtk_option_menu_set_history(optmenu, 0);
3502 case RECV_DIALOG_ACTIVE:
3503 gtk_option_menu_set_history(optmenu, 1);
3505 case RECV_DIALOG_NEVER:
3506 gtk_option_menu_set_history(optmenu, 2);
3511 menu = gtk_option_menu_get_menu(optmenu);
3512 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3513 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3516 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3519 prefs_common_cancel();
3523 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3526 if (event && event->keyval == GDK_Escape)
3527 prefs_common_cancel();
3530 static void prefs_common_ok(void)
3532 prefs_common_apply();
3533 gtk_widget_hide(dialog.window);
3534 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
3535 gtk_widget_hide(quote_desc_win);
3540 static void prefs_common_apply(void)
3542 prefs_set_data_from_dialog(param);
3543 main_window_reflect_prefs_all();
3544 prefs_common_save_config();
3546 inc_autocheck_timer_remove();
3547 inc_autocheck_timer_set();
3550 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3553 GtkWidget *menuitem;
3555 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3556 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3557 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3558 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3561 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3563 NextUnreadMsgDialogShow dialog_show;
3564 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3566 GtkWidget *menuitem;
3568 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3570 switch (dialog_show) {
3571 case NEXTUNREADMSGDIALOG_ALWAYS:
3572 gtk_option_menu_set_history(optmenu, 0);
3574 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3575 gtk_option_menu_set_history(optmenu, 1);
3577 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3578 gtk_option_menu_set_history(optmenu, 2);
3583 menu = gtk_option_menu_get_menu(optmenu);
3584 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3585 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3588 static void prefs_common_cancel(void)
3590 gtk_widget_hide(dialog.window);
3595 static struct _ComposePrefs
3599 GtkWidget *close_btn;
3602 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
3603 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
3604 static void compose_prefs_close(GtkWidget *widget);
3605 static void compose_prefs_fmt_create(void);
3607 static void compose_prefs_close(GtkWidget *widget)
3609 gtk_widget_hide(composeprefs.window);
3612 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3614 gtk_widget_hide(composeprefs.window);
3619 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3621 if (event && event->keyval == GDK_Escape) {
3622 gtk_widget_hide(composeprefs.window);
3626 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3629 GtkWidget *menuitem;
3631 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3632 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3633 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3634 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3637 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3639 RecvDialogShow dialog_show;
3640 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3642 GtkWidget *menuitem;
3644 dialog_show = *((RecvDialogShow *)pparam->data);
3646 switch (dialog_show) {
3647 case RECVDIALOG_ALWAYS:
3648 gtk_option_menu_set_history(optmenu, 0);
3650 case RECVDIALOG_WINDOW_ACTIVE:
3651 gtk_option_menu_set_history(optmenu, 1);
3653 case RECVDIALOG_NEVER:
3654 gtk_option_menu_set_history(optmenu, 2);
3659 menu = gtk_option_menu_get_menu(optmenu);
3660 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3661 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));