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;
109 GtkWidget *checkbtn_reply_account_autosel;
110 GtkWidget *checkbtn_forward_account_autosel;
111 GtkWidget *checkbtn_reedit_account_autosel;
113 GtkWidget *spinbtn_linewrap;
114 GtkObject *spinbtn_linewrap_adj;
115 GtkWidget *checkbtn_wrapquote;
116 GtkWidget *checkbtn_wrapatsend;
118 GtkWidget *checkbtn_quote;
119 GtkWidget *checkbtn_forward_as_attachment;
120 GtkWidget *checkbtn_smart_wrapping;
121 GtkWidget *checkbtn_block_cursor;
122 GtkWidget *checkbtn_reply_with_quote;
126 GtkWidget *checkbtn_enable_pspell;
127 GtkWidget *entry_pspell_path;
128 GtkWidget *btn_pspell_path;
129 GtkWidget *optmenu_dictionary;
134 static struct Quote {
135 GtkWidget *entry_quotemark;
136 GtkWidget *text_quotefmt;
138 GtkWidget *entry_fw_quotemark;
139 GtkWidget *text_fw_quotefmt;
142 static struct Display {
143 GtkWidget *entry_textfont;
144 GtkWidget *button_textfont;
146 GtkWidget *entry_smallfont;
147 GtkWidget *entry_normalfont;
148 GtkWidget *entry_boldfont;
150 GtkWidget *chkbtn_folder_unread;
152 GtkWidget *chkbtn_transhdr;
154 GtkWidget *chkbtn_swapfrom;
155 GtkWidget *chkbtn_hscrollbar;
156 GtkWidget *chkbtn_useaddrbook;
157 GtkWidget *chkbtn_expand_thread;
158 GtkWidget *chkbtn_bold_unread;
160 GtkWidget *entry_datefmt;
163 static struct Message {
164 GtkWidget *chkbtn_enablecol;
165 GtkWidget *button_edit_col;
166 GtkWidget *chkbtn_mbalnum;
167 GtkWidget *chkbtn_disphdrpane;
168 GtkWidget *chkbtn_disphdr;
169 GtkWidget *spinbtn_linespc;
170 GtkObject *spinbtn_linespc_adj;
171 GtkWidget *chkbtn_headspc;
173 GtkWidget *chkbtn_smoothscroll;
174 GtkWidget *spinbtn_scrollstep;
175 GtkObject *spinbtn_scrollstep_adj;
176 GtkWidget *chkbtn_halfpage;
180 static struct Privacy {
181 GtkWidget *checkbtn_default_encrypt;
182 GtkWidget *checkbtn_ascii_armored;
183 GtkWidget *checkbtn_default_sign;
184 GtkWidget *checkbtn_auto_check_signatures;
185 GtkWidget *checkbtn_gpg_signature_popup;
186 GtkWidget *checkbtn_passphrase_grab;
187 GtkWidget *checkbtn_gpg_warning;
188 GtkWidget *optmenu_default_signkey;
192 static struct Interface {
193 /* GtkWidget *checkbtn_emacs; */
194 GtkWidget *checkbtn_openunread;
195 GtkWidget *checkbtn_openinbox;
196 GtkWidget *checkbtn_immedexec;
197 GtkWidget *checkbtn_confonexit;
198 GtkWidget *checkbtn_cleanonexit;
199 GtkWidget *checkbtn_askonclean;
200 GtkWidget *checkbtn_warnqueued;
201 GtkWidget *checkbtn_addaddrbyclick;
202 GtkWidget *optmenu_recvdialog;
203 GtkWidget *optmenu_nextunreadmsgdialog;
206 static struct Other {
207 GtkWidget *uri_combo;
208 GtkWidget *uri_entry;
209 GtkWidget *printcmd_entry;
210 GtkWidget *exteditor_combo;
211 GtkWidget *exteditor_entry;
214 static struct MessageColorButtons {
215 GtkWidget *quote_level1_btn;
216 GtkWidget *quote_level2_btn;
217 GtkWidget *quote_level3_btn;
219 GtkWidget *tgt_folder_btn;
222 static GtkWidget *quote_desc_win;
223 static GtkWidget *font_sel_win;
224 static guint font_sel_conn_id;
225 static GtkWidget *quote_color_win;
226 static GtkWidget *color_dialog;
228 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
229 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
231 static void prefs_common_default_signkey_set_data_from_optmenu
233 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
234 static void prefs_common_ascii_armored_warning(GtkWidget* widget,
237 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
238 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
239 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
240 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
243 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param);
244 static void prefs_dictionary_set_optmenu(PrefParam *pparam);
249 parameter name, default value, pointer to the prefs variable, data type,
250 pointer to the widget pointer,
251 pointer to the function for data setting,
252 pointer to the function for widget setting
255 static PrefParam param[] = {
257 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
258 &receive.checkbtn_incext,
259 prefs_set_data_from_toggle, prefs_set_toggle},
260 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
261 &receive.entry_incext,
262 prefs_set_data_from_entry, prefs_set_entry},
264 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
265 &receive.checkbtn_local,
266 prefs_set_data_from_toggle, prefs_set_toggle},
267 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
268 &receive.checkbtn_filter_on_inc,
269 prefs_set_data_from_toggle, prefs_set_toggle},
270 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
271 &receive.entry_spool,
272 prefs_set_data_from_entry, prefs_set_entry},
274 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
275 &receive.checkbtn_autochk,
276 prefs_set_data_from_toggle, prefs_set_toggle},
277 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
278 &receive.spinbtn_autochk,
279 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
280 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
281 &receive.checkbtn_chkonstartup,
282 prefs_set_data_from_toggle, prefs_set_toggle},
283 {"noerrorpanel", "FALSE", &prefs_common.noerrorpanel, P_BOOL,
284 &receive.checkbtn_noerrorpanel,
285 prefs_set_data_from_toggle, prefs_set_toggle},
286 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
287 P_BOOL, &receive.checkbtn_scan_after_inc,
288 prefs_set_data_from_toggle, prefs_set_toggle},
289 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
290 &receive.spinbtn_maxarticle,
291 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
294 {"use_ext_sendmail", "FALSE", &prefs_common.use_extsend, P_BOOL,
295 &send.checkbtn_extsend,
296 prefs_set_data_from_toggle, prefs_set_toggle},
297 {"ext_sendmail_cmd", DEFAULT_SENDMAIL_CMD,
298 &prefs_common.extsend_cmd, P_STRING,
299 &send.entry_extsend, prefs_set_data_from_entry, prefs_set_entry},
300 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
301 &send.checkbtn_savemsg,
302 prefs_set_data_from_toggle, prefs_set_toggle},
303 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
304 &send.checkbtn_queuemsg,
305 prefs_set_data_from_toggle, prefs_set_toggle},
307 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
308 &send.optmenu_charset,
309 prefs_common_charset_set_data_from_optmenu,
310 prefs_common_charset_set_optmenu},
313 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
314 &compose.checkbtn_autosig,
315 prefs_set_data_from_toggle, prefs_set_toggle},
316 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
317 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
319 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
320 &compose.checkbtn_autoextedit,
321 prefs_set_data_from_toggle, prefs_set_toggle},
323 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
324 &compose.spinbtn_linewrap,
325 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
326 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
327 &compose.checkbtn_wrapquote,
328 prefs_set_data_from_toggle, prefs_set_toggle},
329 {"linewrap_before_sending", "FALSE",
330 &prefs_common.linewrap_at_send, P_BOOL,
331 &compose.checkbtn_wrapatsend,
332 prefs_set_data_from_toggle, prefs_set_toggle},
333 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
334 P_BOOL, &compose.checkbtn_forward_as_attachment,
335 prefs_set_data_from_toggle, prefs_set_toggle},
336 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
337 P_BOOL, &compose.checkbtn_smart_wrapping,
338 prefs_set_data_from_toggle, prefs_set_toggle},
339 {"block_cursor", "FALSE", &prefs_common.block_cursor,
340 P_BOOL, &compose.checkbtn_block_cursor,
341 prefs_set_data_from_toggle, prefs_set_toggle},
343 {"enable_pspell", "TRUE", &prefs_common.enable_pspell,
344 P_BOOL, &compose.checkbtn_enable_pspell,
345 prefs_set_data_from_toggle, prefs_set_toggle},
346 {"pspell_path", "/usr/local/share/pspell/", &prefs_common.pspell_path,
347 P_STRING, &compose.entry_pspell_path,
348 prefs_set_data_from_entry, prefs_set_entry},
349 {"dictionary", "", &prefs_common.dictionary,
350 P_STRING, &compose.optmenu_dictionary,
351 prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
353 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
354 &compose.checkbtn_reply_with_quote, prefs_set_data_from_toggle, prefs_set_toggle},
356 /* Account autoselection */
357 {"reply_account_autoselect", "TRUE",
358 &prefs_common.reply_account_autosel, P_BOOL,
359 &compose.checkbtn_reply_account_autosel,
360 prefs_set_data_from_toggle, prefs_set_toggle},
361 {"forward_account_autoselect", "TRUE",
362 &prefs_common.forward_account_autosel, P_BOOL,
363 &compose.checkbtn_forward_account_autosel,
364 prefs_set_data_from_toggle, prefs_set_toggle},
365 {"reedit_account_autoselect", "TRUE",
366 &prefs_common.reedit_account_autosel, P_BOOL,
367 &compose.checkbtn_reedit_account_autosel,
368 prefs_set_data_from_toggle, prefs_set_toggle},
370 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
374 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
375 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
376 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
377 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
378 prefs_set_data_from_text, prefs_set_text},
380 {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
381 "e.entry_fw_quotemark,
382 prefs_set_data_from_entry, prefs_set_entry},
384 "\\n\\nBegin forwarded message:\\n\\n"
385 "?d(Date: %d\\n)?f(From: %f\\n)?t(To: %t\\n)?c(Cc: %c\\n)"
386 "?n(Newsgroups: %n\\n)?s(Subject: %s\\n)\\n\\n%M",
387 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
388 prefs_set_data_from_text, prefs_set_text},
391 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
393 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
394 &prefs_common.textfont, P_STRING,
395 &display.entry_textfont,
396 prefs_set_data_from_entry, prefs_set_entry},
397 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
398 &prefs_common.smallfont, P_STRING,
399 &display.entry_smallfont,
400 prefs_set_data_from_entry, prefs_set_entry},
401 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
402 &prefs_common.boldfont, P_STRING,
403 &display.entry_boldfont,
404 prefs_set_data_from_entry, prefs_set_entry},
405 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
406 &prefs_common.normalfont, P_STRING,
407 &display.entry_normalfont,
408 prefs_set_data_from_entry, prefs_set_entry},
411 {"display_folder_unread_num", "TRUE",
412 &prefs_common.display_folder_unread, P_BOOL,
413 &display.chkbtn_folder_unread,
414 prefs_set_data_from_toggle, prefs_set_toggle},
416 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
417 &display.chkbtn_transhdr,
418 prefs_set_data_from_toggle, prefs_set_toggle},
420 /* Display: Summary View */
421 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
422 &display.chkbtn_swapfrom,
423 prefs_set_data_from_toggle, prefs_set_toggle},
424 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
425 &display.chkbtn_hscrollbar,
426 prefs_set_data_from_toggle, prefs_set_toggle},
427 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
428 &display.chkbtn_useaddrbook,
429 prefs_set_data_from_toggle, prefs_set_toggle},
430 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
431 P_STRING, &display.entry_datefmt,
432 prefs_set_data_from_entry, prefs_set_entry},
433 {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
434 &display.chkbtn_expand_thread,
435 prefs_set_data_from_toggle, prefs_set_toggle},
436 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
437 &display.chkbtn_bold_unread,
438 prefs_set_data_from_toggle, prefs_set_toggle},
440 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
443 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
445 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
448 {"summary_col_show_mark", "TRUE",
449 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
450 {"summary_col_show_unread", "TRUE",
451 &prefs_common.summary_col_visible[S_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
452 {"summary_col_show_mime", "TRUE",
453 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_subject", "TRUE",
455 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_from", "TRUE",
457 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
458 {"summary_col_show_date", "TRUE",
459 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
460 {"summary_col_show_size", "TRUE",
461 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
462 {"summary_col_show_number", "FALSE",
463 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
464 {"summary_col_show_score", "FALSE",
465 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
466 {"summary_col_show_locked", "FALSE",
467 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
469 {"summary_col_pos_mark", "0",
470 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
471 {"summary_col_pos_unread", "1",
472 &prefs_common.summary_col_pos[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
473 {"summary_col_pos_mime", "2",
474 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
475 {"summary_col_pos_subject", "3",
476 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
477 {"summary_col_pos_from", "4",
478 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
479 {"summary_col_pos_date", "5",
480 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
481 {"summary_col_pos_size", "6",
482 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
483 {"summary_col_pos_number", "7",
484 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
485 {"summary_col_pos_score", "8",
486 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
487 {"summary_col_pos_locked", "9",
488 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
490 {"summary_col_size_mark", "10",
491 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
492 {"summary_col_size_unread", "13",
493 &prefs_common.summary_col_size[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
494 {"summary_col_size_mime", "10",
495 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
496 {"summary_col_size_subject", "200",
497 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
498 {"summary_col_size_from", "120",
499 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
500 {"summary_col_size_date", "118",
501 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
502 {"summary_col_size_size", "45",
503 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
504 {"summary_col_size_number", "40",
505 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
506 {"summary_col_size_score", "40",
507 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
508 {"summary_col_size_locked", "13",
509 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
512 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
514 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
516 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
518 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
520 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
522 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
525 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
527 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
530 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
532 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
534 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
536 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
538 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
540 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
542 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
544 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
546 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
548 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
550 {"compose_width", "600", &prefs_common.compose_width, P_INT,
552 {"compose_height", "560", &prefs_common.compose_height, P_INT,
556 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
557 &message.chkbtn_enablecol,
558 prefs_set_data_from_toggle, prefs_set_toggle},
560 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
562 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
564 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
566 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
568 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
570 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
572 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
573 P_BOOL, NULL, NULL, NULL},
575 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
576 &message.chkbtn_mbalnum,
577 prefs_set_data_from_toggle, prefs_set_toggle},
578 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
579 P_BOOL, &message.chkbtn_disphdrpane,
580 prefs_set_data_from_toggle, prefs_set_toggle},
581 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
582 &message.chkbtn_disphdr,
583 prefs_set_data_from_toggle, prefs_set_toggle},
584 {"line_space", "2", &prefs_common.line_space, P_INT,
585 &message.spinbtn_linespc,
586 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
587 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
588 &message.chkbtn_headspc,
589 prefs_set_data_from_toggle, prefs_set_toggle},
591 {"enable_smooth_scroll", "FALSE",
592 &prefs_common.enable_smooth_scroll, P_BOOL,
593 &message.chkbtn_smoothscroll,
594 prefs_set_data_from_toggle, prefs_set_toggle},
595 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
596 &message.spinbtn_scrollstep,
597 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
598 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
599 &message.chkbtn_halfpage,
600 prefs_set_data_from_toggle, prefs_set_toggle},
602 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
606 {"mime_image_viewer", "display '%s'",
607 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
608 {"mime_audio_player", "play '%s'",
609 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
610 {"mime_open_command", "gedit '%s'",
611 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
615 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
616 &privacy.checkbtn_default_encrypt,
617 prefs_set_data_from_toggle, prefs_set_toggle},
618 {"ascii_armored", "FALSE", &prefs_common.ascii_armored, P_BOOL,
619 &privacy.checkbtn_ascii_armored,
620 prefs_set_data_from_toggle, prefs_set_toggle},
621 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
622 &privacy.checkbtn_default_sign,
623 prefs_set_data_from_toggle, prefs_set_toggle},
624 {"auto_check_signatures", "TRUE",
625 &prefs_common.auto_check_signatures, P_BOOL,
626 &privacy.checkbtn_auto_check_signatures,
627 prefs_set_data_from_toggle, prefs_set_toggle},
628 {"gpg_signature_popup", "FALSE",
629 &prefs_common.gpg_signature_popup, P_BOOL,
630 &privacy.checkbtn_gpg_signature_popup,
631 prefs_set_data_from_toggle, prefs_set_toggle},
633 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
634 &privacy.checkbtn_passphrase_grab,
635 prefs_set_data_from_toggle, prefs_set_toggle},
636 #endif /* __MINGW32__ */
637 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
638 &privacy.checkbtn_gpg_warning,
639 prefs_set_data_from_toggle, prefs_set_toggle},
640 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
641 &privacy.optmenu_default_signkey,
642 prefs_common_default_signkey_set_data_from_optmenu,
643 prefs_common_default_signkey_set_optmenu},
644 #endif /* USE_GPGME */
647 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
649 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
652 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
653 NULL, NULL, NULL}, */
655 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
656 P_BOOL, &interface.checkbtn_openunread,
657 prefs_set_data_from_toggle, prefs_set_toggle},
658 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
659 P_BOOL, &interface.checkbtn_openinbox,
660 prefs_set_data_from_toggle, prefs_set_toggle},
661 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
662 &interface.checkbtn_immedexec,
663 prefs_set_data_from_toggle, prefs_set_toggle},
664 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
665 &interface.optmenu_recvdialog,
666 prefs_common_recv_dialog_set_data_from_optmenu,
667 prefs_common_recv_dialog_set_optmenu},
668 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
669 &interface.optmenu_nextunreadmsgdialog,
670 prefs_nextunreadmsgdialog_set_data_from_optmenu,
671 prefs_nextunreadmsgdialog_set_optmenu},
673 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
674 P_BOOL, &interface.checkbtn_addaddrbyclick,
675 prefs_set_data_from_toggle, prefs_set_toggle},
676 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
677 &interface.checkbtn_confonexit,
678 prefs_set_data_from_toggle, prefs_set_toggle},
679 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
680 &send.checkbtn_returnreceipt,
681 prefs_set_data_from_toggle, prefs_set_toggle},
682 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
683 &interface.checkbtn_cleanonexit,
684 prefs_set_data_from_toggle, prefs_set_toggle},
685 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
686 &interface.checkbtn_askonclean,
687 prefs_set_data_from_toggle, prefs_set_toggle},
688 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
689 P_BOOL, &interface.checkbtn_warnqueued,
690 prefs_set_data_from_toggle, prefs_set_toggle},
693 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
694 &prefs_common.uri_cmd, P_STRING,
695 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
696 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
697 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
698 {"ext_editor_command", "gedit %s",
699 &prefs_common.ext_editor_cmd, P_STRING,
700 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
702 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
704 {"important_score", "1", &prefs_common.important_score, P_INT,
707 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
710 /* widget creating functions */
711 static void prefs_common_create (void);
712 static void prefs_receive_create (void);
713 static void prefs_send_create (void);
714 static void prefs_compose_create (void);
715 static void prefs_quote_create (void);
716 static void prefs_display_create (void);
717 static void prefs_message_create (void);
719 static void prefs_privacy_create (void);
721 static void prefs_interface_create (void);
722 static void prefs_other_create (void);
724 static void date_format_ok_btn_clicked (GtkButton *button,
726 static void date_format_cancel_btn_clicked (GtkButton *button,
728 static void date_format_key_pressed (GtkWidget *keywidget,
731 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
734 static void date_format_entry_on_change (GtkEditable *editable,
736 static void date_format_select_row (GtkWidget *date_format_list,
739 GdkEventButton *event,
740 GtkWidget *date_format);
741 static GtkWidget *date_format_create (GtkButton *button,
744 static void prefs_quote_description_create (void);
745 static void prefs_quote_description_key_pressed (GtkWidget *widget,
749 static void prefs_quote_colors_dialog (void);
750 static void prefs_quote_colors_dialog_create (void);
751 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
754 static void quote_color_set_dialog (GtkWidget *widget,
756 static void quote_colors_set_dialog_ok (GtkWidget *widget,
758 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
760 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
763 static void set_button_bg_color (GtkWidget *widget,
765 static void prefs_enable_message_color_toggled (void);
766 static void prefs_recycle_colors_toggled (GtkWidget *widget);
768 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
770 static void prefs_font_selection_key_pressed (GtkWidget *widget,
773 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
775 static gint prefs_common_deleted (GtkWidget *widget,
778 static void prefs_common_key_pressed (GtkWidget *widget,
781 static void prefs_common_ok (void);
782 static void prefs_common_apply (void);
783 static void prefs_common_cancel (void);
785 void prefs_common_init() {
786 prefs_common.fltlist = NULL;
787 prefs_common.disphdr_list = NULL;
790 void prefs_common_read_config(void)
794 gchar buf[PREFSBUFSIZE];
796 prefs_read_config(param, "Common", COMMON_RC);
798 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
800 if ((fp = fopen(path, "r")) == NULL) {
801 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
806 while (fgets(buf, sizeof(buf), fp) != NULL) {
808 if (buf[0] == '\0') continue;
809 prefs_common.mime_open_cmd_history =
810 add_history(prefs_common.mime_open_cmd_history, buf);
814 prefs_common.mime_open_cmd_history =
815 g_list_reverse(prefs_common.mime_open_cmd_history);
818 void prefs_common_save_config(void)
824 prefs_save_config(param, "Common", COMMON_RC);
826 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
828 if ((fp = fopen(path, "w")) == NULL) {
829 FILE_OP_ERROR(path, "fopen");
834 for (cur = prefs_common.mime_open_cmd_history;
835 cur != NULL; cur = cur->next) {
836 fputs((gchar *)cur->data, fp);
844 void prefs_common_open(void)
846 if (prefs_rc_is_readonly(COMMON_RC))
851 if (!dialog.window) {
852 prefs_common_create();
855 manage_window_set_transient(GTK_WINDOW(dialog.window));
856 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
857 gtk_widget_grab_focus(dialog.ok_btn);
859 prefs_set_dialog(param);
861 gtk_widget_show(dialog.window);
864 static void prefs_common_create(void)
868 debug_print(_("Creating common preferences window...\n"));
870 prefs_dialog_create(&dialog);
871 gtk_window_set_title (GTK_WINDOW(dialog.window),
872 _("Common Preferences"));
873 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
874 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
875 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
876 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
877 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
878 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
879 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
880 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
881 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
882 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
883 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
884 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
885 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
886 GTK_SIGNAL_FUNC(prefs_common_cancel),
887 GTK_OBJECT(dialog.window));
889 /* create all widgets on notebook */
890 prefs_receive_create();
891 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
893 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
894 prefs_compose_create();
895 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
896 prefs_quote_create();
897 SET_NOTEBOOK_LABEL(dialog.notebook, _("Quote"), page++);
898 prefs_display_create();
899 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
900 prefs_message_create();
901 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
903 prefs_privacy_create();
904 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
906 prefs_interface_create();
907 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
908 prefs_other_create();
909 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
911 gtk_widget_show_all(dialog.window);
914 static void prefs_receive_create(void)
918 GtkWidget *frame_incext;
919 GtkWidget *checkbtn_incext;
921 GtkWidget *label_incext;
922 GtkWidget *entry_incext;
923 /* GtkWidget *button_incext; */
925 GtkWidget *frame_spool;
926 GtkWidget *checkbtn_local;
927 GtkWidget *checkbtn_filter_on_inc;
928 GtkWidget *label_spool;
929 GtkWidget *entry_spool;
931 GtkWidget *hbox_autochk;
932 GtkWidget *checkbtn_autochk;
933 GtkWidget *label_autochk1;
934 GtkObject *spinbtn_autochk_adj;
935 GtkWidget *spinbtn_autochk;
936 GtkWidget *label_autochk2;
937 GtkWidget *checkbtn_chkonstartup;
938 GtkWidget *checkbtn_noerrorpanel;
939 GtkWidget *checkbtn_scan_after_inc;
942 GtkWidget *frame_news;
943 GtkWidget *label_maxarticle;
944 GtkWidget *spinbtn_maxarticle;
945 GtkObject *spinbtn_maxarticle_adj;
947 vbox1 = gtk_vbox_new (FALSE, VSPACING);
948 gtk_widget_show (vbox1);
949 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
950 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
952 PACK_FRAME(vbox1, frame_incext, _("External program"));
954 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
955 gtk_widget_show (vbox2);
956 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
957 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
959 /* Use of external incorporation program */
960 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
961 _("Use external program for incorporation"));
963 hbox = gtk_hbox_new (FALSE, 8);
964 gtk_widget_show (hbox);
965 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
966 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
968 label_incext = gtk_label_new (_("Command"));
969 gtk_widget_show (label_incext);
970 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
972 entry_incext = gtk_entry_new ();
973 gtk_widget_show (entry_incext);
974 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
977 button_incext = gtk_button_new_with_label ("... ");
978 gtk_widget_show (button_incext);
979 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
982 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
984 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
985 gtk_widget_show (vbox2);
986 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
987 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
989 hbox = gtk_hbox_new (FALSE, 32);
990 gtk_widget_show (hbox);
991 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
993 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
994 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
995 _("Filter on incorporation"));
996 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
998 hbox = gtk_hbox_new (FALSE, 8);
999 gtk_widget_show (hbox);
1000 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1001 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
1003 label_spool = gtk_label_new (_("Spool directory"));
1004 gtk_widget_show (label_spool);
1005 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
1007 entry_spool = gtk_entry_new ();
1008 gtk_widget_show (entry_spool);
1009 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
1011 vbox2 = gtk_vbox_new (FALSE, 0);
1012 gtk_widget_show (vbox2);
1013 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1016 hbox_autochk = gtk_hbox_new (FALSE, 8);
1017 gtk_widget_show (hbox_autochk);
1018 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1020 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1021 _("Auto-check new mail"));
1023 label_autochk1 = gtk_label_new (_("every"));
1024 gtk_widget_show (label_autochk1);
1025 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1027 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1028 spinbtn_autochk = gtk_spin_button_new
1029 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1030 gtk_widget_show (spinbtn_autochk);
1031 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1032 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
1033 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1035 label_autochk2 = gtk_label_new (_("minute(s)"));
1036 gtk_widget_show (label_autochk2);
1037 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1039 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1040 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1041 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1043 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1044 _("Check new mail on startup"));
1046 PACK_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel,
1047 _("No error popup on receive error"));
1048 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1049 _("Update all local folders after incorporation"));
1051 PACK_FRAME(vbox1, frame_news, _("News"));
1053 hbox = gtk_hbox_new (FALSE, 8);
1054 gtk_widget_show (hbox);
1055 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
1056 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
1058 label_maxarticle = gtk_label_new
1059 (_("Maximum number of articles to download\n"
1060 "(unlimited if 0 is specified)"));
1061 gtk_widget_show (label_maxarticle);
1062 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
1063 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
1065 spinbtn_maxarticle_adj =
1066 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
1067 spinbtn_maxarticle = gtk_spin_button_new
1068 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
1069 gtk_widget_show (spinbtn_maxarticle);
1070 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
1072 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
1073 gtk_spin_button_set_numeric
1074 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
1076 receive.checkbtn_incext = checkbtn_incext;
1077 receive.entry_incext = entry_incext;
1078 /* receive.button_incext = button_incext; */
1080 receive.checkbtn_local = checkbtn_local;
1081 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
1082 receive.entry_spool = entry_spool;
1084 receive.checkbtn_autochk = checkbtn_autochk;
1085 receive.spinbtn_autochk = spinbtn_autochk;
1086 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1088 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1089 receive.checkbtn_noerrorpanel = checkbtn_noerrorpanel;
1090 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1093 receive.spinbtn_maxarticle = spinbtn_maxarticle;
1094 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
1097 static void prefs_send_create(void)
1101 GtkWidget *frame_extsend;
1102 GtkWidget *vbox_extsend;
1103 GtkWidget *checkbtn_extsend;
1105 GtkWidget *label_extsend;
1106 GtkWidget *entry_extsend;
1107 /* GtkWidget *button_extsend; */
1108 GtkWidget *checkbtn_savemsg;
1109 GtkWidget *checkbtn_queuemsg;
1110 GtkWidget *label_outcharset;
1112 GtkWidget *optmenu_menu;
1113 GtkWidget *menuitem;
1114 GtkWidget *checkbtn_returnreceipt;
1115 GtkWidget *label_charset_desc;
1117 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1118 gtk_widget_show (vbox1);
1119 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1120 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1122 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1124 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1125 gtk_widget_show (vbox_extsend);
1126 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1127 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1129 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1130 _("Use external program for sending"));
1132 hbox1 = gtk_hbox_new (FALSE, 8);
1133 gtk_widget_show (hbox1);
1134 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1135 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1137 label_extsend = gtk_label_new (_("Command"));
1138 gtk_widget_show (label_extsend);
1139 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1141 entry_extsend = gtk_entry_new ();
1142 gtk_widget_show (entry_extsend);
1143 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1146 button_extsend = gtk_button_new_with_label ("... ");
1147 gtk_widget_show (button_extsend);
1148 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1151 vbox2 = gtk_vbox_new (FALSE, 0);
1152 gtk_widget_show (vbox2);
1153 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1155 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1156 _("Save sent messages to outbox"));
1157 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1158 _("Queue messages that fail to send"));
1159 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1160 _("Send return receipt on request"));
1162 hbox1 = gtk_hbox_new (FALSE, 8);
1163 gtk_widget_show (hbox1);
1164 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1166 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1167 gtk_widget_show (label_outcharset);
1168 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1170 optmenu = gtk_option_menu_new ();
1171 gtk_widget_show (optmenu);
1172 gtk_box_pack_start (GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1174 optmenu_menu = gtk_menu_new ();
1176 #define SET_MENUITEM(str, charset) \
1178 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1181 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1182 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1184 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1186 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1187 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1188 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1189 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1190 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1191 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1193 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1195 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1197 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1198 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1200 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1202 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1203 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1205 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1206 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1208 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1209 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1211 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1212 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1213 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1215 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1217 hbox1 = gtk_hbox_new (FALSE, 8);
1218 gtk_widget_show (hbox1);
1219 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1221 label_charset_desc = gtk_label_new
1222 (_("If `Automatic' is selected, the optimal encoding\n"
1223 "for the current locale will be used."));
1224 gtk_widget_show (label_charset_desc);
1225 gtk_box_pack_start (GTK_BOX (hbox1), label_charset_desc,
1227 gtk_label_set_justify(GTK_LABEL (label_charset_desc), GTK_JUSTIFY_LEFT);
1229 send.checkbtn_extsend = checkbtn_extsend;
1230 send.entry_extsend = entry_extsend;
1231 /* send.button_extsend = button_extsend; */
1233 send.checkbtn_savemsg = checkbtn_savemsg;
1234 send.checkbtn_queuemsg = checkbtn_queuemsg;
1235 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1237 send.optmenu_charset = optmenu;
1241 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1246 g_return_if_fail(param);
1247 g_return_if_fail(param->data);
1248 g_return_if_fail(param->widget);
1249 g_return_if_fail(*(param->widget));
1251 dict_name = gtkpspell_get_dictionary_menu_active_item
1252 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1253 str = *((gchar **) param->data);
1256 *((gchar **) param->data) = dict_name;
1259 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1262 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1264 GtkWidget *menuitem;
1268 g_return_if_fail(optmenu != NULL);
1269 g_return_if_fail(pparam->data != NULL);
1271 if (*(gchar **) pparam->data) {
1272 menu = gtk_option_menu_get_menu(optmenu);
1273 for (cur = GTK_MENU_SHELL(menu)->children;
1274 cur != NULL; cur = cur->next) {
1275 menuitem = GTK_WIDGET(cur->data);
1276 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem), "dict_name");
1277 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1278 gtk_option_menu_set_history(optmenu, n);
1285 gtk_option_menu_set_history(optmenu, 0);
1286 prefs_dictionary_set_data_from_optmenu(pparam);
1289 static void prefs_compose_checkbtn_enable_pspell_toggle_cb
1295 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1296 gtk_widget_set_sensitive(compose.entry_pspell_path, toggled);
1297 gtk_widget_set_sensitive(compose.optmenu_dictionary, toggled);
1298 gtk_widget_set_sensitive(compose.btn_pspell_path, toggled);
1301 static void prefs_compose_btn_pspell_path_clicked_cb(GtkWidget *widget,
1304 gchar *file_path, *tmp;
1305 GtkWidget *new_menu;
1307 file_path = filesel_select_file(_("Select dictionaries location"),
1308 prefs_common.pspell_path);
1309 if (file_path == NULL) {
1313 tmp=g_dirname(file_path);
1315 if (prefs_common.pspell_path)
1316 g_free(prefs_common.pspell_path);
1317 prefs_common.pspell_path = g_strdup_printf("%s%s",tmp,G_DIR_SEPARATOR_S);
1319 new_menu = gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path);
1320 gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_dictionary),
1323 gtk_entry_set_text(GTK_ENTRY(compose.entry_pspell_path), prefs_common.pspell_path);
1324 /* select first one */
1325 gtk_option_menu_set_history(GTK_OPTION_MENU(compose.optmenu_dictionary), 0);
1327 prefs_common.dictionary = gtkpspell_get_dictionary_menu_active_item(
1328 gtk_option_menu_get_menu(GTK_OPTION_MENU(compose.optmenu_dictionary)));
1336 static void prefs_compose_create(void)
1343 GtkWidget *btn_quotefmt;
1345 GtkWidget *frame_sig;
1346 GtkWidget *vbox_sig;
1347 GtkWidget *checkbtn_autosig;
1348 GtkWidget *label_sigsep;
1349 GtkWidget *entry_sigsep;
1351 GtkWidget *frame_editor;
1352 GtkWidget *hbox_editor;
1353 GtkWidget *checkbtn_autoextedit;
1355 GtkWidget *frame_autosel;
1356 GtkWidget *hbox_autosel;
1357 GtkWidget *vbox_autosel;
1358 GtkWidget *checkbtn_reply_account_autosel;
1359 GtkWidget *checkbtn_forward_account_autosel;
1360 GtkWidget *checkbtn_reedit_account_autosel;
1362 GtkWidget *vbox_linewrap;
1367 GtkWidget *label_linewrap;
1368 GtkObject *spinbtn_linewrap_adj;
1369 GtkWidget *spinbtn_linewrap;
1370 GtkWidget *checkbtn_wrapquote;
1371 GtkWidget *checkbtn_wrapatsend;
1373 GtkWidget *frame_reply;
1374 GtkWidget *checkbtn_quote;
1375 GtkWidget *checkbtn_forward_as_attachment;
1376 GtkWidget *checkbtn_smart_wrapping;
1377 GtkWidget *checkbtn_block_cursor;
1380 GtkWidget *frame_spell;
1381 GtkWidget *hbox_spell;
1382 GtkWidget *vbox_spell;
1383 GtkWidget *hbox_pspell_path;
1384 GtkWidget *checkbtn_enable_pspell;
1385 GtkWidget *label_pspell_path;
1386 GtkWidget *entry_pspell_path;
1387 GtkWidget *btn_pspell_path;
1388 GtkWidget *hbox_dictionary;
1389 GtkWidget *label_dictionary;
1390 GtkWidget *optmenu_dictionary;
1392 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1393 gtk_widget_show (vbox1);
1394 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1395 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1399 hbox1 = gtk_hbox_new (FALSE, 32);
1400 gtk_widget_show (hbox1);
1402 hbox2 = gtk_hbox_new (FALSE, 8);
1403 gtk_widget_show (hbox2);
1404 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1407 hbox1 = gtk_hbox_new (FALSE, 32);
1408 gtk_widget_show (hbox1);
1409 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1411 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1413 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1414 gtk_widget_show (vbox_sig);
1415 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1416 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1418 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1419 _("Insert signature automatically"));
1421 hbox1 = gtk_hbox_new (FALSE, 8);
1422 gtk_widget_show (hbox1);
1423 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1424 label_sigsep = gtk_label_new (_("Signature separator"));
1425 gtk_widget_show (label_sigsep);
1426 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1428 entry_sigsep = gtk_entry_new ();
1429 gtk_widget_show (entry_sigsep);
1430 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1432 gtk_widget_set_usize (entry_sigsep, 64, -1);
1434 /* Account autoselection */
1435 PACK_FRAME(vbox1, frame_autosel, _("Automatic Account Selection"));
1437 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1438 gtk_widget_show (hbox_autosel);
1439 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1440 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1442 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1443 _("when replying"));
1444 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1445 _("when forwarding"));
1446 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1447 _("when re-editing"));
1449 vbox2 = gtk_vbox_new (FALSE, 0);
1450 gtk_widget_show (vbox2);
1451 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1453 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1454 _("Automatically launch the external editor"));
1456 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1459 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1460 gtk_widget_show (vbox_linewrap);
1461 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1463 hbox3 = gtk_hbox_new (FALSE, 8);
1464 gtk_widget_show (hbox3);
1465 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1468 label_linewrap = gtk_label_new (_("Wrap messages at"));
1469 gtk_widget_show (label_linewrap);
1470 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1472 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1473 spinbtn_linewrap = gtk_spin_button_new
1474 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1475 gtk_widget_show (spinbtn_linewrap);
1476 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1477 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1478 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1480 label_linewrap = gtk_label_new (_("characters"));
1481 gtk_widget_show (label_linewrap);
1482 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1484 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1486 hbox4 = gtk_hbox_new (FALSE, 32);
1487 gtk_widget_show (hbox4);
1488 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1490 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1492 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1494 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1495 _("Forward as attachment"));
1497 PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping,
1498 _("Smart wrapping (EXPERIMENTAL)"));
1500 PACK_CHECK_BUTTON (vbox1, checkbtn_block_cursor,
1504 /* spell checker defaults */
1505 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1506 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1507 gtk_widget_show (vbox_spell);
1508 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1509 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1511 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_pspell,
1512 _("Enable spell checker (EXPERIMENTAL)"));
1514 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_pspell), "toggled",
1515 GTK_SIGNAL_FUNC(prefs_compose_checkbtn_enable_pspell_toggle_cb),
1518 hbox_pspell_path = gtk_hbox_new (FALSE, 8);
1519 gtk_widget_show(hbox_pspell_path);
1520 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_pspell_path, TRUE, TRUE, 0);
1522 label_pspell_path = gtk_label_new (_("Dictionaries path"));
1523 gtk_widget_show(label_pspell_path);
1524 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), label_pspell_path, FALSE, FALSE, 0);
1526 entry_pspell_path = gtk_entry_new();
1527 gtk_widget_show(entry_pspell_path);
1528 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), entry_pspell_path, FALSE, FALSE, 0);
1529 gtk_widget_set_usize(entry_pspell_path, 150, -1);
1530 gtk_widget_set_sensitive(entry_pspell_path, prefs_common.enable_pspell);
1532 btn_pspell_path = gtk_button_new_with_label(_("..."));
1533 gtk_widget_show(btn_pspell_path);
1534 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), btn_pspell_path, FALSE, FALSE, 0);
1535 gtk_widget_set_sensitive(btn_pspell_path, prefs_common.enable_pspell);
1537 gtk_signal_connect(GTK_OBJECT(btn_pspell_path), "clicked",
1538 GTK_SIGNAL_FUNC(prefs_compose_btn_pspell_path_clicked_cb),
1541 hbox_dictionary = gtk_hbox_new(FALSE, 8);
1542 gtk_widget_show(hbox_dictionary);
1543 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_dictionary, TRUE, TRUE, 0);
1545 label_dictionary = gtk_label_new(_("Dictionary"));
1546 gtk_widget_show(label_dictionary);
1547 gtk_box_pack_start(GTK_BOX(hbox_dictionary), label_dictionary, FALSE, FALSE, 0);
1549 optmenu_dictionary = gtk_option_menu_new();
1550 gtk_widget_show(optmenu_dictionary);
1551 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1552 gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path));
1553 gtk_box_pack_start(GTK_BOX(hbox_dictionary), optmenu_dictionary, FALSE, FALSE, 0);
1554 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_pspell);
1558 compose.checkbtn_quote = checkbtn_quote;
1559 compose.entry_quotemark = entry_quotemark;
1560 compose.text_quotefmt = text_quotefmt;
1562 compose.checkbtn_autosig = checkbtn_autosig;
1563 compose.entry_sigsep = entry_sigsep;
1565 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1567 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1568 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1569 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1571 compose.spinbtn_linewrap = spinbtn_linewrap;
1572 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1573 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1574 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1576 compose.checkbtn_forward_as_attachment =
1577 checkbtn_forward_as_attachment;
1578 compose.checkbtn_smart_wrapping =
1579 checkbtn_smart_wrapping;
1580 compose.checkbtn_block_cursor =
1581 checkbtn_block_cursor;
1584 compose.checkbtn_enable_pspell = checkbtn_enable_pspell;
1585 compose.entry_pspell_path = entry_pspell_path;
1586 compose.btn_pspell_path = btn_pspell_path;
1587 compose.optmenu_dictionary = optmenu_dictionary;
1591 static void prefs_quote_create(void)
1594 GtkWidget *frame_quote;
1595 GtkWidget *vbox_quote;
1598 GtkWidget *label_quotemark;
1599 GtkWidget *entry_quotemark;
1600 GtkWidget *scrolledwin_quotefmt;
1601 GtkWidget *text_quotefmt;
1603 GtkWidget *entry_fw_quotemark;
1604 GtkWidget *text_fw_quotefmt;
1606 GtkWidget *btn_quotedesc;
1608 GtkWidget *checkbtn_reply_with_quote;
1610 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1611 gtk_widget_show (vbox1);
1612 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1613 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1617 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1619 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1621 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1622 gtk_widget_show (vbox_quote);
1623 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1624 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1626 hbox1 = gtk_hbox_new (FALSE, 32);
1627 gtk_widget_show (hbox1);
1628 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1630 hbox2 = gtk_hbox_new (FALSE, 8);
1631 gtk_widget_show (hbox2);
1632 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1634 label_quotemark = gtk_label_new (_("Quotation mark"));
1635 gtk_widget_show (label_quotemark);
1636 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1638 entry_quotemark = gtk_entry_new ();
1639 gtk_widget_show (entry_quotemark);
1640 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1641 gtk_widget_set_usize (entry_quotemark, 64, -1);
1643 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1644 gtk_widget_show (scrolledwin_quotefmt);
1645 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1646 gtk_scrolled_window_set_policy
1647 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1648 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1650 text_quotefmt = gtk_text_new (NULL, NULL);
1651 gtk_widget_show (text_quotefmt);
1652 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1653 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1654 gtk_widget_set_usize(text_quotefmt, -1, 60);
1658 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1660 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1661 gtk_widget_show (vbox_quote);
1662 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1663 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1665 hbox1 = gtk_hbox_new (FALSE, 32);
1666 gtk_widget_show (hbox1);
1667 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1669 hbox2 = gtk_hbox_new (FALSE, 8);
1670 gtk_widget_show (hbox2);
1671 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1673 label_quotemark = gtk_label_new (_("Quotation mark"));
1674 gtk_widget_show (label_quotemark);
1675 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1677 entry_fw_quotemark = gtk_entry_new ();
1678 gtk_widget_show (entry_fw_quotemark);
1679 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1681 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
1683 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1684 gtk_widget_show (scrolledwin_quotefmt);
1685 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1686 gtk_scrolled_window_set_policy
1687 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1688 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1690 text_fw_quotefmt = gtk_text_new (NULL, NULL);
1691 gtk_widget_show (text_fw_quotefmt);
1692 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1694 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
1695 gtk_widget_set_usize(text_fw_quotefmt, -1, 60);
1697 hbox1 = gtk_hbox_new (FALSE, 32);
1698 gtk_widget_show (hbox1);
1699 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1702 gtk_button_new_with_label (_(" Description of symbols "));
1703 gtk_widget_show (btn_quotedesc);
1704 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1705 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1706 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1708 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
1709 quote.entry_quotemark = entry_quotemark;
1710 quote.text_quotefmt = text_quotefmt;
1711 quote.entry_fw_quotemark = entry_fw_quotemark;
1712 quote.text_fw_quotefmt = text_fw_quotefmt;
1715 static void prefs_display_create(void)
1718 GtkWidget *frame_font;
1720 GtkWidget *label_textfont;
1721 GtkWidget *entry_textfont;
1722 GtkWidget *button_textfont;
1723 GtkWidget *chkbtn_folder_unread;
1724 GtkWidget *chkbtn_transhdr;
1725 GtkWidget *frame_summary;
1727 GtkWidget *chkbtn_swapfrom;
1728 GtkWidget *chkbtn_hscrollbar;
1729 GtkWidget *chkbtn_useaddrbook;
1730 GtkWidget *chkbtn_expand_thread;
1731 GtkWidget *chkbtn_bold_unread;
1734 GtkWidget *label_datefmt;
1735 GtkWidget *button_datefmt;
1736 GtkWidget *entry_datefmt;
1737 GtkWidget *button_dispitem;
1738 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
1740 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1741 gtk_widget_show (vbox1);
1742 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1743 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1745 PACK_FRAME(vbox1, frame_font, _("Font"));
1747 table1 = gtk_table_new (4, 3, FALSE);
1749 gtk_widget_show (table1);
1750 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1751 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1752 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1753 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1755 label_textfont = gtk_label_new (_("Text"));
1756 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1757 gtk_widget_show (label_textfont);
1758 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1759 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1761 entry_textfont = gtk_entry_new ();
1762 gtk_widget_show (entry_textfont);
1763 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1764 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1766 button_textfont = gtk_button_new_with_label ("... ");
1768 gtk_widget_show (button_textfont);
1769 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1771 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1772 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1774 tmplabel = gtk_label_new (_("Small"));
1775 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1776 gtk_widget_show (tmplabel);
1777 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1778 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1780 tmpentry = gtk_entry_new ();
1781 gtk_widget_show (tmpentry);
1782 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1783 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1785 tmpbutton = gtk_button_new_with_label (" ... ");
1786 gtk_widget_show (tmpbutton);
1787 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1789 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1790 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1791 display.entry_smallfont = tmpentry;
1793 tmplabel = gtk_label_new (_("Normal"));
1794 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1795 gtk_widget_show (tmplabel);
1796 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1797 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1799 tmpentry = gtk_entry_new ();
1800 gtk_widget_show (tmpentry);
1801 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1802 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1804 tmpbutton = gtk_button_new_with_label (" ... ");
1805 gtk_widget_show (tmpbutton);
1806 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1808 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1809 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1810 display.entry_normalfont = tmpentry;
1812 tmplabel = gtk_label_new (_("Bold"));
1813 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1814 gtk_widget_show (tmplabel);
1815 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1816 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1818 tmpentry = gtk_entry_new ();
1819 gtk_widget_show (tmpentry);
1820 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1821 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1823 tmpbutton = gtk_button_new_with_label (" ... ");
1824 gtk_widget_show (tmpbutton);
1825 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1827 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1828 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1829 display.entry_boldfont = tmpentry;
1831 vbox2 = gtk_vbox_new (FALSE, 0);
1832 gtk_widget_show (vbox2);
1833 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1836 (vbox2, chkbtn_transhdr,
1837 _("Translate header name (such as `From:', `Subject:')"));
1839 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1840 _("Display unread number next to folder name"));
1842 /* ---- Summary ---- */
1844 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1846 vbox2 = gtk_vbox_new (FALSE, 0);
1847 gtk_widget_show (vbox2);
1848 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1849 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1852 (vbox2, chkbtn_swapfrom,
1853 _("Display recipient on `From' column if sender is yourself"));
1855 (vbox2, chkbtn_useaddrbook,
1856 _("Display sender using address book"));
1858 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1860 (vbox2, chkbtn_expand_thread, _("Expand threads"));
1862 (vbox2, chkbtn_bold_unread,
1863 _("Display unread messages with bold font"));
1865 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1867 hbox1 = gtk_hbox_new (FALSE, 8);
1868 gtk_widget_show (hbox1);
1869 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1871 label_datefmt = gtk_label_new (_("Date format"));
1872 gtk_widget_show (label_datefmt);
1873 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1875 entry_datefmt = gtk_entry_new ();
1876 gtk_widget_show (entry_datefmt);
1877 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1879 button_datefmt = gtk_button_new_with_label ("... ");
1881 gtk_widget_show (button_datefmt);
1882 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1883 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1884 GTK_SIGNAL_FUNC (date_format_create), NULL);
1886 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1888 hbox1 = gtk_hbox_new (FALSE, 8);
1889 gtk_widget_show (hbox1);
1890 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1892 button_dispitem = gtk_button_new_with_label
1893 (_(" Set display item of summary... "));
1894 gtk_widget_show (button_dispitem);
1895 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1896 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1897 GTK_SIGNAL_FUNC (prefs_summary_column_open),
1900 display.entry_textfont = entry_textfont;
1901 display.button_textfont = button_textfont;
1903 display.chkbtn_folder_unread = chkbtn_folder_unread;
1904 display.chkbtn_transhdr = chkbtn_transhdr;
1906 display.chkbtn_swapfrom = chkbtn_swapfrom;
1907 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1908 display.chkbtn_expand_thread = chkbtn_expand_thread;
1909 display.chkbtn_bold_unread = chkbtn_bold_unread;
1910 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1911 display.entry_datefmt = entry_datefmt;
1914 static void prefs_message_create(void)
1920 GtkWidget *chkbtn_enablecol;
1921 GtkWidget *button_edit_col;
1922 GtkWidget *chkbtn_mbalnum;
1923 GtkWidget *chkbtn_disphdrpane;
1924 GtkWidget *chkbtn_disphdr;
1925 GtkWidget *button_edit_disphdr;
1926 GtkWidget *hbox_linespc;
1927 GtkWidget *label_linespc;
1928 GtkObject *spinbtn_linespc_adj;
1929 GtkWidget *spinbtn_linespc;
1930 GtkWidget *chkbtn_headspc;
1932 GtkWidget *frame_scr;
1933 GtkWidget *vbox_scr;
1934 GtkWidget *chkbtn_smoothscroll;
1935 GtkWidget *hbox_scr;
1936 GtkWidget *label_scr;
1937 GtkObject *spinbtn_scrollstep_adj;
1938 GtkWidget *spinbtn_scrollstep;
1939 GtkWidget *chkbtn_halfpage;
1941 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1942 gtk_widget_show (vbox1);
1943 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1944 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1946 hbox1 = gtk_hbox_new (FALSE, 8);
1947 gtk_widget_show (hbox1);
1948 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1950 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1951 _("Enable coloration of message"));
1952 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1953 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1956 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1957 gtk_widget_show (button_edit_col);
1958 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1959 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1960 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1962 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1964 vbox2 = gtk_vbox_new (FALSE, 0);
1965 gtk_widget_show (vbox2);
1966 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1969 (vbox2, chkbtn_mbalnum,
1970 _("Display 2-byte alphabet and numeric with 1-byte character"));
1971 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1972 _("Display header pane above message view"));
1974 hbox1 = gtk_hbox_new (FALSE, 8);
1975 gtk_widget_show (hbox1);
1976 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1978 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1979 _("Display short headers on message view"));
1981 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1982 gtk_widget_show (button_edit_disphdr);
1983 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1985 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1986 GTK_SIGNAL_FUNC (prefs_display_header_open),
1989 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1991 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1993 hbox1 = gtk_hbox_new (FALSE, 32);
1994 gtk_widget_show (hbox1);
1995 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1997 hbox_linespc = gtk_hbox_new (FALSE, 8);
1998 gtk_widget_show (hbox1);
1999 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
2001 label_linespc = gtk_label_new (_("Line space"));
2002 gtk_widget_show (label_linespc);
2003 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2006 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
2007 spinbtn_linespc = gtk_spin_button_new
2008 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
2009 gtk_widget_show (spinbtn_linespc);
2010 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
2012 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
2013 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
2015 label_linespc = gtk_label_new (_("pixel(s)"));
2016 gtk_widget_show (label_linespc);
2017 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2020 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
2022 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
2024 vbox_scr = gtk_vbox_new (FALSE, 0);
2025 gtk_widget_show (vbox_scr);
2026 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
2027 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
2029 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
2031 hbox1 = gtk_hbox_new (FALSE, 32);
2032 gtk_widget_show (hbox1);
2033 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
2035 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
2037 hbox_scr = gtk_hbox_new (FALSE, 8);
2038 gtk_widget_show (hbox_scr);
2039 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
2041 label_scr = gtk_label_new (_("Step"));
2042 gtk_widget_show (label_scr);
2043 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2045 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
2046 spinbtn_scrollstep = gtk_spin_button_new
2047 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
2048 gtk_widget_show (spinbtn_scrollstep);
2049 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
2051 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
2052 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
2055 label_scr = gtk_label_new (_("pixel(s)"));
2056 gtk_widget_show (label_scr);
2057 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2059 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
2061 message.chkbtn_enablecol = chkbtn_enablecol;
2062 message.button_edit_col = button_edit_col;
2063 message.chkbtn_mbalnum = chkbtn_mbalnum;
2064 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
2065 message.chkbtn_disphdr = chkbtn_disphdr;
2066 message.spinbtn_linespc = spinbtn_linespc;
2067 message.chkbtn_headspc = chkbtn_headspc;
2069 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
2070 message.spinbtn_scrollstep = spinbtn_scrollstep;
2071 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
2072 message.chkbtn_halfpage = chkbtn_halfpage;
2076 static void prefs_privacy_create(void)
2081 GtkWidget *checkbtn_default_encrypt;
2082 GtkWidget *checkbtn_ascii_armored;
2083 GtkWidget *checkbtn_default_sign;
2084 GtkWidget *checkbtn_auto_check_signatures;
2085 GtkWidget *checkbtn_gpg_signature_popup;
2086 GtkWidget *checkbtn_passphrase_grab;
2087 GtkWidget *checkbtn_gpg_warning;
2089 GtkWidget *menuitem;
2091 GtkWidget *optmenu_menu;
2093 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2094 gtk_widget_show (vbox1);
2095 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2096 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2098 vbox2 = gtk_vbox_new (FALSE, 0);
2099 gtk_widget_show (vbox2);
2100 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2102 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
2103 _("Encrypt message by default"));
2105 PACK_CHECK_BUTTON (vbox2, checkbtn_ascii_armored,
2106 _("Plain ASCII armored"));
2107 gtk_signal_connect(GTK_OBJECT(checkbtn_ascii_armored), "toggled",
2108 prefs_common_ascii_armored_warning, (gpointer)0);
2110 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
2111 _("Sign message by default"));
2113 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
2114 _("Automatically check signatures"));
2116 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
2117 _("Show signature check result in a popup window"));
2120 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
2121 _("Grab input while entering a passphrase"));
2125 (vbox2, checkbtn_gpg_warning,
2126 _("Display warning on startup if GnuPG doesn't work"));
2128 hbox1 = gtk_hbox_new (FALSE, 8);
2129 gtk_widget_show (hbox1);
2130 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2132 /* create default signkey box */
2133 label = gtk_label_new (_("Default Sign Key"));
2134 gtk_widget_show (label);
2135 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2136 optmenu = gtk_option_menu_new ();
2137 gtk_widget_show (optmenu);
2138 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
2139 optmenu_menu = gtk_menu_new ();
2141 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
2142 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
2143 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
2144 /* FIXME: disabled because not implemented */
2145 gtk_widget_set_sensitive(optmenu, FALSE);
2147 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
2148 privacy.checkbtn_ascii_armored = checkbtn_ascii_armored;
2149 privacy.checkbtn_default_sign = checkbtn_default_sign;
2150 privacy.checkbtn_auto_check_signatures
2151 = checkbtn_auto_check_signatures;
2152 privacy.checkbtn_gpg_signature_popup
2153 = checkbtn_gpg_signature_popup;
2154 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2155 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2156 privacy.optmenu_default_signkey = optmenu;
2160 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
2164 GtkWidget *menuitem;
2167 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2168 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2169 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2170 g_free(*((gchar **)pparam->data));
2171 *((gchar **)pparam->data) = g_strdup(charset);
2175 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
2179 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2181 GtkWidget *menuitem;
2185 g_return_if_fail(optmenu != NULL);
2186 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2188 menu = gtk_option_menu_get_menu(optmenu);
2189 for (cur = GTK_MENU_SHELL(menu)->children;
2190 cur != NULL; cur = cur->next) {
2191 menuitem = GTK_WIDGET(cur->data);
2192 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2193 if (!strcmp(charset, *((gchar **)pparam->data))) {
2194 gtk_option_menu_set_history(optmenu, n);
2200 gtk_option_menu_set_history(optmenu, 0);
2201 prefs_common_charset_set_data_from_optmenu(pparam);
2205 static void prefs_common_ascii_armored_warning(GtkWidget* widget,
2208 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))
2209 && gtk_notebook_get_current_page(GTK_NOTEBOOK(dialog.notebook))) {
2210 alertpanel_message(_("Warning - Privacy/Plain ASCII armored"),
2211 _("Its not recommend to use the old style plain ASCII\n"
2212 "armored mode for encypted messages. It doesn't comply\n"
2213 "with the RFC 3156 - MIME security with OpenPGP."));
2216 #endif /* USE_GPGME */
2218 static void prefs_interface_create(void)
2223 /* GtkWidget *checkbtn_emacs; */
2224 GtkWidget *checkbtn_openunread;
2225 GtkWidget *checkbtn_openinbox;
2226 GtkWidget *checkbtn_immedexec;
2229 GtkWidget *optmenu_recvdialog;
2231 GtkWidget *menuitem;
2233 GtkWidget *frame_addr;
2234 GtkWidget *vbox_addr;
2235 GtkWidget *checkbtn_addaddrbyclick;
2237 GtkWidget *frame_exit;
2238 GtkWidget *vbox_exit;
2239 GtkWidget *checkbtn_confonexit;
2240 GtkWidget *checkbtn_cleanonexit;
2241 GtkWidget *checkbtn_askonclean;
2242 GtkWidget *checkbtn_warnqueued;
2245 GtkWidget *optmenu_nextunreadmsgdialog;
2246 GtkWidget *optmenu_nextunreadmsgdialog_menu;
2247 GtkWidget *nextunreadmsgdialog_menuitem;
2249 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2250 gtk_widget_show (vbox1);
2251 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2252 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2254 vbox2 = gtk_vbox_new (FALSE, 0);
2255 gtk_widget_show (vbox2);
2256 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2258 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2259 _("Emulate the behavior of mouse operation of\n"
2260 "Emacs-based mailer"));
2261 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2262 GTK_JUSTIFY_LEFT); */
2265 (vbox2, checkbtn_openunread,
2266 _("Open first unread message when entering a folder"));
2269 (vbox2, checkbtn_openinbox,
2270 _("Go to inbox after receiving new mail"));
2272 vbox3 = gtk_vbox_new (FALSE, 0);
2273 gtk_widget_show (vbox3);
2274 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2277 (vbox3, checkbtn_immedexec,
2278 _("Execute immediately when moving or deleting messages"));
2280 hbox1 = gtk_hbox_new (FALSE, 0);
2281 gtk_widget_show (hbox1);
2282 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2284 label = gtk_label_new
2285 (_("(Messages will be marked until execution\n"
2286 " if this is turned off)"));
2287 gtk_widget_show (label);
2288 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2289 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2291 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2293 hbox1 = gtk_hbox_new (FALSE, 8);
2294 gtk_widget_show (hbox1);
2295 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2297 label = gtk_label_new (_("Show receive dialog"));
2298 gtk_widget_show (label);
2299 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2301 optmenu_recvdialog = gtk_option_menu_new ();
2302 gtk_widget_show (optmenu_recvdialog);
2303 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2306 menu = gtk_menu_new ();
2307 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2308 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2309 RECV_DIALOG_ACTIVE);
2310 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2312 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2314 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2316 vbox_addr = gtk_vbox_new (FALSE, 0);
2317 gtk_widget_show (vbox_addr);
2318 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2319 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2322 (vbox_addr, checkbtn_addaddrbyclick,
2323 _("Add address to destination when double-clicked"));
2325 /* Next Unread Message Dialog */
2326 hbox2 = gtk_hbox_new (FALSE, 8);
2327 gtk_widget_show (hbox2);
2328 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
2330 label = gtk_label_new (_("Show no-unread-message dialog"));
2331 gtk_widget_show (label);
2332 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
2334 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2335 gtk_widget_show (optmenu_nextunreadmsgdialog);
2336 gtk_box_pack_start (GTK_BOX (hbox2), optmenu_nextunreadmsgdialog,
2339 optmenu_nextunreadmsgdialog_menu = gtk_menu_new ();
2340 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2341 _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2342 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2343 _("Assume 'Yes'"), NEXTUNREADMSGDIALOG_ASSUME_YES);
2344 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2345 _("Assume 'No'"), NEXTUNREADMSGDIALOG_ASSUME_NO);
2347 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog),
2348 optmenu_nextunreadmsgdialog_menu);
2351 /* Receive Dialog */
2352 /* hbox = gtk_hbox_new (FALSE, 8);
2353 gtk_widget_show (hbox);
2354 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2356 label = gtk_label_new (_("Show receive Dialog"));
2357 gtk_widget_show (label);
2358 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2360 recvdialog_optmenu = gtk_option_menu_new ();
2361 gtk_widget_show (recvdialog_optmenu);
2362 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2364 recvdialog_optmenu_menu = gtk_menu_new ();
2366 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2367 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2368 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2370 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2373 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2375 vbox_exit = gtk_vbox_new (FALSE, 0);
2376 gtk_widget_show (vbox_exit);
2377 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2378 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2380 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2381 _("Confirm on exit"));
2383 hbox1 = gtk_hbox_new (FALSE, 32);
2384 gtk_widget_show (hbox1);
2385 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2387 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2388 _("Empty trash on exit"));
2389 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2390 _("Ask before emptying"));
2391 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2393 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2394 _("Warn if there are queued messages"));
2396 /* interface.checkbtn_emacs = checkbtn_emacs; */
2397 interface.checkbtn_openunread = checkbtn_openunread;
2398 interface.checkbtn_openinbox = checkbtn_openinbox;
2399 interface.checkbtn_immedexec = checkbtn_immedexec;
2400 interface.optmenu_recvdialog = optmenu_recvdialog;
2401 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2402 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2403 interface.checkbtn_confonexit = checkbtn_confonexit;
2404 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2405 interface.checkbtn_askonclean = checkbtn_askonclean;
2406 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2409 static void prefs_other_create(void)
2414 GtkWidget *uri_frame;
2415 GtkWidget *uri_label;
2416 GtkWidget *uri_combo;
2417 GtkWidget *uri_entry;
2419 GtkWidget *print_frame;
2420 GtkWidget *printcmd_label;
2421 GtkWidget *printcmd_entry;
2423 GtkWidget *exteditor_frame;
2424 GtkWidget *exteditor_label;
2425 GtkWidget *exteditor_combo;
2426 GtkWidget *exteditor_entry;
2428 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2429 gtk_widget_show (vbox1);
2430 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2431 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2433 PACK_FRAME(vbox1, uri_frame,
2434 _("External Web browser (%s will be replaced with URI)"));
2436 hbox1 = gtk_hbox_new (FALSE, 8);
2437 gtk_widget_show (hbox1);
2438 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2439 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2441 uri_label = gtk_label_new (_("Command"));
2442 gtk_widget_show(uri_label);
2443 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2445 uri_combo = gtk_combo_new ();
2446 gtk_widget_show (uri_combo);
2447 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2448 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2449 "netscape -remote 'openURL(%s,raise)'",
2451 "gnome-moz-remote --raise --newwin '%s'",
2452 "kterm -e w3m '%s'",
2453 "kterm -e lynx '%s'",
2456 uri_entry = GTK_COMBO (uri_combo)->entry;
2458 PACK_FRAME(vbox1, print_frame,
2459 _("Printing (%s will be replaced with file name)"));
2461 hbox1 = gtk_hbox_new (FALSE, 8);
2462 gtk_widget_show (hbox1);
2463 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2464 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2466 printcmd_label = gtk_label_new (_("Command"));
2467 gtk_widget_show (printcmd_label);
2468 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2470 printcmd_entry = gtk_entry_new ();
2471 gtk_widget_show (printcmd_entry);
2472 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2474 PACK_FRAME(vbox1, exteditor_frame,
2475 _("External editor (%s will be replaced with file name)"));
2477 hbox1 = gtk_hbox_new (FALSE, 8);
2478 gtk_widget_show (hbox1);
2479 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2480 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2482 exteditor_label = gtk_label_new (_("Command"));
2483 gtk_widget_show (exteditor_label);
2484 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2486 exteditor_combo = gtk_combo_new ();
2487 gtk_widget_show (exteditor_combo);
2488 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2489 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2492 "mgedit --no-fork %s",
2498 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2500 other.uri_combo = uri_combo;
2501 other.uri_entry = uri_entry;
2502 other.printcmd_entry = printcmd_entry;
2504 other.exteditor_combo = exteditor_combo;
2505 other.exteditor_entry = exteditor_entry;
2508 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2510 GtkWidget *datefmt_sample = NULL;
2513 g_return_if_fail(widget != NULL);
2514 g_return_if_fail(*widget != NULL);
2515 g_return_if_fail(display.entry_datefmt != NULL);
2517 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2518 (GTK_OBJECT(*widget), "datefmt_sample"));
2519 g_return_if_fail(datefmt_sample != NULL);
2521 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2522 g_free(prefs_common.date_format);
2523 prefs_common.date_format = text;
2524 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2526 gtk_widget_destroy(*widget);
2530 static void date_format_cancel_btn_clicked(GtkButton *button,
2533 g_return_if_fail(widget != NULL);
2534 g_return_if_fail(*widget != NULL);
2536 gtk_widget_destroy(*widget);
2540 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2543 if (event && event->keyval == GDK_Escape)
2544 date_format_cancel_btn_clicked(NULL, widget);
2547 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2548 GdkEventAny *event, GtkWidget **widget)
2550 g_return_val_if_fail(widget != NULL, FALSE);
2551 g_return_val_if_fail(*widget != NULL, FALSE);
2557 static void date_format_entry_on_change(GtkEditable *editable,
2561 struct tm *cal_time;
2565 cur_time = time(NULL);
2566 cal_time = localtime(&cur_time);
2568 text = gtk_editable_get_chars(editable, 0, -1);
2570 strftime(buffer, sizeof buffer, text, cal_time);
2571 gtk_label_set_text(example, buffer);
2574 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2575 gint column, GdkEventButton *event,
2576 GtkWidget *date_format)
2582 GtkWidget *datefmt_sample;
2584 /* only on double click */
2585 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2588 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2589 (GTK_OBJECT(date_format), "datefmt_sample"));
2591 g_return_if_fail(date_format_list != NULL);
2592 g_return_if_fail(date_format != NULL);
2593 g_return_if_fail(datefmt_sample != NULL);
2595 /* get format from clist */
2596 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2598 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2599 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2601 /* insert the format into the text entry */
2602 new_format = g_malloc(strlen(old_format) + 3);
2604 strncpy(new_format, old_format, cur_pos);
2605 new_format[cur_pos] = '\0';
2606 strcat(new_format, format);
2607 strcat(new_format, &old_format[cur_pos]);
2609 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2610 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2615 static GtkWidget *date_format_create(GtkButton *button, void *data)
2617 static GtkWidget *datefmt_win = NULL;
2619 GtkWidget *scrolledwindow1;
2620 GtkWidget *datefmt_clist;
2625 GtkWidget *confirm_area;
2627 GtkWidget *cancel_btn;
2628 GtkWidget *datefmt_entry;
2634 { "%a", _("the full abbreviated weekday name") },
2635 { "%A", _("the full weekday name") },
2636 { "%b", _("the abbreviated month name") },
2637 { "%B", _("the full month name") },
2638 { "%c", _("the preferred date and time for the current locale") },
2639 { "%C", _("the century number (year/100)") },
2640 { "%d", _("the day of the month as a decimal number") },
2641 { "%H", _("the hour as a decimal number using a 24-hour clock") },
2642 { "%I", _("the hour as a decimal number using a 12-hour clock") },
2643 { "%j", _("the day of the year as a decimal number") },
2644 { "%m", _("the month as a decimal number") },
2645 { "%M", _("the minute as a decimal number") },
2646 { "%p", _("either AM or PM") },
2647 { "%S", _("the second as a decimal number") },
2648 { "%w", _("the day of the week as a decimal number") },
2649 { "%x", _("the preferred date for the current locale") },
2650 { "%y", _("the last two digits of a year") },
2651 { "%Y", _("the year as a decimal number") },
2652 { "%Z", _("the time zone or name or abbreviation") }
2657 const gint TIME_FORMAT_ELEMS =
2658 sizeof time_format / sizeof time_format[0];
2660 if (datefmt_win) return datefmt_win;
2662 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2663 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2664 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2665 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2666 gtk_widget_set_usize(datefmt_win, 440, 280);
2668 vbox1 = gtk_vbox_new(FALSE, 10);
2669 gtk_widget_show(vbox1);
2670 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2672 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2673 gtk_scrolled_window_set_policy
2674 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2675 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2676 gtk_widget_show(scrolledwindow1);
2677 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2679 titles[0] = _("Specifier");
2680 titles[1] = _("Description");
2681 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2682 gtk_widget_show(datefmt_clist);
2683 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2684 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2686 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2687 GTK_SELECTION_BROWSE);
2689 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2691 /* phoney casting necessary because of gtk... */
2692 text[0] = (gchar *)time_format[i].fmt;
2693 text[1] = (gchar *)time_format[i].txt;
2694 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2697 table = gtk_table_new(2, 2, FALSE);
2698 gtk_widget_show(table);
2699 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2700 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2701 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2703 label1 = gtk_label_new(_("Date format"));
2704 gtk_widget_show(label1);
2705 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2707 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2708 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2710 datefmt_entry = gtk_entry_new_with_max_length(256);
2711 gtk_widget_show(datefmt_entry);
2712 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2713 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2715 /* we need the "sample" entry box; add it as data so callbacks can
2716 * get the entry box */
2717 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2720 label2 = gtk_label_new(_("Example"));
2721 gtk_widget_show(label2);
2722 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2724 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2725 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2727 label3 = gtk_label_new("");
2728 gtk_widget_show(label3);
2729 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2730 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2731 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2732 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2734 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2735 &cancel_btn, _("Cancel"), NULL, NULL);
2736 gtk_widget_grab_default(ok_btn);
2737 gtk_widget_show(confirm_area);
2739 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2741 /* set the current format */
2742 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2743 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2746 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2747 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2749 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2750 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2752 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2753 GTK_SIGNAL_FUNC(date_format_key_pressed),
2755 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2756 GTK_SIGNAL_FUNC(date_format_on_delete),
2758 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2759 GTK_SIGNAL_FUNC(date_format_entry_on_change),
2762 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2763 GTK_SIGNAL_FUNC(date_format_select_row),
2766 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2767 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2769 gtk_widget_show(datefmt_win);
2770 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2772 gtk_widget_grab_focus(ok_btn);
2777 void prefs_quote_colors_dialog(void)
2779 if (!quote_color_win)
2780 prefs_quote_colors_dialog_create();
2781 gtk_widget_show(quote_color_win);
2782 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2785 gtk_widget_hide(quote_color_win);
2787 textview_update_message_colors();
2788 main_window_reflect_prefs_all();
2791 static void prefs_quote_colors_dialog_create(void)
2796 GtkWidget *quotelevel1_label;
2797 GtkWidget *quotelevel2_label;
2798 GtkWidget *quotelevel3_label;
2799 GtkWidget *uri_label;
2800 GtkWidget *tgt_folder_label;
2803 //GtkWidget *cancel_btn;
2804 GtkWidget *recycle_colors_btn;
2805 GtkWidget *frame_colors;
2807 window = gtk_window_new(GTK_WINDOW_DIALOG);
2808 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2809 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2810 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2811 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2812 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2814 vbox = gtk_vbox_new (FALSE, VSPACING);
2815 gtk_container_add (GTK_CONTAINER (window), vbox);
2816 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2817 PACK_FRAME(vbox, frame_colors, _("Colors"));
2819 table = gtk_table_new (4, 2, FALSE);
2820 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2821 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2822 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2823 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2826 color_buttons.quote_level1_btn = gtk_button_new();
2827 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2828 0, 1, 0, 1, 0, 0, 0, 0);
2829 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2830 gtk_container_set_border_width
2831 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2833 color_buttons.quote_level2_btn = gtk_button_new();
2834 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2835 0, 1, 1, 2, 0, 0, 0, 0);
2836 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2837 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2839 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2840 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2841 0, 1, 2, 3, 0, 0, 0, 0);
2842 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2843 gtk_container_set_border_width
2844 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2846 color_buttons.uri_btn = gtk_button_new_with_label ("");
2847 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2848 0, 1, 3, 4, 0, 0, 0, 0);
2849 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2850 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2852 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2853 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2854 0, 1, 4, 5, 0, 0, 0, 0);
2855 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
2856 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2858 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2859 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2860 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2861 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2862 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2864 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2865 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2866 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2867 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2868 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2870 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2871 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2872 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2873 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2874 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2876 uri_label = gtk_label_new (_("URI link"));
2877 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2878 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2879 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2880 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2882 tgt_folder_label = gtk_label_new (_("Target folder"));
2883 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
2884 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2885 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
2886 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
2888 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2889 _("Recycle quote colors"));
2891 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2892 NULL, NULL, NULL, NULL);
2893 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2895 gtk_widget_grab_default(ok_btn);
2896 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2897 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2898 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2899 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2900 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2901 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2902 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2903 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2906 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2907 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2908 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2909 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2910 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2911 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2912 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2913 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2914 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
2915 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
2916 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2917 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2918 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2919 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2921 /* show message button colors and recycle options */
2922 set_button_bg_color(color_buttons.quote_level1_btn,
2923 prefs_common.quote_level1_col);
2924 set_button_bg_color(color_buttons.quote_level2_btn,
2925 prefs_common.quote_level2_col);
2926 set_button_bg_color(color_buttons.quote_level3_btn,
2927 prefs_common.quote_level3_col);
2928 set_button_bg_color(color_buttons.uri_btn,
2929 prefs_common.uri_col);
2930 set_button_bg_color(color_buttons.tgt_folder_btn,
2931 prefs_common.tgt_folder_col);
2932 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2933 prefs_common.recycle_quote_colors);
2935 gtk_widget_show_all(vbox);
2936 quote_color_win = window;
2939 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2940 GdkEventKey *event, gpointer data)
2942 if (event && event->keyval == GDK_Escape)
2946 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2948 gchar *type = (gchar *)data;
2949 gchar *title = NULL;
2950 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2952 GtkColorSelectionDialog *dialog;
2954 if(g_strcasecmp(type, "LEVEL1") == 0) {
2955 title = _("Pick color for quotation level 1");
2956 rgbvalue = prefs_common.quote_level1_col;
2957 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2958 title = _("Pick color for quotation level 2");
2959 rgbvalue = prefs_common.quote_level2_col;
2960 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2961 title = _("Pick color for quotation level 3");
2962 rgbvalue = prefs_common.quote_level3_col;
2963 } else if(g_strcasecmp(type, "URI") == 0) {
2964 title = _("Pick color for URI");
2965 rgbvalue = prefs_common.uri_col;
2966 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
2967 title = _("Pick color for target folder");
2968 rgbvalue = prefs_common.tgt_folder_col;
2969 } else { /* Should never be called */
2970 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2974 color_dialog = gtk_color_selection_dialog_new(title);
2975 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2976 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2977 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2978 manage_window_set_transient(GTK_WINDOW(color_dialog));
2980 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2981 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2982 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2983 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2984 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2985 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2988 /* preselect the previous color in the color selection dialog */
2989 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2990 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2991 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2992 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2993 gtk_color_selection_set_color
2994 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2996 gtk_widget_show(color_dialog);
2999 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
3001 GtkColorSelection *colorsel = (GtkColorSelection *)
3002 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
3004 gint red, green, blue, rgbvalue;
3005 gchar *type = (gchar *)data;
3007 gtk_color_selection_get_color(colorsel, color);
3009 red = (gint) (color[0] * 255.0);
3010 green = (gint) (color[1] * 255.0);
3011 blue = (gint) (color[2] * 255.0);
3012 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
3015 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
3016 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
3017 fprintf(stderr, "Color is %x\n", rgbvalue);
3020 if (g_strcasecmp(type, "LEVEL1") == 0) {
3021 prefs_common.quote_level1_col = rgbvalue;
3022 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
3023 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
3024 prefs_common.quote_level2_col = rgbvalue;
3025 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
3026 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
3027 prefs_common.quote_level3_col = rgbvalue;
3028 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
3029 } else if (g_strcasecmp(type, "URI") == 0) {
3030 prefs_common.uri_col = rgbvalue;
3031 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
3032 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
3033 prefs_common.tgt_folder_col = rgbvalue;
3034 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
3035 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
3037 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
3039 gtk_widget_destroy(color_dialog);
3042 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
3044 gtk_widget_destroy(color_dialog);
3047 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
3051 gtk_widget_destroy(color_dialog);
3054 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
3059 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
3060 newstyle = gtk_style_copy(gtk_widget_get_default_style());
3061 newstyle->bg[GTK_STATE_NORMAL] = color;
3062 newstyle->bg[GTK_STATE_PRELIGHT] = color;
3063 newstyle->bg[GTK_STATE_ACTIVE] = color;
3065 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
3068 static void prefs_enable_message_color_toggled(void)
3072 is_active = gtk_toggle_button_get_active
3073 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
3074 gtk_widget_set_sensitive(message.button_edit_col, is_active);
3075 prefs_common.enable_color = is_active;
3078 static void prefs_recycle_colors_toggled(GtkWidget *widget)
3082 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
3083 prefs_common.recycle_quote_colors = is_active;
3086 void prefs_quote_description(void)
3088 if (!quote_desc_win)
3089 prefs_quote_description_create();
3091 manage_window_set_transient(GTK_WINDOW(quote_desc_win));
3092 gtk_widget_show(quote_desc_win);
3094 gtk_widget_hide(quote_desc_win);
3097 static void prefs_quote_description_create(void)
3106 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
3107 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
3108 _("Description of symbols"));
3109 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
3110 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
3111 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
3112 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, FALSE, FALSE);
3114 vbox = gtk_vbox_new(FALSE, 8);
3115 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
3117 hbox = gtk_hbox_new(FALSE, 8);
3118 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
3120 vbox2 = gtk_vbox_new(FALSE, 8);
3121 gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
3123 #define PACK_LABEL() \
3124 gtk_box_pack_start(GTK_BOX(vbox2), label, TRUE, TRUE, 0); \
3125 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); \
3126 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
3128 label = gtk_label_new
3131 "%N\n" /* full name of sender */
3132 "%F\n" /* first name of sender */
3133 "%I\n" /* initial of sender */
3134 "%s\n" /* subject */
3137 "%n\n" /* newsgroups */
3138 "%r\n" /* references */
3139 "%i"); /* message id */
3142 label = gtk_label_new
3143 ("?x(expr)"); /* condition */
3146 label = gtk_label_new
3147 ("%M\n" /* message body */
3148 "%Q\n" /* quoted message body */
3149 "%m\n" /* message body without signature */
3150 "%q\n" /* quoted message body without signature */
3151 "%%"); /* literal percent */
3154 label = gtk_label_new
3155 ("\\\\\n" /* literal backslash */
3156 "\\?\n" /* literal question mark */
3157 "\\(\n" /* literal opening parenthesis */
3158 "\\)"); /* literal closing parenthesis */
3161 vbox2 = gtk_vbox_new(FALSE, 8);
3162 gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
3164 label = gtk_label_new
3167 "Full Name of Sender\n"
3168 "First Name of Sender\n"
3169 "Initial of Sender\n"
3178 label = gtk_label_new
3179 (_("If x is set, displays expr"));
3182 label = gtk_label_new
3184 "Quoted message body\n"
3185 "Message body without signature\n"
3186 "Quoted message body without signature\n"
3190 label = gtk_label_new
3191 (_("Literal backslash\n"
3192 "Literal question mark\n"
3193 "Literal opening parenthesis\n"
3194 "Literal closing parenthesis"));
3199 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3200 NULL, NULL, NULL, NULL);
3201 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3203 gtk_widget_grab_default(ok_btn);
3204 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3205 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3207 (GTK_OBJECT(quote_desc_win), "key_press_event",
3208 GTK_SIGNAL_FUNC(prefs_quote_description_key_pressed),
3210 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
3211 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3213 gtk_widget_show_all(vbox);
3216 static void prefs_quote_description_key_pressed(GtkWidget *widget,
3220 if (event && event->keyval == GDK_Escape)
3224 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3228 g_return_if_fail(entry != NULL);
3230 if (!font_sel_win) {
3231 font_sel_win = gtk_font_selection_dialog_new
3232 (_("Font selection"));
3233 gtk_window_position(GTK_WINDOW(font_sel_win),
3234 GTK_WIN_POS_CENTER);
3235 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3236 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3239 (GTK_OBJECT(font_sel_win), "key_press_event",
3240 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3242 gtk_signal_connect_object
3243 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3245 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3246 GTK_OBJECT(font_sel_win));
3249 if(font_sel_conn_id) {
3250 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3252 font_sel_conn_id = gtk_signal_connect
3253 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3255 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3257 printf("%i\n", font_sel_conn_id);
3259 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3260 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3262 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3263 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3264 gtk_widget_grab_focus
3265 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3266 gtk_widget_show(font_sel_win);
3269 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3273 if (event && event->keyval == GDK_Escape)
3274 gtk_widget_hide(font_sel_win);
3277 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3281 fontname = gtk_font_selection_dialog_get_font_name
3282 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3285 gtk_entry_set_text(entry, fontname);
3290 gtk_widget_hide(font_sel_win);
3293 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3296 GtkWidget *menuitem;
3299 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3300 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3301 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3302 g_free(*((gchar **)pparam->data));
3303 *((gchar **)pparam->data) = g_strdup(charset);
3306 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3309 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3311 GtkWidget *menuitem;
3315 g_return_if_fail(optmenu != NULL);
3316 g_return_if_fail(*((gchar **)pparam->data) != NULL);
3318 menu = gtk_option_menu_get_menu(optmenu);
3319 for (cur = GTK_MENU_SHELL(menu)->children;
3320 cur != NULL; cur = cur->next) {
3321 menuitem = GTK_WIDGET(cur->data);
3322 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3323 if (!strcmp(charset, *((gchar **)pparam->data))) {
3324 gtk_option_menu_set_history(optmenu, n);
3330 gtk_option_menu_set_history(optmenu, 0);
3331 prefs_common_charset_set_data_from_optmenu(pparam);
3334 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3337 GtkWidget *menuitem;
3339 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3340 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3341 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3342 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3345 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3347 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3348 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3350 GtkWidget *menuitem;
3353 case RECV_DIALOG_ALWAYS:
3354 gtk_option_menu_set_history(optmenu, 0);
3356 case RECV_DIALOG_ACTIVE:
3357 gtk_option_menu_set_history(optmenu, 1);
3359 case RECV_DIALOG_NEVER:
3360 gtk_option_menu_set_history(optmenu, 2);
3365 menu = gtk_option_menu_get_menu(optmenu);
3366 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3367 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3370 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3373 prefs_common_cancel();
3377 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3380 if (event && event->keyval == GDK_Escape)
3381 prefs_common_cancel();
3384 static void prefs_common_ok(void)
3386 prefs_common_apply();
3387 gtk_widget_hide(dialog.window);
3388 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
3389 gtk_widget_hide(quote_desc_win);
3394 static void prefs_common_apply(void)
3396 prefs_set_data_from_dialog(param);
3397 main_window_reflect_prefs_all();
3398 prefs_common_save_config();
3400 inc_autocheck_timer_remove();
3401 inc_autocheck_timer_set();
3404 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3407 GtkWidget *menuitem;
3409 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3410 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3411 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3412 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3415 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3417 NextUnreadMsgDialogShow dialog_show;
3418 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3420 GtkWidget *menuitem;
3422 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3424 switch (dialog_show) {
3425 case NEXTUNREADMSGDIALOG_ALWAYS:
3426 gtk_option_menu_set_history(optmenu, 0);
3428 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3429 gtk_option_menu_set_history(optmenu, 1);
3431 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3432 gtk_option_menu_set_history(optmenu, 2);
3437 menu = gtk_option_menu_get_menu(optmenu);
3438 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3439 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3442 static void prefs_common_cancel(void)
3444 gtk_widget_hide(dialog.window);
3449 static struct _ComposePrefs
3453 GtkWidget *close_btn;
3456 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
3457 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
3458 static void compose_prefs_close(GtkWidget *widget);
3459 static void compose_prefs_fmt_create(void);
3461 static void compose_prefs_close(GtkWidget *widget)
3463 gtk_widget_hide(composeprefs.window);
3466 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3468 gtk_widget_hide(composeprefs.window);
3473 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3475 if (event && event->keyval == GDK_Escape) {
3476 gtk_widget_hide(composeprefs.window);
3480 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3483 GtkWidget *menuitem;
3485 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3486 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3487 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3488 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3491 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3493 RecvDialogShow dialog_show;
3494 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3496 GtkWidget *menuitem;
3498 dialog_show = *((RecvDialogShow *)pparam->data);
3500 switch (dialog_show) {
3501 case RECVDIALOG_ALWAYS:
3502 gtk_option_menu_set_history(optmenu, 0);
3504 case RECVDIALOG_WINDOW_ACTIVE:
3505 gtk_option_menu_set_history(optmenu, 1);
3507 case RECVDIALOG_NEVER:
3508 gtk_option_menu_set_history(optmenu, 2);
3513 menu = gtk_option_menu_get_menu(optmenu);
3514 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3515 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));