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_sendext;
84 GtkWidget *entry_sendext;
85 GtkWidget *button_sendext;
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_reply_account_autosel;
106 GtkWidget *checkbtn_forward_account_autosel;
107 GtkWidget *checkbtn_reedit_account_autosel;
109 GtkWidget *spinbtn_linewrap;
110 GtkObject *spinbtn_linewrap_adj;
111 GtkWidget *checkbtn_wrapquote;
112 GtkWidget *checkbtn_wrapatsend;
114 GtkWidget * checkbtn_forward_as_attachment;
115 GtkWidget * checkbtn_smart_wrapping;
118 GtkWidget *checkbtn_enable_ispell;
119 GtkWidget *entry_ispell_path;
120 GtkWidget *btn_ispell_path;
121 GtkWidget *optmenu_dictionary_path;
124 static struct Display {
125 GtkWidget *entry_textfont;
126 GtkWidget *button_textfont;
128 GtkWidget *entry_smallfont;
129 GtkWidget *entry_normalfont;
130 GtkWidget *entry_boldfont;
132 GtkWidget *chkbtn_folder_unread;
134 GtkWidget *chkbtn_transhdr;
136 GtkWidget *chkbtn_swapfrom;
137 GtkWidget *chkbtn_hscrollbar;
138 GtkWidget *chkbtn_useaddrbook;
139 GtkWidget *chkbtn_expand_thread;
140 GtkWidget *chkbtn_bold_unread;
142 GtkWidget *entry_datefmt;
145 static struct Message {
146 GtkWidget *chkbtn_enablecol;
147 GtkWidget *button_edit_col;
148 GtkWidget *chkbtn_mbalnum;
149 GtkWidget *chkbtn_disphdrpane;
150 GtkWidget *chkbtn_disphdr;
151 GtkWidget *spinbtn_linespc;
152 GtkObject *spinbtn_linespc_adj;
153 GtkWidget *chkbtn_headspc;
155 GtkWidget *chkbtn_smoothscroll;
156 GtkWidget *spinbtn_scrollstep;
157 GtkObject *spinbtn_scrollstep_adj;
158 GtkWidget *chkbtn_halfpage;
162 static struct Privacy {
163 GtkWidget *checkbtn_default_encrypt;
164 GtkWidget *checkbtn_default_sign;
165 GtkWidget *checkbtn_auto_check_signatures;
166 GtkWidget *checkbtn_gpg_signature_popup;
167 GtkWidget *checkbtn_passphrase_grab;
168 GtkWidget *checkbtn_gpg_warning;
169 GtkWidget *optmenu_default_signkey;
173 static struct Interface {
174 /* GtkWidget *checkbtn_emacs; */
175 GtkWidget *checkbtn_openunread;
176 GtkWidget *checkbtn_openinbox;
177 GtkWidget *checkbtn_immedexec;
178 GtkWidget *checkbtn_confonexit;
179 GtkWidget *checkbtn_cleanonexit;
180 GtkWidget *checkbtn_askonclean;
181 GtkWidget *checkbtn_warnqueued;
182 GtkWidget *checkbtn_addaddrbyclick;
183 GtkWidget *optmenu_recvdialog;
186 static struct Other {
187 GtkWidget *uri_combo;
188 GtkWidget *uri_entry;
189 GtkWidget *printcmd_entry;
190 GtkWidget *exteditor_combo;
191 GtkWidget *exteditor_entry;
194 static struct MessageColorButtons {
195 GtkWidget *quote_level1_btn;
196 GtkWidget *quote_level2_btn;
197 GtkWidget *quote_level3_btn;
199 GtkWidget *tgt_folder_btn;
202 static GtkWidget *quote_desc_win;
203 static GtkWidget *font_sel_win;
204 static guint font_sel_conn_id;
205 static GtkWidget *quote_color_win;
206 static GtkWidget *color_dialog;
208 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
209 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
211 static void prefs_common_default_signkey_set_data_from_optmenu
213 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
215 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
216 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
218 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param);
219 static void prefs_dictionary_set_optmenu(PrefParam *pparam);
223 parameter name, default value, pointer to the prefs variable, data type,
224 pointer to the widget pointer,
225 pointer to the function for data setting,
226 pointer to the function for widget setting
229 static PrefParam param[] = {
231 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
232 &receive.checkbtn_incext,
233 prefs_set_data_from_toggle, prefs_set_toggle},
234 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
235 &receive.entry_incext,
236 prefs_set_data_from_entry, prefs_set_entry},
238 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
239 &receive.checkbtn_local,
240 prefs_set_data_from_toggle, prefs_set_toggle},
241 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
242 &receive.checkbtn_filter_on_inc,
243 prefs_set_data_from_toggle, prefs_set_toggle},
244 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
245 &receive.entry_spool,
246 prefs_set_data_from_entry, prefs_set_entry},
248 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
249 &receive.checkbtn_autochk,
250 prefs_set_data_from_toggle, prefs_set_toggle},
251 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
252 &receive.spinbtn_autochk,
253 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
254 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
255 &receive.checkbtn_chkonstartup,
256 prefs_set_data_from_toggle, prefs_set_toggle},
257 {"noerrorpanel", "FALSE", &prefs_common.noerrorpanel, P_BOOL,
258 &receive.checkbtn_noerrorpanel,
259 prefs_set_data_from_toggle, prefs_set_toggle},
260 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
261 P_BOOL, &receive.checkbtn_scan_after_inc,
262 prefs_set_data_from_toggle, prefs_set_toggle},
263 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
264 &receive.spinbtn_maxarticle,
265 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
268 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
269 &send.checkbtn_sendext,
270 prefs_set_data_from_toggle, prefs_set_toggle},
271 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
272 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
273 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
274 &send.checkbtn_savemsg,
275 prefs_set_data_from_toggle, prefs_set_toggle},
276 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
277 &send.checkbtn_queuemsg,
278 prefs_set_data_from_toggle, prefs_set_toggle},
280 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
281 &send.optmenu_charset,
282 prefs_common_charset_set_data_from_optmenu,
283 prefs_common_charset_set_optmenu},
286 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
287 &compose.checkbtn_quote,
288 prefs_set_data_from_toggle, prefs_set_toggle},
289 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
290 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
291 {"quote_format", "On %d\\n%f wrote:\\n\\n%Q",
293 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
294 prefs_set_data_from_text, prefs_set_text},
295 {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
296 &compose.entry_fw_quotemark, prefs_set_data_from_entry, prefs_set_entry},
297 {"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",
298 &prefs_common.fw_quotefmt, P_STRING, &compose.text_fw_quotefmt,
299 prefs_set_data_from_text, prefs_set_text},
301 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
302 &compose.checkbtn_autosig,
303 prefs_set_data_from_toggle, prefs_set_toggle},
304 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
305 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
307 {"reply_account_autoselect", "TRUE",
308 &prefs_common.reply_account_autosel, P_BOOL,
309 &compose.checkbtn_reply_account_autosel,
310 prefs_set_data_from_toggle, prefs_set_toggle},
311 {"forward_account_autoselect", "TRUE",
312 &prefs_common.forward_account_autosel, P_BOOL,
313 &compose.checkbtn_forward_account_autosel,
314 prefs_set_data_from_toggle, prefs_set_toggle},
315 {"reedit_account_autoselect", "TRUE",
316 &prefs_common.reedit_account_autosel, P_BOOL,
317 &compose.checkbtn_reedit_account_autosel,
318 prefs_set_data_from_toggle, prefs_set_toggle},
320 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
321 &compose.spinbtn_linewrap,
322 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
323 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
324 &compose.checkbtn_wrapquote,
325 prefs_set_data_from_toggle, prefs_set_toggle},
326 {"linewrap_before_sending", "FALSE",
327 &prefs_common.linewrap_at_send, P_BOOL,
328 &compose.checkbtn_wrapatsend,
329 prefs_set_data_from_toggle, prefs_set_toggle},
330 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
331 P_BOOL, &compose.checkbtn_forward_as_attachment,
332 prefs_set_data_from_toggle, prefs_set_toggle},
333 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
334 P_BOOL, &compose.checkbtn_smart_wrapping,
335 prefs_set_data_from_toggle, prefs_set_toggle},
336 {"enable_ispell", "TRUE", &prefs_common.enable_ispell,
337 P_BOOL, &compose.checkbtn_enable_ispell,
338 prefs_set_data_from_toggle, prefs_set_toggle},
339 {"ispell_path", ISPELL_PATH, &prefs_common.ispell_path,
340 P_STRING, &compose.entry_ispell_path,
341 prefs_set_data_from_entry, prefs_set_entry},
342 {"dictionary_path", "", &prefs_common.dictionary_path,
343 P_STRING, &compose.optmenu_dictionary_path,
344 prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
346 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
350 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
352 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
353 &prefs_common.textfont, P_STRING,
354 &display.entry_textfont,
355 prefs_set_data_from_entry, prefs_set_entry},
356 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
357 &prefs_common.smallfont, P_STRING,
358 &display.entry_smallfont,
359 prefs_set_data_from_entry, prefs_set_entry},
360 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
361 &prefs_common.boldfont, P_STRING,
362 &display.entry_boldfont,
363 prefs_set_data_from_entry, prefs_set_entry},
364 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
365 &prefs_common.normalfont, P_STRING,
366 &display.entry_normalfont,
367 prefs_set_data_from_entry, prefs_set_entry},
370 {"display_folder_unread_num", "TRUE",
371 &prefs_common.display_folder_unread, P_BOOL,
372 &display.chkbtn_folder_unread,
373 prefs_set_data_from_toggle, prefs_set_toggle},
375 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
376 &display.chkbtn_transhdr,
377 prefs_set_data_from_toggle, prefs_set_toggle},
379 /* Display: Summary View */
380 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
381 &display.chkbtn_swapfrom,
382 prefs_set_data_from_toggle, prefs_set_toggle},
383 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
384 &display.chkbtn_hscrollbar,
385 prefs_set_data_from_toggle, prefs_set_toggle},
386 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
387 &display.chkbtn_useaddrbook,
388 prefs_set_data_from_toggle, prefs_set_toggle},
389 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
390 P_STRING, &display.entry_datefmt,
391 prefs_set_data_from_entry, prefs_set_entry},
392 {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
393 &display.chkbtn_expand_thread,
394 prefs_set_data_from_toggle, prefs_set_toggle},
395 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
396 &display.chkbtn_bold_unread,
397 prefs_set_data_from_toggle, prefs_set_toggle},
399 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
402 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
404 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
407 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
409 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
411 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
413 {"show_number", "FALSE", &prefs_common.show_number, P_BOOL,
415 {"show_score", "TRUE", &prefs_common.show_score, P_BOOL,
417 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
419 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
421 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
423 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
427 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
429 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
431 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
433 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
435 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
437 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
439 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
441 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
443 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
445 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
447 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
449 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
451 {"summary_col_score", "40", &prefs_common.summary_col_score,
452 P_INT, NULL, NULL, NULL},
453 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
455 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
457 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
459 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
460 P_INT, NULL, NULL, NULL},
461 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
463 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
465 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
467 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
469 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
471 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
473 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
475 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
477 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
479 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
481 {"compose_width", "600", &prefs_common.compose_width, P_INT,
483 {"compose_height", "560", &prefs_common.compose_height, P_INT,
487 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
488 &message.chkbtn_enablecol,
489 prefs_set_data_from_toggle, prefs_set_toggle},
491 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
493 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
495 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
497 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
499 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
501 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
503 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
504 P_BOOL, NULL, NULL, NULL},
506 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
507 &message.chkbtn_mbalnum,
508 prefs_set_data_from_toggle, prefs_set_toggle},
509 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
510 P_BOOL, &message.chkbtn_disphdrpane,
511 prefs_set_data_from_toggle, prefs_set_toggle},
512 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
513 &message.chkbtn_disphdr,
514 prefs_set_data_from_toggle, prefs_set_toggle},
515 {"line_space", "2", &prefs_common.line_space, P_INT,
516 &message.spinbtn_linespc,
517 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
518 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
519 &message.chkbtn_headspc,
520 prefs_set_data_from_toggle, prefs_set_toggle},
522 {"enable_smooth_scroll", "FALSE",
523 &prefs_common.enable_smooth_scroll, P_BOOL,
524 &message.chkbtn_smoothscroll,
525 prefs_set_data_from_toggle, prefs_set_toggle},
526 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
527 &message.spinbtn_scrollstep,
528 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
529 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
530 &message.chkbtn_halfpage,
531 prefs_set_data_from_toggle, prefs_set_toggle},
533 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
537 {"mime_image_viewer", "display '%s'",
538 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
539 {"mime_audio_player", "play '%s'",
540 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
544 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
545 &privacy.checkbtn_default_encrypt,
546 prefs_set_data_from_toggle, prefs_set_toggle},
547 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
548 &privacy.checkbtn_default_sign,
549 prefs_set_data_from_toggle, prefs_set_toggle},
550 {"auto_check_signatures", "TRUE",
551 &prefs_common.auto_check_signatures, P_BOOL,
552 &privacy.checkbtn_auto_check_signatures,
553 prefs_set_data_from_toggle, prefs_set_toggle},
554 {"gpg_signature_popup", "FALSE",
555 &prefs_common.gpg_signature_popup, P_BOOL,
556 &privacy.checkbtn_gpg_signature_popup,
557 prefs_set_data_from_toggle, prefs_set_toggle},
559 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
560 &privacy.checkbtn_passphrase_grab,
561 prefs_set_data_from_toggle, prefs_set_toggle},
562 #endif /* __MINGW32__ */
563 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
564 &privacy.checkbtn_gpg_warning,
565 prefs_set_data_from_toggle, prefs_set_toggle},
566 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
567 &privacy.optmenu_default_signkey,
568 prefs_common_default_signkey_set_data_from_optmenu,
569 prefs_common_default_signkey_set_optmenu},
570 #endif /* USE_GPGME */
573 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
575 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
578 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
579 NULL, NULL, NULL}, */
581 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
582 P_BOOL, &interface.checkbtn_openunread,
583 prefs_set_data_from_toggle, prefs_set_toggle},
584 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
585 P_BOOL, &interface.checkbtn_openinbox,
586 prefs_set_data_from_toggle, prefs_set_toggle},
587 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
588 &interface.checkbtn_immedexec,
589 prefs_set_data_from_toggle, prefs_set_toggle},
590 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
591 &interface.optmenu_recvdialog,
592 prefs_common_recv_dialog_set_data_from_optmenu,
593 prefs_common_recv_dialog_set_optmenu},
595 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
596 P_BOOL, &interface.checkbtn_addaddrbyclick,
597 prefs_set_data_from_toggle, prefs_set_toggle},
598 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
599 &interface.checkbtn_confonexit,
600 prefs_set_data_from_toggle, prefs_set_toggle},
601 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
602 &send.checkbtn_returnreceipt,
603 prefs_set_data_from_toggle, prefs_set_toggle},
604 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
605 &interface.checkbtn_cleanonexit,
606 prefs_set_data_from_toggle, prefs_set_toggle},
607 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
608 &interface.checkbtn_askonclean,
609 prefs_set_data_from_toggle, prefs_set_toggle},
610 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
611 P_BOOL, &interface.checkbtn_warnqueued,
612 prefs_set_data_from_toggle, prefs_set_toggle},
615 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
616 &prefs_common.uri_cmd, P_STRING,
617 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
618 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
619 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
620 {"ext_editor_command", "gedit %s",
621 &prefs_common.ext_editor_cmd, P_STRING,
622 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
624 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
626 {"important_score", "1", &prefs_common.important_score, P_INT,
629 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
633 #define VSPACING_NARROW 3
635 #define VBOX_BORDER 16
636 #define DEFAULT_ENTRY_WIDTH 80
637 #define PREFSBUFSIZE 1024
639 /* widget creating functions */
640 static void prefs_common_create (void);
641 static void prefs_receive_create (void);
642 static void prefs_send_create (void);
643 static void prefs_compose_create (void);
644 static void prefs_display_create (void);
645 static void prefs_message_create (void);
647 static void prefs_privacy_create (void);
649 static void prefs_interface_create (void);
650 static void prefs_other_create (void);
652 static void date_format_ok_btn_clicked (GtkButton *button,
654 static void date_format_cancel_btn_clicked (GtkButton *button,
656 static void date_format_key_pressed (GtkWidget *keywidget,
659 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
662 static void date_format_entry_on_change (GtkEditable *editable,
664 static void date_format_select_row (GtkWidget *date_format_list,
667 GdkEventButton *event,
668 GtkWidget *date_format);
669 static GtkWidget *date_format_create (GtkButton *button,
672 static void prefs_quote_description (void);
673 static void prefs_quote_description_create (void);
674 static void prefs_quote_colors_dialog (void);
675 static void prefs_quote_colors_dialog_create (void);
676 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
679 static void quote_color_set_dialog (GtkWidget *widget,
681 static void quote_colors_set_dialog_ok (GtkWidget *widget,
683 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
685 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
688 static void set_button_bg_color (GtkWidget *widget,
690 static void prefs_enable_message_color_toggled (void);
691 static void prefs_recycle_colors_toggled (GtkWidget *widget);
693 /* functions for setting items of SummaryView */
694 static void prefs_summary_display_item_dialog_create
695 (gboolean *cancelled);
696 static void display_item_ok (GtkWidget *widget,
697 gboolean *cancelled);
698 static void display_item_cancel (GtkWidget *widget,
699 gboolean *cancelled);
700 static gint display_item_delete_event (GtkWidget *widget,
702 gboolean *cancelled);
703 static void display_item_key_pressed (GtkWidget *widget,
705 gboolean *cancelled);
707 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
709 static void prefs_font_selection_key_pressed (GtkWidget *widget,
712 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
714 static gint prefs_common_deleted (GtkWidget *widget,
717 static void prefs_common_key_pressed (GtkWidget *widget,
720 static void prefs_common_ok (void);
721 static void prefs_common_apply (void);
722 static void prefs_common_cancel (void);
724 static void compose_prefs_fmt_open(void);
725 static void compose_prefs_fmt_create(void);
727 void prefs_common_read_config(void)
729 prefs_read_config(param, "Common", COMMON_RC);
732 void prefs_common_save_config(void)
734 prefs_save_config(param, "Common", COMMON_RC);
737 void prefs_common_open(void)
739 if (prefs_rc_is_readonly(COMMON_RC))
742 inc_autocheck_timer_remove();
744 if (!dialog.window) {
745 prefs_common_create();
748 manage_window_set_transient(GTK_WINDOW(dialog.window));
749 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
750 gtk_widget_grab_focus(dialog.ok_btn);
752 prefs_set_dialog(param);
754 gtk_widget_show(dialog.window);
757 static void prefs_common_create(void)
761 debug_print(_("Creating common preferences window...\n"));
763 prefs_dialog_create(&dialog);
764 gtk_window_set_title (GTK_WINDOW(dialog.window),
765 _("Common Preferences"));
766 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
767 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
768 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
769 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
770 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
771 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
772 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
773 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
774 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
775 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
776 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
777 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
778 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
779 GTK_SIGNAL_FUNC(prefs_common_cancel),
780 GTK_OBJECT(dialog.window));
782 /* create all widgets on notebook */
783 prefs_receive_create();
784 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
786 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
787 prefs_compose_create();
788 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
789 prefs_display_create();
790 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
791 prefs_message_create();
792 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
794 prefs_privacy_create();
795 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
797 prefs_interface_create();
798 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
799 prefs_other_create();
800 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
802 compose_prefs_fmt_create();
804 gtk_widget_show_all(dialog.window);
807 static void prefs_receive_create(void)
811 GtkWidget *frame_incext;
812 GtkWidget *checkbtn_incext;
814 GtkWidget *label_incext;
815 GtkWidget *entry_incext;
816 GtkWidget *button_incext;
818 GtkWidget *frame_spool;
819 GtkWidget *checkbtn_local;
820 GtkWidget *checkbtn_filter_on_inc;
821 GtkWidget *label_spool;
822 GtkWidget *entry_spool;
824 GtkWidget *hbox_autochk;
825 GtkWidget *checkbtn_autochk;
826 GtkWidget *label_autochk1;
827 GtkObject *spinbtn_autochk_adj;
828 GtkWidget *spinbtn_autochk;
829 GtkWidget *label_autochk2;
830 GtkWidget *checkbtn_chkonstartup;
831 GtkWidget *checkbtn_noerrorpanel;
832 GtkWidget *checkbtn_scan_after_inc;
835 GtkWidget *frame_news;
836 GtkWidget *label_maxarticle;
837 GtkWidget *spinbtn_maxarticle;
838 GtkObject *spinbtn_maxarticle_adj;
840 vbox1 = gtk_vbox_new (FALSE, VSPACING);
841 gtk_widget_show (vbox1);
842 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
843 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
845 PACK_FRAME(vbox1, frame_incext, _("External program"));
847 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
848 gtk_widget_show (vbox2);
849 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
850 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
852 /* Use of external incorporation program */
853 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
854 _("Use external program for incorporation"));
856 hbox = gtk_hbox_new (FALSE, 8);
857 gtk_widget_show (hbox);
858 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
859 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
861 label_incext = gtk_label_new (_("Program path"));
862 gtk_widget_show (label_incext);
863 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
865 entry_incext = gtk_entry_new ();
866 gtk_widget_show (entry_incext);
867 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
869 button_incext = gtk_button_new_with_label ("... ");
871 gtk_widget_show (button_incext);
872 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
874 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
876 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
877 gtk_widget_show (vbox2);
878 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
879 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
881 hbox = gtk_hbox_new (FALSE, 32);
882 gtk_widget_show (hbox);
883 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
885 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
886 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
887 _("Filter on incorporation"));
888 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
890 hbox = gtk_hbox_new (FALSE, 8);
891 gtk_widget_show (hbox);
892 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
893 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
895 label_spool = gtk_label_new (_("Spool directory"));
896 gtk_widget_show (label_spool);
897 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
899 entry_spool = gtk_entry_new ();
900 gtk_widget_show (entry_spool);
901 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
903 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
904 gtk_widget_show (vbox2);
905 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
908 hbox_autochk = gtk_hbox_new (FALSE, 8);
909 gtk_widget_show (hbox_autochk);
910 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
912 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
913 _("Auto-check new mail"));
915 label_autochk1 = gtk_label_new (_("each"));
916 gtk_widget_show (label_autochk1);
917 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
919 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
920 spinbtn_autochk = gtk_spin_button_new
921 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
922 gtk_widget_show (spinbtn_autochk);
923 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
924 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
925 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
927 label_autochk2 = gtk_label_new (_("minute(s)"));
928 gtk_widget_show (label_autochk2);
929 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
931 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
932 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
933 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
935 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
936 _("Check new mail on startup"));
938 PACK_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel,
939 _("No error popup on receive error"));
940 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
941 _("Update all local folders after incorporation"));
944 PACK_FRAME(vbox1, frame_news, _("News"));
946 hbox = gtk_hbox_new (FALSE, 8);
947 gtk_widget_show (hbox);
948 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
949 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
951 label_maxarticle = gtk_label_new
952 (_("Maximum article number to download\n"
953 "(unlimited if 0 is specified)"));
954 gtk_widget_show (label_maxarticle);
955 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
956 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
958 spinbtn_maxarticle_adj =
959 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
960 spinbtn_maxarticle = gtk_spin_button_new
961 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
962 gtk_widget_show (spinbtn_maxarticle);
963 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
965 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
966 gtk_spin_button_set_numeric
967 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
969 receive.checkbtn_incext = checkbtn_incext;
970 receive.entry_incext = entry_incext;
971 receive.button_incext = button_incext;
973 receive.checkbtn_local = checkbtn_local;
974 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
975 receive.entry_spool = entry_spool;
977 receive.checkbtn_autochk = checkbtn_autochk;
978 receive.spinbtn_autochk = spinbtn_autochk;
979 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
981 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
982 receive.checkbtn_noerrorpanel = checkbtn_noerrorpanel;
983 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
986 receive.spinbtn_maxarticle = spinbtn_maxarticle;
987 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
990 static void prefs_send_create(void)
994 GtkWidget *frame_sendext;
995 GtkWidget *vbox_sendext;
996 GtkWidget *checkbtn_sendext;
998 GtkWidget *label_sendext;
999 GtkWidget *entry_sendext;
1000 GtkWidget *button_sendext;
1001 GtkWidget *checkbtn_savemsg;
1002 GtkWidget *checkbtn_queuemsg;
1003 GtkWidget *label_outcharset;
1005 GtkWidget *optmenu_menu;
1006 GtkWidget *menuitem;
1007 GtkWidget *checkbtn_returnreceipt;
1009 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1010 gtk_widget_show (vbox1);
1011 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1012 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1014 PACK_FRAME(vbox1, frame_sendext, _("External program"));
1016 gtk_widget_set_sensitive(frame_sendext, FALSE);
1018 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
1019 gtk_widget_show (vbox_sendext);
1020 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
1021 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
1023 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
1024 _("Use external program for sending"));
1026 hbox1 = gtk_hbox_new (FALSE, 8);
1027 gtk_widget_show (hbox1);
1028 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
1029 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
1031 label_sendext = gtk_label_new (_("Program path"));
1032 gtk_widget_show (label_sendext);
1033 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
1035 entry_sendext = gtk_entry_new ();
1036 gtk_widget_show (entry_sendext);
1037 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
1039 button_sendext = gtk_button_new_with_label ("... ");
1040 gtk_widget_show (button_sendext);
1041 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
1043 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1044 gtk_widget_show (vbox2);
1045 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1047 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1048 _("Save sent messages to outbox"));
1049 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1050 _("Queue messages that fail to send"));
1051 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1052 _("Send return receipt on request"));
1054 hbox1 = gtk_hbox_new (FALSE, 8);
1055 gtk_widget_show (hbox1);
1056 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1058 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1059 gtk_widget_show (label_outcharset);
1060 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1062 optmenu = gtk_option_menu_new ();
1063 gtk_widget_show (optmenu);
1064 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1066 optmenu_menu = gtk_menu_new ();
1068 #define SET_MENUITEM(str, charset) \
1070 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1073 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1074 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1076 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1078 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1079 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1080 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1081 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1082 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1083 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1085 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1087 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1089 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1090 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1092 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1094 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1095 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1097 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1098 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1100 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1101 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1103 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1105 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1107 send.checkbtn_sendext = checkbtn_sendext;
1108 send.entry_sendext = entry_sendext;
1109 send.button_sendext = button_sendext;
1111 send.checkbtn_savemsg = checkbtn_savemsg;
1112 send.checkbtn_queuemsg = checkbtn_queuemsg;
1113 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1115 send.optmenu_charset = optmenu;
1118 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1123 g_return_if_fail(param);
1124 g_return_if_fail(param->data);
1125 g_return_if_fail(param->widget);
1126 g_return_if_fail(*(param->widget));
1128 dict_path = gtkspell_get_dictionary_menu_active_item
1129 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1130 str = *((gchar **) param->data);
1133 *((gchar **) param->data) = dict_path;
1136 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1139 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1141 GtkWidget *menuitem;
1145 g_return_if_fail(optmenu != NULL);
1146 g_return_if_fail(pparam->data != NULL);
1148 if (*(gchar **) pparam->data) {
1149 menu = gtk_option_menu_get_menu(optmenu);
1150 for (cur = GTK_MENU_SHELL(menu)->children;
1151 cur != NULL; cur = cur->next) {
1152 menuitem = GTK_WIDGET(cur->data);
1153 dict_path = gtk_object_get_data(GTK_OBJECT(menuitem), "full_path");
1154 if (!strcmp(dict_path, *((gchar **)pparam->data))) {
1155 gtk_option_menu_set_history(optmenu, n);
1162 gtk_option_menu_set_history(optmenu, 0);
1163 prefs_dictionary_set_data_from_optmenu(pparam);
1166 static void prefs_compose_checkbtn_enable_ispell_toggle_cb
1172 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1173 gtk_widget_set_sensitive(compose.entry_ispell_path, toggled);
1174 gtk_widget_set_sensitive(compose.optmenu_dictionary_path, toggled);
1175 gtk_widget_set_sensitive(compose.btn_ispell_path, toggled);
1178 static void prefs_compose_btn_ispell_path_clicked_cb(GtkWidget *widget,
1182 GtkWidget *new_menu;
1184 file_path = filesel_select_file(_("Select spelling checker location"),
1185 prefs_common.ispell_path);
1186 if (file_path == NULL) {
1190 if (prefs_common.ispell_path)
1191 g_free(prefs_common.ispell_path);
1192 prefs_common.ispell_path = file_path;
1194 new_menu = gtkspell_dictionary_option_menu_new(file_path);
1195 gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_dictionary_path),
1198 gtk_entry_set_text(GTK_ENTRY(compose.entry_ispell_path), file_path);
1199 /* select first one */
1200 gtk_option_menu_set_history(GTK_OPTION_MENU(compose.optmenu_dictionary_path), 0);
1202 prefs_common.dictionary_path = gtkspell_get_dictionary_menu_active_item(
1203 gtk_option_menu_get_menu(GTK_OPTION_MENU(compose.optmenu_dictionary_path)));
1208 static void prefs_compose_create(void)
1213 GtkWidget *frame_quote;
1214 GtkWidget *vbox_quote;
1215 GtkWidget *checkbtn_quote;
1217 GtkWidget *label_quotemark;
1218 GtkWidget *entry_quotemark;
1220 GtkWidget *label_quotefmt;
1221 GtkWidget *btn_quotedesc;
1222 GtkWidget *scrolledwin_quotefmt;
1223 GtkWidget *text_quotefmt;
1228 GtkWidget *btn_quotefmt;
1230 GtkWidget *frame_sig;
1231 GtkWidget *vbox_sig;
1232 GtkWidget *checkbtn_autosig;
1233 GtkWidget *label_sigsep;
1234 GtkWidget *entry_sigsep;
1236 GtkWidget *frame_autosel;
1237 GtkWidget *hbox_autosel;
1238 GtkWidget *vbox_autosel;
1239 GtkWidget *checkbtn_reply_account_autosel;
1240 GtkWidget *checkbtn_forward_account_autosel;
1241 GtkWidget *checkbtn_reedit_account_autosel;
1243 GtkWidget *vbox_linewrap;
1248 GtkWidget *label_linewrap;
1249 GtkObject *spinbtn_linewrap_adj;
1250 GtkWidget *spinbtn_linewrap;
1251 GtkWidget *checkbtn_wrapquote;
1252 GtkWidget *checkbtn_wrapatsend;
1254 GtkWidget *checkbtn_forward_as_attachment;
1255 GtkWidget *checkbtn_smart_wrapping;
1257 GtkWidget *frame_spell;
1258 GtkWidget *hbox_spell;
1259 GtkWidget *vbox_spell;
1260 GtkWidget *hbox_ispell_path;
1261 GtkWidget *checkbtn_enable_ispell;
1262 GtkWidget *label_ispell_path;
1263 GtkWidget *entry_ispell_path;
1264 GtkWidget *btn_ispell_path;
1265 GtkWidget *hbox_dictionary_path;
1266 GtkWidget *label_dictionary_path;
1267 GtkWidget *optmenu_dictionary_path;
1269 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1270 gtk_widget_show (vbox1);
1271 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1272 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1275 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
1277 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1278 gtk_widget_show (vbox_quote);
1279 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1280 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1282 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
1283 _("Quote message when replying"));
1285 hbox1 = gtk_hbox_new (FALSE, 8);
1286 gtk_widget_show (hbox1);
1287 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
1289 label_quotemark = gtk_label_new (_("Quotation mark"));
1290 gtk_widget_show (label_quotemark);
1291 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
1293 entry_quotemark = gtk_entry_new ();
1294 gtk_widget_show (entry_quotemark);
1295 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
1296 gtk_widget_set_usize (entry_quotemark, 64, -1);
1298 hbox2 = gtk_hbox_new (FALSE, 0);
1299 gtk_widget_show (hbox2);
1300 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1302 label_quotefmt = gtk_label_new (_("Quotation format:"));
1303 gtk_widget_show (label_quotefmt);
1304 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1307 gtk_button_new_with_label (_(" Description of symbols "));
1309 gtk_widget_show (btn_quotedesc);
1310 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1311 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1312 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1315 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1316 gtk_widget_show (scrolledwin_quotefmt);
1317 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1318 gtk_scrolled_window_set_policy
1319 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1320 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1322 text_quotefmt = gtk_text_new (NULL, NULL);
1323 gtk_widget_show (text_quotefmt);
1324 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1325 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1326 gtk_widget_set_usize(text_quotefmt, -1, 60);
1329 hbox1 = gtk_hbox_new (FALSE, 32);
1330 gtk_widget_show (hbox1);
1331 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1333 btn_quotefmt = gtk_button_new_with_label (_(" Quote format "));
1334 gtk_widget_show (btn_quotefmt);
1335 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotefmt, FALSE, FALSE, 0);
1336 gtk_signal_connect(GTK_OBJECT(btn_quotefmt), "clicked",
1337 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), NULL);
1339 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1341 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1342 gtk_widget_show (vbox_sig);
1343 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1344 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1346 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1347 _("Insert signature automatically"));
1349 hbox1 = gtk_hbox_new (FALSE, 8);
1350 gtk_widget_show (hbox1);
1351 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1352 label_sigsep = gtk_label_new (_("Signature separator"));
1353 gtk_widget_show (label_sigsep);
1354 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1356 entry_sigsep = gtk_entry_new ();
1357 gtk_widget_show (entry_sigsep);
1358 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1360 gtk_widget_set_usize (entry_sigsep, 64, -1);
1362 /* Automatic (Smart) Account Selection */
1363 PACK_FRAME(vbox1, frame_autosel, _("Automatic Account Selection"));
1365 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1366 gtk_widget_show (hbox_autosel);
1367 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1368 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1370 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1371 _("when replying"));
1372 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1373 _("when forwarding"));
1374 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1375 _("when re-editing"));
1378 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1379 gtk_widget_show (vbox_linewrap);
1380 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1382 hbox3 = gtk_hbox_new (FALSE, 8);
1383 gtk_widget_show (hbox3);
1384 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1387 label_linewrap = gtk_label_new (_("Wrap messages at"));
1388 gtk_widget_show (label_linewrap);
1389 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1391 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1392 spinbtn_linewrap = gtk_spin_button_new
1393 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1394 gtk_widget_show (spinbtn_linewrap);
1395 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1396 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1397 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1399 label_linewrap = gtk_label_new (_("characters"));
1400 gtk_widget_show (label_linewrap);
1401 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1403 hbox4 = gtk_hbox_new (FALSE, 32);
1404 gtk_widget_show (hbox4);
1405 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1407 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1409 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1411 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1412 _("Forward as attachment"));
1414 PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping,
1415 _("Smart wrapping (EXPERIMENTAL)"));
1417 /* spell checker defaults */
1418 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1419 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1420 gtk_widget_show (vbox_spell);
1421 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1422 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1424 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_ispell,
1425 _("Enable spell checker"));
1427 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_ispell), "toggled",
1428 GTK_SIGNAL_FUNC(prefs_compose_checkbtn_enable_ispell_toggle_cb),
1431 hbox_ispell_path = gtk_hbox_new (FALSE, 8);
1432 gtk_widget_show(hbox_ispell_path);
1433 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_ispell_path, TRUE, TRUE, 0);
1435 label_ispell_path = gtk_label_new (_("Ispelll path"));
1436 gtk_widget_show(label_ispell_path);
1437 gtk_box_pack_start(GTK_BOX(hbox_ispell_path), label_ispell_path, FALSE, FALSE, 0);
1439 entry_ispell_path = gtk_entry_new();
1440 gtk_widget_show(entry_ispell_path);
1441 gtk_box_pack_start(GTK_BOX(hbox_ispell_path), entry_ispell_path, FALSE, FALSE, 0);
1442 gtk_widget_set_usize(entry_ispell_path, 150, -1);
1443 gtk_widget_set_sensitive(entry_ispell_path, prefs_common.enable_ispell);
1445 btn_ispell_path = gtk_button_new_with_label(_("..."));
1446 gtk_widget_show(btn_ispell_path);
1447 gtk_box_pack_start(GTK_BOX(hbox_ispell_path), btn_ispell_path, FALSE, FALSE, 0);
1448 gtk_widget_set_sensitive(btn_ispell_path, prefs_common.enable_ispell);
1450 gtk_signal_connect(GTK_OBJECT(btn_ispell_path), "clicked",
1451 GTK_SIGNAL_FUNC(prefs_compose_btn_ispell_path_clicked_cb),
1454 hbox_dictionary_path = gtk_hbox_new(FALSE, 8);
1455 gtk_widget_show(hbox_dictionary_path);
1456 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_dictionary_path, TRUE, TRUE, 0);
1458 label_dictionary_path = gtk_label_new(_("Dictionaries"));
1459 gtk_widget_show(label_dictionary_path);
1460 gtk_box_pack_start(GTK_BOX(hbox_dictionary_path), label_dictionary_path, FALSE, FALSE, 0);
1462 optmenu_dictionary_path = gtk_option_menu_new();
1463 gtk_widget_show(optmenu_dictionary_path);
1464 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary_path),
1465 gtkspell_dictionary_option_menu_new(prefs_common.ispell_path));
1466 gtk_box_pack_start(GTK_BOX(hbox_dictionary_path), optmenu_dictionary_path, FALSE, FALSE, 0);
1467 gtk_widget_set_sensitive(optmenu_dictionary_path, prefs_common.enable_ispell);
1470 compose.checkbtn_quote = checkbtn_quote;
1471 compose.entry_quotemark = entry_quotemark;
1472 compose.text_quotefmt = text_quotefmt;
1474 compose.checkbtn_autosig = checkbtn_autosig;
1475 compose.entry_sigsep = entry_sigsep;
1477 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1478 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1479 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1481 compose.spinbtn_linewrap = spinbtn_linewrap;
1482 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1483 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1484 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1486 compose.checkbtn_forward_as_attachment =
1487 checkbtn_forward_as_attachment;
1488 compose.checkbtn_smart_wrapping =
1489 checkbtn_smart_wrapping;
1491 compose.checkbtn_enable_ispell = checkbtn_enable_ispell;
1492 compose.entry_ispell_path = entry_ispell_path;
1493 compose.btn_ispell_path = btn_ispell_path;
1494 compose.optmenu_dictionary_path = optmenu_dictionary_path;
1497 static void prefs_display_create(void)
1500 GtkWidget *frame_font;
1502 GtkWidget *label_textfont;
1503 GtkWidget *entry_textfont;
1504 GtkWidget *button_textfont;
1505 GtkWidget *chkbtn_folder_unread;
1506 GtkWidget *chkbtn_transhdr;
1507 GtkWidget *frame_summary;
1509 GtkWidget *chkbtn_swapfrom;
1510 GtkWidget *chkbtn_hscrollbar;
1511 GtkWidget *chkbtn_useaddrbook;
1512 GtkWidget *chkbtn_expand_thread;
1513 GtkWidget *chkbtn_bold_unread;
1515 GtkWidget *label_datefmt;
1516 GtkWidget *button_datefmt;
1517 GtkWidget *entry_datefmt;
1519 GtkWidget *button_dispitem;
1520 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
1522 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1523 gtk_widget_show (vbox1);
1524 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1525 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1527 PACK_FRAME(vbox1, frame_font, _("Font"));
1529 table1 = gtk_table_new (4, 3, FALSE);
1531 gtk_widget_show (table1);
1532 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1533 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1534 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1535 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1537 label_textfont = gtk_label_new (_("Text"));
1538 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1539 gtk_widget_show (label_textfont);
1540 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1541 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1543 entry_textfont = gtk_entry_new ();
1544 gtk_widget_show (entry_textfont);
1545 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1546 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1548 button_textfont = gtk_button_new_with_label ("... ");
1550 gtk_widget_show (button_textfont);
1551 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1553 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1554 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1556 tmplabel = gtk_label_new (_("Small"));
1557 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1558 gtk_widget_show (tmplabel);
1559 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1560 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1562 tmpentry = gtk_entry_new ();
1563 gtk_widget_show (tmpentry);
1564 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1565 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1567 tmpbutton = gtk_button_new_with_label (" ... ");
1568 gtk_widget_show (tmpbutton);
1569 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1571 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1572 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1573 display.entry_smallfont = tmpentry;
1575 tmplabel = gtk_label_new (_("Normal"));
1576 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1577 gtk_widget_show (tmplabel);
1578 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1579 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1581 tmpentry = gtk_entry_new ();
1582 gtk_widget_show (tmpentry);
1583 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1584 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1586 tmpbutton = gtk_button_new_with_label (" ... ");
1587 gtk_widget_show (tmpbutton);
1588 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1590 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1591 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1592 display.entry_normalfont = tmpentry;
1594 tmplabel = gtk_label_new (_("Bold"));
1595 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1596 gtk_widget_show (tmplabel);
1597 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1598 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1600 tmpentry = gtk_entry_new ();
1601 gtk_widget_show (tmpentry);
1602 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1603 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1605 tmpbutton = gtk_button_new_with_label (" ... ");
1606 gtk_widget_show (tmpbutton);
1607 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1609 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1610 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1611 display.entry_boldfont = tmpentry;
1613 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1614 gtk_widget_show (vbox2);
1615 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1618 (vbox2, chkbtn_transhdr,
1619 _("Translate header name (such as `From:', `Subject:')"));
1621 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1622 _("Display unread number next to folder name"));
1624 /* ---- Summary ---- */
1626 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1628 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1629 gtk_widget_show (vbox2);
1630 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1631 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1634 (vbox2, chkbtn_swapfrom,
1635 _("Display recipient on `From' column if sender is yourself"));
1637 (vbox2, chkbtn_useaddrbook,
1638 _("Display sender using address book"));
1640 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1642 (vbox2, chkbtn_expand_thread, _("Expand threads"));
1644 (vbox2, chkbtn_bold_unread,
1645 _("Display unread messages with bold font"));
1647 hbox1 = gtk_hbox_new (FALSE, 8);
1648 gtk_widget_show (hbox1);
1649 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1651 label_datefmt = gtk_label_new (_("Date format"));
1652 gtk_widget_show (label_datefmt);
1653 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1655 entry_datefmt = gtk_entry_new ();
1656 gtk_widget_show (entry_datefmt);
1657 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1659 button_datefmt = gtk_button_new_with_label ("... ");
1661 gtk_widget_show (button_datefmt);
1662 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1663 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1664 GTK_SIGNAL_FUNC (date_format_create), NULL);
1667 vbox3 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1668 gtk_widget_show (vbox3);
1669 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, TRUE, 0);
1671 hbox1 = gtk_hbox_new (FALSE, 8);
1672 gtk_widget_show (hbox1);
1673 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1675 button_dispitem = gtk_button_new_with_label
1676 (_(" Set display item of summary... "));
1677 gtk_widget_show (button_dispitem);
1678 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1679 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1680 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1683 display.entry_textfont = entry_textfont;
1684 display.button_textfont = button_textfont;
1686 display.chkbtn_folder_unread = chkbtn_folder_unread;
1687 display.chkbtn_transhdr = chkbtn_transhdr;
1689 display.chkbtn_swapfrom = chkbtn_swapfrom;
1690 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1691 display.chkbtn_expand_thread = chkbtn_expand_thread;
1692 display.chkbtn_bold_unread = chkbtn_bold_unread;
1693 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1694 display.entry_datefmt = entry_datefmt;
1697 static void prefs_message_create(void)
1702 GtkWidget *chkbtn_enablecol;
1703 GtkWidget *button_edit_col;
1704 GtkWidget *chkbtn_mbalnum;
1705 GtkWidget *chkbtn_disphdrpane;
1706 GtkWidget *chkbtn_disphdr;
1707 GtkWidget *button_edit_disphdr;
1708 GtkWidget *hbox_linespc;
1709 GtkWidget *label_linespc;
1710 GtkObject *spinbtn_linespc_adj;
1711 GtkWidget *spinbtn_linespc;
1712 GtkWidget *chkbtn_headspc;
1714 GtkWidget *frame_scr;
1715 GtkWidget *vbox_scr;
1716 GtkWidget *chkbtn_smoothscroll;
1717 GtkWidget *hbox_scr;
1718 GtkWidget *label_scr;
1719 GtkObject *spinbtn_scrollstep_adj;
1720 GtkWidget *spinbtn_scrollstep;
1721 GtkWidget *chkbtn_halfpage;
1723 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1724 gtk_widget_show (vbox1);
1725 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1726 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1728 hbox1 = gtk_hbox_new (FALSE, 8);
1729 gtk_widget_show (hbox1);
1730 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1732 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1733 _("Enable coloration of message"));
1734 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1735 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1738 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1739 gtk_widget_show (button_edit_col);
1740 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1741 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1742 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1744 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1746 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1747 gtk_widget_show (vbox2);
1748 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1751 (vbox2, chkbtn_mbalnum,
1752 _("Display 2-byte alphabet and numeric with 1-byte character"));
1753 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1754 _("Display header pane above message view"));
1756 hbox1 = gtk_hbox_new (FALSE, 8);
1757 gtk_widget_show (hbox1);
1758 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1760 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1761 _("Display short headers on message view"));
1763 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1764 gtk_widget_show (button_edit_disphdr);
1765 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1767 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1768 GTK_SIGNAL_FUNC (prefs_display_header_open),
1771 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1773 hbox1 = gtk_hbox_new (FALSE, 32);
1774 gtk_widget_show (hbox1);
1775 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1777 hbox_linespc = gtk_hbox_new (FALSE, 8);
1778 gtk_widget_show (hbox1);
1779 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1781 label_linespc = gtk_label_new (_("Line space"));
1782 gtk_widget_show (label_linespc);
1783 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1786 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1787 spinbtn_linespc = gtk_spin_button_new
1788 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1789 gtk_widget_show (spinbtn_linespc);
1790 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1792 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1793 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1795 label_linespc = gtk_label_new (_("pixel(s)"));
1796 gtk_widget_show (label_linespc);
1797 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1800 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1802 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1804 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1805 gtk_widget_show (vbox_scr);
1806 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1807 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1809 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1811 hbox1 = gtk_hbox_new (FALSE, 32);
1812 gtk_widget_show (hbox1);
1813 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1815 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1817 hbox_scr = gtk_hbox_new (FALSE, 8);
1818 gtk_widget_show (hbox_scr);
1819 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1821 label_scr = gtk_label_new (_("Step"));
1822 gtk_widget_show (label_scr);
1823 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1825 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1826 spinbtn_scrollstep = gtk_spin_button_new
1827 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1828 gtk_widget_show (spinbtn_scrollstep);
1829 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1831 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1832 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1835 label_scr = gtk_label_new (_("pixel(s)"));
1836 gtk_widget_show (label_scr);
1837 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1839 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1841 message.chkbtn_enablecol = chkbtn_enablecol;
1842 message.button_edit_col = button_edit_col;
1843 message.chkbtn_mbalnum = chkbtn_mbalnum;
1844 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1845 message.chkbtn_disphdr = chkbtn_disphdr;
1846 message.spinbtn_linespc = spinbtn_linespc;
1847 message.chkbtn_headspc = chkbtn_headspc;
1849 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1850 message.spinbtn_scrollstep = spinbtn_scrollstep;
1851 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1852 message.chkbtn_halfpage = chkbtn_halfpage;
1856 static void prefs_privacy_create(void)
1861 GtkWidget *checkbtn_default_encrypt;
1862 GtkWidget *checkbtn_default_sign;
1863 GtkWidget *checkbtn_auto_check_signatures;
1864 GtkWidget *checkbtn_gpg_signature_popup;
1865 GtkWidget *checkbtn_passphrase_grab;
1866 GtkWidget *checkbtn_gpg_warning;
1868 GtkWidget *menuitem;
1870 GtkWidget *optmenu_menu;
1872 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1873 gtk_widget_show (vbox1);
1874 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1875 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1877 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1878 gtk_widget_show (vbox2);
1879 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1881 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1882 _("Encrypt message by default"));
1884 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1885 _("Sign message by default"));
1887 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1888 _("Automatically check signatures"));
1890 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
1891 _("Show signature check result in a popup window"));
1894 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1895 _("Grab input while entering a passphrase"));
1899 (vbox2, checkbtn_gpg_warning,
1900 _("Display warning on startup if GnuPG doesn't work"));
1902 hbox1 = gtk_hbox_new (FALSE, 8);
1903 gtk_widget_show (hbox1);
1904 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1906 /* create default signkey box */
1907 label = gtk_label_new (_("Default Sign Key"));
1908 gtk_widget_show (label);
1909 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1910 optmenu = gtk_option_menu_new ();
1911 gtk_widget_show (optmenu);
1912 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1913 optmenu_menu = gtk_menu_new ();
1915 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1916 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1917 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1918 /* FIXME: disabled because not implemented */
1919 gtk_widget_set_sensitive(optmenu, FALSE);
1921 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1922 privacy.checkbtn_default_sign = checkbtn_default_sign;
1923 privacy.checkbtn_auto_check_signatures
1924 = checkbtn_auto_check_signatures;
1925 privacy.checkbtn_gpg_signature_popup
1926 = checkbtn_gpg_signature_popup;
1927 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1928 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
1929 privacy.optmenu_default_signkey = optmenu;
1933 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1937 GtkWidget *menuitem;
1940 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1941 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1942 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1943 g_free(*((gchar **)pparam->data));
1944 *((gchar **)pparam->data) = g_strdup(charset);
1948 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1952 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1954 GtkWidget *menuitem;
1958 g_return_if_fail(optmenu != NULL);
1959 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1961 menu = gtk_option_menu_get_menu(optmenu);
1962 for (cur = GTK_MENU_SHELL(menu)->children;
1963 cur != NULL; cur = cur->next) {
1964 menuitem = GTK_WIDGET(cur->data);
1965 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1966 if (!strcmp(charset, *((gchar **)pparam->data))) {
1967 gtk_option_menu_set_history(optmenu, n);
1973 gtk_option_menu_set_history(optmenu, 0);
1974 prefs_common_charset_set_data_from_optmenu(pparam);
1977 #endif /* USE_GPGME */
1979 static void prefs_interface_create(void)
1984 /* GtkWidget *checkbtn_emacs; */
1985 GtkWidget *checkbtn_openunread;
1986 GtkWidget *checkbtn_openinbox;
1987 GtkWidget *checkbtn_immedexec;
1990 GtkWidget *optmenu_recvdialog;
1992 GtkWidget *menuitem;
1994 GtkWidget *frame_addr;
1995 GtkWidget *vbox_addr;
1996 GtkWidget *checkbtn_addaddrbyclick;
1998 GtkWidget *frame_exit;
1999 GtkWidget *vbox_exit;
2000 GtkWidget *checkbtn_confonexit;
2001 GtkWidget *checkbtn_cleanonexit;
2002 GtkWidget *checkbtn_askonclean;
2003 GtkWidget *checkbtn_warnqueued;
2005 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2006 gtk_widget_show (vbox1);
2007 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2008 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2010 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
2011 gtk_widget_show (vbox2);
2012 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2014 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2015 _("Emulate the behavior of mouse operation of\n"
2016 "Emacs-based mailer"));
2017 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2018 GTK_JUSTIFY_LEFT); */
2021 (vbox2, checkbtn_openunread,
2022 _("Open first unread message when entering a folder"));
2025 (vbox2, checkbtn_openinbox,
2026 _("Go to inbox after receiving new mail"));
2028 vbox3 = gtk_vbox_new (FALSE, 0);
2029 gtk_widget_show (vbox3);
2030 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2033 (vbox3, checkbtn_immedexec,
2034 _("Execute immediately when moving or deleting messages"));
2036 hbox1 = gtk_hbox_new (FALSE, 0);
2037 gtk_widget_show (hbox1);
2038 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2040 label = gtk_label_new
2041 (_("(Messages will be just marked till execution\n"
2042 " if this is turned off)"));
2043 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2044 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2046 hbox1 = gtk_hbox_new (FALSE, 8);
2047 gtk_widget_show (hbox1);
2048 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2050 label = gtk_label_new (_("Show receive dialog"));
2051 gtk_widget_show (label);
2052 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2054 optmenu_recvdialog = gtk_option_menu_new ();
2055 gtk_widget_show (optmenu_recvdialog);
2056 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2059 menu = gtk_menu_new ();
2060 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2061 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2062 RECV_DIALOG_ACTIVE);
2063 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2065 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2067 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2069 vbox_addr = gtk_vbox_new (FALSE, VSPACING_NARROW);
2070 gtk_widget_show (vbox_addr);
2071 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2072 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2075 (vbox_addr, checkbtn_addaddrbyclick,
2076 _("Add address to destination when double-clicked"));
2078 /* Receive Dialog */
2079 /* hbox = gtk_hbox_new (FALSE, 8);
2080 gtk_widget_show (hbox);
2081 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2083 label = gtk_label_new (_("Show receive Dialog"));
2084 gtk_widget_show (label);
2085 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2087 recvdialog_optmenu = gtk_option_menu_new ();
2088 gtk_widget_show (recvdialog_optmenu);
2089 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2091 recvdialog_optmenu_menu = gtk_menu_new ();
2093 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2094 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2095 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2097 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2100 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2102 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
2103 gtk_widget_show (vbox_exit);
2104 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2105 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2107 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2108 _("Confirm on exit"));
2110 hbox1 = gtk_hbox_new (FALSE, 32);
2111 gtk_widget_show (hbox1);
2112 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2114 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2115 _("Empty trash on exit"));
2116 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2117 _("Ask before emptying"));
2118 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2120 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2121 _("Warn if there are queued messages"));
2123 /* interface.checkbtn_emacs = checkbtn_emacs; */
2124 interface.checkbtn_openunread = checkbtn_openunread;
2125 interface.checkbtn_openinbox = checkbtn_openinbox;
2126 interface.checkbtn_immedexec = checkbtn_immedexec;
2127 interface.optmenu_recvdialog = optmenu_recvdialog;
2128 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2129 interface.checkbtn_confonexit = checkbtn_confonexit;
2130 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2131 interface.checkbtn_askonclean = checkbtn_askonclean;
2132 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2135 static void prefs_other_create(void)
2140 GtkWidget *uri_frame;
2141 GtkWidget *uri_label;
2142 GtkWidget *uri_combo;
2143 GtkWidget *uri_entry;
2145 GtkWidget *print_frame;
2146 GtkWidget *printcmd_label;
2147 GtkWidget *printcmd_entry;
2149 GtkWidget *exteditor_frame;
2150 GtkWidget *exteditor_label;
2151 GtkWidget *exteditor_combo;
2152 GtkWidget *exteditor_entry;
2154 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2155 gtk_widget_show (vbox1);
2156 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2157 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2159 PACK_FRAME(vbox1, uri_frame,
2160 _("External Web browser (%s will be replaced with URI)"));
2162 hbox1 = gtk_hbox_new (FALSE, 8);
2163 gtk_widget_show (hbox1);
2164 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2165 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2167 uri_label = gtk_label_new (_("Command"));
2168 gtk_widget_show(uri_label);
2169 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2171 uri_combo = gtk_combo_new ();
2172 gtk_widget_show (uri_combo);
2173 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2174 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2175 "netscape -remote 'openURL(%s,raise)'",
2177 "gnome-moz-remote --raise --newwin '%s'",
2178 "kterm -e w3m '%s'",
2179 "kterm -e lynx '%s'",
2182 uri_entry = GTK_COMBO (uri_combo)->entry;
2184 PACK_FRAME(vbox1, print_frame,
2185 _("Printing (%s will be replaced with file name)"));
2187 hbox1 = gtk_hbox_new (FALSE, 8);
2188 gtk_widget_show (hbox1);
2189 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2190 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2192 printcmd_label = gtk_label_new (_("Command"));
2193 gtk_widget_show (printcmd_label);
2194 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2196 printcmd_entry = gtk_entry_new ();
2197 gtk_widget_show (printcmd_entry);
2198 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2200 PACK_FRAME(vbox1, exteditor_frame,
2201 _("External editor (%s will be replaced with file name)"));
2203 hbox1 = gtk_hbox_new (FALSE, 8);
2204 gtk_widget_show (hbox1);
2205 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2206 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2208 exteditor_label = gtk_label_new (_("Command"));
2209 gtk_widget_show (exteditor_label);
2210 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2212 exteditor_combo = gtk_combo_new ();
2213 gtk_widget_show (exteditor_combo);
2214 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2215 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2217 "mgedit --no-fork %s",
2223 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2225 other.uri_combo = uri_combo;
2226 other.uri_entry = uri_entry;
2227 other.printcmd_entry = printcmd_entry;
2229 other.exteditor_combo = exteditor_combo;
2230 other.exteditor_entry = exteditor_entry;
2233 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2235 GtkWidget *datefmt_sample = NULL;
2238 g_return_if_fail(widget != NULL);
2239 g_return_if_fail(*widget != NULL);
2240 g_return_if_fail(display.entry_datefmt != NULL);
2242 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2243 (GTK_OBJECT(*widget), "datefmt_sample"));
2244 g_return_if_fail(datefmt_sample != NULL);
2246 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2247 g_free(prefs_common.date_format);
2248 prefs_common.date_format = text;
2249 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2251 gtk_widget_destroy(*widget);
2255 static void date_format_cancel_btn_clicked(GtkButton *button,
2258 g_return_if_fail(widget != NULL);
2259 g_return_if_fail(*widget != NULL);
2261 gtk_widget_destroy(*widget);
2265 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2268 if (event && event->keyval == GDK_Escape)
2269 date_format_cancel_btn_clicked(NULL, widget);
2272 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2273 GdkEventAny *event, GtkWidget **widget)
2275 g_return_val_if_fail(widget != NULL, FALSE);
2276 g_return_val_if_fail(*widget != NULL, FALSE);
2282 static void date_format_entry_on_change(GtkEditable *editable,
2286 struct tm *cal_time;
2290 cur_time = time(NULL);
2291 cal_time = localtime(&cur_time);
2293 text = gtk_editable_get_chars(editable, 0, -1);
2295 strftime(buffer, sizeof buffer, text, cal_time);
2296 gtk_label_set_text(example, buffer);
2299 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2300 gint column, GdkEventButton *event,
2301 GtkWidget *date_format)
2307 GtkWidget *datefmt_sample;
2309 /* only on double click */
2310 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2313 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2314 (GTK_OBJECT(date_format), "datefmt_sample"));
2316 g_return_if_fail(date_format_list != NULL);
2317 g_return_if_fail(date_format != NULL);
2318 g_return_if_fail(datefmt_sample != NULL);
2320 /* get format from clist */
2321 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2323 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2324 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2326 /* insert the format into the text entry */
2327 new_format = g_malloc(strlen(old_format) + 3);
2329 strncpy(new_format, old_format, cur_pos);
2330 new_format[cur_pos] = '\0';
2331 strcat(new_format, format);
2332 strcat(new_format, &old_format[cur_pos]);
2334 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2335 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2340 static GtkWidget *date_format_create(GtkButton *button, void *data)
2342 static GtkWidget *datefmt_win = NULL;
2344 GtkWidget *scrolledwindow1;
2345 GtkWidget *datefmt_clist;
2350 GtkWidget *confirm_area;
2352 GtkWidget *cancel_btn;
2353 GtkWidget *datefmt_entry;
2359 { "%a", _("the full abbreviated weekday name") },
2360 { "%A", _("the full weekday name") },
2361 { "%b", _("the abbreviated month name") },
2362 { "%B", _("the full month name") },
2363 { "%c", _("the preferred date and time for the current locale") },
2364 { "%C", _("the century number (year/100)") },
2365 { "%d", _("the day of the month as a decimal number") },
2366 { "%H", _("the hour as a decimal number using a 24-hour clock") },
2367 { "%I", _("the hour as a decimal number using a 12-hour clock") },
2368 { "%j", _("the day of the year as a decimal number") },
2369 { "%m", _("the month as a decimal number") },
2370 { "%M", _("the minute as a decimal number") },
2371 { "%p", _("either AM or PM") },
2372 { "%S", _("the second as a decimal number") },
2373 { "%w", _("the day of the week as a decimal number") },
2374 { "%x", _("the preferred date for the current locale") },
2375 { "%y", _("the last two digits of a year") },
2376 { "%Y", _("the year as a decimal number") },
2377 { "%Z", _("the time zone or name or abbreviation") }
2382 const gint TIME_FORMAT_ELEMS =
2383 sizeof time_format / sizeof time_format[0];
2385 if (datefmt_win) return datefmt_win;
2387 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2388 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2389 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2390 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2391 gtk_widget_set_usize(datefmt_win, 440, 280);
2393 vbox1 = gtk_vbox_new(FALSE, 10);
2394 gtk_widget_show(vbox1);
2395 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2397 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2398 gtk_scrolled_window_set_policy
2399 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2400 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2401 gtk_widget_show(scrolledwindow1);
2402 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2404 titles[0] = _("Specifier");
2405 titles[1] = _("Description");
2406 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2407 gtk_widget_show(datefmt_clist);
2408 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2409 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2411 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2412 GTK_SELECTION_BROWSE);
2414 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2416 /* phoney casting necessary because of gtk... */
2417 text[0] = (gchar *)time_format[i].fmt;
2418 text[1] = (gchar *)time_format[i].txt;
2419 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2422 table = gtk_table_new(2, 2, FALSE);
2423 gtk_widget_show(table);
2424 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2425 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2426 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2428 label1 = gtk_label_new(_("Date format"));
2429 gtk_widget_show(label1);
2430 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2432 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2433 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2435 datefmt_entry = gtk_entry_new_with_max_length(256);
2436 gtk_widget_show(datefmt_entry);
2437 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2438 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2440 /* we need the "sample" entry box; add it as data so callbacks can
2441 * get the entry box */
2442 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2445 label2 = gtk_label_new(_("Example"));
2446 gtk_widget_show(label2);
2447 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2449 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2450 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2452 label3 = gtk_label_new("");
2453 gtk_widget_show(label3);
2454 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2455 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2456 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2457 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2459 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2460 &cancel_btn, _("Cancel"), NULL, NULL);
2461 gtk_widget_grab_default(ok_btn);
2462 gtk_widget_show(confirm_area);
2464 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2466 /* set the current format */
2467 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2468 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2471 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2472 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2474 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2475 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2477 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2478 GTK_SIGNAL_FUNC(date_format_key_pressed),
2480 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2481 GTK_SIGNAL_FUNC(date_format_on_delete),
2483 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2484 GTK_SIGNAL_FUNC(date_format_entry_on_change),
2487 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2488 GTK_SIGNAL_FUNC(date_format_select_row),
2491 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2492 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2494 gtk_widget_show(datefmt_win);
2495 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2497 gtk_widget_grab_focus(ok_btn);
2502 void prefs_quote_colors_dialog(void)
2504 if (!quote_color_win)
2505 prefs_quote_colors_dialog_create();
2506 gtk_widget_show(quote_color_win);
2507 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2510 gtk_widget_hide(quote_color_win);
2512 textview_update_message_colors();
2513 main_window_reflect_prefs_all();
2516 static void prefs_quote_colors_dialog_create(void)
2521 GtkWidget *quotelevel1_label;
2522 GtkWidget *quotelevel2_label;
2523 GtkWidget *quotelevel3_label;
2524 GtkWidget *uri_label;
2525 GtkWidget *tgt_folder_label;
2528 //GtkWidget *cancel_btn;
2529 GtkWidget *recycle_colors_btn;
2530 GtkWidget *frame_colors;
2532 window = gtk_window_new(GTK_WINDOW_DIALOG);
2533 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2534 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2535 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2536 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2537 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2539 vbox = gtk_vbox_new (FALSE, VSPACING);
2540 gtk_container_add (GTK_CONTAINER (window), vbox);
2541 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2542 PACK_FRAME(vbox, frame_colors, _("Colors"));
2544 table = gtk_table_new (4, 2, FALSE);
2545 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2546 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2547 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2548 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2551 color_buttons.quote_level1_btn = gtk_button_new();
2552 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2553 0, 1, 0, 1, 0, 0, 0, 0);
2554 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2555 gtk_container_set_border_width
2556 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2558 color_buttons.quote_level2_btn = gtk_button_new();
2559 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2560 0, 1, 1, 2, 0, 0, 0, 0);
2561 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2562 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2564 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2565 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2566 0, 1, 2, 3, 0, 0, 0, 0);
2567 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2568 gtk_container_set_border_width
2569 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2571 color_buttons.uri_btn = gtk_button_new_with_label ("");
2572 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2573 0, 1, 3, 4, 0, 0, 0, 0);
2574 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2575 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2577 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2578 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2579 0, 1, 4, 5, 0, 0, 0, 0);
2580 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
2581 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2583 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2584 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2585 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2586 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2587 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2589 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2590 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2591 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2592 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2593 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2595 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2596 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2597 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2598 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2599 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2601 uri_label = gtk_label_new (_("URI link"));
2602 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2603 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2604 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2605 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2607 tgt_folder_label = gtk_label_new (_("Target folder"));
2608 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
2609 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2610 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
2611 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
2613 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2614 _("Recycle quote colors"));
2616 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2617 NULL, NULL, NULL, NULL);
2618 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2620 gtk_widget_grab_default(ok_btn);
2621 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2622 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2623 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2624 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2625 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2626 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2627 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2628 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2631 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2632 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2633 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2634 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2635 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2636 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2637 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2638 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2639 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
2640 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
2641 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2642 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2643 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2644 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2646 /* show message button colors and recycle options */
2647 set_button_bg_color(color_buttons.quote_level1_btn,
2648 prefs_common.quote_level1_col);
2649 set_button_bg_color(color_buttons.quote_level2_btn,
2650 prefs_common.quote_level2_col);
2651 set_button_bg_color(color_buttons.quote_level3_btn,
2652 prefs_common.quote_level3_col);
2653 set_button_bg_color(color_buttons.uri_btn,
2654 prefs_common.uri_col);
2655 set_button_bg_color(color_buttons.tgt_folder_btn,
2656 prefs_common.tgt_folder_col);
2657 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2658 prefs_common.recycle_quote_colors);
2660 gtk_widget_show_all(vbox);
2661 quote_color_win = window;
2664 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2665 GdkEventKey *event, gpointer data)
2667 if (event && event->keyval == GDK_Escape)
2671 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2673 gchar *type = (gchar *)data;
2674 gchar *title = NULL;
2675 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2677 GtkColorSelectionDialog *dialog;
2679 if(g_strcasecmp(type, "LEVEL1") == 0) {
2680 title = _("Pick color for quotation level 1");
2681 rgbvalue = prefs_common.quote_level1_col;
2682 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2683 title = _("Pick color for quotation level 2");
2684 rgbvalue = prefs_common.quote_level2_col;
2685 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2686 title = _("Pick color for quotation level 3");
2687 rgbvalue = prefs_common.quote_level3_col;
2688 } else if(g_strcasecmp(type, "URI") == 0) {
2689 title = _("Pick color for URI");
2690 rgbvalue = prefs_common.uri_col;
2691 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
2692 title = _("Pick color for target folder");
2693 rgbvalue = prefs_common.tgt_folder_col;
2694 } else { /* Should never be called */
2695 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2699 color_dialog = gtk_color_selection_dialog_new(title);
2700 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2701 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2702 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2703 manage_window_set_transient(GTK_WINDOW(color_dialog));
2705 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2706 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2707 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2708 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2709 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2710 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2713 /* preselect the previous color in the color selection dialog */
2714 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2715 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2716 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2717 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2718 gtk_color_selection_set_color
2719 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2721 gtk_widget_show(color_dialog);
2724 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2726 GtkColorSelection *colorsel = (GtkColorSelection *)
2727 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2729 gint red, green, blue, rgbvalue;
2730 gchar *type = (gchar *)data;
2732 gtk_color_selection_get_color(colorsel, color);
2734 red = (gint) (color[0] * 255.0);
2735 green = (gint) (color[1] * 255.0);
2736 blue = (gint) (color[2] * 255.0);
2737 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2740 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2741 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2742 fprintf(stderr, "Color is %x\n", rgbvalue);
2745 if (g_strcasecmp(type, "LEVEL1") == 0) {
2746 prefs_common.quote_level1_col = rgbvalue;
2747 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2748 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2749 prefs_common.quote_level2_col = rgbvalue;
2750 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2751 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2752 prefs_common.quote_level3_col = rgbvalue;
2753 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2754 } else if (g_strcasecmp(type, "URI") == 0) {
2755 prefs_common.uri_col = rgbvalue;
2756 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2757 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
2758 prefs_common.tgt_folder_col = rgbvalue;
2759 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
2760 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
2762 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2764 gtk_widget_destroy(color_dialog);
2767 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2769 gtk_widget_destroy(color_dialog);
2772 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
2776 gtk_widget_destroy(color_dialog);
2779 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2784 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2785 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2786 newstyle->bg[GTK_STATE_NORMAL] = color;
2787 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2788 newstyle->bg[GTK_STATE_ACTIVE] = color;
2790 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2793 static void prefs_enable_message_color_toggled(void)
2797 is_active = gtk_toggle_button_get_active
2798 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2799 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2800 prefs_common.enable_color = is_active;
2803 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2807 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2808 prefs_common.recycle_quote_colors = is_active;
2811 static void prefs_quote_description(void)
2813 if (!quote_desc_win)
2814 prefs_quote_description_create();
2816 gtk_widget_show(quote_desc_win);
2818 gtk_widget_hide(quote_desc_win);
2821 static void prefs_quote_description_create(void)
2829 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2830 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2831 _("Description of symbols"));
2832 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2833 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2834 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2835 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2837 vbox = gtk_vbox_new(FALSE, 8);
2838 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2840 hbox = gtk_hbox_new(FALSE, 4);
2841 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2843 label = gtk_label_new
2847 "%N\n" /* full name */
2848 "%F\n" /* first name */
2849 "%I\n" /* sender's initial */
2850 "%s\n" /* subject line */
2853 "%n\n" /* newsgroups */
2854 "%i\n" /* message id */
2855 "%r\n" /* references */
2866 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2867 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2869 label = gtk_label_new
2870 (_("DESCRIPTION\n\n"
2873 "Full Name of Sender\n"
2874 "First Name of Sender\n"
2875 "Initial of Sender\n"
2883 "Display the information\n"
2884 "If the information x is set, displays expr\n"
2887 "Quoted message body\n"
2888 "Message body without signature\n"
2889 "Quoted message body without signature\n"
2892 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2893 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2895 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2896 NULL, NULL, NULL, NULL);
2897 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2899 gtk_widget_grab_default(ok_btn);
2900 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2901 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2903 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2904 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2906 gtk_widget_show_all(vbox);
2909 /* functions for setting items of SummaryView */
2911 static struct _SummaryDisplayItem
2915 GtkWidget *chkbtn[N_SUMMARY_COLS];
2918 GtkWidget *cancel_btn;
2921 #define SET_ACTIVE(column, var) \
2922 gtk_toggle_button_set_active \
2923 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2925 #define GET_ACTIVE(column, var) \
2926 prefs_common.var = gtk_toggle_button_get_active \
2927 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2929 void prefs_summary_display_item_set(void)
2931 static gboolean cancelled;
2933 if (!summarydispitem.window)
2934 prefs_summary_display_item_dialog_create(&cancelled);
2935 gtk_widget_grab_focus(summarydispitem.ok_btn);
2936 gtk_widget_show(summarydispitem.window);
2937 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2939 SET_ACTIVE(S_COL_MARK, show_mark);
2940 SET_ACTIVE(S_COL_UNREAD, show_unread);
2941 SET_ACTIVE(S_COL_MIME, show_mime);
2942 SET_ACTIVE(S_COL_NUMBER, show_number);
2943 SET_ACTIVE(S_COL_SCORE, show_score);
2944 SET_ACTIVE(S_COL_SIZE, show_size);
2945 SET_ACTIVE(S_COL_DATE, show_date);
2946 SET_ACTIVE(S_COL_FROM, show_from);
2947 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2950 gtk_widget_hide(summarydispitem.window);
2952 if (cancelled != TRUE) {
2953 GET_ACTIVE(S_COL_MARK, show_mark);
2954 GET_ACTIVE(S_COL_UNREAD, show_unread);
2955 GET_ACTIVE(S_COL_MIME, show_mime);
2956 GET_ACTIVE(S_COL_NUMBER, show_number);
2957 GET_ACTIVE(S_COL_SCORE, show_score);
2958 GET_ACTIVE(S_COL_SIZE, show_size);
2959 GET_ACTIVE(S_COL_DATE, show_date);
2960 GET_ACTIVE(S_COL_FROM, show_from);
2961 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2963 main_window_reflect_prefs_all();
2967 #define SET_CHECK_BUTTON(column, label) \
2969 summarydispitem.chkbtn[column] = \
2970 gtk_check_button_new_with_label(label); \
2971 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2972 summarydispitem.chkbtn[column], \
2976 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2980 GtkWidget *chkbtn_vbox;
2983 GtkWidget *cancel_btn;
2985 window = gtk_window_new(GTK_WINDOW_DIALOG);
2986 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2987 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2988 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2989 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2990 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2991 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2992 GTK_SIGNAL_FUNC(display_item_delete_event),
2994 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2995 GTK_SIGNAL_FUNC(display_item_key_pressed),
2998 vbox = gtk_vbox_new(FALSE, 8);
2999 gtk_container_add(GTK_CONTAINER(window), vbox);
3001 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
3002 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
3004 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
3005 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
3006 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
3007 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
3008 SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
3009 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
3010 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
3011 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
3012 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
3014 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3015 &cancel_btn, _("Cancel"), NULL, NULL);
3016 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3017 gtk_widget_grab_default(ok_btn);
3019 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3020 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
3021 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
3022 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
3024 gtk_widget_show_all(vbox);
3026 summarydispitem.window = window;
3027 summarydispitem.ok_btn = ok_btn;
3028 summarydispitem.cancel_btn = cancel_btn;
3031 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
3037 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
3043 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
3044 gboolean *cancelled)
3052 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
3053 gboolean *cancelled)
3055 if (event && event->keyval == GDK_Escape) {
3061 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3065 g_return_if_fail(entry != NULL);
3067 if (!font_sel_win) {
3068 font_sel_win = gtk_font_selection_dialog_new
3069 (_("Font selection"));
3070 gtk_window_position(GTK_WINDOW(font_sel_win),
3071 GTK_WIN_POS_CENTER);
3072 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3073 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3076 (GTK_OBJECT(font_sel_win), "key_press_event",
3077 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3079 gtk_signal_connect_object
3080 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3082 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3083 GTK_OBJECT(font_sel_win));
3086 if(font_sel_conn_id) {
3087 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3089 font_sel_conn_id = gtk_signal_connect
3090 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3092 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3094 printf("%i\n", font_sel_conn_id);
3096 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3097 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3099 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3100 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3101 gtk_widget_grab_focus
3102 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3103 gtk_widget_show(font_sel_win);
3106 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3110 if (event && event->keyval == GDK_Escape)
3111 gtk_widget_hide(font_sel_win);
3114 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3118 fontname = gtk_font_selection_dialog_get_font_name
3119 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3122 gtk_entry_set_text(entry, fontname);
3127 gtk_widget_hide(font_sel_win);
3130 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3133 GtkWidget *menuitem;
3136 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3137 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3138 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3139 g_free(*((gchar **)pparam->data));
3140 *((gchar **)pparam->data) = g_strdup(charset);
3143 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3146 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3148 GtkWidget *menuitem;
3152 g_return_if_fail(optmenu != NULL);
3153 g_return_if_fail(*((gchar **)pparam->data) != NULL);
3155 menu = gtk_option_menu_get_menu(optmenu);
3156 for (cur = GTK_MENU_SHELL(menu)->children;
3157 cur != NULL; cur = cur->next) {
3158 menuitem = GTK_WIDGET(cur->data);
3159 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3160 if (!strcmp(charset, *((gchar **)pparam->data))) {
3161 gtk_option_menu_set_history(optmenu, n);
3167 gtk_option_menu_set_history(optmenu, 0);
3168 prefs_common_charset_set_data_from_optmenu(pparam);
3171 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3174 GtkWidget *menuitem;
3176 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3177 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3178 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3179 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3182 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3184 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3185 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3187 GtkWidget *menuitem;
3190 case RECV_DIALOG_ALWAYS:
3191 gtk_option_menu_set_history(optmenu, 0);
3193 case RECV_DIALOG_ACTIVE:
3194 gtk_option_menu_set_history(optmenu, 1);
3196 case RECV_DIALOG_NEVER:
3197 gtk_option_menu_set_history(optmenu, 2);
3202 menu = gtk_option_menu_get_menu(optmenu);
3203 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3204 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3207 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3210 prefs_common_cancel();
3214 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3217 if (event && event->keyval == GDK_Escape)
3218 prefs_common_cancel();
3221 static void prefs_common_ok(void)
3223 prefs_common_apply();
3224 gtk_widget_hide(dialog.window);
3225 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
3226 gtk_widget_hide(quote_desc_win);
3228 inc_autocheck_timer_set();
3231 static void prefs_common_apply(void)
3233 prefs_set_data_from_dialog(param);
3234 main_window_reflect_prefs_all();
3235 prefs_common_save_config();
3238 static void prefs_common_cancel(void)
3240 gtk_widget_hide(dialog.window);
3241 inc_autocheck_timer_set();
3245 static struct _ComposePrefs
3249 GtkWidget *close_btn;
3252 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
3253 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
3254 static void compose_prefs_close(GtkWidget *widget);
3255 static void compose_prefs_fmt_create(void);
3257 static void compose_prefs_fmt_open(void)
3259 if (composeprefs.window == NULL)
3260 compose_prefs_fmt_create();
3261 gtk_widget_show(composeprefs.window);
3265 static void compose_prefs_fmt_create(void)
3268 GtkWidget *close_btn;
3270 GtkWidget *frame_quote;
3271 GtkWidget *vbox_quote;
3273 GtkWidget *checkbtn_quote;
3274 GtkWidget *label_quotemark;
3275 GtkWidget *entry_quotemark;
3276 GtkWidget *scrolledwin_quotefmt;
3277 GtkWidget *text_quotefmt;
3278 GtkWidget *label_quotefmt;
3279 GtkWidget *btn_quotedesc;
3281 GtkWidget *label_fw_quotemark;
3282 GtkWidget *entry_fw_quotemark;
3283 GtkWidget *label_fw_quotefmt;
3284 GtkWidget *text_fw_quotefmt;
3286 window = gtk_window_new(GTK_WINDOW_DIALOG);
3287 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
3288 gtk_window_set_title(GTK_WINDOW(window), _("Compose Preferences"));
3289 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3290 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3291 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3292 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3293 GTK_SIGNAL_FUNC(compose_prefs_delete_event),
3295 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3296 GTK_SIGNAL_FUNC(compose_prefs_key_pressed),
3299 vbox_quote = gtk_vbox_new(FALSE, 8);
3300 gtk_container_add(GTK_CONTAINER(window), vbox_quote);
3302 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
3303 _("Quote message when replying"));
3305 hbox1 = gtk_hbox_new (FALSE, 8);
3306 gtk_widget_show (hbox1);
3307 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3309 label_quotemark = gtk_label_new (_("Quotation mark"));
3310 gtk_widget_show (label_quotemark);
3311 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
3313 entry_quotemark = gtk_entry_new ();
3314 gtk_widget_show (entry_quotemark);
3315 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
3316 gtk_widget_set_usize (entry_quotemark, 64, -1);
3318 hbox1 = gtk_hbox_new (FALSE, 0);
3319 gtk_widget_show (hbox1);
3320 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3322 label_quotefmt = gtk_label_new (_("Quotation format:"));
3323 gtk_widget_show (label_quotefmt);
3324 gtk_box_pack_start (GTK_BOX (hbox1), label_quotefmt, FALSE, FALSE, 0);
3326 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3327 gtk_widget_show (scrolledwin_quotefmt);
3328 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3329 gtk_scrolled_window_set_policy
3330 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3331 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3333 text_quotefmt = gtk_text_new (NULL, NULL);
3334 gtk_widget_show (text_quotefmt);
3335 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
3336 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
3337 gtk_widget_set_usize(text_quotefmt, 400, 60);
3339 hbox1 = gtk_hbox_new (FALSE, 8);
3340 gtk_widget_show (hbox1);
3341 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3343 label_fw_quotemark = gtk_label_new (_("Forward quotation mark"));
3344 gtk_widget_show (label_fw_quotemark);
3345 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotemark, FALSE, FALSE, 0);
3347 entry_fw_quotemark = gtk_entry_new ();
3348 gtk_widget_show (entry_fw_quotemark);
3349 gtk_box_pack_start (GTK_BOX (hbox1), entry_fw_quotemark, FALSE, FALSE, 0);
3350 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
3352 hbox1 = gtk_hbox_new (FALSE, 0);
3353 gtk_widget_show (hbox1);
3354 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3356 label_fw_quotefmt = gtk_label_new (_("Forward format:"));
3357 gtk_widget_show (label_fw_quotefmt);
3358 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotefmt, FALSE, FALSE, 0);
3360 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3361 gtk_widget_show (scrolledwin_quotefmt);
3362 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3363 gtk_scrolled_window_set_policy
3364 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3365 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3367 text_fw_quotefmt = gtk_text_new (NULL, NULL);
3368 gtk_widget_show (text_fw_quotefmt);
3369 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt);
3370 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
3371 gtk_widget_set_usize(text_fw_quotefmt, 400, 60);
3373 hbox1 = gtk_hbox_new (FALSE, 0);
3374 gtk_widget_show (hbox1);
3375 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
3378 gtk_button_new_with_label (_(" Description of symbols "));
3379 gtk_widget_show (btn_quotedesc);
3380 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc,
3383 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
3384 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
3387 gtkut_button_set_create(&hbox1, &close_btn, _("Close"),
3388 NULL, NULL, NULL, NULL);
3389 gtk_box_pack_end(GTK_BOX(vbox_quote), hbox1, FALSE, FALSE, 0);
3390 gtk_widget_grab_default(close_btn);
3392 gtk_signal_connect(GTK_OBJECT(close_btn), "clicked",
3393 GTK_SIGNAL_FUNC(compose_prefs_close), NULL);
3395 gtk_widget_show_all(vbox_quote);
3397 composeprefs.window = window;
3398 composeprefs.close_btn = close_btn;
3400 compose.checkbtn_quote = checkbtn_quote;
3401 compose.entry_quotemark = entry_quotemark;
3402 compose.text_quotefmt = text_quotefmt;
3403 compose.entry_fw_quotemark = entry_fw_quotemark;
3404 compose.text_fw_quotefmt = text_fw_quotefmt;
3407 static void compose_prefs_close(GtkWidget *widget)
3409 gtk_widget_hide(composeprefs.window);
3412 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3414 gtk_widget_hide(composeprefs.window);
3419 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3421 if (event && event->keyval == GDK_Escape) {
3422 gtk_widget_hide(composeprefs.window);
3426 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3429 GtkWidget *menuitem;
3431 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3432 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3433 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3434 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3437 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3439 RecvDialogShow dialog_show;
3440 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3442 GtkWidget *menuitem;
3444 dialog_show = *((RecvDialogShow *)pparam->data);
3446 switch (dialog_show) {
3447 case RECVDIALOG_ALWAYS:
3448 gtk_option_menu_set_history(optmenu, 0);
3450 case RECVDIALOG_WINDOW_ACTIVE:
3451 gtk_option_menu_set_history(optmenu, 1);
3453 case RECVDIALOG_NEVER:
3454 gtk_option_menu_set_history(optmenu, 2);
3459 menu = gtk_option_menu_get_menu(optmenu);
3460 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3461 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));