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>
39 #include "prefs_common.h"
40 #include "prefs_display_header.h"
41 #include "mainwindow.h"
42 #include "summaryview.h"
43 #include "messageview.h"
44 #include "manage_window.h"
50 #include "alertpanel.h"
54 #include "folderview.h"
56 PrefsCommon prefs_common;
58 static PrefsDialog dialog;
60 static struct Receive {
61 GtkWidget *checkbtn_incext;
62 GtkWidget *entry_incext;
63 GtkWidget *button_incext;
65 GtkWidget *checkbtn_local;
66 GtkWidget *checkbtn_filter_on_inc;
67 GtkWidget *entry_spool;
69 GtkWidget *checkbtn_autochk;
70 GtkWidget *spinbtn_autochk;
71 GtkObject *spinbtn_autochk_adj;
73 GtkWidget *checkbtn_chkonstartup;
74 GtkWidget *checkbtn_noerrorpanel;
75 GtkWidget *checkbtn_scan_after_inc;
78 GtkWidget *spinbtn_maxarticle;
79 GtkObject *spinbtn_maxarticle_adj;
83 GtkWidget *checkbtn_extsend;
84 GtkWidget *entry_extsend;
85 GtkWidget *button_extsend;
87 GtkWidget *checkbtn_savemsg;
88 GtkWidget *checkbtn_queuemsg;
90 GtkWidget *optmenu_charset;
92 GtkWidget *checkbtn_returnreceipt;
95 static struct Compose {
96 GtkWidget *checkbtn_quote;
97 GtkWidget *entry_quotemark;
98 GtkWidget *text_quotefmt;
99 GtkWidget *checkbtn_autosig;
100 GtkWidget *entry_sigsep;
102 GtkWidget *entry_fw_quotemark;
103 GtkWidget *text_fw_quotefmt;
105 GtkWidget *checkbtn_autoextedit;
106 GtkWidget *checkbtn_reply_account_autosel;
107 GtkWidget *checkbtn_forward_account_autosel;
108 GtkWidget *checkbtn_reedit_account_autosel;
110 GtkWidget *spinbtn_linewrap;
111 GtkObject *spinbtn_linewrap_adj;
112 GtkWidget *checkbtn_wrapquote;
113 GtkWidget *checkbtn_wrapatsend;
115 GtkWidget * checkbtn_forward_as_attachment;
116 GtkWidget * checkbtn_smart_wrapping;
119 GtkWidget *checkbtn_enable_ispell;
120 GtkWidget *entry_ispell_path;
121 GtkWidget *btn_ispell_path;
122 GtkWidget *optmenu_dictionary_path;
125 static struct Display {
126 GtkWidget *entry_textfont;
127 GtkWidget *button_textfont;
129 GtkWidget *entry_smallfont;
130 GtkWidget *entry_normalfont;
131 GtkWidget *entry_boldfont;
133 GtkWidget *chkbtn_folder_unread;
135 GtkWidget *chkbtn_transhdr;
137 GtkWidget *chkbtn_swapfrom;
138 GtkWidget *chkbtn_hscrollbar;
139 GtkWidget *chkbtn_useaddrbook;
140 GtkWidget *chkbtn_expand_thread;
141 GtkWidget *chkbtn_bold_unread;
143 GtkWidget *entry_datefmt;
146 static struct Message {
147 GtkWidget *chkbtn_enablecol;
148 GtkWidget *button_edit_col;
149 GtkWidget *chkbtn_mbalnum;
150 GtkWidget *chkbtn_disphdrpane;
151 GtkWidget *chkbtn_disphdr;
152 GtkWidget *spinbtn_linespc;
153 GtkObject *spinbtn_linespc_adj;
154 GtkWidget *chkbtn_headspc;
156 GtkWidget *chkbtn_smoothscroll;
157 GtkWidget *spinbtn_scrollstep;
158 GtkObject *spinbtn_scrollstep_adj;
159 GtkWidget *chkbtn_halfpage;
163 static struct Privacy {
164 GtkWidget *checkbtn_default_encrypt;
165 GtkWidget *checkbtn_default_sign;
166 GtkWidget *checkbtn_auto_check_signatures;
167 GtkWidget *checkbtn_gpg_signature_popup;
168 GtkWidget *checkbtn_passphrase_grab;
169 GtkWidget *checkbtn_gpg_warning;
170 GtkWidget *optmenu_default_signkey;
174 static struct Interface {
175 /* GtkWidget *checkbtn_emacs; */
176 GtkWidget *checkbtn_openunread;
177 GtkWidget *checkbtn_openinbox;
178 GtkWidget *checkbtn_immedexec;
179 GtkWidget *checkbtn_confonexit;
180 GtkWidget *checkbtn_cleanonexit;
181 GtkWidget *checkbtn_askonclean;
182 GtkWidget *checkbtn_warnqueued;
183 GtkWidget *checkbtn_addaddrbyclick;
184 GtkWidget *optmenu_recvdialog;
187 static struct Other {
188 GtkWidget *uri_combo;
189 GtkWidget *uri_entry;
190 GtkWidget *printcmd_entry;
191 GtkWidget *exteditor_combo;
192 GtkWidget *exteditor_entry;
195 static struct MessageColorButtons {
196 GtkWidget *quote_level1_btn;
197 GtkWidget *quote_level2_btn;
198 GtkWidget *quote_level3_btn;
200 GtkWidget *tgt_folder_btn;
203 static GtkWidget *quote_desc_win;
204 static GtkWidget *font_sel_win;
205 static guint font_sel_conn_id;
206 static GtkWidget *quote_color_win;
207 static GtkWidget *color_dialog;
209 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
210 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
212 static void prefs_common_default_signkey_set_data_from_optmenu
214 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
216 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
217 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
219 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param);
220 static void prefs_dictionary_set_optmenu(PrefParam *pparam);
224 parameter name, default value, pointer to the prefs variable, data type,
225 pointer to the widget pointer,
226 pointer to the function for data setting,
227 pointer to the function for widget setting
230 static PrefParam param[] = {
232 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
233 &receive.checkbtn_incext,
234 prefs_set_data_from_toggle, prefs_set_toggle},
235 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
236 &receive.entry_incext,
237 prefs_set_data_from_entry, prefs_set_entry},
239 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
240 &receive.checkbtn_local,
241 prefs_set_data_from_toggle, prefs_set_toggle},
242 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
243 &receive.checkbtn_filter_on_inc,
244 prefs_set_data_from_toggle, prefs_set_toggle},
245 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
246 &receive.entry_spool,
247 prefs_set_data_from_entry, prefs_set_entry},
249 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
250 &receive.checkbtn_autochk,
251 prefs_set_data_from_toggle, prefs_set_toggle},
252 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
253 &receive.spinbtn_autochk,
254 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
255 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
256 &receive.checkbtn_chkonstartup,
257 prefs_set_data_from_toggle, prefs_set_toggle},
258 {"noerrorpanel", "FALSE", &prefs_common.noerrorpanel, P_BOOL,
259 &receive.checkbtn_noerrorpanel,
260 prefs_set_data_from_toggle, prefs_set_toggle},
261 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
262 P_BOOL, &receive.checkbtn_scan_after_inc,
263 prefs_set_data_from_toggle, prefs_set_toggle},
264 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
265 &receive.spinbtn_maxarticle,
266 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
269 {"use_ext_sendmail", "FALSE", &prefs_common.use_extsend, P_BOOL,
270 &send.checkbtn_extsend,
271 prefs_set_data_from_toggle, prefs_set_toggle},
272 {"ext_sendmail_cmd", DEFAULT_SENDMAIL_CMD,
273 &prefs_common.extsend_cmd, P_STRING,
274 &send.entry_extsend, prefs_set_data_from_entry, prefs_set_entry},
275 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
276 &send.checkbtn_savemsg,
277 prefs_set_data_from_toggle, prefs_set_toggle},
278 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
279 &send.checkbtn_queuemsg,
280 prefs_set_data_from_toggle, prefs_set_toggle},
282 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
283 &send.optmenu_charset,
284 prefs_common_charset_set_data_from_optmenu,
285 prefs_common_charset_set_optmenu},
288 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
289 &compose.checkbtn_quote,
290 prefs_set_data_from_toggle, prefs_set_toggle},
291 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
292 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
293 {"quote_format", "On %d\\n%f wrote:\\n\\n%Q",
295 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
296 prefs_set_data_from_text, prefs_set_text},
297 {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
298 &compose.entry_fw_quotemark, prefs_set_data_from_entry, prefs_set_entry},
299 {"fw_quote_format", "---------- Forwarded message ----------\\n?d(Date: %d\\n)?f(From: %f\\n)?t(To: %t\\n)?c(Cc: %c\\n)?n(Newsgroups: %n\\n)?s(Subject: %s\\n)\\n%Q",
300 &prefs_common.fw_quotefmt, P_STRING, &compose.text_fw_quotefmt,
301 prefs_set_data_from_text, prefs_set_text},
303 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
304 &compose.checkbtn_autosig,
305 prefs_set_data_from_toggle, prefs_set_toggle},
306 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
307 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
309 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
310 &compose.checkbtn_autoextedit,
311 prefs_set_data_from_toggle, prefs_set_toggle},
312 {"reply_account_autoselect", "TRUE",
313 &prefs_common.reply_account_autosel, P_BOOL,
314 &compose.checkbtn_reply_account_autosel,
315 prefs_set_data_from_toggle, prefs_set_toggle},
316 {"forward_account_autoselect", "TRUE",
317 &prefs_common.forward_account_autosel, P_BOOL,
318 &compose.checkbtn_forward_account_autosel,
319 prefs_set_data_from_toggle, prefs_set_toggle},
320 {"reedit_account_autoselect", "TRUE",
321 &prefs_common.reedit_account_autosel, P_BOOL,
322 &compose.checkbtn_reedit_account_autosel,
323 prefs_set_data_from_toggle, prefs_set_toggle},
325 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
326 &compose.spinbtn_linewrap,
327 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
328 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
329 &compose.checkbtn_wrapquote,
330 prefs_set_data_from_toggle, prefs_set_toggle},
331 {"linewrap_before_sending", "FALSE",
332 &prefs_common.linewrap_at_send, P_BOOL,
333 &compose.checkbtn_wrapatsend,
334 prefs_set_data_from_toggle, prefs_set_toggle},
335 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
336 P_BOOL, &compose.checkbtn_forward_as_attachment,
337 prefs_set_data_from_toggle, prefs_set_toggle},
338 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
339 P_BOOL, &compose.checkbtn_smart_wrapping,
340 prefs_set_data_from_toggle, prefs_set_toggle},
341 {"enable_ispell", "TRUE", &prefs_common.enable_ispell,
342 P_BOOL, &compose.checkbtn_enable_ispell,
343 prefs_set_data_from_toggle, prefs_set_toggle},
344 {"ispell_path", ISPELL_PATH, &prefs_common.ispell_path,
345 P_STRING, &compose.entry_ispell_path,
346 prefs_set_data_from_entry, prefs_set_entry},
347 {"dictionary_path", "", &prefs_common.dictionary_path,
348 P_STRING, &compose.optmenu_dictionary_path,
349 prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
351 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
355 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
357 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
358 &prefs_common.textfont, P_STRING,
359 &display.entry_textfont,
360 prefs_set_data_from_entry, prefs_set_entry},
361 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
362 &prefs_common.smallfont, P_STRING,
363 &display.entry_smallfont,
364 prefs_set_data_from_entry, prefs_set_entry},
365 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
366 &prefs_common.boldfont, P_STRING,
367 &display.entry_boldfont,
368 prefs_set_data_from_entry, prefs_set_entry},
369 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
370 &prefs_common.normalfont, P_STRING,
371 &display.entry_normalfont,
372 prefs_set_data_from_entry, prefs_set_entry},
375 {"display_folder_unread_num", "TRUE",
376 &prefs_common.display_folder_unread, P_BOOL,
377 &display.chkbtn_folder_unread,
378 prefs_set_data_from_toggle, prefs_set_toggle},
380 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
381 &display.chkbtn_transhdr,
382 prefs_set_data_from_toggle, prefs_set_toggle},
384 /* Display: Summary View */
385 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
386 &display.chkbtn_swapfrom,
387 prefs_set_data_from_toggle, prefs_set_toggle},
388 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
389 &display.chkbtn_hscrollbar,
390 prefs_set_data_from_toggle, prefs_set_toggle},
391 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
392 &display.chkbtn_useaddrbook,
393 prefs_set_data_from_toggle, prefs_set_toggle},
394 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
395 P_STRING, &display.entry_datefmt,
396 prefs_set_data_from_entry, prefs_set_entry},
397 {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
398 &display.chkbtn_expand_thread,
399 prefs_set_data_from_toggle, prefs_set_toggle},
400 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
401 &display.chkbtn_bold_unread,
402 prefs_set_data_from_toggle, prefs_set_toggle},
404 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
407 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
409 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
412 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
414 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
416 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
418 {"show_number", "FALSE", &prefs_common.show_number, P_BOOL,
420 {"show_score", "TRUE", &prefs_common.show_score, P_BOOL,
422 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
424 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
426 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
428 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
432 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
434 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
436 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
438 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
440 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
442 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
444 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
446 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
448 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
450 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
452 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
454 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
456 {"summary_col_score", "40", &prefs_common.summary_col_score,
457 P_INT, NULL, NULL, NULL},
458 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
460 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
462 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
464 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
465 P_INT, NULL, NULL, NULL},
466 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
468 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
470 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
472 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
474 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
476 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
478 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
480 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
482 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
484 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
486 {"compose_width", "600", &prefs_common.compose_width, P_INT,
488 {"compose_height", "560", &prefs_common.compose_height, P_INT,
492 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
493 &message.chkbtn_enablecol,
494 prefs_set_data_from_toggle, prefs_set_toggle},
496 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
498 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
500 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
502 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
504 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
506 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
508 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
509 P_BOOL, NULL, NULL, NULL},
511 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
512 &message.chkbtn_mbalnum,
513 prefs_set_data_from_toggle, prefs_set_toggle},
514 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
515 P_BOOL, &message.chkbtn_disphdrpane,
516 prefs_set_data_from_toggle, prefs_set_toggle},
517 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
518 &message.chkbtn_disphdr,
519 prefs_set_data_from_toggle, prefs_set_toggle},
520 {"line_space", "2", &prefs_common.line_space, P_INT,
521 &message.spinbtn_linespc,
522 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
523 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
524 &message.chkbtn_headspc,
525 prefs_set_data_from_toggle, prefs_set_toggle},
527 {"enable_smooth_scroll", "FALSE",
528 &prefs_common.enable_smooth_scroll, P_BOOL,
529 &message.chkbtn_smoothscroll,
530 prefs_set_data_from_toggle, prefs_set_toggle},
531 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
532 &message.spinbtn_scrollstep,
533 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
534 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
535 &message.chkbtn_halfpage,
536 prefs_set_data_from_toggle, prefs_set_toggle},
538 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
542 {"mime_image_viewer", "display '%s'",
543 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
544 {"mime_audio_player", "play '%s'",
545 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
549 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
550 &privacy.checkbtn_default_encrypt,
551 prefs_set_data_from_toggle, prefs_set_toggle},
552 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
553 &privacy.checkbtn_default_sign,
554 prefs_set_data_from_toggle, prefs_set_toggle},
555 {"auto_check_signatures", "TRUE",
556 &prefs_common.auto_check_signatures, P_BOOL,
557 &privacy.checkbtn_auto_check_signatures,
558 prefs_set_data_from_toggle, prefs_set_toggle},
559 {"gpg_signature_popup", "FALSE",
560 &prefs_common.gpg_signature_popup, P_BOOL,
561 &privacy.checkbtn_gpg_signature_popup,
562 prefs_set_data_from_toggle, prefs_set_toggle},
564 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
565 &privacy.checkbtn_passphrase_grab,
566 prefs_set_data_from_toggle, prefs_set_toggle},
567 #endif /* __MINGW32__ */
568 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
569 &privacy.checkbtn_gpg_warning,
570 prefs_set_data_from_toggle, prefs_set_toggle},
571 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
572 &privacy.optmenu_default_signkey,
573 prefs_common_default_signkey_set_data_from_optmenu,
574 prefs_common_default_signkey_set_optmenu},
575 #endif /* USE_GPGME */
578 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
580 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
583 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
584 NULL, NULL, NULL}, */
586 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
587 P_BOOL, &interface.checkbtn_openunread,
588 prefs_set_data_from_toggle, prefs_set_toggle},
589 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
590 P_BOOL, &interface.checkbtn_openinbox,
591 prefs_set_data_from_toggle, prefs_set_toggle},
592 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
593 &interface.checkbtn_immedexec,
594 prefs_set_data_from_toggle, prefs_set_toggle},
595 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
596 &interface.optmenu_recvdialog,
597 prefs_common_recv_dialog_set_data_from_optmenu,
598 prefs_common_recv_dialog_set_optmenu},
600 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
601 P_BOOL, &interface.checkbtn_addaddrbyclick,
602 prefs_set_data_from_toggle, prefs_set_toggle},
603 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
604 &interface.checkbtn_confonexit,
605 prefs_set_data_from_toggle, prefs_set_toggle},
606 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
607 &send.checkbtn_returnreceipt,
608 prefs_set_data_from_toggle, prefs_set_toggle},
609 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
610 &interface.checkbtn_cleanonexit,
611 prefs_set_data_from_toggle, prefs_set_toggle},
612 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
613 &interface.checkbtn_askonclean,
614 prefs_set_data_from_toggle, prefs_set_toggle},
615 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
616 P_BOOL, &interface.checkbtn_warnqueued,
617 prefs_set_data_from_toggle, prefs_set_toggle},
620 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
621 &prefs_common.uri_cmd, P_STRING,
622 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
623 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
624 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
625 {"ext_editor_command", "gedit %s",
626 &prefs_common.ext_editor_cmd, P_STRING,
627 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
629 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
631 {"important_score", "1", &prefs_common.important_score, P_INT,
634 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
637 /* widget creating functions */
638 static void prefs_common_create (void);
639 static void prefs_receive_create (void);
640 static void prefs_send_create (void);
641 static void prefs_compose_create (void);
642 static void prefs_display_create (void);
643 static void prefs_message_create (void);
645 static void prefs_privacy_create (void);
647 static void prefs_interface_create (void);
648 static void prefs_other_create (void);
650 static void date_format_ok_btn_clicked (GtkButton *button,
652 static void date_format_cancel_btn_clicked (GtkButton *button,
654 static void date_format_key_pressed (GtkWidget *keywidget,
657 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
660 static void date_format_entry_on_change (GtkEditable *editable,
662 static void date_format_select_row (GtkWidget *date_format_list,
665 GdkEventButton *event,
666 GtkWidget *date_format);
667 static GtkWidget *date_format_create (GtkButton *button,
670 static void prefs_quote_description (void);
671 static void prefs_quote_description_create (void);
672 static void prefs_quote_colors_dialog (void);
673 static void prefs_quote_colors_dialog_create (void);
674 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
677 static void quote_color_set_dialog (GtkWidget *widget,
679 static void quote_colors_set_dialog_ok (GtkWidget *widget,
681 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
683 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
686 static void set_button_bg_color (GtkWidget *widget,
688 static void prefs_enable_message_color_toggled (void);
689 static void prefs_recycle_colors_toggled (GtkWidget *widget);
691 /* functions for setting items of SummaryView */
692 static void prefs_summary_display_item_dialog_create
693 (gboolean *cancelled);
694 static void display_item_ok (GtkWidget *widget,
695 gboolean *cancelled);
696 static void display_item_cancel (GtkWidget *widget,
697 gboolean *cancelled);
698 static gint display_item_delete_event (GtkWidget *widget,
700 gboolean *cancelled);
701 static void display_item_key_pressed (GtkWidget *widget,
703 gboolean *cancelled);
705 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
707 static void prefs_font_selection_key_pressed (GtkWidget *widget,
710 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
712 static gint prefs_common_deleted (GtkWidget *widget,
715 static void prefs_common_key_pressed (GtkWidget *widget,
718 static void prefs_common_ok (void);
719 static void prefs_common_apply (void);
720 static void prefs_common_cancel (void);
722 static void compose_prefs_fmt_open(void);
723 static void compose_prefs_fmt_create(void);
725 void prefs_common_read_config(void)
727 prefs_read_config(param, "Common", COMMON_RC);
730 void prefs_common_save_config(void)
732 prefs_save_config(param, "Common", COMMON_RC);
735 void prefs_common_open(void)
737 if (prefs_rc_is_readonly(COMMON_RC))
742 if (!dialog.window) {
743 prefs_common_create();
746 manage_window_set_transient(GTK_WINDOW(dialog.window));
747 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
748 gtk_widget_grab_focus(dialog.ok_btn);
750 prefs_set_dialog(param);
752 gtk_widget_show(dialog.window);
755 static void prefs_common_create(void)
759 debug_print(_("Creating common preferences window...\n"));
761 prefs_dialog_create(&dialog);
762 gtk_window_set_title (GTK_WINDOW(dialog.window),
763 _("Common Preferences"));
764 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
765 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
766 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
767 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
768 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
769 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
770 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
771 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
772 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
773 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
774 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
775 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
776 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
777 GTK_SIGNAL_FUNC(prefs_common_cancel),
778 GTK_OBJECT(dialog.window));
780 /* create all widgets on notebook */
781 prefs_receive_create();
782 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
784 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
785 prefs_compose_create();
786 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
787 prefs_display_create();
788 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
789 prefs_message_create();
790 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
792 prefs_privacy_create();
793 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
795 prefs_interface_create();
796 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
797 prefs_other_create();
798 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
800 compose_prefs_fmt_create();
802 gtk_widget_show_all(dialog.window);
805 static void prefs_receive_create(void)
809 GtkWidget *frame_incext;
810 GtkWidget *checkbtn_incext;
812 GtkWidget *label_incext;
813 GtkWidget *entry_incext;
814 /* GtkWidget *button_incext; */
816 GtkWidget *frame_spool;
817 GtkWidget *checkbtn_local;
818 GtkWidget *checkbtn_filter_on_inc;
819 GtkWidget *label_spool;
820 GtkWidget *entry_spool;
822 GtkWidget *hbox_autochk;
823 GtkWidget *checkbtn_autochk;
824 GtkWidget *label_autochk1;
825 GtkObject *spinbtn_autochk_adj;
826 GtkWidget *spinbtn_autochk;
827 GtkWidget *label_autochk2;
828 GtkWidget *checkbtn_chkonstartup;
829 GtkWidget *checkbtn_noerrorpanel;
830 GtkWidget *checkbtn_scan_after_inc;
833 GtkWidget *frame_news;
834 GtkWidget *label_maxarticle;
835 GtkWidget *spinbtn_maxarticle;
836 GtkObject *spinbtn_maxarticle_adj;
838 vbox1 = gtk_vbox_new (FALSE, VSPACING);
839 gtk_widget_show (vbox1);
840 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
841 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
843 PACK_FRAME(vbox1, frame_incext, _("External program"));
845 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
846 gtk_widget_show (vbox2);
847 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
848 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
850 /* Use of external incorporation program */
851 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
852 _("Use external program for incorporation"));
854 hbox = gtk_hbox_new (FALSE, 8);
855 gtk_widget_show (hbox);
856 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
857 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
859 label_incext = gtk_label_new (_("Program path"));
860 gtk_widget_show (label_incext);
861 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
863 entry_incext = gtk_entry_new ();
864 gtk_widget_show (entry_incext);
865 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
867 button_incext = gtk_button_new_with_label ("... ");
868 gtk_widget_show (button_incext);
869 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
871 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
873 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
874 gtk_widget_show (vbox2);
875 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
876 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
878 hbox = gtk_hbox_new (FALSE, 32);
879 gtk_widget_show (hbox);
880 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
882 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
883 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
884 _("Filter on incorporation"));
885 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
887 hbox = gtk_hbox_new (FALSE, 8);
888 gtk_widget_show (hbox);
889 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
890 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
892 label_spool = gtk_label_new (_("Spool directory"));
893 gtk_widget_show (label_spool);
894 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
896 entry_spool = gtk_entry_new ();
897 gtk_widget_show (entry_spool);
898 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
900 vbox2 = gtk_vbox_new (FALSE, 0);
901 gtk_widget_show (vbox2);
902 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
905 hbox_autochk = gtk_hbox_new (FALSE, 8);
906 gtk_widget_show (hbox_autochk);
907 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
909 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
910 _("Auto-check new mail"));
912 label_autochk1 = gtk_label_new (_("each"));
913 gtk_widget_show (label_autochk1);
914 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
916 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
917 spinbtn_autochk = gtk_spin_button_new
918 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
919 gtk_widget_show (spinbtn_autochk);
920 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
921 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
922 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
924 label_autochk2 = gtk_label_new (_("minute(s)"));
925 gtk_widget_show (label_autochk2);
926 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
928 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
929 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
930 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
932 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
933 _("Check new mail on startup"));
935 PACK_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel,
936 _("No error popup on receive error"));
937 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
938 _("Update all local folders after incorporation"));
941 PACK_FRAME(vbox1, frame_news, _("News"));
943 hbox = gtk_hbox_new (FALSE, 8);
944 gtk_widget_show (hbox);
945 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
946 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
948 label_maxarticle = gtk_label_new
949 (_("Maximum article number to download\n"
950 "(unlimited if 0 is specified)"));
951 gtk_widget_show (label_maxarticle);
952 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
953 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
955 spinbtn_maxarticle_adj =
956 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
957 spinbtn_maxarticle = gtk_spin_button_new
958 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
959 gtk_widget_show (spinbtn_maxarticle);
960 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
962 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
963 gtk_spin_button_set_numeric
964 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
966 receive.checkbtn_incext = checkbtn_incext;
967 receive.entry_incext = entry_incext;
968 /* receive.button_incext = button_incext; */
970 receive.checkbtn_local = checkbtn_local;
971 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
972 receive.entry_spool = entry_spool;
974 receive.checkbtn_autochk = checkbtn_autochk;
975 receive.spinbtn_autochk = spinbtn_autochk;
976 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
978 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
979 receive.checkbtn_noerrorpanel = checkbtn_noerrorpanel;
980 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
983 receive.spinbtn_maxarticle = spinbtn_maxarticle;
984 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
987 static void prefs_send_create(void)
991 GtkWidget *frame_extsend;
992 GtkWidget *vbox_extsend;
993 GtkWidget *checkbtn_extsend;
995 GtkWidget *label_extsend;
996 GtkWidget *entry_extsend;
997 /* GtkWidget *button_extsend; */
998 GtkWidget *checkbtn_savemsg;
999 GtkWidget *checkbtn_queuemsg;
1000 GtkWidget *label_outcharset;
1002 GtkWidget *optmenu_menu;
1003 GtkWidget *menuitem;
1004 GtkWidget *checkbtn_returnreceipt;
1006 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1007 gtk_widget_show (vbox1);
1008 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1009 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1011 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1013 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1014 gtk_widget_show (vbox_extsend);
1015 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1016 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1018 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1019 _("Use external program for sending"));
1021 hbox1 = gtk_hbox_new (FALSE, 8);
1022 gtk_widget_show (hbox1);
1023 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1024 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1026 label_extsend = gtk_label_new (_("Program path"));
1027 gtk_widget_show (label_extsend);
1028 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1030 entry_extsend = gtk_entry_new ();
1031 gtk_widget_show (entry_extsend);
1032 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1035 button_extsend = gtk_button_new_with_label ("... ");
1036 gtk_widget_show (button_extsend);
1037 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1040 vbox2 = gtk_vbox_new (FALSE, 0);
1041 gtk_widget_show (vbox2);
1042 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1044 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1045 _("Save sent messages to outbox"));
1046 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1047 _("Queue messages that fail to send"));
1048 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1049 _("Send return receipt on request"));
1051 hbox1 = gtk_hbox_new (FALSE, 8);
1052 gtk_widget_show (hbox1);
1053 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1055 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1056 gtk_widget_show (label_outcharset);
1057 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1059 optmenu = gtk_option_menu_new ();
1060 gtk_widget_show (optmenu);
1061 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1063 optmenu_menu = gtk_menu_new ();
1065 #define SET_MENUITEM(str, charset) \
1067 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1070 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1071 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1073 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1075 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1076 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1077 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1078 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1079 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1080 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1082 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1084 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1086 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1087 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1089 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1091 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1092 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1094 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1095 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1097 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1098 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1100 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1102 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1104 send.checkbtn_extsend = checkbtn_extsend;
1105 send.entry_extsend = entry_extsend;
1106 /* send.button_extsend = button_extsend; */
1108 send.checkbtn_savemsg = checkbtn_savemsg;
1109 send.checkbtn_queuemsg = checkbtn_queuemsg;
1110 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1112 send.optmenu_charset = optmenu;
1115 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1120 g_return_if_fail(param);
1121 g_return_if_fail(param->data);
1122 g_return_if_fail(param->widget);
1123 g_return_if_fail(*(param->widget));
1125 dict_path = gtkspell_get_dictionary_menu_active_item
1126 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1127 str = *((gchar **) param->data);
1130 *((gchar **) param->data) = dict_path;
1133 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1136 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1138 GtkWidget *menuitem;
1142 g_return_if_fail(optmenu != NULL);
1143 g_return_if_fail(pparam->data != NULL);
1145 if (*(gchar **) pparam->data) {
1146 menu = gtk_option_menu_get_menu(optmenu);
1147 for (cur = GTK_MENU_SHELL(menu)->children;
1148 cur != NULL; cur = cur->next) {
1149 menuitem = GTK_WIDGET(cur->data);
1150 dict_path = gtk_object_get_data(GTK_OBJECT(menuitem), "full_path");
1151 if (!strcmp(dict_path, *((gchar **)pparam->data))) {
1152 gtk_option_menu_set_history(optmenu, n);
1159 gtk_option_menu_set_history(optmenu, 0);
1160 prefs_dictionary_set_data_from_optmenu(pparam);
1163 static void prefs_compose_checkbtn_enable_ispell_toggle_cb
1169 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1170 gtk_widget_set_sensitive(compose.entry_ispell_path, toggled);
1171 gtk_widget_set_sensitive(compose.optmenu_dictionary_path, toggled);
1172 gtk_widget_set_sensitive(compose.btn_ispell_path, toggled);
1175 static void prefs_compose_btn_ispell_path_clicked_cb(GtkWidget *widget,
1179 GtkWidget *new_menu;
1181 file_path = filesel_select_file(_("Select spelling checker location"),
1182 prefs_common.ispell_path);
1183 if (file_path == NULL) {
1187 if (prefs_common.ispell_path)
1188 g_free(prefs_common.ispell_path);
1189 prefs_common.ispell_path = file_path;
1191 new_menu = gtkspell_dictionary_option_menu_new(file_path);
1192 gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_dictionary_path),
1195 gtk_entry_set_text(GTK_ENTRY(compose.entry_ispell_path), file_path);
1196 /* select first one */
1197 gtk_option_menu_set_history(GTK_OPTION_MENU(compose.optmenu_dictionary_path), 0);
1199 prefs_common.dictionary_path = gtkspell_get_dictionary_menu_active_item(
1200 gtk_option_menu_get_menu(GTK_OPTION_MENU(compose.optmenu_dictionary_path)));
1205 static void prefs_compose_create(void)
1212 GtkWidget *frame_quote;
1213 GtkWidget *vbox_quote;
1214 GtkWidget *checkbtn_quote;
1216 GtkWidget *label_quotemark;
1217 GtkWidget *entry_quotemark;
1219 GtkWidget *label_quotefmt;
1220 GtkWidget *btn_quotedesc;
1221 GtkWidget *scrolledwin_quotefmt;
1222 GtkWidget *text_quotefmt;
1227 GtkWidget *btn_quotefmt;
1229 GtkWidget *frame_sig;
1230 GtkWidget *vbox_sig;
1231 GtkWidget *checkbtn_autosig;
1232 GtkWidget *label_sigsep;
1233 GtkWidget *entry_sigsep;
1235 GtkWidget *frame_autosel;
1236 GtkWidget *hbox_autosel;
1237 GtkWidget *vbox_autosel;
1238 GtkWidget *checkbtn_reply_account_autosel;
1239 GtkWidget *checkbtn_forward_account_autosel;
1240 GtkWidget *checkbtn_reedit_account_autosel;
1242 GtkWidget *checkbtn_autoextedit;
1244 GtkWidget *vbox_linewrap;
1249 GtkWidget *label_linewrap;
1250 GtkObject *spinbtn_linewrap_adj;
1251 GtkWidget *spinbtn_linewrap;
1252 GtkWidget *checkbtn_wrapquote;
1253 GtkWidget *checkbtn_wrapatsend;
1255 GtkWidget *checkbtn_forward_as_attachment;
1256 GtkWidget *checkbtn_smart_wrapping;
1258 GtkWidget *frame_spell;
1259 GtkWidget *hbox_spell;
1260 GtkWidget *vbox_spell;
1261 GtkWidget *hbox_ispell_path;
1262 GtkWidget *checkbtn_enable_ispell;
1263 GtkWidget *label_ispell_path;
1264 GtkWidget *entry_ispell_path;
1265 GtkWidget *btn_ispell_path;
1266 GtkWidget *hbox_dictionary_path;
1267 GtkWidget *label_dictionary_path;
1268 GtkWidget *optmenu_dictionary_path;
1270 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1271 gtk_widget_show (vbox1);
1272 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1273 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1276 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
1278 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1279 gtk_widget_show (vbox_quote);
1280 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1281 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1283 hbox1 = gtk_hbox_new (FALSE, 32);
1284 gtk_widget_show (hbox1);
1285 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1287 hbox2 = gtk_hbox_new (FALSE, 8);
1288 gtk_widget_show (hbox2);
1289 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1291 label_quotemark = gtk_label_new (_("Quotation mark"));
1292 gtk_widget_show (label_quotemark);
1293 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1295 entry_quotemark = gtk_entry_new ();
1296 gtk_widget_show (entry_quotemark);
1297 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1298 gtk_widget_set_usize (entry_quotemark, 64, -1);
1300 PACK_CHECK_BUTTON (hbox1, checkbtn_quote,
1301 _("Quote message when replying"));
1303 hbox2 = gtk_hbox_new (FALSE, 0);
1304 gtk_widget_show (hbox2);
1305 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1307 label_quotefmt = gtk_label_new (_("Quotation format:"));
1308 gtk_widget_show (label_quotefmt);
1309 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1312 gtk_button_new_with_label (_(" Description of symbols "));
1314 gtk_widget_show (btn_quotedesc);
1315 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1316 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1317 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1320 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1321 gtk_widget_show (scrolledwin_quotefmt);
1322 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1323 gtk_scrolled_window_set_policy
1324 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1325 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1327 text_quotefmt = gtk_text_new (NULL, NULL);
1328 gtk_widget_show (text_quotefmt);
1329 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1330 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1331 gtk_widget_set_usize(text_quotefmt, -1, 60);
1334 hbox1 = gtk_hbox_new (FALSE, 32);
1335 gtk_widget_show (hbox1);
1336 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1338 btn_quotefmt = gtk_button_new_with_label (_(" Quote format "));
1339 gtk_widget_show (btn_quotefmt);
1340 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotefmt, FALSE, FALSE, 0);
1341 gtk_signal_connect(GTK_OBJECT(btn_quotefmt), "clicked",
1342 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), NULL);
1344 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1346 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1347 gtk_widget_show (vbox_sig);
1348 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1349 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1351 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1352 _("Insert signature automatically"));
1354 hbox1 = gtk_hbox_new (FALSE, 8);
1355 gtk_widget_show (hbox1);
1356 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1357 label_sigsep = gtk_label_new (_("Signature separator"));
1358 gtk_widget_show (label_sigsep);
1359 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1361 entry_sigsep = gtk_entry_new ();
1362 gtk_widget_show (entry_sigsep);
1363 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1365 gtk_widget_set_usize (entry_sigsep, 64, -1);
1367 /* Automatic (Smart) Account Selection */
1368 PACK_FRAME(vbox1, frame_autosel, _("Automatic Account Selection"));
1370 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1371 gtk_widget_show (hbox_autosel);
1372 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1373 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1375 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1376 _("when replying"));
1377 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1378 _("when forwarding"));
1379 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1380 _("when re-editing"));
1382 vbox2 = gtk_vbox_new (FALSE, 0);
1383 gtk_widget_show (vbox2);
1384 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1386 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1387 _("Automatically launch the external editor"));
1389 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1392 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1393 gtk_widget_show (vbox_linewrap);
1394 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1396 hbox3 = gtk_hbox_new (FALSE, 8);
1397 gtk_widget_show (hbox3);
1398 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1401 label_linewrap = gtk_label_new (_("Wrap messages at"));
1402 gtk_widget_show (label_linewrap);
1403 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1405 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1406 spinbtn_linewrap = gtk_spin_button_new
1407 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1408 gtk_widget_show (spinbtn_linewrap);
1409 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1410 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1411 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1413 label_linewrap = gtk_label_new (_("characters"));
1414 gtk_widget_show (label_linewrap);
1415 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1417 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1419 hbox4 = gtk_hbox_new (FALSE, 32);
1420 gtk_widget_show (hbox4);
1421 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1423 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1425 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1427 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1428 _("Forward as attachment"));
1430 PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping,
1431 _("Smart wrapping (EXPERIMENTAL)"));
1433 /* spell checker defaults */
1434 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1435 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1436 gtk_widget_show (vbox_spell);
1437 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1438 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1440 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_ispell,
1441 _("Enable spell checker"));
1443 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_ispell), "toggled",
1444 GTK_SIGNAL_FUNC(prefs_compose_checkbtn_enable_ispell_toggle_cb),
1447 hbox_ispell_path = gtk_hbox_new (FALSE, 8);
1448 gtk_widget_show(hbox_ispell_path);
1449 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_ispell_path, TRUE, TRUE, 0);
1451 label_ispell_path = gtk_label_new (_("Ispelll path"));
1452 gtk_widget_show(label_ispell_path);
1453 gtk_box_pack_start(GTK_BOX(hbox_ispell_path), label_ispell_path, FALSE, FALSE, 0);
1455 entry_ispell_path = gtk_entry_new();
1456 gtk_widget_show(entry_ispell_path);
1457 gtk_box_pack_start(GTK_BOX(hbox_ispell_path), entry_ispell_path, FALSE, FALSE, 0);
1458 gtk_widget_set_usize(entry_ispell_path, 150, -1);
1459 gtk_widget_set_sensitive(entry_ispell_path, prefs_common.enable_ispell);
1461 btn_ispell_path = gtk_button_new_with_label(_("..."));
1462 gtk_widget_show(btn_ispell_path);
1463 gtk_box_pack_start(GTK_BOX(hbox_ispell_path), btn_ispell_path, FALSE, FALSE, 0);
1464 gtk_widget_set_sensitive(btn_ispell_path, prefs_common.enable_ispell);
1466 gtk_signal_connect(GTK_OBJECT(btn_ispell_path), "clicked",
1467 GTK_SIGNAL_FUNC(prefs_compose_btn_ispell_path_clicked_cb),
1470 hbox_dictionary_path = gtk_hbox_new(FALSE, 8);
1471 gtk_widget_show(hbox_dictionary_path);
1472 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_dictionary_path, TRUE, TRUE, 0);
1474 label_dictionary_path = gtk_label_new(_("Dictionaries"));
1475 gtk_widget_show(label_dictionary_path);
1476 gtk_box_pack_start(GTK_BOX(hbox_dictionary_path), label_dictionary_path, FALSE, FALSE, 0);
1478 optmenu_dictionary_path = gtk_option_menu_new();
1479 gtk_widget_show(optmenu_dictionary_path);
1480 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary_path),
1481 gtkspell_dictionary_option_menu_new(prefs_common.ispell_path));
1482 gtk_box_pack_start(GTK_BOX(hbox_dictionary_path), optmenu_dictionary_path, FALSE, FALSE, 0);
1483 gtk_widget_set_sensitive(optmenu_dictionary_path, prefs_common.enable_ispell);
1486 compose.checkbtn_quote = checkbtn_quote;
1487 compose.entry_quotemark = entry_quotemark;
1488 compose.text_quotefmt = text_quotefmt;
1490 compose.checkbtn_autosig = checkbtn_autosig;
1491 compose.entry_sigsep = entry_sigsep;
1493 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1494 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1495 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1496 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1498 compose.spinbtn_linewrap = spinbtn_linewrap;
1499 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1500 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1501 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1503 compose.checkbtn_forward_as_attachment =
1504 checkbtn_forward_as_attachment;
1505 compose.checkbtn_smart_wrapping =
1506 checkbtn_smart_wrapping;
1508 compose.checkbtn_enable_ispell = checkbtn_enable_ispell;
1509 compose.entry_ispell_path = entry_ispell_path;
1510 compose.btn_ispell_path = btn_ispell_path;
1511 compose.optmenu_dictionary_path = optmenu_dictionary_path;
1514 static void prefs_display_create(void)
1517 GtkWidget *frame_font;
1519 GtkWidget *label_textfont;
1520 GtkWidget *entry_textfont;
1521 GtkWidget *button_textfont;
1522 GtkWidget *chkbtn_folder_unread;
1523 GtkWidget *chkbtn_transhdr;
1524 GtkWidget *frame_summary;
1526 GtkWidget *chkbtn_swapfrom;
1527 GtkWidget *chkbtn_hscrollbar;
1528 GtkWidget *chkbtn_useaddrbook;
1529 GtkWidget *chkbtn_expand_thread;
1530 GtkWidget *chkbtn_bold_unread;
1533 GtkWidget *label_datefmt;
1534 GtkWidget *button_datefmt;
1535 GtkWidget *entry_datefmt;
1536 GtkWidget *button_dispitem;
1537 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
1539 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1540 gtk_widget_show (vbox1);
1541 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1542 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1544 PACK_FRAME(vbox1, frame_font, _("Font"));
1546 table1 = gtk_table_new (4, 3, FALSE);
1548 gtk_widget_show (table1);
1549 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1550 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1551 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1552 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1554 label_textfont = gtk_label_new (_("Text"));
1555 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1556 gtk_widget_show (label_textfont);
1557 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1558 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1560 entry_textfont = gtk_entry_new ();
1561 gtk_widget_show (entry_textfont);
1562 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1563 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1565 button_textfont = gtk_button_new_with_label ("... ");
1567 gtk_widget_show (button_textfont);
1568 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1570 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1571 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1573 tmplabel = gtk_label_new (_("Small"));
1574 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1575 gtk_widget_show (tmplabel);
1576 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1577 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1579 tmpentry = gtk_entry_new ();
1580 gtk_widget_show (tmpentry);
1581 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1582 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1584 tmpbutton = gtk_button_new_with_label (" ... ");
1585 gtk_widget_show (tmpbutton);
1586 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1588 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1589 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1590 display.entry_smallfont = tmpentry;
1592 tmplabel = gtk_label_new (_("Normal"));
1593 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1594 gtk_widget_show (tmplabel);
1595 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1596 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1598 tmpentry = gtk_entry_new ();
1599 gtk_widget_show (tmpentry);
1600 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1601 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1603 tmpbutton = gtk_button_new_with_label (" ... ");
1604 gtk_widget_show (tmpbutton);
1605 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1607 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1608 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1609 display.entry_normalfont = tmpentry;
1611 tmplabel = gtk_label_new (_("Bold"));
1612 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1613 gtk_widget_show (tmplabel);
1614 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1615 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1617 tmpentry = gtk_entry_new ();
1618 gtk_widget_show (tmpentry);
1619 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1620 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1622 tmpbutton = gtk_button_new_with_label (" ... ");
1623 gtk_widget_show (tmpbutton);
1624 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1626 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1627 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1628 display.entry_boldfont = tmpentry;
1630 vbox2 = gtk_vbox_new (FALSE, 0);
1631 gtk_widget_show (vbox2);
1632 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1635 (vbox2, chkbtn_transhdr,
1636 _("Translate header name (such as `From:', `Subject:')"));
1638 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1639 _("Display unread number next to folder name"));
1641 /* ---- Summary ---- */
1643 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1645 vbox2 = gtk_vbox_new (FALSE, 0);
1646 gtk_widget_show (vbox2);
1647 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1648 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1651 (vbox2, chkbtn_swapfrom,
1652 _("Display recipient on `From' column if sender is yourself"));
1654 (vbox2, chkbtn_useaddrbook,
1655 _("Display sender using address book"));
1657 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1659 (vbox2, chkbtn_expand_thread, _("Expand threads"));
1661 (vbox2, chkbtn_bold_unread,
1662 _("Display unread messages with bold font"));
1664 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1666 hbox1 = gtk_hbox_new (FALSE, 8);
1667 gtk_widget_show (hbox1);
1668 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1670 label_datefmt = gtk_label_new (_("Date format"));
1671 gtk_widget_show (label_datefmt);
1672 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1674 entry_datefmt = gtk_entry_new ();
1675 gtk_widget_show (entry_datefmt);
1676 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1678 button_datefmt = gtk_button_new_with_label ("... ");
1680 gtk_widget_show (button_datefmt);
1681 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1682 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1683 GTK_SIGNAL_FUNC (date_format_create), NULL);
1685 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1687 hbox1 = gtk_hbox_new (FALSE, 8);
1688 gtk_widget_show (hbox1);
1689 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1691 button_dispitem = gtk_button_new_with_label
1692 (_(" Set display item of summary... "));
1693 gtk_widget_show (button_dispitem);
1694 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1695 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1696 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1699 display.entry_textfont = entry_textfont;
1700 display.button_textfont = button_textfont;
1702 display.chkbtn_folder_unread = chkbtn_folder_unread;
1703 display.chkbtn_transhdr = chkbtn_transhdr;
1705 display.chkbtn_swapfrom = chkbtn_swapfrom;
1706 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1707 display.chkbtn_expand_thread = chkbtn_expand_thread;
1708 display.chkbtn_bold_unread = chkbtn_bold_unread;
1709 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1710 display.entry_datefmt = entry_datefmt;
1713 static void prefs_message_create(void)
1719 GtkWidget *chkbtn_enablecol;
1720 GtkWidget *button_edit_col;
1721 GtkWidget *chkbtn_mbalnum;
1722 GtkWidget *chkbtn_disphdrpane;
1723 GtkWidget *chkbtn_disphdr;
1724 GtkWidget *button_edit_disphdr;
1725 GtkWidget *hbox_linespc;
1726 GtkWidget *label_linespc;
1727 GtkObject *spinbtn_linespc_adj;
1728 GtkWidget *spinbtn_linespc;
1729 GtkWidget *chkbtn_headspc;
1731 GtkWidget *frame_scr;
1732 GtkWidget *vbox_scr;
1733 GtkWidget *chkbtn_smoothscroll;
1734 GtkWidget *hbox_scr;
1735 GtkWidget *label_scr;
1736 GtkObject *spinbtn_scrollstep_adj;
1737 GtkWidget *spinbtn_scrollstep;
1738 GtkWidget *chkbtn_halfpage;
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 hbox1 = gtk_hbox_new (FALSE, 8);
1746 gtk_widget_show (hbox1);
1747 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1749 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1750 _("Enable coloration of message"));
1751 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1752 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1755 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1756 gtk_widget_show (button_edit_col);
1757 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1758 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1759 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1761 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1763 vbox2 = gtk_vbox_new (FALSE, 0);
1764 gtk_widget_show (vbox2);
1765 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1768 (vbox2, chkbtn_mbalnum,
1769 _("Display 2-byte alphabet and numeric with 1-byte character"));
1770 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1771 _("Display header pane above message view"));
1773 hbox1 = gtk_hbox_new (FALSE, 8);
1774 gtk_widget_show (hbox1);
1775 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1777 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1778 _("Display short headers on message view"));
1780 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1781 gtk_widget_show (button_edit_disphdr);
1782 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1784 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1785 GTK_SIGNAL_FUNC (prefs_display_header_open),
1788 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1790 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1792 hbox1 = gtk_hbox_new (FALSE, 32);
1793 gtk_widget_show (hbox1);
1794 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1796 hbox_linespc = gtk_hbox_new (FALSE, 8);
1797 gtk_widget_show (hbox1);
1798 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1800 label_linespc = gtk_label_new (_("Line space"));
1801 gtk_widget_show (label_linespc);
1802 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1805 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1806 spinbtn_linespc = gtk_spin_button_new
1807 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1808 gtk_widget_show (spinbtn_linespc);
1809 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1811 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1812 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1814 label_linespc = gtk_label_new (_("pixel(s)"));
1815 gtk_widget_show (label_linespc);
1816 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1819 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1821 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1823 vbox_scr = gtk_vbox_new (FALSE, 0);
1824 gtk_widget_show (vbox_scr);
1825 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1826 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1828 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1830 hbox1 = gtk_hbox_new (FALSE, 32);
1831 gtk_widget_show (hbox1);
1832 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1834 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1836 hbox_scr = gtk_hbox_new (FALSE, 8);
1837 gtk_widget_show (hbox_scr);
1838 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1840 label_scr = gtk_label_new (_("Step"));
1841 gtk_widget_show (label_scr);
1842 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1844 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1845 spinbtn_scrollstep = gtk_spin_button_new
1846 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1847 gtk_widget_show (spinbtn_scrollstep);
1848 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1850 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1851 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1854 label_scr = gtk_label_new (_("pixel(s)"));
1855 gtk_widget_show (label_scr);
1856 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1858 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1860 message.chkbtn_enablecol = chkbtn_enablecol;
1861 message.button_edit_col = button_edit_col;
1862 message.chkbtn_mbalnum = chkbtn_mbalnum;
1863 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1864 message.chkbtn_disphdr = chkbtn_disphdr;
1865 message.spinbtn_linespc = spinbtn_linespc;
1866 message.chkbtn_headspc = chkbtn_headspc;
1868 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1869 message.spinbtn_scrollstep = spinbtn_scrollstep;
1870 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1871 message.chkbtn_halfpage = chkbtn_halfpage;
1875 static void prefs_privacy_create(void)
1880 GtkWidget *checkbtn_default_encrypt;
1881 GtkWidget *checkbtn_default_sign;
1882 GtkWidget *checkbtn_auto_check_signatures;
1883 GtkWidget *checkbtn_gpg_signature_popup;
1884 GtkWidget *checkbtn_passphrase_grab;
1885 GtkWidget *checkbtn_gpg_warning;
1887 GtkWidget *menuitem;
1889 GtkWidget *optmenu_menu;
1891 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1892 gtk_widget_show (vbox1);
1893 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1894 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1896 vbox2 = gtk_vbox_new (FALSE, 0);
1897 gtk_widget_show (vbox2);
1898 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1900 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1901 _("Encrypt message by default"));
1903 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1904 _("Sign message by default"));
1906 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1907 _("Automatically check signatures"));
1909 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
1910 _("Show signature check result in a popup window"));
1913 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1914 _("Grab input while entering a passphrase"));
1918 (vbox2, checkbtn_gpg_warning,
1919 _("Display warning on startup if GnuPG doesn't work"));
1921 hbox1 = gtk_hbox_new (FALSE, 8);
1922 gtk_widget_show (hbox1);
1923 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1925 /* create default signkey box */
1926 label = gtk_label_new (_("Default Sign Key"));
1927 gtk_widget_show (label);
1928 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1929 optmenu = gtk_option_menu_new ();
1930 gtk_widget_show (optmenu);
1931 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1932 optmenu_menu = gtk_menu_new ();
1934 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1935 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1936 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1937 /* FIXME: disabled because not implemented */
1938 gtk_widget_set_sensitive(optmenu, FALSE);
1940 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1941 privacy.checkbtn_default_sign = checkbtn_default_sign;
1942 privacy.checkbtn_auto_check_signatures
1943 = checkbtn_auto_check_signatures;
1944 privacy.checkbtn_gpg_signature_popup
1945 = checkbtn_gpg_signature_popup;
1946 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1947 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
1948 privacy.optmenu_default_signkey = optmenu;
1952 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1956 GtkWidget *menuitem;
1959 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1960 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1961 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1962 g_free(*((gchar **)pparam->data));
1963 *((gchar **)pparam->data) = g_strdup(charset);
1967 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1971 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1973 GtkWidget *menuitem;
1977 g_return_if_fail(optmenu != NULL);
1978 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1980 menu = gtk_option_menu_get_menu(optmenu);
1981 for (cur = GTK_MENU_SHELL(menu)->children;
1982 cur != NULL; cur = cur->next) {
1983 menuitem = GTK_WIDGET(cur->data);
1984 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1985 if (!strcmp(charset, *((gchar **)pparam->data))) {
1986 gtk_option_menu_set_history(optmenu, n);
1992 gtk_option_menu_set_history(optmenu, 0);
1993 prefs_common_charset_set_data_from_optmenu(pparam);
1996 #endif /* USE_GPGME */
1998 static void prefs_interface_create(void)
2003 /* GtkWidget *checkbtn_emacs; */
2004 GtkWidget *checkbtn_openunread;
2005 GtkWidget *checkbtn_openinbox;
2006 GtkWidget *checkbtn_immedexec;
2009 GtkWidget *optmenu_recvdialog;
2011 GtkWidget *menuitem;
2013 GtkWidget *frame_addr;
2014 GtkWidget *vbox_addr;
2015 GtkWidget *checkbtn_addaddrbyclick;
2017 GtkWidget *frame_exit;
2018 GtkWidget *vbox_exit;
2019 GtkWidget *checkbtn_confonexit;
2020 GtkWidget *checkbtn_cleanonexit;
2021 GtkWidget *checkbtn_askonclean;
2022 GtkWidget *checkbtn_warnqueued;
2024 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2025 gtk_widget_show (vbox1);
2026 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2027 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2029 vbox2 = gtk_vbox_new (FALSE, 0);
2030 gtk_widget_show (vbox2);
2031 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2033 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2034 _("Emulate the behavior of mouse operation of\n"
2035 "Emacs-based mailer"));
2036 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2037 GTK_JUSTIFY_LEFT); */
2040 (vbox2, checkbtn_openunread,
2041 _("Open first unread message when entering a folder"));
2044 (vbox2, checkbtn_openinbox,
2045 _("Go to inbox after receiving new mail"));
2047 vbox3 = gtk_vbox_new (FALSE, 0);
2048 gtk_widget_show (vbox3);
2049 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2052 (vbox3, checkbtn_immedexec,
2053 _("Execute immediately when moving or deleting messages"));
2055 hbox1 = gtk_hbox_new (FALSE, 0);
2056 gtk_widget_show (hbox1);
2057 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2059 label = gtk_label_new
2060 (_("(Messages will be just marked till execution\n"
2061 " if this is turned off)"));
2062 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2063 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2065 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2067 hbox1 = gtk_hbox_new (FALSE, 8);
2068 gtk_widget_show (hbox1);
2069 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2071 label = gtk_label_new (_("Show receive dialog"));
2072 gtk_widget_show (label);
2073 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2075 optmenu_recvdialog = gtk_option_menu_new ();
2076 gtk_widget_show (optmenu_recvdialog);
2077 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2080 menu = gtk_menu_new ();
2081 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2082 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2083 RECV_DIALOG_ACTIVE);
2084 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2086 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2088 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2090 vbox_addr = gtk_vbox_new (FALSE, 0);
2091 gtk_widget_show (vbox_addr);
2092 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2093 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2096 (vbox_addr, checkbtn_addaddrbyclick,
2097 _("Add address to destination when double-clicked"));
2099 /* Receive Dialog */
2100 /* hbox = gtk_hbox_new (FALSE, 8);
2101 gtk_widget_show (hbox);
2102 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2104 label = gtk_label_new (_("Show receive Dialog"));
2105 gtk_widget_show (label);
2106 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2108 recvdialog_optmenu = gtk_option_menu_new ();
2109 gtk_widget_show (recvdialog_optmenu);
2110 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2112 recvdialog_optmenu_menu = gtk_menu_new ();
2114 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2115 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2116 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2118 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2121 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2123 vbox_exit = gtk_vbox_new (FALSE, 0);
2124 gtk_widget_show (vbox_exit);
2125 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2126 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2128 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2129 _("Confirm on exit"));
2131 hbox1 = gtk_hbox_new (FALSE, 32);
2132 gtk_widget_show (hbox1);
2133 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2135 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2136 _("Empty trash on exit"));
2137 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2138 _("Ask before emptying"));
2139 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2141 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2142 _("Warn if there are queued messages"));
2144 /* interface.checkbtn_emacs = checkbtn_emacs; */
2145 interface.checkbtn_openunread = checkbtn_openunread;
2146 interface.checkbtn_openinbox = checkbtn_openinbox;
2147 interface.checkbtn_immedexec = checkbtn_immedexec;
2148 interface.optmenu_recvdialog = optmenu_recvdialog;
2149 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2150 interface.checkbtn_confonexit = checkbtn_confonexit;
2151 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2152 interface.checkbtn_askonclean = checkbtn_askonclean;
2153 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2156 static void prefs_other_create(void)
2161 GtkWidget *uri_frame;
2162 GtkWidget *uri_label;
2163 GtkWidget *uri_combo;
2164 GtkWidget *uri_entry;
2166 GtkWidget *print_frame;
2167 GtkWidget *printcmd_label;
2168 GtkWidget *printcmd_entry;
2170 GtkWidget *exteditor_frame;
2171 GtkWidget *exteditor_label;
2172 GtkWidget *exteditor_combo;
2173 GtkWidget *exteditor_entry;
2175 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2176 gtk_widget_show (vbox1);
2177 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2178 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2180 PACK_FRAME(vbox1, uri_frame,
2181 _("External Web browser (%s will be replaced with URI)"));
2183 hbox1 = gtk_hbox_new (FALSE, 8);
2184 gtk_widget_show (hbox1);
2185 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2186 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2188 uri_label = gtk_label_new (_("Command"));
2189 gtk_widget_show(uri_label);
2190 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2192 uri_combo = gtk_combo_new ();
2193 gtk_widget_show (uri_combo);
2194 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2195 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2196 "netscape -remote 'openURL(%s,raise)'",
2198 "gnome-moz-remote --raise --newwin '%s'",
2199 "kterm -e w3m '%s'",
2200 "kterm -e lynx '%s'",
2203 uri_entry = GTK_COMBO (uri_combo)->entry;
2205 PACK_FRAME(vbox1, print_frame,
2206 _("Printing (%s will be replaced with file name)"));
2208 hbox1 = gtk_hbox_new (FALSE, 8);
2209 gtk_widget_show (hbox1);
2210 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2211 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2213 printcmd_label = gtk_label_new (_("Command"));
2214 gtk_widget_show (printcmd_label);
2215 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2217 printcmd_entry = gtk_entry_new ();
2218 gtk_widget_show (printcmd_entry);
2219 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2221 PACK_FRAME(vbox1, exteditor_frame,
2222 _("External editor (%s will be replaced with file name)"));
2224 hbox1 = gtk_hbox_new (FALSE, 8);
2225 gtk_widget_show (hbox1);
2226 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2227 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2229 exteditor_label = gtk_label_new (_("Command"));
2230 gtk_widget_show (exteditor_label);
2231 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2233 exteditor_combo = gtk_combo_new ();
2234 gtk_widget_show (exteditor_combo);
2235 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2236 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2239 "mgedit --no-fork %s",
2245 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2247 other.uri_combo = uri_combo;
2248 other.uri_entry = uri_entry;
2249 other.printcmd_entry = printcmd_entry;
2251 other.exteditor_combo = exteditor_combo;
2252 other.exteditor_entry = exteditor_entry;
2255 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2257 GtkWidget *datefmt_sample = NULL;
2260 g_return_if_fail(widget != NULL);
2261 g_return_if_fail(*widget != NULL);
2262 g_return_if_fail(display.entry_datefmt != NULL);
2264 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2265 (GTK_OBJECT(*widget), "datefmt_sample"));
2266 g_return_if_fail(datefmt_sample != NULL);
2268 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2269 g_free(prefs_common.date_format);
2270 prefs_common.date_format = text;
2271 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2273 gtk_widget_destroy(*widget);
2277 static void date_format_cancel_btn_clicked(GtkButton *button,
2280 g_return_if_fail(widget != NULL);
2281 g_return_if_fail(*widget != NULL);
2283 gtk_widget_destroy(*widget);
2287 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2290 if (event && event->keyval == GDK_Escape)
2291 date_format_cancel_btn_clicked(NULL, widget);
2294 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2295 GdkEventAny *event, GtkWidget **widget)
2297 g_return_val_if_fail(widget != NULL, FALSE);
2298 g_return_val_if_fail(*widget != NULL, FALSE);
2304 static void date_format_entry_on_change(GtkEditable *editable,
2308 struct tm *cal_time;
2312 cur_time = time(NULL);
2313 cal_time = localtime(&cur_time);
2315 text = gtk_editable_get_chars(editable, 0, -1);
2317 strftime(buffer, sizeof buffer, text, cal_time);
2318 gtk_label_set_text(example, buffer);
2321 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2322 gint column, GdkEventButton *event,
2323 GtkWidget *date_format)
2329 GtkWidget *datefmt_sample;
2331 /* only on double click */
2332 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2335 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2336 (GTK_OBJECT(date_format), "datefmt_sample"));
2338 g_return_if_fail(date_format_list != NULL);
2339 g_return_if_fail(date_format != NULL);
2340 g_return_if_fail(datefmt_sample != NULL);
2342 /* get format from clist */
2343 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2345 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2346 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2348 /* insert the format into the text entry */
2349 new_format = g_malloc(strlen(old_format) + 3);
2351 strncpy(new_format, old_format, cur_pos);
2352 new_format[cur_pos] = '\0';
2353 strcat(new_format, format);
2354 strcat(new_format, &old_format[cur_pos]);
2356 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2357 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2362 static GtkWidget *date_format_create(GtkButton *button, void *data)
2364 static GtkWidget *datefmt_win = NULL;
2366 GtkWidget *scrolledwindow1;
2367 GtkWidget *datefmt_clist;
2372 GtkWidget *confirm_area;
2374 GtkWidget *cancel_btn;
2375 GtkWidget *datefmt_entry;
2381 { "%a", _("the full abbreviated weekday name") },
2382 { "%A", _("the full weekday name") },
2383 { "%b", _("the abbreviated month name") },
2384 { "%B", _("the full month name") },
2385 { "%c", _("the preferred date and time for the current locale") },
2386 { "%C", _("the century number (year/100)") },
2387 { "%d", _("the day of the month as a decimal number") },
2388 { "%H", _("the hour as a decimal number using a 24-hour clock") },
2389 { "%I", _("the hour as a decimal number using a 12-hour clock") },
2390 { "%j", _("the day of the year as a decimal number") },
2391 { "%m", _("the month as a decimal number") },
2392 { "%M", _("the minute as a decimal number") },
2393 { "%p", _("either AM or PM") },
2394 { "%S", _("the second as a decimal number") },
2395 { "%w", _("the day of the week as a decimal number") },
2396 { "%x", _("the preferred date for the current locale") },
2397 { "%y", _("the last two digits of a year") },
2398 { "%Y", _("the year as a decimal number") },
2399 { "%Z", _("the time zone or name or abbreviation") }
2404 const gint TIME_FORMAT_ELEMS =
2405 sizeof time_format / sizeof time_format[0];
2407 if (datefmt_win) return datefmt_win;
2409 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2410 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2411 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2412 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2413 gtk_widget_set_usize(datefmt_win, 440, 280);
2415 vbox1 = gtk_vbox_new(FALSE, 10);
2416 gtk_widget_show(vbox1);
2417 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2419 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2420 gtk_scrolled_window_set_policy
2421 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2422 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2423 gtk_widget_show(scrolledwindow1);
2424 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2426 titles[0] = _("Specifier");
2427 titles[1] = _("Description");
2428 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2429 gtk_widget_show(datefmt_clist);
2430 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2431 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2433 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2434 GTK_SELECTION_BROWSE);
2436 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2438 /* phoney casting necessary because of gtk... */
2439 text[0] = (gchar *)time_format[i].fmt;
2440 text[1] = (gchar *)time_format[i].txt;
2441 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2444 table = gtk_table_new(2, 2, FALSE);
2445 gtk_widget_show(table);
2446 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2447 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2448 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2450 label1 = gtk_label_new(_("Date format"));
2451 gtk_widget_show(label1);
2452 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2454 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2455 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2457 datefmt_entry = gtk_entry_new_with_max_length(256);
2458 gtk_widget_show(datefmt_entry);
2459 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2460 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2462 /* we need the "sample" entry box; add it as data so callbacks can
2463 * get the entry box */
2464 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2467 label2 = gtk_label_new(_("Example"));
2468 gtk_widget_show(label2);
2469 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2471 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2472 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2474 label3 = gtk_label_new("");
2475 gtk_widget_show(label3);
2476 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2477 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2478 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2479 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2481 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2482 &cancel_btn, _("Cancel"), NULL, NULL);
2483 gtk_widget_grab_default(ok_btn);
2484 gtk_widget_show(confirm_area);
2486 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2488 /* set the current format */
2489 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2490 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2493 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2494 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2496 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2497 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2499 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2500 GTK_SIGNAL_FUNC(date_format_key_pressed),
2502 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2503 GTK_SIGNAL_FUNC(date_format_on_delete),
2505 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2506 GTK_SIGNAL_FUNC(date_format_entry_on_change),
2509 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2510 GTK_SIGNAL_FUNC(date_format_select_row),
2513 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2514 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2516 gtk_widget_show(datefmt_win);
2517 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2519 gtk_widget_grab_focus(ok_btn);
2524 void prefs_quote_colors_dialog(void)
2526 if (!quote_color_win)
2527 prefs_quote_colors_dialog_create();
2528 gtk_widget_show(quote_color_win);
2529 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2532 gtk_widget_hide(quote_color_win);
2534 textview_update_message_colors();
2535 main_window_reflect_prefs_all();
2538 static void prefs_quote_colors_dialog_create(void)
2543 GtkWidget *quotelevel1_label;
2544 GtkWidget *quotelevel2_label;
2545 GtkWidget *quotelevel3_label;
2546 GtkWidget *uri_label;
2547 GtkWidget *tgt_folder_label;
2550 //GtkWidget *cancel_btn;
2551 GtkWidget *recycle_colors_btn;
2552 GtkWidget *frame_colors;
2554 window = gtk_window_new(GTK_WINDOW_DIALOG);
2555 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2556 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2557 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2558 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2559 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2561 vbox = gtk_vbox_new (FALSE, VSPACING);
2562 gtk_container_add (GTK_CONTAINER (window), vbox);
2563 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2564 PACK_FRAME(vbox, frame_colors, _("Colors"));
2566 table = gtk_table_new (4, 2, FALSE);
2567 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2568 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2569 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2570 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2573 color_buttons.quote_level1_btn = gtk_button_new();
2574 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2575 0, 1, 0, 1, 0, 0, 0, 0);
2576 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2577 gtk_container_set_border_width
2578 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2580 color_buttons.quote_level2_btn = gtk_button_new();
2581 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2582 0, 1, 1, 2, 0, 0, 0, 0);
2583 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2584 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2586 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2587 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2588 0, 1, 2, 3, 0, 0, 0, 0);
2589 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2590 gtk_container_set_border_width
2591 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2593 color_buttons.uri_btn = gtk_button_new_with_label ("");
2594 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2595 0, 1, 3, 4, 0, 0, 0, 0);
2596 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2597 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2599 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2600 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2601 0, 1, 4, 5, 0, 0, 0, 0);
2602 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
2603 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2605 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2606 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2607 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2608 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2609 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2611 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2612 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2613 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2614 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2615 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2617 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2618 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2619 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2620 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2621 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2623 uri_label = gtk_label_new (_("URI link"));
2624 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2625 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2626 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2627 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2629 tgt_folder_label = gtk_label_new (_("Target folder"));
2630 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
2631 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2632 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
2633 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
2635 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2636 _("Recycle quote colors"));
2638 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2639 NULL, NULL, NULL, NULL);
2640 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2642 gtk_widget_grab_default(ok_btn);
2643 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2644 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2645 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2646 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2647 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2648 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2649 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2650 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2653 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2654 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2655 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2656 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2657 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2658 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2659 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2660 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2661 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
2662 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
2663 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2664 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2665 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2666 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2668 /* show message button colors and recycle options */
2669 set_button_bg_color(color_buttons.quote_level1_btn,
2670 prefs_common.quote_level1_col);
2671 set_button_bg_color(color_buttons.quote_level2_btn,
2672 prefs_common.quote_level2_col);
2673 set_button_bg_color(color_buttons.quote_level3_btn,
2674 prefs_common.quote_level3_col);
2675 set_button_bg_color(color_buttons.uri_btn,
2676 prefs_common.uri_col);
2677 set_button_bg_color(color_buttons.tgt_folder_btn,
2678 prefs_common.tgt_folder_col);
2679 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2680 prefs_common.recycle_quote_colors);
2682 gtk_widget_show_all(vbox);
2683 quote_color_win = window;
2686 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2687 GdkEventKey *event, gpointer data)
2689 if (event && event->keyval == GDK_Escape)
2693 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2695 gchar *type = (gchar *)data;
2696 gchar *title = NULL;
2697 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2699 GtkColorSelectionDialog *dialog;
2701 if(g_strcasecmp(type, "LEVEL1") == 0) {
2702 title = _("Pick color for quotation level 1");
2703 rgbvalue = prefs_common.quote_level1_col;
2704 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2705 title = _("Pick color for quotation level 2");
2706 rgbvalue = prefs_common.quote_level2_col;
2707 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2708 title = _("Pick color for quotation level 3");
2709 rgbvalue = prefs_common.quote_level3_col;
2710 } else if(g_strcasecmp(type, "URI") == 0) {
2711 title = _("Pick color for URI");
2712 rgbvalue = prefs_common.uri_col;
2713 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
2714 title = _("Pick color for target folder");
2715 rgbvalue = prefs_common.tgt_folder_col;
2716 } else { /* Should never be called */
2717 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2721 color_dialog = gtk_color_selection_dialog_new(title);
2722 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2723 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2724 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2725 manage_window_set_transient(GTK_WINDOW(color_dialog));
2727 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2728 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2729 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2730 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2731 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2732 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2735 /* preselect the previous color in the color selection dialog */
2736 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2737 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2738 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2739 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2740 gtk_color_selection_set_color
2741 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2743 gtk_widget_show(color_dialog);
2746 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2748 GtkColorSelection *colorsel = (GtkColorSelection *)
2749 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2751 gint red, green, blue, rgbvalue;
2752 gchar *type = (gchar *)data;
2754 gtk_color_selection_get_color(colorsel, color);
2756 red = (gint) (color[0] * 255.0);
2757 green = (gint) (color[1] * 255.0);
2758 blue = (gint) (color[2] * 255.0);
2759 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2762 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2763 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2764 fprintf(stderr, "Color is %x\n", rgbvalue);
2767 if (g_strcasecmp(type, "LEVEL1") == 0) {
2768 prefs_common.quote_level1_col = rgbvalue;
2769 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2770 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2771 prefs_common.quote_level2_col = rgbvalue;
2772 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2773 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2774 prefs_common.quote_level3_col = rgbvalue;
2775 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2776 } else if (g_strcasecmp(type, "URI") == 0) {
2777 prefs_common.uri_col = rgbvalue;
2778 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2779 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
2780 prefs_common.tgt_folder_col = rgbvalue;
2781 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
2782 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
2784 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2786 gtk_widget_destroy(color_dialog);
2789 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2791 gtk_widget_destroy(color_dialog);
2794 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
2798 gtk_widget_destroy(color_dialog);
2801 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2806 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2807 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2808 newstyle->bg[GTK_STATE_NORMAL] = color;
2809 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2810 newstyle->bg[GTK_STATE_ACTIVE] = color;
2812 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2815 static void prefs_enable_message_color_toggled(void)
2819 is_active = gtk_toggle_button_get_active
2820 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2821 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2822 prefs_common.enable_color = is_active;
2825 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2829 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2830 prefs_common.recycle_quote_colors = is_active;
2833 static void prefs_quote_description(void)
2835 if (!quote_desc_win)
2836 prefs_quote_description_create();
2838 gtk_widget_show(quote_desc_win);
2840 gtk_widget_hide(quote_desc_win);
2843 static void prefs_quote_description_create(void)
2851 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2852 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2853 _("Description of symbols"));
2854 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2855 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2856 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2857 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2859 vbox = gtk_vbox_new(FALSE, 8);
2860 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2862 hbox = gtk_hbox_new(FALSE, 4);
2863 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2865 label = gtk_label_new
2869 "%N\n" /* full name */
2870 "%F\n" /* first name */
2871 "%I\n" /* sender's initial */
2872 "%s\n" /* subject line */
2875 "%n\n" /* newsgroups */
2876 "%i\n" /* message id */
2877 "%r\n" /* references */
2888 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2889 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2891 label = gtk_label_new
2892 (_("DESCRIPTION\n\n"
2895 "Full Name of Sender\n"
2896 "First Name of Sender\n"
2897 "Initial of Sender\n"
2905 "Display the information\n"
2906 "If the information x is set, displays expr\n"
2909 "Quoted message body\n"
2910 "Message body without signature\n"
2911 "Quoted message body without signature\n"
2914 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2915 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2917 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2918 NULL, NULL, NULL, NULL);
2919 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2921 gtk_widget_grab_default(ok_btn);
2922 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2923 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2925 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2926 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2928 gtk_widget_show_all(vbox);
2931 /* functions for setting items of SummaryView */
2933 static struct _SummaryDisplayItem
2937 GtkWidget *chkbtn[N_SUMMARY_COLS];
2940 GtkWidget *cancel_btn;
2943 #define SET_ACTIVE(column, var) \
2944 gtk_toggle_button_set_active \
2945 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2947 #define GET_ACTIVE(column, var) \
2948 prefs_common.var = gtk_toggle_button_get_active \
2949 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2951 void prefs_summary_display_item_set(void)
2953 static gboolean cancelled;
2955 if (!summarydispitem.window)
2956 prefs_summary_display_item_dialog_create(&cancelled);
2957 gtk_widget_grab_focus(summarydispitem.ok_btn);
2958 gtk_widget_show(summarydispitem.window);
2959 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2961 SET_ACTIVE(S_COL_MARK, show_mark);
2962 SET_ACTIVE(S_COL_UNREAD, show_unread);
2963 SET_ACTIVE(S_COL_MIME, show_mime);
2964 SET_ACTIVE(S_COL_NUMBER, show_number);
2965 SET_ACTIVE(S_COL_SCORE, show_score);
2966 SET_ACTIVE(S_COL_SIZE, show_size);
2967 SET_ACTIVE(S_COL_DATE, show_date);
2968 SET_ACTIVE(S_COL_FROM, show_from);
2969 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2972 gtk_widget_hide(summarydispitem.window);
2974 if (cancelled != TRUE) {
2975 GET_ACTIVE(S_COL_MARK, show_mark);
2976 GET_ACTIVE(S_COL_UNREAD, show_unread);
2977 GET_ACTIVE(S_COL_MIME, show_mime);
2978 GET_ACTIVE(S_COL_NUMBER, show_number);
2979 GET_ACTIVE(S_COL_SCORE, show_score);
2980 GET_ACTIVE(S_COL_SIZE, show_size);
2981 GET_ACTIVE(S_COL_DATE, show_date);
2982 GET_ACTIVE(S_COL_FROM, show_from);
2983 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2985 main_window_reflect_prefs_all();
2989 #define SET_CHECK_BUTTON(column, label) \
2991 summarydispitem.chkbtn[column] = \
2992 gtk_check_button_new_with_label(label); \
2993 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2994 summarydispitem.chkbtn[column], \
2998 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
3002 GtkWidget *chkbtn_vbox;
3005 GtkWidget *cancel_btn;
3007 window = gtk_window_new(GTK_WINDOW_DIALOG);
3008 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
3009 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
3010 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3011 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3012 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3013 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3014 GTK_SIGNAL_FUNC(display_item_delete_event),
3016 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3017 GTK_SIGNAL_FUNC(display_item_key_pressed),
3020 vbox = gtk_vbox_new(FALSE, 8);
3021 gtk_container_add(GTK_CONTAINER(window), vbox);
3023 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
3024 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
3026 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
3027 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
3028 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
3029 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
3030 SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
3031 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
3032 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
3033 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
3034 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
3036 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3037 &cancel_btn, _("Cancel"), NULL, NULL);
3038 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3039 gtk_widget_grab_default(ok_btn);
3041 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3042 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
3043 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
3044 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
3046 gtk_widget_show_all(vbox);
3048 summarydispitem.window = window;
3049 summarydispitem.ok_btn = ok_btn;
3050 summarydispitem.cancel_btn = cancel_btn;
3053 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
3059 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
3065 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
3066 gboolean *cancelled)
3074 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
3075 gboolean *cancelled)
3077 if (event && event->keyval == GDK_Escape) {
3083 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3087 g_return_if_fail(entry != NULL);
3089 if (!font_sel_win) {
3090 font_sel_win = gtk_font_selection_dialog_new
3091 (_("Font selection"));
3092 gtk_window_position(GTK_WINDOW(font_sel_win),
3093 GTK_WIN_POS_CENTER);
3094 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3095 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3098 (GTK_OBJECT(font_sel_win), "key_press_event",
3099 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3101 gtk_signal_connect_object
3102 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3104 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3105 GTK_OBJECT(font_sel_win));
3108 if(font_sel_conn_id) {
3109 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3111 font_sel_conn_id = gtk_signal_connect
3112 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3114 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3116 printf("%i\n", font_sel_conn_id);
3118 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3119 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3121 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3122 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3123 gtk_widget_grab_focus
3124 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3125 gtk_widget_show(font_sel_win);
3128 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3132 if (event && event->keyval == GDK_Escape)
3133 gtk_widget_hide(font_sel_win);
3136 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3140 fontname = gtk_font_selection_dialog_get_font_name
3141 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3144 gtk_entry_set_text(entry, fontname);
3149 gtk_widget_hide(font_sel_win);
3152 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3155 GtkWidget *menuitem;
3158 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3159 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3160 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3161 g_free(*((gchar **)pparam->data));
3162 *((gchar **)pparam->data) = g_strdup(charset);
3165 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3168 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3170 GtkWidget *menuitem;
3174 g_return_if_fail(optmenu != NULL);
3175 g_return_if_fail(*((gchar **)pparam->data) != NULL);
3177 menu = gtk_option_menu_get_menu(optmenu);
3178 for (cur = GTK_MENU_SHELL(menu)->children;
3179 cur != NULL; cur = cur->next) {
3180 menuitem = GTK_WIDGET(cur->data);
3181 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3182 if (!strcmp(charset, *((gchar **)pparam->data))) {
3183 gtk_option_menu_set_history(optmenu, n);
3189 gtk_option_menu_set_history(optmenu, 0);
3190 prefs_common_charset_set_data_from_optmenu(pparam);
3193 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3196 GtkWidget *menuitem;
3198 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3199 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3200 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3201 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3204 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3206 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3207 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3209 GtkWidget *menuitem;
3212 case RECV_DIALOG_ALWAYS:
3213 gtk_option_menu_set_history(optmenu, 0);
3215 case RECV_DIALOG_ACTIVE:
3216 gtk_option_menu_set_history(optmenu, 1);
3218 case RECV_DIALOG_NEVER:
3219 gtk_option_menu_set_history(optmenu, 2);
3224 menu = gtk_option_menu_get_menu(optmenu);
3225 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3226 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3229 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3232 prefs_common_cancel();
3236 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3239 if (event && event->keyval == GDK_Escape)
3240 prefs_common_cancel();
3243 static void prefs_common_ok(void)
3245 prefs_common_apply();
3246 gtk_widget_hide(dialog.window);
3247 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
3248 gtk_widget_hide(quote_desc_win);
3253 static void prefs_common_apply(void)
3255 prefs_set_data_from_dialog(param);
3256 main_window_reflect_prefs_all();
3257 prefs_common_save_config();
3259 inc_autocheck_timer_remove();
3260 inc_autocheck_timer_set();
3263 static void prefs_common_cancel(void)
3265 gtk_widget_hide(dialog.window);
3270 static struct _ComposePrefs
3274 GtkWidget *close_btn;
3277 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
3278 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
3279 static void compose_prefs_close(GtkWidget *widget);
3280 static void compose_prefs_fmt_create(void);
3282 static void compose_prefs_fmt_open(void)
3284 if (composeprefs.window == NULL)
3285 compose_prefs_fmt_create();
3286 gtk_widget_show(composeprefs.window);
3290 static void compose_prefs_fmt_create(void)
3293 GtkWidget *close_btn;
3295 GtkWidget *frame_quote;
3296 GtkWidget *vbox_quote;
3298 GtkWidget *checkbtn_quote;
3299 GtkWidget *label_quotemark;
3300 GtkWidget *entry_quotemark;
3301 GtkWidget *scrolledwin_quotefmt;
3302 GtkWidget *text_quotefmt;
3303 GtkWidget *label_quotefmt;
3304 GtkWidget *btn_quotedesc;
3306 GtkWidget *label_fw_quotemark;
3307 GtkWidget *entry_fw_quotemark;
3308 GtkWidget *label_fw_quotefmt;
3309 GtkWidget *text_fw_quotefmt;
3311 window = gtk_window_new(GTK_WINDOW_DIALOG);
3312 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
3313 gtk_window_set_title(GTK_WINDOW(window), _("Compose Preferences"));
3314 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3315 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3316 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3317 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3318 GTK_SIGNAL_FUNC(compose_prefs_delete_event),
3320 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3321 GTK_SIGNAL_FUNC(compose_prefs_key_pressed),
3324 vbox_quote = gtk_vbox_new(FALSE, 8);
3325 gtk_container_add(GTK_CONTAINER(window), vbox_quote);
3327 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
3328 _("Quote message when replying"));
3330 hbox1 = gtk_hbox_new (FALSE, 8);
3331 gtk_widget_show (hbox1);
3332 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3334 label_quotemark = gtk_label_new (_("Quotation mark"));
3335 gtk_widget_show (label_quotemark);
3336 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
3338 entry_quotemark = gtk_entry_new ();
3339 gtk_widget_show (entry_quotemark);
3340 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
3341 gtk_widget_set_usize (entry_quotemark, 64, -1);
3343 hbox1 = gtk_hbox_new (FALSE, 0);
3344 gtk_widget_show (hbox1);
3345 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3347 label_quotefmt = gtk_label_new (_("Quotation format:"));
3348 gtk_widget_show (label_quotefmt);
3349 gtk_box_pack_start (GTK_BOX (hbox1), label_quotefmt, FALSE, FALSE, 0);
3351 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3352 gtk_widget_show (scrolledwin_quotefmt);
3353 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3354 gtk_scrolled_window_set_policy
3355 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3356 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3358 text_quotefmt = gtk_text_new (NULL, NULL);
3359 gtk_widget_show (text_quotefmt);
3360 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
3361 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
3362 gtk_widget_set_usize(text_quotefmt, 400, 60);
3364 hbox1 = gtk_hbox_new (FALSE, 8);
3365 gtk_widget_show (hbox1);
3366 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3368 label_fw_quotemark = gtk_label_new (_("Forward quotation mark"));
3369 gtk_widget_show (label_fw_quotemark);
3370 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotemark, FALSE, FALSE, 0);
3372 entry_fw_quotemark = gtk_entry_new ();
3373 gtk_widget_show (entry_fw_quotemark);
3374 gtk_box_pack_start (GTK_BOX (hbox1), entry_fw_quotemark, FALSE, FALSE, 0);
3375 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
3377 hbox1 = gtk_hbox_new (FALSE, 0);
3378 gtk_widget_show (hbox1);
3379 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3381 label_fw_quotefmt = gtk_label_new (_("Forward format:"));
3382 gtk_widget_show (label_fw_quotefmt);
3383 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotefmt, FALSE, FALSE, 0);
3385 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3386 gtk_widget_show (scrolledwin_quotefmt);
3387 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3388 gtk_scrolled_window_set_policy
3389 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3390 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3392 text_fw_quotefmt = gtk_text_new (NULL, NULL);
3393 gtk_widget_show (text_fw_quotefmt);
3394 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt);
3395 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
3396 gtk_widget_set_usize(text_fw_quotefmt, 400, 60);
3398 hbox1 = gtk_hbox_new (FALSE, 0);
3399 gtk_widget_show (hbox1);
3400 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
3403 gtk_button_new_with_label (_(" Description of symbols "));
3404 gtk_widget_show (btn_quotedesc);
3405 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc,
3408 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
3409 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
3412 gtkut_button_set_create(&hbox1, &close_btn, _("Close"),
3413 NULL, NULL, NULL, NULL);
3414 gtk_box_pack_end(GTK_BOX(vbox_quote), hbox1, FALSE, FALSE, 0);
3415 gtk_widget_grab_default(close_btn);
3417 gtk_signal_connect(GTK_OBJECT(close_btn), "clicked",
3418 GTK_SIGNAL_FUNC(compose_prefs_close), NULL);
3420 gtk_widget_show_all(vbox_quote);
3422 composeprefs.window = window;
3423 composeprefs.close_btn = close_btn;
3425 compose.checkbtn_quote = checkbtn_quote;
3426 compose.entry_quotemark = entry_quotemark;
3427 compose.text_quotefmt = text_quotefmt;
3428 compose.entry_fw_quotemark = entry_fw_quotemark;
3429 compose.text_fw_quotefmt = text_fw_quotefmt;
3432 static void compose_prefs_close(GtkWidget *widget)
3434 gtk_widget_hide(composeprefs.window);
3437 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3439 gtk_widget_hide(composeprefs.window);
3444 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3446 if (event && event->keyval == GDK_Escape) {
3447 gtk_widget_hide(composeprefs.window);
3451 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3454 GtkWidget *menuitem;
3456 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3457 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3458 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3459 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3462 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3464 RecvDialogShow dialog_show;
3465 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3467 GtkWidget *menuitem;
3469 dialog_show = *((RecvDialogShow *)pparam->data);
3471 switch (dialog_show) {
3472 case RECVDIALOG_ALWAYS:
3473 gtk_option_menu_set_history(optmenu, 0);
3475 case RECVDIALOG_WINDOW_ACTIVE:
3476 gtk_option_menu_set_history(optmenu, 1);
3478 case RECVDIALOG_NEVER:
3479 gtk_option_menu_set_history(optmenu, 2);
3484 menu = gtk_option_menu_get_menu(optmenu);
3485 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3486 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));