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;
127 GtkWidget *checkbtn_enable_pspell;
128 GtkWidget *entry_pspell_path;
129 GtkWidget *btn_pspell_path;
130 GtkWidget *optmenu_dictionary;
135 static struct Quote {
136 GtkWidget *entry_quotemark;
137 GtkWidget *text_quotefmt;
139 GtkWidget *entry_fw_quotemark;
140 GtkWidget *text_fw_quotefmt;
143 static struct Display {
144 GtkWidget *entry_textfont;
145 GtkWidget *button_textfont;
147 GtkWidget *entry_smallfont;
148 GtkWidget *entry_normalfont;
149 GtkWidget *entry_boldfont;
151 GtkWidget *chkbtn_folder_unread;
153 GtkWidget *chkbtn_transhdr;
155 GtkWidget *chkbtn_swapfrom;
156 GtkWidget *chkbtn_hscrollbar;
157 GtkWidget *chkbtn_useaddrbook;
158 GtkWidget *chkbtn_expand_thread;
159 GtkWidget *chkbtn_bold_unread;
161 GtkWidget *entry_datefmt;
164 static struct Message {
165 GtkWidget *chkbtn_enablecol;
166 GtkWidget *button_edit_col;
167 GtkWidget *chkbtn_mbalnum;
168 GtkWidget *chkbtn_disphdrpane;
169 GtkWidget *chkbtn_disphdr;
170 GtkWidget *spinbtn_linespc;
171 GtkObject *spinbtn_linespc_adj;
172 GtkWidget *chkbtn_headspc;
174 GtkWidget *chkbtn_smoothscroll;
175 GtkWidget *spinbtn_scrollstep;
176 GtkObject *spinbtn_scrollstep_adj;
177 GtkWidget *chkbtn_halfpage;
181 static struct Privacy {
182 GtkWidget *checkbtn_default_encrypt;
183 GtkWidget *checkbtn_ascii_armored;
184 GtkWidget *checkbtn_default_sign;
185 GtkWidget *checkbtn_auto_check_signatures;
186 GtkWidget *checkbtn_gpg_signature_popup;
187 GtkWidget *checkbtn_passphrase_grab;
188 GtkWidget *checkbtn_gpg_warning;
189 GtkWidget *optmenu_default_signkey;
193 static struct Interface {
194 /* GtkWidget *checkbtn_emacs; */
195 GtkWidget *checkbtn_openunread;
196 GtkWidget *checkbtn_openinbox;
197 GtkWidget *checkbtn_immedexec;
198 GtkWidget *checkbtn_confonexit;
199 GtkWidget *checkbtn_cleanonexit;
200 GtkWidget *checkbtn_askonclean;
201 GtkWidget *checkbtn_warnqueued;
202 GtkWidget *checkbtn_addaddrbyclick;
203 GtkWidget *optmenu_recvdialog;
204 GtkWidget *optmenu_nextunreadmsgdialog;
207 static struct Other {
208 GtkWidget *uri_combo;
209 GtkWidget *uri_entry;
210 GtkWidget *printcmd_entry;
211 GtkWidget *exteditor_combo;
212 GtkWidget *exteditor_entry;
215 static struct MessageColorButtons {
216 GtkWidget *quote_level1_btn;
217 GtkWidget *quote_level2_btn;
218 GtkWidget *quote_level3_btn;
220 GtkWidget *tgt_folder_btn;
223 static GtkWidget *quote_desc_win;
224 static GtkWidget *font_sel_win;
225 static guint font_sel_conn_id;
226 static GtkWidget *quote_color_win;
227 static GtkWidget *color_dialog;
229 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
230 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
232 static void prefs_common_default_signkey_set_data_from_optmenu
234 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
235 static void prefs_common_ascii_armored_warning(GtkWidget* widget,
238 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
239 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
240 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
241 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
244 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param);
245 static void prefs_dictionary_set_optmenu(PrefParam *pparam);
250 parameter name, default value, pointer to the prefs variable, data type,
251 pointer to the widget pointer,
252 pointer to the function for data setting,
253 pointer to the function for widget setting
256 static PrefParam param[] = {
258 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
259 &receive.checkbtn_incext,
260 prefs_set_data_from_toggle, prefs_set_toggle},
261 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
262 &receive.entry_incext,
263 prefs_set_data_from_entry, prefs_set_entry},
265 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
266 &receive.checkbtn_local,
267 prefs_set_data_from_toggle, prefs_set_toggle},
268 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
269 &receive.checkbtn_filter_on_inc,
270 prefs_set_data_from_toggle, prefs_set_toggle},
271 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
272 &receive.entry_spool,
273 prefs_set_data_from_entry, prefs_set_entry},
275 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
276 &receive.checkbtn_autochk,
277 prefs_set_data_from_toggle, prefs_set_toggle},
278 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
279 &receive.spinbtn_autochk,
280 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
281 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
282 &receive.checkbtn_chkonstartup,
283 prefs_set_data_from_toggle, prefs_set_toggle},
284 {"noerrorpanel", "FALSE", &prefs_common.noerrorpanel, P_BOOL,
285 &receive.checkbtn_noerrorpanel,
286 prefs_set_data_from_toggle, prefs_set_toggle},
287 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
288 P_BOOL, &receive.checkbtn_scan_after_inc,
289 prefs_set_data_from_toggle, prefs_set_toggle},
290 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
291 &receive.spinbtn_maxarticle,
292 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
295 {"use_ext_sendmail", "FALSE", &prefs_common.use_extsend, P_BOOL,
296 &send.checkbtn_extsend,
297 prefs_set_data_from_toggle, prefs_set_toggle},
298 {"ext_sendmail_cmd", DEFAULT_SENDMAIL_CMD,
299 &prefs_common.extsend_cmd, P_STRING,
300 &send.entry_extsend, prefs_set_data_from_entry, prefs_set_entry},
301 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
302 &send.checkbtn_savemsg,
303 prefs_set_data_from_toggle, prefs_set_toggle},
304 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
305 &send.checkbtn_queuemsg,
306 prefs_set_data_from_toggle, prefs_set_toggle},
308 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
309 &send.optmenu_charset,
310 prefs_common_charset_set_data_from_optmenu,
311 prefs_common_charset_set_optmenu},
314 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
315 &compose.checkbtn_autosig,
316 prefs_set_data_from_toggle, prefs_set_toggle},
317 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
318 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
320 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
321 &compose.checkbtn_autoextedit,
322 prefs_set_data_from_toggle, prefs_set_toggle},
324 {"undo_level", "50", &prefs_common.undolevels, P_INT,
325 &compose.spinbtn_undolevel,
326 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
328 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
329 &compose.spinbtn_linewrap,
330 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
331 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
332 &compose.checkbtn_wrapquote,
333 prefs_set_data_from_toggle, prefs_set_toggle},
334 {"linewrap_before_sending", "FALSE",
335 &prefs_common.linewrap_at_send, P_BOOL,
336 &compose.checkbtn_wrapatsend,
337 prefs_set_data_from_toggle, prefs_set_toggle},
338 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
339 P_BOOL, &compose.checkbtn_forward_as_attachment,
340 prefs_set_data_from_toggle, prefs_set_toggle},
341 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
342 P_BOOL, &compose.checkbtn_smart_wrapping,
343 prefs_set_data_from_toggle, prefs_set_toggle},
344 {"block_cursor", "FALSE", &prefs_common.block_cursor,
345 P_BOOL, &compose.checkbtn_block_cursor,
346 prefs_set_data_from_toggle, prefs_set_toggle},
348 {"enable_pspell", "TRUE", &prefs_common.enable_pspell,
349 P_BOOL, &compose.checkbtn_enable_pspell,
350 prefs_set_data_from_toggle, prefs_set_toggle},
351 {"pspell_path", "/usr/local/share/pspell/", &prefs_common.pspell_path,
352 P_STRING, &compose.entry_pspell_path,
353 prefs_set_data_from_entry, prefs_set_entry},
354 {"dictionary", "", &prefs_common.dictionary,
355 P_STRING, &compose.optmenu_dictionary,
356 prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
358 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
359 &compose.checkbtn_reply_with_quote, prefs_set_data_from_toggle, prefs_set_toggle},
361 /* Account autoselection */
362 {"reply_account_autoselect", "TRUE",
363 &prefs_common.reply_account_autosel, P_BOOL,
364 &compose.checkbtn_reply_account_autosel,
365 prefs_set_data_from_toggle, prefs_set_toggle},
366 {"forward_account_autoselect", "TRUE",
367 &prefs_common.forward_account_autosel, P_BOOL,
368 &compose.checkbtn_forward_account_autosel,
369 prefs_set_data_from_toggle, prefs_set_toggle},
370 {"reedit_account_autoselect", "TRUE",
371 &prefs_common.reedit_account_autosel, P_BOOL,
372 &compose.checkbtn_reedit_account_autosel,
373 prefs_set_data_from_toggle, prefs_set_toggle},
375 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
379 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
380 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
381 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
382 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
383 prefs_set_data_from_text, prefs_set_text},
385 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
386 "e.entry_fw_quotemark,
387 prefs_set_data_from_entry, prefs_set_entry},
388 {"forward_quote_format",
389 "\\n\\nBegin forwarded message:\\n\\n"
390 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
391 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
392 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
393 prefs_set_data_from_text, prefs_set_text},
396 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
398 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
399 &prefs_common.textfont, P_STRING,
400 &display.entry_textfont,
401 prefs_set_data_from_entry, prefs_set_entry},
402 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
403 &prefs_common.smallfont, P_STRING,
404 &display.entry_smallfont,
405 prefs_set_data_from_entry, prefs_set_entry},
406 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
407 &prefs_common.boldfont, P_STRING,
408 &display.entry_boldfont,
409 prefs_set_data_from_entry, prefs_set_entry},
410 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
411 &prefs_common.normalfont, P_STRING,
412 &display.entry_normalfont,
413 prefs_set_data_from_entry, prefs_set_entry},
416 {"display_folder_unread_num", "TRUE",
417 &prefs_common.display_folder_unread, P_BOOL,
418 &display.chkbtn_folder_unread,
419 prefs_set_data_from_toggle, prefs_set_toggle},
421 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
422 &display.chkbtn_transhdr,
423 prefs_set_data_from_toggle, prefs_set_toggle},
425 /* Display: Summary View */
426 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
427 &display.chkbtn_swapfrom,
428 prefs_set_data_from_toggle, prefs_set_toggle},
429 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
430 &display.chkbtn_hscrollbar,
431 prefs_set_data_from_toggle, prefs_set_toggle},
432 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
433 &display.chkbtn_useaddrbook,
434 prefs_set_data_from_toggle, prefs_set_toggle},
435 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
436 P_STRING, &display.entry_datefmt,
437 prefs_set_data_from_entry, prefs_set_entry},
438 {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
439 &display.chkbtn_expand_thread,
440 prefs_set_data_from_toggle, prefs_set_toggle},
441 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
442 &display.chkbtn_bold_unread,
443 prefs_set_data_from_toggle, prefs_set_toggle},
445 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
448 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
450 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
453 {"summary_col_show_mark", "TRUE",
454 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
455 {"summary_col_show_unread", "TRUE",
456 &prefs_common.summary_col_visible[S_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
457 {"summary_col_show_mime", "TRUE",
458 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
459 {"summary_col_show_subject", "TRUE",
460 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
461 {"summary_col_show_from", "TRUE",
462 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
463 {"summary_col_show_date", "TRUE",
464 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
465 {"summary_col_show_size", "TRUE",
466 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
467 {"summary_col_show_number", "FALSE",
468 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
469 {"summary_col_show_score", "FALSE",
470 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
471 {"summary_col_show_locked", "FALSE",
472 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
474 {"summary_col_pos_mark", "0",
475 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
476 {"summary_col_pos_unread", "1",
477 &prefs_common.summary_col_pos[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
478 {"summary_col_pos_mime", "2",
479 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
480 {"summary_col_pos_subject", "3",
481 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
482 {"summary_col_pos_from", "4",
483 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
484 {"summary_col_pos_date", "5",
485 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
486 {"summary_col_pos_size", "6",
487 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
488 {"summary_col_pos_number", "7",
489 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
490 {"summary_col_pos_score", "8",
491 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
492 {"summary_col_pos_locked", "9",
493 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
495 {"summary_col_size_mark", "10",
496 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
497 {"summary_col_size_unread", "13",
498 &prefs_common.summary_col_size[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
499 {"summary_col_size_mime", "10",
500 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
501 {"summary_col_size_subject", "200",
502 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
503 {"summary_col_size_from", "120",
504 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
505 {"summary_col_size_date", "118",
506 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
507 {"summary_col_size_size", "45",
508 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
509 {"summary_col_size_number", "40",
510 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
511 {"summary_col_size_score", "40",
512 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
513 {"summary_col_size_locked", "13",
514 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
517 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
519 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
521 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
523 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
525 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
527 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
530 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
532 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
535 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
537 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
539 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
541 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
543 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
545 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
547 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
549 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
551 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
553 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
555 {"compose_width", "600", &prefs_common.compose_width, P_INT,
557 {"compose_height", "560", &prefs_common.compose_height, P_INT,
561 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
562 &message.chkbtn_enablecol,
563 prefs_set_data_from_toggle, prefs_set_toggle},
565 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
567 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
569 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
571 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
573 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
575 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
577 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
578 P_BOOL, NULL, NULL, NULL},
580 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
581 &message.chkbtn_mbalnum,
582 prefs_set_data_from_toggle, prefs_set_toggle},
583 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
584 P_BOOL, &message.chkbtn_disphdrpane,
585 prefs_set_data_from_toggle, prefs_set_toggle},
586 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
587 &message.chkbtn_disphdr,
588 prefs_set_data_from_toggle, prefs_set_toggle},
589 {"line_space", "2", &prefs_common.line_space, P_INT,
590 &message.spinbtn_linespc,
591 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
592 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
593 &message.chkbtn_headspc,
594 prefs_set_data_from_toggle, prefs_set_toggle},
596 {"enable_smooth_scroll", "FALSE",
597 &prefs_common.enable_smooth_scroll, P_BOOL,
598 &message.chkbtn_smoothscroll,
599 prefs_set_data_from_toggle, prefs_set_toggle},
600 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
601 &message.spinbtn_scrollstep,
602 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
603 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
604 &message.chkbtn_halfpage,
605 prefs_set_data_from_toggle, prefs_set_toggle},
607 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
611 {"mime_image_viewer", "display '%s'",
612 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
613 {"mime_audio_player", "play '%s'",
614 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
615 {"mime_open_command", "gedit '%s'",
616 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
620 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
621 &privacy.checkbtn_default_encrypt,
622 prefs_set_data_from_toggle, prefs_set_toggle},
623 {"ascii_armored", "FALSE", &prefs_common.ascii_armored, P_BOOL,
624 &privacy.checkbtn_ascii_armored,
625 prefs_set_data_from_toggle, prefs_set_toggle},
626 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
627 &privacy.checkbtn_default_sign,
628 prefs_set_data_from_toggle, prefs_set_toggle},
629 {"auto_check_signatures", "TRUE",
630 &prefs_common.auto_check_signatures, P_BOOL,
631 &privacy.checkbtn_auto_check_signatures,
632 prefs_set_data_from_toggle, prefs_set_toggle},
633 {"gpg_signature_popup", "FALSE",
634 &prefs_common.gpg_signature_popup, P_BOOL,
635 &privacy.checkbtn_gpg_signature_popup,
636 prefs_set_data_from_toggle, prefs_set_toggle},
638 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
639 &privacy.checkbtn_passphrase_grab,
640 prefs_set_data_from_toggle, prefs_set_toggle},
641 #endif /* __MINGW32__ */
642 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
643 &privacy.checkbtn_gpg_warning,
644 prefs_set_data_from_toggle, prefs_set_toggle},
645 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
646 &privacy.optmenu_default_signkey,
647 prefs_common_default_signkey_set_data_from_optmenu,
648 prefs_common_default_signkey_set_optmenu},
649 #endif /* USE_GPGME */
652 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
654 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
657 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
658 NULL, NULL, NULL}, */
660 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
661 P_BOOL, &interface.checkbtn_openunread,
662 prefs_set_data_from_toggle, prefs_set_toggle},
663 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
664 P_BOOL, &interface.checkbtn_openinbox,
665 prefs_set_data_from_toggle, prefs_set_toggle},
666 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
667 &interface.checkbtn_immedexec,
668 prefs_set_data_from_toggle, prefs_set_toggle},
669 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
670 &interface.optmenu_recvdialog,
671 prefs_common_recv_dialog_set_data_from_optmenu,
672 prefs_common_recv_dialog_set_optmenu},
673 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
674 &interface.optmenu_nextunreadmsgdialog,
675 prefs_nextunreadmsgdialog_set_data_from_optmenu,
676 prefs_nextunreadmsgdialog_set_optmenu},
678 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
679 P_BOOL, &interface.checkbtn_addaddrbyclick,
680 prefs_set_data_from_toggle, prefs_set_toggle},
681 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
682 &interface.checkbtn_confonexit,
683 prefs_set_data_from_toggle, prefs_set_toggle},
684 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
685 &send.checkbtn_returnreceipt,
686 prefs_set_data_from_toggle, prefs_set_toggle},
687 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
688 &interface.checkbtn_cleanonexit,
689 prefs_set_data_from_toggle, prefs_set_toggle},
690 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
691 &interface.checkbtn_askonclean,
692 prefs_set_data_from_toggle, prefs_set_toggle},
693 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
694 P_BOOL, &interface.checkbtn_warnqueued,
695 prefs_set_data_from_toggle, prefs_set_toggle},
698 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
699 &prefs_common.uri_cmd, P_STRING,
700 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
701 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
702 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
703 {"ext_editor_command", "gedit %s",
704 &prefs_common.ext_editor_cmd, P_STRING,
705 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
707 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
709 {"important_score", "1", &prefs_common.important_score, P_INT,
712 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
715 /* widget creating functions */
716 static void prefs_common_create (void);
717 static void prefs_receive_create (void);
718 static void prefs_send_create (void);
719 static void prefs_compose_create (void);
720 static void prefs_quote_create (void);
721 static void prefs_display_create (void);
722 static void prefs_message_create (void);
724 static void prefs_privacy_create (void);
726 static void prefs_interface_create (void);
727 static void prefs_other_create (void);
729 static void date_format_ok_btn_clicked (GtkButton *button,
731 static void date_format_cancel_btn_clicked (GtkButton *button,
733 static void date_format_key_pressed (GtkWidget *keywidget,
736 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
739 static void date_format_entry_on_change (GtkEditable *editable,
741 static void date_format_select_row (GtkWidget *date_format_list,
744 GdkEventButton *event,
745 GtkWidget *date_format);
746 static GtkWidget *date_format_create (GtkButton *button,
749 static void prefs_quote_description_create (void);
750 static void prefs_quote_description_key_pressed (GtkWidget *widget,
754 static void prefs_quote_colors_dialog (void);
755 static void prefs_quote_colors_dialog_create (void);
756 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
759 static void quote_color_set_dialog (GtkWidget *widget,
761 static void quote_colors_set_dialog_ok (GtkWidget *widget,
763 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
765 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
768 static void set_button_bg_color (GtkWidget *widget,
770 static void prefs_enable_message_color_toggled (void);
771 static void prefs_recycle_colors_toggled (GtkWidget *widget);
773 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
775 static void prefs_font_selection_key_pressed (GtkWidget *widget,
778 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
780 static gint prefs_common_deleted (GtkWidget *widget,
783 static void prefs_common_key_pressed (GtkWidget *widget,
786 static void prefs_common_ok (void);
787 static void prefs_common_apply (void);
788 static void prefs_common_cancel (void);
790 void prefs_common_init() {
791 prefs_common.fltlist = NULL;
792 prefs_common.disphdr_list = NULL;
795 void prefs_common_read_config(void)
799 gchar buf[PREFSBUFSIZE];
801 prefs_read_config(param, "Common", COMMON_RC);
803 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
805 if ((fp = fopen(path, "r")) == NULL) {
806 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
811 while (fgets(buf, sizeof(buf), fp) != NULL) {
813 if (buf[0] == '\0') continue;
814 prefs_common.mime_open_cmd_history =
815 add_history(prefs_common.mime_open_cmd_history, buf);
819 prefs_common.mime_open_cmd_history =
820 g_list_reverse(prefs_common.mime_open_cmd_history);
823 void prefs_common_save_config(void)
829 prefs_save_config(param, "Common", COMMON_RC);
831 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
833 if ((fp = fopen(path, "w")) == NULL) {
834 FILE_OP_ERROR(path, "fopen");
839 for (cur = prefs_common.mime_open_cmd_history;
840 cur != NULL; cur = cur->next) {
841 fputs((gchar *)cur->data, fp);
849 void prefs_common_open(void)
851 if (prefs_rc_is_readonly(COMMON_RC))
856 if (!dialog.window) {
857 prefs_common_create();
860 manage_window_set_transient(GTK_WINDOW(dialog.window));
861 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
862 gtk_widget_grab_focus(dialog.ok_btn);
864 prefs_set_dialog(param);
866 gtk_widget_show(dialog.window);
869 static void prefs_common_create(void)
873 debug_print(_("Creating common preferences window...\n"));
875 prefs_dialog_create(&dialog);
876 gtk_window_set_title (GTK_WINDOW(dialog.window),
877 _("Common Preferences"));
878 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
879 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
880 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
881 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
882 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
883 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
884 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
885 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
886 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
887 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
888 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
889 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
890 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
891 GTK_SIGNAL_FUNC(prefs_common_cancel),
892 GTK_OBJECT(dialog.window));
894 /* create all widgets on notebook */
895 prefs_receive_create();
896 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
898 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
899 prefs_compose_create();
900 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
901 prefs_quote_create();
902 SET_NOTEBOOK_LABEL(dialog.notebook, _("Quote"), page++);
903 prefs_display_create();
904 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
905 prefs_message_create();
906 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
908 prefs_privacy_create();
909 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
911 prefs_interface_create();
912 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
913 prefs_other_create();
914 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
916 gtk_widget_show_all(dialog.window);
919 static void prefs_receive_create(void)
923 GtkWidget *frame_incext;
924 GtkWidget *checkbtn_incext;
926 GtkWidget *label_incext;
927 GtkWidget *entry_incext;
928 /* GtkWidget *button_incext; */
930 GtkWidget *frame_spool;
931 GtkWidget *checkbtn_local;
932 GtkWidget *checkbtn_filter_on_inc;
933 GtkWidget *label_spool;
934 GtkWidget *entry_spool;
936 GtkWidget *hbox_autochk;
937 GtkWidget *checkbtn_autochk;
938 GtkWidget *label_autochk1;
939 GtkObject *spinbtn_autochk_adj;
940 GtkWidget *spinbtn_autochk;
941 GtkWidget *label_autochk2;
942 GtkWidget *checkbtn_chkonstartup;
943 GtkWidget *checkbtn_noerrorpanel;
944 GtkWidget *checkbtn_scan_after_inc;
947 GtkWidget *frame_news;
948 GtkWidget *label_maxarticle;
949 GtkWidget *spinbtn_maxarticle;
950 GtkObject *spinbtn_maxarticle_adj;
952 vbox1 = gtk_vbox_new (FALSE, VSPACING);
953 gtk_widget_show (vbox1);
954 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
955 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
957 PACK_FRAME(vbox1, frame_incext, _("External program"));
959 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
960 gtk_widget_show (vbox2);
961 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
962 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
964 /* Use of external incorporation program */
965 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
966 _("Use external program for incorporation"));
968 hbox = gtk_hbox_new (FALSE, 8);
969 gtk_widget_show (hbox);
970 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
971 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
973 label_incext = gtk_label_new (_("Command"));
974 gtk_widget_show (label_incext);
975 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
977 entry_incext = gtk_entry_new ();
978 gtk_widget_show (entry_incext);
979 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
982 button_incext = gtk_button_new_with_label ("... ");
983 gtk_widget_show (button_incext);
984 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
987 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
989 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
990 gtk_widget_show (vbox2);
991 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
992 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
994 hbox = gtk_hbox_new (FALSE, 32);
995 gtk_widget_show (hbox);
996 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
998 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
999 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
1000 _("Filter on incorporation"));
1001 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
1003 hbox = gtk_hbox_new (FALSE, 8);
1004 gtk_widget_show (hbox);
1005 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1006 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
1008 label_spool = gtk_label_new (_("Spool directory"));
1009 gtk_widget_show (label_spool);
1010 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
1012 entry_spool = gtk_entry_new ();
1013 gtk_widget_show (entry_spool);
1014 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
1016 vbox2 = gtk_vbox_new (FALSE, 0);
1017 gtk_widget_show (vbox2);
1018 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1021 hbox_autochk = gtk_hbox_new (FALSE, 8);
1022 gtk_widget_show (hbox_autochk);
1023 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1025 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1026 _("Auto-check new mail"));
1028 label_autochk1 = gtk_label_new (_("every"));
1029 gtk_widget_show (label_autochk1);
1030 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1032 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1033 spinbtn_autochk = gtk_spin_button_new
1034 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1035 gtk_widget_show (spinbtn_autochk);
1036 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1037 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
1038 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1040 label_autochk2 = gtk_label_new (_("minute(s)"));
1041 gtk_widget_show (label_autochk2);
1042 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1044 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1045 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1046 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1048 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1049 _("Check new mail on startup"));
1051 PACK_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel,
1052 _("No error popup on receive error"));
1053 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1054 _("Update all local folders after incorporation"));
1056 PACK_FRAME(vbox1, frame_news, _("News"));
1058 hbox = gtk_hbox_new (FALSE, 8);
1059 gtk_widget_show (hbox);
1060 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
1061 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
1063 label_maxarticle = gtk_label_new
1064 (_("Maximum number of articles to download\n"
1065 "(unlimited if 0 is specified)"));
1066 gtk_widget_show (label_maxarticle);
1067 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
1068 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
1070 spinbtn_maxarticle_adj =
1071 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
1072 spinbtn_maxarticle = gtk_spin_button_new
1073 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
1074 gtk_widget_show (spinbtn_maxarticle);
1075 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
1077 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
1078 gtk_spin_button_set_numeric
1079 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
1081 receive.checkbtn_incext = checkbtn_incext;
1082 receive.entry_incext = entry_incext;
1083 /* receive.button_incext = button_incext; */
1085 receive.checkbtn_local = checkbtn_local;
1086 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
1087 receive.entry_spool = entry_spool;
1089 receive.checkbtn_autochk = checkbtn_autochk;
1090 receive.spinbtn_autochk = spinbtn_autochk;
1091 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1093 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1094 receive.checkbtn_noerrorpanel = checkbtn_noerrorpanel;
1095 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1098 receive.spinbtn_maxarticle = spinbtn_maxarticle;
1099 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
1102 static void prefs_send_create(void)
1106 GtkWidget *frame_extsend;
1107 GtkWidget *vbox_extsend;
1108 GtkWidget *checkbtn_extsend;
1110 GtkWidget *label_extsend;
1111 GtkWidget *entry_extsend;
1112 /* GtkWidget *button_extsend; */
1113 GtkWidget *checkbtn_savemsg;
1114 GtkWidget *checkbtn_queuemsg;
1115 GtkWidget *label_outcharset;
1117 GtkWidget *optmenu_menu;
1118 GtkWidget *menuitem;
1119 GtkWidget *checkbtn_returnreceipt;
1120 GtkWidget *label_charset_desc;
1122 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1123 gtk_widget_show (vbox1);
1124 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1125 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1127 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1129 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1130 gtk_widget_show (vbox_extsend);
1131 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1132 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1134 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1135 _("Use external program for sending"));
1137 hbox1 = gtk_hbox_new (FALSE, 8);
1138 gtk_widget_show (hbox1);
1139 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1140 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1142 label_extsend = gtk_label_new (_("Command"));
1143 gtk_widget_show (label_extsend);
1144 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1146 entry_extsend = gtk_entry_new ();
1147 gtk_widget_show (entry_extsend);
1148 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1151 button_extsend = gtk_button_new_with_label ("... ");
1152 gtk_widget_show (button_extsend);
1153 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1156 vbox2 = gtk_vbox_new (FALSE, 0);
1157 gtk_widget_show (vbox2);
1158 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1160 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1161 _("Save sent messages to outbox"));
1162 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1163 _("Queue messages that fail to send"));
1164 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1165 _("Send return receipt on request"));
1167 hbox1 = gtk_hbox_new (FALSE, 8);
1168 gtk_widget_show (hbox1);
1169 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1171 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1172 gtk_widget_show (label_outcharset);
1173 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1175 optmenu = gtk_option_menu_new ();
1176 gtk_widget_show (optmenu);
1177 gtk_box_pack_start (GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1179 optmenu_menu = gtk_menu_new ();
1181 #define SET_MENUITEM(str, charset) \
1183 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1186 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1187 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1189 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1191 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1192 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1193 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1194 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1195 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1196 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1198 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1200 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1202 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1203 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1205 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1207 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1208 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1210 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1211 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1213 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1214 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1216 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1217 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1218 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1220 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1222 hbox1 = gtk_hbox_new (FALSE, 8);
1223 gtk_widget_show (hbox1);
1224 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1226 label_charset_desc = gtk_label_new
1227 (_("If `Automatic' is selected, the optimal encoding\n"
1228 "for the current locale will be used."));
1229 gtk_widget_show (label_charset_desc);
1230 gtk_box_pack_start (GTK_BOX (hbox1), label_charset_desc,
1232 gtk_label_set_justify(GTK_LABEL (label_charset_desc), GTK_JUSTIFY_LEFT);
1234 send.checkbtn_extsend = checkbtn_extsend;
1235 send.entry_extsend = entry_extsend;
1236 /* send.button_extsend = button_extsend; */
1238 send.checkbtn_savemsg = checkbtn_savemsg;
1239 send.checkbtn_queuemsg = checkbtn_queuemsg;
1240 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1242 send.optmenu_charset = optmenu;
1246 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1251 g_return_if_fail(param);
1252 g_return_if_fail(param->data);
1253 g_return_if_fail(param->widget);
1254 g_return_if_fail(*(param->widget));
1256 dict_name = gtkpspell_get_dictionary_menu_active_item
1257 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1258 str = *((gchar **) param->data);
1261 *((gchar **) param->data) = dict_name;
1264 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1267 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1269 GtkWidget *menuitem;
1273 g_return_if_fail(optmenu != NULL);
1274 g_return_if_fail(pparam->data != NULL);
1276 if (*(gchar **) pparam->data) {
1277 menu = gtk_option_menu_get_menu(optmenu);
1278 for (cur = GTK_MENU_SHELL(menu)->children;
1279 cur != NULL; cur = cur->next) {
1280 menuitem = GTK_WIDGET(cur->data);
1281 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem), "dict_name");
1282 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1283 gtk_option_menu_set_history(optmenu, n);
1290 gtk_option_menu_set_history(optmenu, 0);
1291 prefs_dictionary_set_data_from_optmenu(pparam);
1294 static void prefs_compose_checkbtn_enable_pspell_toggle_cb
1300 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1301 gtk_widget_set_sensitive(compose.entry_pspell_path, toggled);
1302 gtk_widget_set_sensitive(compose.optmenu_dictionary, toggled);
1303 gtk_widget_set_sensitive(compose.btn_pspell_path, toggled);
1306 static void prefs_compose_btn_pspell_path_clicked_cb(GtkWidget *widget,
1309 gchar *file_path, *tmp;
1310 GtkWidget *new_menu;
1312 file_path = filesel_select_file(_("Select dictionaries location"),
1313 prefs_common.pspell_path);
1314 if (file_path == NULL) {
1318 tmp=g_dirname(file_path);
1320 if (prefs_common.pspell_path)
1321 g_free(prefs_common.pspell_path);
1322 prefs_common.pspell_path = g_strdup_printf("%s%s",tmp,G_DIR_SEPARATOR_S);
1324 new_menu = gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path);
1325 gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_dictionary),
1328 gtk_entry_set_text(GTK_ENTRY(compose.entry_pspell_path), prefs_common.pspell_path);
1329 /* select first one */
1330 gtk_option_menu_set_history(GTK_OPTION_MENU(compose.optmenu_dictionary), 0);
1332 prefs_common.dictionary = gtkpspell_get_dictionary_menu_active_item(
1333 gtk_option_menu_get_menu(GTK_OPTION_MENU(compose.optmenu_dictionary)));
1341 static void prefs_compose_create(void)
1348 GtkWidget *btn_quotefmt;
1350 GtkWidget *frame_sig;
1351 GtkWidget *vbox_sig;
1352 GtkWidget *checkbtn_autosig;
1353 GtkWidget *label_sigsep;
1354 GtkWidget *entry_sigsep;
1356 GtkWidget *frame_editor;
1357 GtkWidget *hbox_editor;
1358 GtkWidget *checkbtn_autoextedit;
1360 GtkWidget *frame_autosel;
1361 GtkWidget *hbox_autosel;
1362 GtkWidget *vbox_autosel;
1363 GtkWidget *checkbtn_reply_account_autosel;
1364 GtkWidget *checkbtn_forward_account_autosel;
1365 GtkWidget *checkbtn_reedit_account_autosel;
1367 GtkWidget *hbox_undolevel;
1368 GtkWidget *label_undolevel;
1369 GtkObject *spinbtn_undolevel_adj;
1370 GtkWidget *spinbtn_undolevel;
1372 GtkWidget *vbox_linewrap;
1377 GtkWidget *label_linewrap;
1378 GtkObject *spinbtn_linewrap_adj;
1379 GtkWidget *spinbtn_linewrap;
1380 GtkWidget *checkbtn_wrapquote;
1381 GtkWidget *checkbtn_wrapatsend;
1383 GtkWidget *frame_reply;
1384 GtkWidget *checkbtn_quote;
1385 GtkWidget *checkbtn_forward_as_attachment;
1386 GtkWidget *checkbtn_smart_wrapping;
1387 GtkWidget *checkbtn_block_cursor;
1390 GtkWidget *frame_spell;
1391 GtkWidget *hbox_spell;
1392 GtkWidget *vbox_spell;
1393 GtkWidget *hbox_pspell_path;
1394 GtkWidget *checkbtn_enable_pspell;
1395 GtkWidget *label_pspell_path;
1396 GtkWidget *entry_pspell_path;
1397 GtkWidget *btn_pspell_path;
1398 GtkWidget *hbox_dictionary;
1399 GtkWidget *label_dictionary;
1400 GtkWidget *optmenu_dictionary;
1402 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1403 gtk_widget_show (vbox1);
1404 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1405 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1409 hbox1 = gtk_hbox_new (FALSE, 32);
1410 gtk_widget_show (hbox1);
1412 hbox2 = gtk_hbox_new (FALSE, 8);
1413 gtk_widget_show (hbox2);
1414 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1417 hbox1 = gtk_hbox_new (FALSE, 32);
1418 gtk_widget_show (hbox1);
1419 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1421 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1423 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1424 gtk_widget_show (vbox_sig);
1425 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1426 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1428 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1429 _("Insert signature automatically"));
1431 hbox1 = gtk_hbox_new (FALSE, 8);
1432 gtk_widget_show (hbox1);
1433 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1434 label_sigsep = gtk_label_new (_("Signature separator"));
1435 gtk_widget_show (label_sigsep);
1436 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1438 entry_sigsep = gtk_entry_new ();
1439 gtk_widget_show (entry_sigsep);
1440 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1442 gtk_widget_set_usize (entry_sigsep, 64, -1);
1444 /* Account autoselection */
1445 PACK_FRAME(vbox1, frame_autosel, _("Automatic Account Selection"));
1447 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1448 gtk_widget_show (hbox_autosel);
1449 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1450 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1452 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1453 _("when replying"));
1454 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1455 _("when forwarding"));
1456 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1457 _("when re-editing"));
1459 vbox2 = gtk_vbox_new (FALSE, 0);
1460 gtk_widget_show (vbox2);
1461 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1463 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1464 _("Automatically launch the external editor"));
1466 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1469 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1470 gtk_widget_show (vbox_linewrap);
1471 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1473 hbox3 = gtk_hbox_new (FALSE, 8);
1474 gtk_widget_show (hbox3);
1475 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1478 label_linewrap = gtk_label_new (_("Wrap messages at"));
1479 gtk_widget_show (label_linewrap);
1480 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1482 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1483 spinbtn_linewrap = gtk_spin_button_new
1484 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1485 gtk_widget_show (spinbtn_linewrap);
1486 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1487 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1488 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1490 label_linewrap = gtk_label_new (_("characters"));
1491 gtk_widget_show (label_linewrap);
1492 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1494 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1496 hbox4 = gtk_hbox_new (FALSE, 32);
1497 gtk_widget_show (hbox4);
1498 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1500 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1502 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1504 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1505 _("Forward as attachment"));
1507 PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping,
1508 _("Smart wrapping (EXPERIMENTAL)"));
1510 PACK_CHECK_BUTTON (vbox1, checkbtn_block_cursor,
1513 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1515 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1516 gtk_widget_show (hbox3);
1517 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1519 label_undolevel = gtk_label_new (_("Undo level"));
1520 gtk_widget_show (label_undolevel);
1521 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1523 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1524 spinbtn_undolevel = gtk_spin_button_new
1525 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1526 gtk_widget_show (spinbtn_undolevel);
1527 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1528 gtk_widget_set_usize (spinbtn_undolevel, 64, -1);
1529 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1532 /* spell checker defaults */
1533 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1534 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1535 gtk_widget_show (vbox_spell);
1536 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1537 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1539 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_pspell,
1540 _("Enable spell checker (EXPERIMENTAL)"));
1542 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_pspell), "toggled",
1543 GTK_SIGNAL_FUNC(prefs_compose_checkbtn_enable_pspell_toggle_cb),
1546 hbox_pspell_path = gtk_hbox_new (FALSE, 8);
1547 gtk_widget_show(hbox_pspell_path);
1548 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_pspell_path, TRUE, TRUE, 0);
1550 label_pspell_path = gtk_label_new (_("Dictionaries path"));
1551 gtk_widget_show(label_pspell_path);
1552 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), label_pspell_path, FALSE, FALSE, 0);
1554 entry_pspell_path = gtk_entry_new();
1555 gtk_widget_show(entry_pspell_path);
1556 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), entry_pspell_path, FALSE, FALSE, 0);
1557 gtk_widget_set_usize(entry_pspell_path, 150, -1);
1558 gtk_widget_set_sensitive(entry_pspell_path, prefs_common.enable_pspell);
1560 btn_pspell_path = gtk_button_new_with_label(_("..."));
1561 gtk_widget_show(btn_pspell_path);
1562 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), btn_pspell_path, FALSE, FALSE, 0);
1563 gtk_widget_set_sensitive(btn_pspell_path, prefs_common.enable_pspell);
1565 gtk_signal_connect(GTK_OBJECT(btn_pspell_path), "clicked",
1566 GTK_SIGNAL_FUNC(prefs_compose_btn_pspell_path_clicked_cb),
1569 hbox_dictionary = gtk_hbox_new(FALSE, 8);
1570 gtk_widget_show(hbox_dictionary);
1571 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_dictionary, TRUE, TRUE, 0);
1573 label_dictionary = gtk_label_new(_("Dictionary"));
1574 gtk_widget_show(label_dictionary);
1575 gtk_box_pack_start(GTK_BOX(hbox_dictionary), label_dictionary, FALSE, FALSE, 0);
1577 optmenu_dictionary = gtk_option_menu_new();
1578 gtk_widget_show(optmenu_dictionary);
1579 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1580 gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path));
1581 gtk_box_pack_start(GTK_BOX(hbox_dictionary), optmenu_dictionary, FALSE, FALSE, 0);
1582 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_pspell);
1586 compose.checkbtn_quote = checkbtn_quote;
1587 compose.entry_quotemark = entry_quotemark;
1588 compose.text_quotefmt = text_quotefmt;
1590 compose.checkbtn_autosig = checkbtn_autosig;
1591 compose.entry_sigsep = entry_sigsep;
1593 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1595 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1596 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1597 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1599 compose.spinbtn_undolevel = spinbtn_undolevel;
1600 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1602 compose.spinbtn_linewrap = spinbtn_linewrap;
1603 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1604 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1605 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1607 compose.checkbtn_forward_as_attachment =
1608 checkbtn_forward_as_attachment;
1609 compose.checkbtn_smart_wrapping =
1610 checkbtn_smart_wrapping;
1611 compose.checkbtn_block_cursor =
1612 checkbtn_block_cursor;
1615 compose.checkbtn_enable_pspell = checkbtn_enable_pspell;
1616 compose.entry_pspell_path = entry_pspell_path;
1617 compose.btn_pspell_path = btn_pspell_path;
1618 compose.optmenu_dictionary = optmenu_dictionary;
1622 static void prefs_quote_create(void)
1625 GtkWidget *frame_quote;
1626 GtkWidget *vbox_quote;
1629 GtkWidget *label_quotemark;
1630 GtkWidget *entry_quotemark;
1631 GtkWidget *scrolledwin_quotefmt;
1632 GtkWidget *text_quotefmt;
1634 GtkWidget *entry_fw_quotemark;
1635 GtkWidget *text_fw_quotefmt;
1637 GtkWidget *btn_quotedesc;
1639 GtkWidget *checkbtn_reply_with_quote;
1641 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1642 gtk_widget_show (vbox1);
1643 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1644 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1648 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1650 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1652 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1653 gtk_widget_show (vbox_quote);
1654 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1655 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1657 hbox1 = gtk_hbox_new (FALSE, 32);
1658 gtk_widget_show (hbox1);
1659 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1661 hbox2 = gtk_hbox_new (FALSE, 8);
1662 gtk_widget_show (hbox2);
1663 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1665 label_quotemark = gtk_label_new (_("Quotation mark"));
1666 gtk_widget_show (label_quotemark);
1667 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1669 entry_quotemark = gtk_entry_new ();
1670 gtk_widget_show (entry_quotemark);
1671 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1672 gtk_widget_set_usize (entry_quotemark, 64, -1);
1674 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1675 gtk_widget_show (scrolledwin_quotefmt);
1676 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1677 gtk_scrolled_window_set_policy
1678 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1679 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1681 text_quotefmt = gtk_text_new (NULL, NULL);
1682 gtk_widget_show (text_quotefmt);
1683 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1684 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1685 gtk_widget_set_usize(text_quotefmt, -1, 60);
1689 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1691 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1692 gtk_widget_show (vbox_quote);
1693 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1694 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1696 hbox1 = gtk_hbox_new (FALSE, 32);
1697 gtk_widget_show (hbox1);
1698 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1700 hbox2 = gtk_hbox_new (FALSE, 8);
1701 gtk_widget_show (hbox2);
1702 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1704 label_quotemark = gtk_label_new (_("Quotation mark"));
1705 gtk_widget_show (label_quotemark);
1706 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1708 entry_fw_quotemark = gtk_entry_new ();
1709 gtk_widget_show (entry_fw_quotemark);
1710 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1712 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
1714 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1715 gtk_widget_show (scrolledwin_quotefmt);
1716 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1717 gtk_scrolled_window_set_policy
1718 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1719 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1721 text_fw_quotefmt = gtk_text_new (NULL, NULL);
1722 gtk_widget_show (text_fw_quotefmt);
1723 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1725 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
1726 gtk_widget_set_usize(text_fw_quotefmt, -1, 60);
1728 hbox1 = gtk_hbox_new (FALSE, 32);
1729 gtk_widget_show (hbox1);
1730 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1733 gtk_button_new_with_label (_(" Description of symbols "));
1734 gtk_widget_show (btn_quotedesc);
1735 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1736 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1737 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1739 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
1740 quote.entry_quotemark = entry_quotemark;
1741 quote.text_quotefmt = text_quotefmt;
1742 quote.entry_fw_quotemark = entry_fw_quotemark;
1743 quote.text_fw_quotefmt = text_fw_quotefmt;
1746 static void prefs_display_create(void)
1749 GtkWidget *frame_font;
1751 GtkWidget *label_textfont;
1752 GtkWidget *entry_textfont;
1753 GtkWidget *button_textfont;
1754 GtkWidget *chkbtn_folder_unread;
1755 GtkWidget *chkbtn_transhdr;
1756 GtkWidget *frame_summary;
1758 GtkWidget *chkbtn_swapfrom;
1759 GtkWidget *chkbtn_hscrollbar;
1760 GtkWidget *chkbtn_useaddrbook;
1761 GtkWidget *chkbtn_expand_thread;
1762 GtkWidget *chkbtn_bold_unread;
1765 GtkWidget *label_datefmt;
1766 GtkWidget *button_datefmt;
1767 GtkWidget *entry_datefmt;
1768 GtkWidget *button_dispitem;
1769 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
1771 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1772 gtk_widget_show (vbox1);
1773 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1774 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1776 PACK_FRAME(vbox1, frame_font, _("Font"));
1778 table1 = gtk_table_new (4, 3, FALSE);
1780 gtk_widget_show (table1);
1781 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1782 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1783 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1784 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1786 label_textfont = gtk_label_new (_("Text"));
1787 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1788 gtk_widget_show (label_textfont);
1789 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1790 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1792 entry_textfont = gtk_entry_new ();
1793 gtk_widget_show (entry_textfont);
1794 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1795 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1797 button_textfont = gtk_button_new_with_label ("... ");
1799 gtk_widget_show (button_textfont);
1800 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1802 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1803 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1805 tmplabel = gtk_label_new (_("Small"));
1806 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1807 gtk_widget_show (tmplabel);
1808 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1809 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1811 tmpentry = gtk_entry_new ();
1812 gtk_widget_show (tmpentry);
1813 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1814 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1816 tmpbutton = gtk_button_new_with_label (" ... ");
1817 gtk_widget_show (tmpbutton);
1818 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1820 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1821 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1822 display.entry_smallfont = tmpentry;
1824 tmplabel = gtk_label_new (_("Normal"));
1825 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1826 gtk_widget_show (tmplabel);
1827 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1828 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1830 tmpentry = gtk_entry_new ();
1831 gtk_widget_show (tmpentry);
1832 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1833 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1835 tmpbutton = gtk_button_new_with_label (" ... ");
1836 gtk_widget_show (tmpbutton);
1837 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1839 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1840 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1841 display.entry_normalfont = tmpentry;
1843 tmplabel = gtk_label_new (_("Bold"));
1844 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1845 gtk_widget_show (tmplabel);
1846 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1847 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1849 tmpentry = gtk_entry_new ();
1850 gtk_widget_show (tmpentry);
1851 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1852 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1854 tmpbutton = gtk_button_new_with_label (" ... ");
1855 gtk_widget_show (tmpbutton);
1856 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1858 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1859 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1860 display.entry_boldfont = tmpentry;
1862 vbox2 = gtk_vbox_new (FALSE, 0);
1863 gtk_widget_show (vbox2);
1864 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1867 (vbox2, chkbtn_transhdr,
1868 _("Translate header name (such as `From:', `Subject:')"));
1870 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1871 _("Display unread number next to folder name"));
1873 /* ---- Summary ---- */
1875 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1877 vbox2 = gtk_vbox_new (FALSE, 0);
1878 gtk_widget_show (vbox2);
1879 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1880 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1883 (vbox2, chkbtn_swapfrom,
1884 _("Display recipient on `From' column if sender is yourself"));
1886 (vbox2, chkbtn_useaddrbook,
1887 _("Display sender using address book"));
1889 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1891 (vbox2, chkbtn_expand_thread, _("Expand threads"));
1893 (vbox2, chkbtn_bold_unread,
1894 _("Display unread messages with bold font"));
1896 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1898 hbox1 = gtk_hbox_new (FALSE, 8);
1899 gtk_widget_show (hbox1);
1900 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1902 label_datefmt = gtk_label_new (_("Date format"));
1903 gtk_widget_show (label_datefmt);
1904 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1906 entry_datefmt = gtk_entry_new ();
1907 gtk_widget_show (entry_datefmt);
1908 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1910 button_datefmt = gtk_button_new_with_label ("... ");
1912 gtk_widget_show (button_datefmt);
1913 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1914 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1915 GTK_SIGNAL_FUNC (date_format_create), NULL);
1917 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1919 hbox1 = gtk_hbox_new (FALSE, 8);
1920 gtk_widget_show (hbox1);
1921 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1923 button_dispitem = gtk_button_new_with_label
1924 (_(" Set display item of summary... "));
1925 gtk_widget_show (button_dispitem);
1926 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1927 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1928 GTK_SIGNAL_FUNC (prefs_summary_column_open),
1931 display.entry_textfont = entry_textfont;
1932 display.button_textfont = button_textfont;
1934 display.chkbtn_folder_unread = chkbtn_folder_unread;
1935 display.chkbtn_transhdr = chkbtn_transhdr;
1937 display.chkbtn_swapfrom = chkbtn_swapfrom;
1938 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1939 display.chkbtn_expand_thread = chkbtn_expand_thread;
1940 display.chkbtn_bold_unread = chkbtn_bold_unread;
1941 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1942 display.entry_datefmt = entry_datefmt;
1945 static void prefs_message_create(void)
1951 GtkWidget *chkbtn_enablecol;
1952 GtkWidget *button_edit_col;
1953 GtkWidget *chkbtn_mbalnum;
1954 GtkWidget *chkbtn_disphdrpane;
1955 GtkWidget *chkbtn_disphdr;
1956 GtkWidget *button_edit_disphdr;
1957 GtkWidget *hbox_linespc;
1958 GtkWidget *label_linespc;
1959 GtkObject *spinbtn_linespc_adj;
1960 GtkWidget *spinbtn_linespc;
1961 GtkWidget *chkbtn_headspc;
1963 GtkWidget *frame_scr;
1964 GtkWidget *vbox_scr;
1965 GtkWidget *chkbtn_smoothscroll;
1966 GtkWidget *hbox_scr;
1967 GtkWidget *label_scr;
1968 GtkObject *spinbtn_scrollstep_adj;
1969 GtkWidget *spinbtn_scrollstep;
1970 GtkWidget *chkbtn_halfpage;
1972 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1973 gtk_widget_show (vbox1);
1974 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1975 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1977 hbox1 = gtk_hbox_new (FALSE, 8);
1978 gtk_widget_show (hbox1);
1979 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1981 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1982 _("Enable coloration of message"));
1983 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1984 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1987 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1988 gtk_widget_show (button_edit_col);
1989 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1990 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1991 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1993 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1995 vbox2 = gtk_vbox_new (FALSE, 0);
1996 gtk_widget_show (vbox2);
1997 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2000 (vbox2, chkbtn_mbalnum,
2001 _("Display 2-byte alphabet and numeric with 1-byte character"));
2002 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
2003 _("Display header pane above message view"));
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 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
2010 _("Display short headers on message view"));
2012 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
2013 gtk_widget_show (button_edit_disphdr);
2014 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
2016 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
2017 GTK_SIGNAL_FUNC (prefs_display_header_open),
2020 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
2022 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2024 hbox1 = gtk_hbox_new (FALSE, 32);
2025 gtk_widget_show (hbox1);
2026 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2028 hbox_linespc = gtk_hbox_new (FALSE, 8);
2029 gtk_widget_show (hbox1);
2030 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
2032 label_linespc = gtk_label_new (_("Line space"));
2033 gtk_widget_show (label_linespc);
2034 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2037 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
2038 spinbtn_linespc = gtk_spin_button_new
2039 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
2040 gtk_widget_show (spinbtn_linespc);
2041 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
2043 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
2044 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
2046 label_linespc = gtk_label_new (_("pixel(s)"));
2047 gtk_widget_show (label_linespc);
2048 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2051 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
2053 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
2055 vbox_scr = gtk_vbox_new (FALSE, 0);
2056 gtk_widget_show (vbox_scr);
2057 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
2058 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
2060 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
2062 hbox1 = gtk_hbox_new (FALSE, 32);
2063 gtk_widget_show (hbox1);
2064 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
2066 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
2068 hbox_scr = gtk_hbox_new (FALSE, 8);
2069 gtk_widget_show (hbox_scr);
2070 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
2072 label_scr = gtk_label_new (_("Step"));
2073 gtk_widget_show (label_scr);
2074 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2076 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
2077 spinbtn_scrollstep = gtk_spin_button_new
2078 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
2079 gtk_widget_show (spinbtn_scrollstep);
2080 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
2082 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
2083 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
2086 label_scr = gtk_label_new (_("pixel(s)"));
2087 gtk_widget_show (label_scr);
2088 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2090 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
2092 message.chkbtn_enablecol = chkbtn_enablecol;
2093 message.button_edit_col = button_edit_col;
2094 message.chkbtn_mbalnum = chkbtn_mbalnum;
2095 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
2096 message.chkbtn_disphdr = chkbtn_disphdr;
2097 message.spinbtn_linespc = spinbtn_linespc;
2098 message.chkbtn_headspc = chkbtn_headspc;
2100 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
2101 message.spinbtn_scrollstep = spinbtn_scrollstep;
2102 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
2103 message.chkbtn_halfpage = chkbtn_halfpage;
2107 static void prefs_privacy_create(void)
2112 GtkWidget *checkbtn_default_encrypt;
2113 GtkWidget *checkbtn_ascii_armored;
2114 GtkWidget *checkbtn_default_sign;
2115 GtkWidget *checkbtn_auto_check_signatures;
2116 GtkWidget *checkbtn_gpg_signature_popup;
2117 GtkWidget *checkbtn_passphrase_grab;
2118 GtkWidget *checkbtn_gpg_warning;
2120 GtkWidget *menuitem;
2122 GtkWidget *optmenu_menu;
2124 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2125 gtk_widget_show (vbox1);
2126 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2127 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2129 vbox2 = gtk_vbox_new (FALSE, 0);
2130 gtk_widget_show (vbox2);
2131 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2133 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
2134 _("Encrypt message by default"));
2136 PACK_CHECK_BUTTON (vbox2, checkbtn_ascii_armored,
2137 _("Plain ASCII armored"));
2138 gtk_signal_connect(GTK_OBJECT(checkbtn_ascii_armored), "toggled",
2139 prefs_common_ascii_armored_warning, (gpointer)0);
2141 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
2142 _("Sign message by default"));
2144 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
2145 _("Automatically check signatures"));
2147 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
2148 _("Show signature check result in a popup window"));
2151 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
2152 _("Grab input while entering a passphrase"));
2156 (vbox2, checkbtn_gpg_warning,
2157 _("Display warning on startup if GnuPG doesn't work"));
2159 hbox1 = gtk_hbox_new (FALSE, 8);
2160 gtk_widget_show (hbox1);
2161 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2163 /* create default signkey box */
2164 label = gtk_label_new (_("Default Sign Key"));
2165 gtk_widget_show (label);
2166 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2167 optmenu = gtk_option_menu_new ();
2168 gtk_widget_show (optmenu);
2169 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
2170 optmenu_menu = gtk_menu_new ();
2172 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
2173 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
2174 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
2175 /* FIXME: disabled because not implemented */
2176 gtk_widget_set_sensitive(optmenu, FALSE);
2178 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
2179 privacy.checkbtn_ascii_armored = checkbtn_ascii_armored;
2180 privacy.checkbtn_default_sign = checkbtn_default_sign;
2181 privacy.checkbtn_auto_check_signatures
2182 = checkbtn_auto_check_signatures;
2183 privacy.checkbtn_gpg_signature_popup
2184 = checkbtn_gpg_signature_popup;
2185 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2186 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2187 privacy.optmenu_default_signkey = optmenu;
2191 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
2195 GtkWidget *menuitem;
2198 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2199 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2200 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2201 g_free(*((gchar **)pparam->data));
2202 *((gchar **)pparam->data) = g_strdup(charset);
2206 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
2210 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2212 GtkWidget *menuitem;
2216 g_return_if_fail(optmenu != NULL);
2217 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2219 menu = gtk_option_menu_get_menu(optmenu);
2220 for (cur = GTK_MENU_SHELL(menu)->children;
2221 cur != NULL; cur = cur->next) {
2222 menuitem = GTK_WIDGET(cur->data);
2223 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2224 if (!strcmp(charset, *((gchar **)pparam->data))) {
2225 gtk_option_menu_set_history(optmenu, n);
2231 gtk_option_menu_set_history(optmenu, 0);
2232 prefs_common_charset_set_data_from_optmenu(pparam);
2236 static void prefs_common_ascii_armored_warning(GtkWidget* widget,
2239 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))
2240 && gtk_notebook_get_current_page(GTK_NOTEBOOK(dialog.notebook))) {
2241 alertpanel_message(_("Warning - Privacy/Plain ASCII armored"),
2242 _("Its not recommend to use the old style plain ASCII\n"
2243 "armored mode for encypted messages. It doesn't comply\n"
2244 "with the RFC 3156 - MIME security with OpenPGP."));
2247 #endif /* USE_GPGME */
2249 static void prefs_interface_create(void)
2254 /* GtkWidget *checkbtn_emacs; */
2255 GtkWidget *checkbtn_openunread;
2256 GtkWidget *checkbtn_openinbox;
2257 GtkWidget *checkbtn_immedexec;
2260 GtkWidget *optmenu_recvdialog;
2262 GtkWidget *menuitem;
2264 GtkWidget *frame_addr;
2265 GtkWidget *vbox_addr;
2266 GtkWidget *checkbtn_addaddrbyclick;
2268 GtkWidget *frame_exit;
2269 GtkWidget *vbox_exit;
2270 GtkWidget *checkbtn_confonexit;
2271 GtkWidget *checkbtn_cleanonexit;
2272 GtkWidget *checkbtn_askonclean;
2273 GtkWidget *checkbtn_warnqueued;
2276 GtkWidget *optmenu_nextunreadmsgdialog;
2277 GtkWidget *optmenu_nextunreadmsgdialog_menu;
2278 GtkWidget *nextunreadmsgdialog_menuitem;
2280 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2281 gtk_widget_show (vbox1);
2282 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2283 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2285 vbox2 = gtk_vbox_new (FALSE, 0);
2286 gtk_widget_show (vbox2);
2287 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2289 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2290 _("Emulate the behavior of mouse operation of\n"
2291 "Emacs-based mailer"));
2292 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2293 GTK_JUSTIFY_LEFT); */
2296 (vbox2, checkbtn_openunread,
2297 _("Open first unread message when entering a folder"));
2300 (vbox2, checkbtn_openinbox,
2301 _("Go to inbox after receiving new mail"));
2303 vbox3 = gtk_vbox_new (FALSE, 0);
2304 gtk_widget_show (vbox3);
2305 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2308 (vbox3, checkbtn_immedexec,
2309 _("Execute immediately when moving or deleting messages"));
2311 hbox1 = gtk_hbox_new (FALSE, 0);
2312 gtk_widget_show (hbox1);
2313 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2315 label = gtk_label_new
2316 (_("(Messages will be marked until execution\n"
2317 " if this is turned off)"));
2318 gtk_widget_show (label);
2319 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2320 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2322 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2324 hbox1 = gtk_hbox_new (FALSE, 8);
2325 gtk_widget_show (hbox1);
2326 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2328 label = gtk_label_new (_("Show receive dialog"));
2329 gtk_widget_show (label);
2330 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2332 optmenu_recvdialog = gtk_option_menu_new ();
2333 gtk_widget_show (optmenu_recvdialog);
2334 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2337 menu = gtk_menu_new ();
2338 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2339 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2340 RECV_DIALOG_ACTIVE);
2341 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2343 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2345 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2347 vbox_addr = gtk_vbox_new (FALSE, 0);
2348 gtk_widget_show (vbox_addr);
2349 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2350 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2353 (vbox_addr, checkbtn_addaddrbyclick,
2354 _("Add address to destination when double-clicked"));
2356 /* Next Unread Message Dialog */
2357 hbox2 = gtk_hbox_new (FALSE, 8);
2358 gtk_widget_show (hbox2);
2359 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
2361 label = gtk_label_new (_("Show no-unread-message dialog"));
2362 gtk_widget_show (label);
2363 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
2365 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2366 gtk_widget_show (optmenu_nextunreadmsgdialog);
2367 gtk_box_pack_start (GTK_BOX (hbox2), optmenu_nextunreadmsgdialog,
2370 optmenu_nextunreadmsgdialog_menu = gtk_menu_new ();
2371 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2372 _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2373 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2374 _("Assume 'Yes'"), NEXTUNREADMSGDIALOG_ASSUME_YES);
2375 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2376 _("Assume 'No'"), NEXTUNREADMSGDIALOG_ASSUME_NO);
2378 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog),
2379 optmenu_nextunreadmsgdialog_menu);
2382 /* Receive Dialog */
2383 /* hbox = gtk_hbox_new (FALSE, 8);
2384 gtk_widget_show (hbox);
2385 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2387 label = gtk_label_new (_("Show receive Dialog"));
2388 gtk_widget_show (label);
2389 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2391 recvdialog_optmenu = gtk_option_menu_new ();
2392 gtk_widget_show (recvdialog_optmenu);
2393 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2395 recvdialog_optmenu_menu = gtk_menu_new ();
2397 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2398 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2399 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2401 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2404 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2406 vbox_exit = gtk_vbox_new (FALSE, 0);
2407 gtk_widget_show (vbox_exit);
2408 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2409 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2411 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2412 _("Confirm on exit"));
2414 hbox1 = gtk_hbox_new (FALSE, 32);
2415 gtk_widget_show (hbox1);
2416 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2418 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2419 _("Empty trash on exit"));
2420 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2421 _("Ask before emptying"));
2422 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2424 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2425 _("Warn if there are queued messages"));
2427 /* interface.checkbtn_emacs = checkbtn_emacs; */
2428 interface.checkbtn_openunread = checkbtn_openunread;
2429 interface.checkbtn_openinbox = checkbtn_openinbox;
2430 interface.checkbtn_immedexec = checkbtn_immedexec;
2431 interface.optmenu_recvdialog = optmenu_recvdialog;
2432 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2433 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2434 interface.checkbtn_confonexit = checkbtn_confonexit;
2435 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2436 interface.checkbtn_askonclean = checkbtn_askonclean;
2437 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2440 static void prefs_other_create(void)
2445 GtkWidget *uri_frame;
2446 GtkWidget *uri_label;
2447 GtkWidget *uri_combo;
2448 GtkWidget *uri_entry;
2450 GtkWidget *print_frame;
2451 GtkWidget *printcmd_label;
2452 GtkWidget *printcmd_entry;
2454 GtkWidget *exteditor_frame;
2455 GtkWidget *exteditor_label;
2456 GtkWidget *exteditor_combo;
2457 GtkWidget *exteditor_entry;
2459 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2460 gtk_widget_show (vbox1);
2461 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2462 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2464 PACK_FRAME(vbox1, uri_frame,
2465 _("External Web browser (%s will be replaced with URI)"));
2467 hbox1 = gtk_hbox_new (FALSE, 8);
2468 gtk_widget_show (hbox1);
2469 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2470 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2472 uri_label = gtk_label_new (_("Command"));
2473 gtk_widget_show(uri_label);
2474 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2476 uri_combo = gtk_combo_new ();
2477 gtk_widget_show (uri_combo);
2478 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2479 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2480 "netscape -remote 'openURL(%s,raise)'",
2482 "gnome-moz-remote --raise --newwin '%s'",
2483 "kterm -e w3m '%s'",
2484 "kterm -e lynx '%s'",
2487 uri_entry = GTK_COMBO (uri_combo)->entry;
2489 PACK_FRAME(vbox1, print_frame,
2490 _("Printing (%s will be replaced with file name)"));
2492 hbox1 = gtk_hbox_new (FALSE, 8);
2493 gtk_widget_show (hbox1);
2494 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2495 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2497 printcmd_label = gtk_label_new (_("Command"));
2498 gtk_widget_show (printcmd_label);
2499 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2501 printcmd_entry = gtk_entry_new ();
2502 gtk_widget_show (printcmd_entry);
2503 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2505 PACK_FRAME(vbox1, exteditor_frame,
2506 _("External editor (%s will be replaced with file name)"));
2508 hbox1 = gtk_hbox_new (FALSE, 8);
2509 gtk_widget_show (hbox1);
2510 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2511 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2513 exteditor_label = gtk_label_new (_("Command"));
2514 gtk_widget_show (exteditor_label);
2515 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2517 exteditor_combo = gtk_combo_new ();
2518 gtk_widget_show (exteditor_combo);
2519 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2520 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2523 "mgedit --no-fork %s",
2529 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2531 other.uri_combo = uri_combo;
2532 other.uri_entry = uri_entry;
2533 other.printcmd_entry = printcmd_entry;
2535 other.exteditor_combo = exteditor_combo;
2536 other.exteditor_entry = exteditor_entry;
2539 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2541 GtkWidget *datefmt_sample = NULL;
2544 g_return_if_fail(widget != NULL);
2545 g_return_if_fail(*widget != NULL);
2546 g_return_if_fail(display.entry_datefmt != NULL);
2548 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2549 (GTK_OBJECT(*widget), "datefmt_sample"));
2550 g_return_if_fail(datefmt_sample != NULL);
2552 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2553 g_free(prefs_common.date_format);
2554 prefs_common.date_format = text;
2555 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2557 gtk_widget_destroy(*widget);
2561 static void date_format_cancel_btn_clicked(GtkButton *button,
2564 g_return_if_fail(widget != NULL);
2565 g_return_if_fail(*widget != NULL);
2567 gtk_widget_destroy(*widget);
2571 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2574 if (event && event->keyval == GDK_Escape)
2575 date_format_cancel_btn_clicked(NULL, widget);
2578 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2579 GdkEventAny *event, GtkWidget **widget)
2581 g_return_val_if_fail(widget != NULL, FALSE);
2582 g_return_val_if_fail(*widget != NULL, FALSE);
2588 static void date_format_entry_on_change(GtkEditable *editable,
2592 struct tm *cal_time;
2596 cur_time = time(NULL);
2597 cal_time = localtime(&cur_time);
2599 text = gtk_editable_get_chars(editable, 0, -1);
2601 strftime(buffer, sizeof buffer, text, cal_time);
2602 gtk_label_set_text(example, buffer);
2605 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2606 gint column, GdkEventButton *event,
2607 GtkWidget *date_format)
2613 GtkWidget *datefmt_sample;
2615 /* only on double click */
2616 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2619 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2620 (GTK_OBJECT(date_format), "datefmt_sample"));
2622 g_return_if_fail(date_format_list != NULL);
2623 g_return_if_fail(date_format != NULL);
2624 g_return_if_fail(datefmt_sample != NULL);
2626 /* get format from clist */
2627 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2629 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2630 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2632 /* insert the format into the text entry */
2633 new_format = g_malloc(strlen(old_format) + 3);
2635 strncpy(new_format, old_format, cur_pos);
2636 new_format[cur_pos] = '\0';
2637 strcat(new_format, format);
2638 strcat(new_format, &old_format[cur_pos]);
2640 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2641 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2646 static GtkWidget *date_format_create(GtkButton *button, void *data)
2648 static GtkWidget *datefmt_win = NULL;
2650 GtkWidget *scrolledwindow1;
2651 GtkWidget *datefmt_clist;
2656 GtkWidget *confirm_area;
2658 GtkWidget *cancel_btn;
2659 GtkWidget *datefmt_entry;
2665 { "%a", _("the full abbreviated weekday name") },
2666 { "%A", _("the full weekday name") },
2667 { "%b", _("the abbreviated month name") },
2668 { "%B", _("the full month name") },
2669 { "%c", _("the preferred date and time for the current locale") },
2670 { "%C", _("the century number (year/100)") },
2671 { "%d", _("the day of the month as a decimal number") },
2672 { "%H", _("the hour as a decimal number using a 24-hour clock") },
2673 { "%I", _("the hour as a decimal number using a 12-hour clock") },
2674 { "%j", _("the day of the year as a decimal number") },
2675 { "%m", _("the month as a decimal number") },
2676 { "%M", _("the minute as a decimal number") },
2677 { "%p", _("either AM or PM") },
2678 { "%S", _("the second as a decimal number") },
2679 { "%w", _("the day of the week as a decimal number") },
2680 { "%x", _("the preferred date for the current locale") },
2681 { "%y", _("the last two digits of a year") },
2682 { "%Y", _("the year as a decimal number") },
2683 { "%Z", _("the time zone or name or abbreviation") }
2688 const gint TIME_FORMAT_ELEMS =
2689 sizeof time_format / sizeof time_format[0];
2691 if (datefmt_win) return datefmt_win;
2693 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2694 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2695 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2696 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2697 gtk_widget_set_usize(datefmt_win, 440, 280);
2699 vbox1 = gtk_vbox_new(FALSE, 10);
2700 gtk_widget_show(vbox1);
2701 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2703 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2704 gtk_scrolled_window_set_policy
2705 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2706 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2707 gtk_widget_show(scrolledwindow1);
2708 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2710 titles[0] = _("Specifier");
2711 titles[1] = _("Description");
2712 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2713 gtk_widget_show(datefmt_clist);
2714 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2715 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2716 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2717 GTK_SELECTION_BROWSE);
2719 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2721 /* phoney casting necessary because of gtk... */
2722 text[0] = (gchar *)time_format[i].fmt;
2723 text[1] = (gchar *)time_format[i].txt;
2724 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2727 table = gtk_table_new(2, 2, FALSE);
2728 gtk_widget_show(table);
2729 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2730 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2731 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2733 label1 = gtk_label_new(_("Date format"));
2734 gtk_widget_show(label1);
2735 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2737 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2738 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2740 datefmt_entry = gtk_entry_new_with_max_length(256);
2741 gtk_widget_show(datefmt_entry);
2742 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2743 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2745 /* we need the "sample" entry box; add it as data so callbacks can
2746 * get the entry box */
2747 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2750 label2 = gtk_label_new(_("Example"));
2751 gtk_widget_show(label2);
2752 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2754 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2755 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2757 label3 = gtk_label_new("");
2758 gtk_widget_show(label3);
2759 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2760 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2761 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2762 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2764 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2765 &cancel_btn, _("Cancel"), NULL, NULL);
2766 gtk_widget_grab_default(ok_btn);
2767 gtk_widget_show(confirm_area);
2769 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2771 /* set the current format */
2772 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2773 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2776 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2777 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2779 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2780 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2782 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2783 GTK_SIGNAL_FUNC(date_format_key_pressed),
2785 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2786 GTK_SIGNAL_FUNC(date_format_on_delete),
2788 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2789 GTK_SIGNAL_FUNC(date_format_entry_on_change),
2792 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2793 GTK_SIGNAL_FUNC(date_format_select_row),
2796 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2797 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2799 gtk_widget_show(datefmt_win);
2800 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2802 gtk_widget_grab_focus(ok_btn);
2807 void prefs_quote_colors_dialog(void)
2809 if (!quote_color_win)
2810 prefs_quote_colors_dialog_create();
2811 gtk_widget_show(quote_color_win);
2812 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2815 gtk_widget_hide(quote_color_win);
2817 textview_update_message_colors();
2818 main_window_reflect_prefs_all();
2821 static void prefs_quote_colors_dialog_create(void)
2826 GtkWidget *quotelevel1_label;
2827 GtkWidget *quotelevel2_label;
2828 GtkWidget *quotelevel3_label;
2829 GtkWidget *uri_label;
2830 GtkWidget *tgt_folder_label;
2833 GtkWidget *recycle_colors_btn;
2834 GtkWidget *frame_colors;
2836 window = gtk_window_new(GTK_WINDOW_DIALOG);
2837 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2838 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2839 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2840 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2841 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2843 vbox = gtk_vbox_new (FALSE, VSPACING);
2844 gtk_container_add (GTK_CONTAINER (window), vbox);
2845 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2846 PACK_FRAME(vbox, frame_colors, _("Colors"));
2848 table = gtk_table_new (4, 2, FALSE);
2849 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2850 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2851 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2852 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2855 color_buttons.quote_level1_btn = gtk_button_new();
2856 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2857 0, 1, 0, 1, 0, 0, 0, 0);
2858 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2859 gtk_container_set_border_width
2860 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2862 color_buttons.quote_level2_btn = gtk_button_new();
2863 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2864 0, 1, 1, 2, 0, 0, 0, 0);
2865 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2866 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2868 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2869 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2870 0, 1, 2, 3, 0, 0, 0, 0);
2871 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2872 gtk_container_set_border_width
2873 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2875 color_buttons.uri_btn = gtk_button_new_with_label ("");
2876 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2877 0, 1, 3, 4, 0, 0, 0, 0);
2878 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2879 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2881 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2882 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2883 0, 1, 4, 5, 0, 0, 0, 0);
2884 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
2885 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2887 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2888 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2889 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2890 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2891 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2893 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2894 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2895 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2896 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2897 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2899 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2900 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2901 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2902 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2903 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2905 uri_label = gtk_label_new (_("URI link"));
2906 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2907 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2908 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2909 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2911 tgt_folder_label = gtk_label_new (_("Target folder"));
2912 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
2913 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2914 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
2915 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
2917 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2918 _("Recycle quote colors"));
2920 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2921 NULL, NULL, NULL, NULL);
2922 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2924 gtk_widget_grab_default(ok_btn);
2925 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2926 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2927 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2928 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2929 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2930 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2931 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2932 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2935 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2936 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2937 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2938 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2939 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2940 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2941 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2942 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2943 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
2944 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
2945 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2946 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2947 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2948 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2950 /* show message button colors and recycle options */
2951 set_button_bg_color(color_buttons.quote_level1_btn,
2952 prefs_common.quote_level1_col);
2953 set_button_bg_color(color_buttons.quote_level2_btn,
2954 prefs_common.quote_level2_col);
2955 set_button_bg_color(color_buttons.quote_level3_btn,
2956 prefs_common.quote_level3_col);
2957 set_button_bg_color(color_buttons.uri_btn,
2958 prefs_common.uri_col);
2959 set_button_bg_color(color_buttons.tgt_folder_btn,
2960 prefs_common.tgt_folder_col);
2961 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2962 prefs_common.recycle_quote_colors);
2964 gtk_widget_show_all(vbox);
2965 quote_color_win = window;
2968 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2969 GdkEventKey *event, gpointer data)
2971 if (event && event->keyval == GDK_Escape)
2975 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2977 gchar *type = (gchar *)data;
2978 gchar *title = NULL;
2979 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2981 GtkColorSelectionDialog *dialog;
2983 if(g_strcasecmp(type, "LEVEL1") == 0) {
2984 title = _("Pick color for quotation level 1");
2985 rgbvalue = prefs_common.quote_level1_col;
2986 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2987 title = _("Pick color for quotation level 2");
2988 rgbvalue = prefs_common.quote_level2_col;
2989 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2990 title = _("Pick color for quotation level 3");
2991 rgbvalue = prefs_common.quote_level3_col;
2992 } else if(g_strcasecmp(type, "URI") == 0) {
2993 title = _("Pick color for URI");
2994 rgbvalue = prefs_common.uri_col;
2995 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
2996 title = _("Pick color for target folder");
2997 rgbvalue = prefs_common.tgt_folder_col;
2998 } else { /* Should never be called */
2999 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
3003 color_dialog = gtk_color_selection_dialog_new(title);
3004 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
3005 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
3006 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
3007 manage_window_set_transient(GTK_WINDOW(color_dialog));
3009 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
3010 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
3011 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
3012 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
3013 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
3014 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
3017 /* preselect the previous color in the color selection dialog */
3018 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
3019 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
3020 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
3021 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
3022 gtk_color_selection_set_color
3023 (GTK_COLOR_SELECTION(dialog->colorsel), color);
3025 gtk_widget_show(color_dialog);
3028 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
3030 GtkColorSelection *colorsel = (GtkColorSelection *)
3031 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
3033 gint red, green, blue, rgbvalue;
3034 gchar *type = (gchar *)data;
3036 gtk_color_selection_get_color(colorsel, color);
3038 red = (gint) (color[0] * 255.0);
3039 green = (gint) (color[1] * 255.0);
3040 blue = (gint) (color[2] * 255.0);
3041 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
3044 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
3045 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
3046 fprintf(stderr, "Color is %x\n", rgbvalue);
3049 if (g_strcasecmp(type, "LEVEL1") == 0) {
3050 prefs_common.quote_level1_col = rgbvalue;
3051 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
3052 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
3053 prefs_common.quote_level2_col = rgbvalue;
3054 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
3055 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
3056 prefs_common.quote_level3_col = rgbvalue;
3057 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
3058 } else if (g_strcasecmp(type, "URI") == 0) {
3059 prefs_common.uri_col = rgbvalue;
3060 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
3061 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
3062 prefs_common.tgt_folder_col = rgbvalue;
3063 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
3064 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
3066 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
3068 gtk_widget_destroy(color_dialog);
3071 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
3073 gtk_widget_destroy(color_dialog);
3076 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
3080 gtk_widget_destroy(color_dialog);
3083 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
3088 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
3089 newstyle = gtk_style_copy(gtk_widget_get_default_style());
3090 newstyle->bg[GTK_STATE_NORMAL] = color;
3091 newstyle->bg[GTK_STATE_PRELIGHT] = color;
3092 newstyle->bg[GTK_STATE_ACTIVE] = color;
3094 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
3097 static void prefs_enable_message_color_toggled(void)
3101 is_active = gtk_toggle_button_get_active
3102 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
3103 gtk_widget_set_sensitive(message.button_edit_col, is_active);
3104 prefs_common.enable_color = is_active;
3107 static void prefs_recycle_colors_toggled(GtkWidget *widget)
3111 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
3112 prefs_common.recycle_quote_colors = is_active;
3115 void prefs_quote_description(void)
3117 if (!quote_desc_win)
3118 prefs_quote_description_create();
3120 manage_window_set_transient(GTK_WINDOW(quote_desc_win));
3121 gtk_widget_show(quote_desc_win);
3123 gtk_widget_hide(quote_desc_win);
3126 static void prefs_quote_description_create(void)
3135 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
3136 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
3137 _("Description of symbols"));
3138 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
3139 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
3140 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
3141 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, FALSE, FALSE);
3143 vbox = gtk_vbox_new(FALSE, 8);
3144 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
3146 hbox = gtk_hbox_new(FALSE, 8);
3147 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
3149 vbox2 = gtk_vbox_new(FALSE, 8);
3150 gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
3152 #define PACK_LABEL() \
3153 gtk_box_pack_start(GTK_BOX(vbox2), label, TRUE, TRUE, 0); \
3154 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); \
3155 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
3157 label = gtk_label_new
3160 "%N\n" /* full name of sender */
3161 "%F\n" /* first name of sender */
3162 "%I\n" /* initial of sender */
3163 "%s\n" /* subject */
3166 "%n\n" /* newsgroups */
3167 "%r\n" /* references */
3168 "%i"); /* message id */
3171 label = gtk_label_new
3172 ("?x{expr}"); /* condition */
3175 label = gtk_label_new
3176 ("%M\n" /* message body */
3177 "%Q\n" /* quoted message body */
3178 "%m\n" /* message body without signature */
3179 "%q\n" /* quoted message body without signature */
3180 "%%"); /* literal percent */
3183 label = gtk_label_new
3184 ("\\\\\n" /* literal backslash */
3185 "\\?\n" /* literal question mark */
3186 "\\{\n" /* literal opening curly brace */
3187 "\\}"); /* literal closing curly brace */
3190 vbox2 = gtk_vbox_new(FALSE, 8);
3191 gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
3193 label = gtk_label_new
3196 "Full Name of Sender\n"
3197 "First Name of Sender\n"
3198 "Initial of Sender\n"
3207 label = gtk_label_new
3208 (_("If x is set, displays expr"));
3211 label = gtk_label_new
3213 "Quoted message body\n"
3214 "Message body without signature\n"
3215 "Quoted message body without signature\n"
3219 label = gtk_label_new
3220 (_("Literal backslash\n"
3221 "Literal question mark\n"
3222 "Literal opening curly brace\n"
3223 "Literal closing curly brace"));
3228 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3229 NULL, NULL, NULL, NULL);
3230 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3232 gtk_widget_grab_default(ok_btn);
3233 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3234 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3236 (GTK_OBJECT(quote_desc_win), "key_press_event",
3237 GTK_SIGNAL_FUNC(prefs_quote_description_key_pressed),
3239 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
3240 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3242 gtk_widget_show_all(vbox);
3245 static void prefs_quote_description_key_pressed(GtkWidget *widget,
3249 if (event && event->keyval == GDK_Escape)
3253 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3257 g_return_if_fail(entry != NULL);
3259 if (!font_sel_win) {
3260 font_sel_win = gtk_font_selection_dialog_new
3261 (_("Font selection"));
3262 gtk_window_position(GTK_WINDOW(font_sel_win),
3263 GTK_WIN_POS_CENTER);
3264 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3265 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3268 (GTK_OBJECT(font_sel_win), "key_press_event",
3269 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3271 gtk_signal_connect_object
3272 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3274 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3275 GTK_OBJECT(font_sel_win));
3278 if(font_sel_conn_id) {
3279 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3281 font_sel_conn_id = gtk_signal_connect
3282 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3284 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3286 printf("%i\n", font_sel_conn_id);
3288 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3289 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3291 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3292 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3293 gtk_widget_grab_focus
3294 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3295 gtk_widget_show(font_sel_win);
3298 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3302 if (event && event->keyval == GDK_Escape)
3303 gtk_widget_hide(font_sel_win);
3306 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3310 fontname = gtk_font_selection_dialog_get_font_name
3311 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3314 gtk_entry_set_text(entry, fontname);
3319 gtk_widget_hide(font_sel_win);
3322 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3325 GtkWidget *menuitem;
3328 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3329 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3330 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3331 g_free(*((gchar **)pparam->data));
3332 *((gchar **)pparam->data) = g_strdup(charset);
3335 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3338 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3340 GtkWidget *menuitem;
3344 g_return_if_fail(optmenu != NULL);
3345 g_return_if_fail(*((gchar **)pparam->data) != NULL);
3347 menu = gtk_option_menu_get_menu(optmenu);
3348 for (cur = GTK_MENU_SHELL(menu)->children;
3349 cur != NULL; cur = cur->next) {
3350 menuitem = GTK_WIDGET(cur->data);
3351 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3352 if (!strcmp(charset, *((gchar **)pparam->data))) {
3353 gtk_option_menu_set_history(optmenu, n);
3359 gtk_option_menu_set_history(optmenu, 0);
3360 prefs_common_charset_set_data_from_optmenu(pparam);
3363 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3366 GtkWidget *menuitem;
3368 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3369 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3370 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3371 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3374 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3376 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3377 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3379 GtkWidget *menuitem;
3382 case RECV_DIALOG_ALWAYS:
3383 gtk_option_menu_set_history(optmenu, 0);
3385 case RECV_DIALOG_ACTIVE:
3386 gtk_option_menu_set_history(optmenu, 1);
3388 case RECV_DIALOG_NEVER:
3389 gtk_option_menu_set_history(optmenu, 2);
3394 menu = gtk_option_menu_get_menu(optmenu);
3395 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3396 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3399 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3402 prefs_common_cancel();
3406 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3409 if (event && event->keyval == GDK_Escape)
3410 prefs_common_cancel();
3413 static void prefs_common_ok(void)
3415 prefs_common_apply();
3416 gtk_widget_hide(dialog.window);
3417 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
3418 gtk_widget_hide(quote_desc_win);
3423 static void prefs_common_apply(void)
3425 prefs_set_data_from_dialog(param);
3426 main_window_reflect_prefs_all();
3427 prefs_common_save_config();
3429 inc_autocheck_timer_remove();
3430 inc_autocheck_timer_set();
3433 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3436 GtkWidget *menuitem;
3438 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3439 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3440 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3441 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3444 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3446 NextUnreadMsgDialogShow dialog_show;
3447 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3449 GtkWidget *menuitem;
3451 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3453 switch (dialog_show) {
3454 case NEXTUNREADMSGDIALOG_ALWAYS:
3455 gtk_option_menu_set_history(optmenu, 0);
3457 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3458 gtk_option_menu_set_history(optmenu, 1);
3460 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3461 gtk_option_menu_set_history(optmenu, 2);
3466 menu = gtk_option_menu_get_menu(optmenu);
3467 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3468 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3471 static void prefs_common_cancel(void)
3473 gtk_widget_hide(dialog.window);
3478 static struct _ComposePrefs
3482 GtkWidget *close_btn;
3485 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
3486 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
3487 static void compose_prefs_close(GtkWidget *widget);
3488 static void compose_prefs_fmt_create(void);
3490 static void compose_prefs_close(GtkWidget *widget)
3492 gtk_widget_hide(composeprefs.window);
3495 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3497 gtk_widget_hide(composeprefs.window);
3502 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3504 if (event && event->keyval == GDK_Escape) {
3505 gtk_widget_hide(composeprefs.window);
3509 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3512 GtkWidget *menuitem;
3514 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3515 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3516 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3517 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3520 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3522 RecvDialogShow dialog_show;
3523 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3525 GtkWidget *menuitem;
3527 dialog_show = *((RecvDialogShow *)pparam->data);
3529 switch (dialog_show) {
3530 case RECVDIALOG_ALWAYS:
3531 gtk_option_menu_set_history(optmenu, 0);
3533 case RECVDIALOG_WINDOW_ACTIVE:
3534 gtk_option_menu_set_history(optmenu, 1);
3536 case RECVDIALOG_NEVER:
3537 gtk_option_menu_set_history(optmenu, 2);
3542 menu = gtk_option_menu_get_menu(optmenu);
3543 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3544 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));