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"
53 PrefsCommon prefs_common;
55 static PrefsDialog dialog;
57 static struct Receive {
58 GtkWidget *checkbtn_incext;
59 GtkWidget *entry_incext;
60 GtkWidget *button_incext;
62 GtkWidget *checkbtn_local;
63 GtkWidget *checkbtn_filter_on_inc;
64 GtkWidget *entry_spool;
66 GtkWidget *checkbtn_autochk;
67 GtkWidget *spinbtn_autochk;
68 GtkObject *spinbtn_autochk_adj;
70 GtkWidget *checkbtn_chkonstartup;
71 GtkWidget *checkbtn_noerrorpanel;
73 GtkWidget *spinbtn_maxarticle;
74 GtkObject *spinbtn_maxarticle_adj;
78 GtkWidget *checkbtn_sendext;
79 GtkWidget *entry_sendext;
80 GtkWidget *button_sendext;
82 GtkWidget *checkbtn_savemsg;
83 GtkWidget *checkbtn_queuemsg;
85 GtkWidget *optmenu_charset;
87 GtkWidget *checkbtn_returnreceipt;
90 static struct Compose {
91 GtkWidget *checkbtn_quote;
92 GtkWidget *entry_quotemark;
93 GtkWidget *text_quotefmt;
94 GtkWidget *checkbtn_autosig;
95 GtkWidget *entry_sigsep;
97 GtkWidget *entry_fw_quotemark;
98 GtkWidget *text_fw_quotefmt;
100 GtkWidget *spinbtn_linewrap;
101 GtkObject *spinbtn_linewrap_adj;
102 GtkWidget *checkbtn_wrapquote;
103 GtkWidget *checkbtn_wrapatsend;
105 GtkWidget * checkbtn_forward_as_attachment;
106 GtkWidget * checkbtn_reply_account_autoselect;
109 static struct Display {
110 GtkWidget *entry_textfont;
111 GtkWidget *button_textfont;
113 GtkWidget *entry_smallfont;
114 GtkWidget *entry_normalfont;
115 GtkWidget *entry_boldfont;
117 GtkWidget *chkbtn_folder_unread;
119 GtkWidget *chkbtn_transhdr;
121 GtkWidget *chkbtn_swapfrom;
122 GtkWidget *chkbtn_hscrollbar;
123 GtkWidget *chkbtn_useaddrbook;
125 GtkWidget *entry_datefmt;
128 static struct Message {
129 GtkWidget *chkbtn_enablecol;
130 GtkWidget *button_edit_col;
131 GtkWidget *chkbtn_mbalnum;
132 GtkWidget *chkbtn_disphdrpane;
133 GtkWidget *chkbtn_disphdr;
134 GtkWidget *spinbtn_linespc;
135 GtkObject *spinbtn_linespc_adj;
136 GtkWidget *chkbtn_headspc;
138 GtkWidget *chkbtn_smoothscroll;
139 GtkWidget *spinbtn_scrollstep;
140 GtkObject *spinbtn_scrollstep_adj;
141 GtkWidget *chkbtn_halfpage;
145 static struct Privacy {
146 GtkWidget *checkbtn_default_encrypt;
147 GtkWidget *checkbtn_default_sign;
148 GtkWidget *checkbtn_auto_check_signatures;
149 GtkWidget *checkbtn_gpg_signature_popup;
150 GtkWidget *checkbtn_passphrase_grab;
151 GtkWidget *checkbtn_gpg_warning;
152 GtkWidget *optmenu_default_signkey;
156 static struct Interface {
157 GtkWidget *checkbtn_emacs;
158 GtkWidget *checkbtn_openunread;
159 GtkWidget *checkbtn_openinbox;
160 GtkWidget *checkbtn_immedexec;
161 GtkWidget *checkbtn_confonexit;
162 GtkWidget *checkbtn_cleanonexit;
163 GtkWidget *checkbtn_askonclean;
164 GtkWidget *checkbtn_warnqueued;
165 GtkWidget *checkbtn_addaddrbyclick;
166 GtkWidget *recvdialog_optmenu;
169 static struct Other {
170 GtkWidget *uri_combo;
171 GtkWidget *uri_entry;
172 GtkWidget *printcmd_entry;
173 GtkWidget *exteditor_combo;
174 GtkWidget *exteditor_entry;
177 static struct MessageColorButtons {
178 GtkWidget *quote_level1_btn;
179 GtkWidget *quote_level2_btn;
180 GtkWidget *quote_level3_btn;
184 static GtkWidget *quote_desc_win;
185 static GtkWidget *font_sel_win;
186 static GtkWidget *quote_color_win;
187 static GtkWidget *color_dialog;
189 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
190 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
192 static void prefs_common_default_signkey_set_data_from_optmenu
194 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
196 static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam);
197 static void prefs_recvdialog_set_optmenu(PrefParam *pparam);
200 parameter name, default value, pointer to the prefs variable, data type,
201 pointer to the widget pointer,
202 pointer to the function for data setting,
203 pointer to the function for widget setting
206 static PrefParam param[] = {
208 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
209 &receive.checkbtn_incext,
210 prefs_set_data_from_toggle, prefs_set_toggle},
211 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
212 &receive.entry_incext,
213 prefs_set_data_from_entry, prefs_set_entry},
215 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
216 &receive.checkbtn_local,
217 prefs_set_data_from_toggle, prefs_set_toggle},
218 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
219 &receive.checkbtn_filter_on_inc,
220 prefs_set_data_from_toggle, prefs_set_toggle},
221 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
222 &receive.entry_spool,
223 prefs_set_data_from_entry, prefs_set_entry},
225 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
226 &receive.checkbtn_autochk,
227 prefs_set_data_from_toggle, prefs_set_toggle},
228 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
229 &receive.spinbtn_autochk,
230 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
231 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
232 &receive.checkbtn_chkonstartup,
233 prefs_set_data_from_toggle, prefs_set_toggle},
234 {"noerrorpanel", "FALSE", &prefs_common.noerrorpanel, P_BOOL,
235 &receive.checkbtn_noerrorpanel,
236 prefs_set_data_from_toggle, prefs_set_toggle},
238 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
239 &receive.spinbtn_maxarticle,
240 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
243 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
244 &send.checkbtn_sendext,
245 prefs_set_data_from_toggle, prefs_set_toggle},
246 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
247 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
248 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
249 &send.checkbtn_savemsg,
250 prefs_set_data_from_toggle, prefs_set_toggle},
251 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
252 &send.checkbtn_queuemsg,
253 prefs_set_data_from_toggle, prefs_set_toggle},
255 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
256 &send.optmenu_charset,
257 prefs_common_charset_set_data_from_optmenu,
258 prefs_common_charset_set_optmenu},
261 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
262 &compose.checkbtn_quote,
263 prefs_set_data_from_toggle, prefs_set_toggle},
264 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
265 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
266 {"quote_format", "On %d\\n%f wrote:\\n\\n%Q",
267 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
268 prefs_set_data_from_text, prefs_set_text},
269 {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
270 &compose.entry_fw_quotemark, prefs_set_data_from_entry, prefs_set_entry},
271 {"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",
272 &prefs_common.fw_quotefmt, P_STRING, &compose.text_fw_quotefmt,
273 prefs_set_data_from_text, prefs_set_text},
275 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
276 &compose.checkbtn_autosig,
277 prefs_set_data_from_toggle, prefs_set_toggle},
278 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
279 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
281 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
282 &compose.spinbtn_linewrap,
283 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
284 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
285 &compose.checkbtn_wrapquote,
286 prefs_set_data_from_toggle, prefs_set_toggle},
287 {"linewrap_before_sending", "FALSE",
288 &prefs_common.linewrap_at_send, P_BOOL,
289 &compose.checkbtn_wrapatsend,
290 prefs_set_data_from_toggle, prefs_set_toggle},
291 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
292 P_BOOL, &compose.checkbtn_forward_as_attachment,
293 prefs_set_data_from_toggle, prefs_set_toggle},
294 {"reply_account_autoselect", "TRUE", &prefs_common.reply_account_autoselect,
295 P_BOOL, &compose.checkbtn_reply_account_autoselect,
296 prefs_set_data_from_toggle, prefs_set_toggle},
298 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
302 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
304 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
305 &prefs_common.textfont, P_STRING,
306 &display.entry_textfont,
307 prefs_set_data_from_entry, prefs_set_entry},
308 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
309 &prefs_common.smallfont, P_STRING,
310 &display.entry_smallfont,
311 prefs_set_data_from_entry, prefs_set_entry},
312 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
313 &prefs_common.boldfont, P_STRING,
314 &display.entry_boldfont,
315 prefs_set_data_from_entry, prefs_set_entry},
316 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
317 &prefs_common.normalfont, P_STRING,
318 &display.entry_normalfont,
319 prefs_set_data_from_entry, prefs_set_entry},
321 {"display_folder_unread_num", "TRUE",
322 &prefs_common.display_folder_unread, P_BOOL,
323 &display.chkbtn_folder_unread,
324 prefs_set_data_from_toggle, prefs_set_toggle},
326 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
327 &display.chkbtn_transhdr,
328 prefs_set_data_from_toggle, prefs_set_toggle},
330 /* Display: Summary View */
331 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
332 &display.chkbtn_swapfrom,
333 prefs_set_data_from_toggle, prefs_set_toggle},
334 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
335 &display.chkbtn_hscrollbar,
336 prefs_set_data_from_toggle, prefs_set_toggle},
337 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
338 &display.chkbtn_useaddrbook,
339 prefs_set_data_from_toggle, prefs_set_toggle},
340 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
341 P_STRING, &display.entry_datefmt,
342 prefs_set_data_from_entry, prefs_set_entry},
345 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
348 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
350 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
353 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
355 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
357 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
359 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
361 {"show_score", "TRUE", &prefs_common.show_score, P_BOOL,
363 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
365 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
367 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
369 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
373 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
375 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
377 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
379 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
381 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
383 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
385 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
387 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
389 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
391 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
393 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
395 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
397 {"summary_col_score", "40", &prefs_common.summary_col_score,
398 P_INT, NULL, NULL, NULL},
399 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
401 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
403 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
405 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
406 P_INT, NULL, NULL, NULL},
407 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
409 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
411 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
413 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
415 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
417 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
419 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
421 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
423 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
425 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
427 {"compose_width", "600", &prefs_common.compose_width, P_INT,
429 {"compose_height", "560", &prefs_common.compose_height, P_INT,
433 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
434 &message.chkbtn_enablecol,
435 prefs_set_data_from_toggle, prefs_set_toggle},
437 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
439 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
441 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
443 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
445 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
447 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
448 P_BOOL, NULL, NULL, NULL},
450 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
451 &message.chkbtn_mbalnum,
452 prefs_set_data_from_toggle, prefs_set_toggle},
453 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
454 P_BOOL, &message.chkbtn_disphdrpane,
455 prefs_set_data_from_toggle, prefs_set_toggle},
456 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
457 &message.chkbtn_disphdr,
458 prefs_set_data_from_toggle, prefs_set_toggle},
459 {"line_space", "2", &prefs_common.line_space, P_INT,
460 &message.spinbtn_linespc,
461 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
462 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
463 &message.chkbtn_headspc,
464 prefs_set_data_from_toggle, prefs_set_toggle},
466 {"enable_smooth_scroll", "FALSE",
467 &prefs_common.enable_smooth_scroll, P_BOOL,
468 &message.chkbtn_smoothscroll,
469 prefs_set_data_from_toggle, prefs_set_toggle},
470 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
471 &message.spinbtn_scrollstep,
472 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
473 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
474 &message.chkbtn_halfpage,
475 prefs_set_data_from_toggle, prefs_set_toggle},
477 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
481 {"mime_image_viewer", "display '%s'",
482 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
483 {"mime_audio_player", "play '%s'",
484 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
488 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
489 &privacy.checkbtn_default_encrypt,
490 prefs_set_data_from_toggle, prefs_set_toggle},
491 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
492 &privacy.checkbtn_default_sign,
493 prefs_set_data_from_toggle, prefs_set_toggle},
494 {"auto_check_signatures", "TRUE",
495 &prefs_common.auto_check_signatures, P_BOOL,
496 &privacy.checkbtn_auto_check_signatures,
497 prefs_set_data_from_toggle, prefs_set_toggle},
498 {"gpg_signature_popup", "FALSE",
499 &prefs_common.gpg_signature_popup, P_BOOL,
500 &privacy.checkbtn_gpg_signature_popup,
501 prefs_set_data_from_toggle, prefs_set_toggle},
503 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
504 &privacy.checkbtn_passphrase_grab,
505 prefs_set_data_from_toggle, prefs_set_toggle},
506 #endif /* __MINGW32__ */
507 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
508 &privacy.checkbtn_gpg_warning,
509 prefs_set_data_from_toggle, prefs_set_toggle},
510 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
511 &privacy.optmenu_default_signkey,
512 prefs_common_default_signkey_set_data_from_optmenu,
513 prefs_common_default_signkey_set_optmenu},
514 #endif /* USE_GPGME */
517 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
519 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
522 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
523 &interface.checkbtn_emacs,
524 prefs_set_data_from_toggle, prefs_set_toggle},
525 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
526 P_BOOL, &interface.checkbtn_openunread,
527 prefs_set_data_from_toggle, prefs_set_toggle},
528 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
529 P_BOOL, &interface.checkbtn_openinbox,
530 prefs_set_data_from_toggle, prefs_set_toggle},
531 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
532 &interface.checkbtn_immedexec,
533 prefs_set_data_from_toggle, prefs_set_toggle},
534 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
535 P_BOOL, &interface.checkbtn_addaddrbyclick,
536 prefs_set_data_from_toggle, prefs_set_toggle},
537 {"receive_dialog", NULL, &prefs_common.receive_dialog, P_ENUM,
538 &interface.recvdialog_optmenu,
539 prefs_recvdialog_set_data_from_optmenu,
540 prefs_recvdialog_set_optmenu},
542 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
543 &interface.checkbtn_confonexit,
544 prefs_set_data_from_toggle, prefs_set_toggle},
545 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
546 &send.checkbtn_returnreceipt,
547 prefs_set_data_from_toggle, prefs_set_toggle},
548 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
549 &interface.checkbtn_cleanonexit,
550 prefs_set_data_from_toggle, prefs_set_toggle},
551 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
552 &interface.checkbtn_askonclean,
553 prefs_set_data_from_toggle, prefs_set_toggle},
554 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
555 P_BOOL, &interface.checkbtn_warnqueued,
556 prefs_set_data_from_toggle, prefs_set_toggle},
559 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
560 &prefs_common.uri_cmd, P_STRING,
561 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
562 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
563 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
564 {"ext_editor_command", "gedit %s",
565 &prefs_common.ext_editor_cmd, P_STRING,
566 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
568 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
570 {"important_score", "1", &prefs_common.important_score, P_INT,
573 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
577 #define VSPACING_NARROW 4
578 #define VBOX_BORDER 16
579 #define DEFAULT_ENTRY_WIDTH 80
580 #define PREFSBUFSIZE 1024
582 /* widget creating functions */
583 static void prefs_common_create (void);
584 static void prefs_receive_create (void);
585 static void prefs_send_create (void);
586 static void prefs_compose_create (void);
587 static void prefs_display_create (void);
588 static void prefs_message_create (void);
590 static void prefs_privacy_create (void);
592 static void prefs_interface_create (void);
593 static void prefs_other_create (void);
595 static void prefs_quote_description (void);
596 static void prefs_quote_description_create (void);
597 static void prefs_quote_colors_dialog (void);
598 static void prefs_quote_colors_dialog_create (void);
599 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
602 static void quote_color_set_dialog (GtkWidget *widget,
604 static void quote_colors_set_dialog_ok (GtkWidget *widget,
606 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
608 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
611 static void set_button_bg_color (GtkWidget *widget,
613 static void prefs_enable_message_color_toggled (void);
614 static void prefs_recycle_colors_toggled (GtkWidget *widget);
616 /* functions for setting items of SummaryView */
617 static void prefs_summary_display_item_dialog_create
618 (gboolean *cancelled);
619 static void display_item_ok (GtkWidget *widget,
620 gboolean *cancelled);
621 static void display_item_cancel (GtkWidget *widget,
622 gboolean *cancelled);
623 static gint display_item_delete_event (GtkWidget *widget,
625 gboolean *cancelled);
626 static void display_item_key_pressed (GtkWidget *widget,
628 gboolean *cancelled);
630 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
631 static void prefs_font_selection_key_pressed (GtkWidget *widget,
634 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
636 static gint prefs_common_deleted (GtkWidget *widget,
639 static void prefs_common_key_pressed (GtkWidget *widget,
642 static void prefs_common_ok (void);
643 static void prefs_common_apply (void);
644 static void prefs_common_cancel (void);
646 static void compose_prefs_fmt_open(void);
647 static void compose_prefs_fmt_create(void);
649 void prefs_common_read_config(void)
651 prefs_read_config(param, "Common", COMMON_RC);
654 void prefs_common_save_config(void)
656 prefs_save_config(param, "Common", COMMON_RC);
659 void prefs_common_open(void)
661 if (prefs_rc_is_readonly(COMMON_RC))
664 inc_autocheck_timer_remove();
666 if (!dialog.window) {
667 prefs_common_create();
670 manage_window_set_transient(GTK_WINDOW(dialog.window));
671 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
672 gtk_widget_grab_focus(dialog.ok_btn);
674 prefs_set_dialog(param);
676 gtk_widget_show(dialog.window);
679 static void prefs_common_create(void)
683 debug_print(_("Creating common preferences window...\n"));
685 prefs_dialog_create(&dialog);
686 gtk_window_set_title (GTK_WINDOW(dialog.window),
687 _("Common Preferences"));
688 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
689 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
690 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
691 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
692 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
693 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
694 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
695 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
696 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
697 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
698 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
699 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
700 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
701 GTK_SIGNAL_FUNC(prefs_common_cancel),
702 GTK_OBJECT(dialog.window));
704 /* create all widgets on notebook */
705 prefs_receive_create();
706 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
708 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
709 prefs_compose_create();
710 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
711 prefs_display_create();
712 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
713 prefs_message_create();
714 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
716 prefs_privacy_create();
717 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
719 prefs_interface_create();
720 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
721 prefs_other_create();
722 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
724 compose_prefs_fmt_create();
726 gtk_widget_show_all(dialog.window);
729 static void prefs_receive_create(void)
733 GtkWidget *frame_incext;
734 GtkWidget *checkbtn_incext;
736 GtkWidget *label_incext;
737 GtkWidget *entry_incext;
738 GtkWidget *button_incext;
740 GtkWidget *frame_spool;
741 GtkWidget *checkbtn_local;
742 GtkWidget *checkbtn_filter_on_inc;
743 GtkWidget *label_spool;
744 GtkWidget *entry_spool;
746 GtkWidget *hbox_autochk;
747 GtkWidget *checkbtn_autochk;
748 GtkWidget *label_autochk1;
749 GtkObject *spinbtn_autochk_adj;
750 GtkWidget *spinbtn_autochk;
751 GtkWidget *label_autochk2;
752 GtkWidget *checkbtn_chkonstartup;
753 GtkWidget *checkbtn_noerrorpanel;
755 GtkWidget *frame_news;
756 GtkWidget *label_maxarticle;
757 GtkWidget *spinbtn_maxarticle;
758 GtkObject *spinbtn_maxarticle_adj;
760 vbox1 = gtk_vbox_new (FALSE, VSPACING);
761 gtk_widget_show (vbox1);
762 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
763 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
765 PACK_FRAME(vbox1, frame_incext, _("External program"));
767 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
768 gtk_widget_show (vbox2);
769 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
770 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
772 /* Use of external incorporation program */
773 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
774 _("Use external program for incorporation"));
776 hbox = gtk_hbox_new (FALSE, 8);
777 gtk_widget_show (hbox);
778 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
779 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
781 label_incext = gtk_label_new (_("Program path"));
782 gtk_widget_show (label_incext);
783 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
785 entry_incext = gtk_entry_new ();
786 gtk_widget_show (entry_incext);
787 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
789 button_incext = gtk_button_new_with_label ("... ");
790 gtk_widget_show (button_incext);
791 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
793 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
795 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
796 gtk_widget_show (vbox2);
797 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
798 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
800 hbox = gtk_hbox_new (FALSE, 32);
801 gtk_widget_show (hbox);
802 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
804 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
805 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
806 _("Filter on incorporation"));
807 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
809 hbox = gtk_hbox_new (FALSE, 8);
810 gtk_widget_show (hbox);
811 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
812 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
814 label_spool = gtk_label_new (_("Spool directory"));
815 gtk_widget_show (label_spool);
816 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
818 entry_spool = gtk_entry_new ();
819 gtk_widget_show (entry_spool);
820 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
822 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
823 gtk_widget_show (vbox2);
824 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
827 hbox_autochk = gtk_hbox_new (FALSE, 8);
828 gtk_widget_show (hbox_autochk);
829 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
831 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
832 _("Auto-check new mail"));
834 label_autochk1 = gtk_label_new (_("each"));
835 gtk_widget_show (label_autochk1);
836 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
838 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
839 spinbtn_autochk = gtk_spin_button_new
840 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
841 gtk_widget_show (spinbtn_autochk);
842 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
843 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
844 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
846 label_autochk2 = gtk_label_new (_("minute(s)"));
847 gtk_widget_show (label_autochk2);
848 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
850 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
851 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
852 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
854 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
855 _("Check new mail on startup"));
857 PACK_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel,
858 _("No error popup on receive error"));
860 PACK_FRAME(vbox1, frame_news, _("News"));
862 hbox = gtk_hbox_new (FALSE, 8);
863 gtk_widget_show (hbox);
864 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
865 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
867 label_maxarticle = gtk_label_new
868 (_("Maximum article number to download\n"
869 "(unlimited if 0 is specified)"));
870 gtk_widget_show (label_maxarticle);
871 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
872 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
874 spinbtn_maxarticle_adj =
875 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
876 spinbtn_maxarticle = gtk_spin_button_new
877 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
878 gtk_widget_show (spinbtn_maxarticle);
879 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
881 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
882 gtk_spin_button_set_numeric
883 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
885 receive.checkbtn_incext = checkbtn_incext;
886 receive.entry_incext = entry_incext;
887 receive.button_incext = button_incext;
889 receive.checkbtn_local = checkbtn_local;
890 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
891 receive.entry_spool = entry_spool;
893 receive.checkbtn_autochk = checkbtn_autochk;
894 receive.spinbtn_autochk = spinbtn_autochk;
895 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
897 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
898 receive.checkbtn_noerrorpanel = checkbtn_noerrorpanel;
900 receive.spinbtn_maxarticle = spinbtn_maxarticle;
901 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
904 static void prefs_send_create(void)
908 GtkWidget *frame_sendext;
909 GtkWidget *vbox_sendext;
910 GtkWidget *checkbtn_sendext;
912 GtkWidget *label_sendext;
913 GtkWidget *entry_sendext;
914 GtkWidget *button_sendext;
915 GtkWidget *checkbtn_savemsg;
916 GtkWidget *checkbtn_queuemsg;
917 GtkWidget *label_outcharset;
919 GtkWidget *optmenu_menu;
921 GtkWidget *checkbtn_returnreceipt;
923 vbox1 = gtk_vbox_new (FALSE, VSPACING);
924 gtk_widget_show (vbox1);
925 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
926 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
928 PACK_FRAME(vbox1, frame_sendext, _("External program"));
930 gtk_widget_set_sensitive(frame_sendext, FALSE);
932 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
933 gtk_widget_show (vbox_sendext);
934 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
935 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
937 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
938 _("Use external program for sending"));
940 hbox1 = gtk_hbox_new (FALSE, 8);
941 gtk_widget_show (hbox1);
942 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
943 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
945 label_sendext = gtk_label_new (_("Program path"));
946 gtk_widget_show (label_sendext);
947 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
949 entry_sendext = gtk_entry_new ();
950 gtk_widget_show (entry_sendext);
951 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
953 button_sendext = gtk_button_new_with_label ("... ");
954 gtk_widget_show (button_sendext);
955 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
957 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
958 gtk_widget_show (vbox2);
959 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
961 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
962 _("Save sent messages to outbox"));
963 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
964 _("Queue messages that fail to send"));
965 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
966 _("Send return receipt on request"));
968 hbox1 = gtk_hbox_new (FALSE, 8);
969 gtk_widget_show (hbox1);
970 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
972 label_outcharset = gtk_label_new (_("Outgoing codeset"));
973 gtk_widget_show (label_outcharset);
974 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
976 optmenu = gtk_option_menu_new ();
977 gtk_widget_show (optmenu);
978 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
980 optmenu_menu = gtk_menu_new ();
982 #define SET_MENUITEM(str, charset) \
984 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
987 SET_MENUITEM(_("Automatic"), CS_AUTO);
988 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
990 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
992 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
994 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
995 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
996 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
997 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
998 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
999 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1000 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1001 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1002 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1003 #endif /* HAVE_LIBJCONV */
1004 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1006 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1007 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1010 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1011 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1013 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1014 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1016 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1017 #endif /* HAVE_LIBJCONV */
1019 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1021 send.checkbtn_sendext = checkbtn_sendext;
1022 send.entry_sendext = entry_sendext;
1023 send.button_sendext = button_sendext;
1025 send.checkbtn_savemsg = checkbtn_savemsg;
1026 send.checkbtn_queuemsg = checkbtn_queuemsg;
1027 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1029 send.optmenu_charset = optmenu;
1032 static void prefs_compose_create(void)
1037 GtkWidget *frame_quote;
1038 GtkWidget *vbox_quote;
1039 GtkWidget *checkbtn_quote;
1041 GtkWidget *label_quotemark;
1042 GtkWidget *entry_quotemark;
1044 GtkWidget *label_quotefmt;
1045 GtkWidget *btn_quotedesc;
1046 GtkWidget *scrolledwin_quotefmt;
1047 GtkWidget *text_quotefmt;
1052 GtkWidget *btn_quotefmt;
1054 GtkWidget *frame_sig;
1055 GtkWidget *vbox_sig;
1056 GtkWidget *checkbtn_autosig;
1057 GtkWidget *label_sigsep;
1058 GtkWidget *entry_sigsep;
1060 GtkWidget *vbox_linewrap;
1063 GtkWidget *label_linewrap;
1064 GtkObject *spinbtn_linewrap_adj;
1065 GtkWidget *spinbtn_linewrap;
1066 GtkWidget *checkbtn_wrapquote;
1067 GtkWidget *checkbtn_wrapatsend;
1069 GtkWidget *checkbtn_forward_as_attachment;
1070 GtkWidget *checkbtn_reply_account_autoselect;
1072 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1073 gtk_widget_show (vbox1);
1074 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1075 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1078 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
1080 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1081 gtk_widget_show (vbox_quote);
1082 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1083 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1085 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
1086 _("Quote message when replying"));
1088 hbox1 = gtk_hbox_new (FALSE, 8);
1089 gtk_widget_show (hbox1);
1090 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
1092 label_quotemark = gtk_label_new (_("Quotation mark"));
1093 gtk_widget_show (label_quotemark);
1094 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
1096 entry_quotemark = gtk_entry_new ();
1097 gtk_widget_show (entry_quotemark);
1098 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
1099 gtk_widget_set_usize (entry_quotemark, 64, -1);
1101 hbox2 = gtk_hbox_new (FALSE, 0);
1102 gtk_widget_show (hbox2);
1103 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1105 label_quotefmt = gtk_label_new (_("Quotation format:"));
1106 gtk_widget_show (label_quotefmt);
1107 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1110 gtk_button_new_with_label (_(" Quote format "));
1111 gtk_widget_show (btn_quotedesc);
1112 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1113 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1114 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), &cancelled);
1116 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1117 gtk_widget_show (scrolledwin_quotefmt);
1118 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1119 gtk_scrolled_window_set_policy
1120 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1121 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1123 text_quotefmt = gtk_text_new (NULL, NULL);
1124 gtk_widget_show (text_quotefmt);
1125 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1126 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1127 gtk_widget_set_usize(text_quotefmt, -1, 60);
1130 hbox1 = gtk_hbox_new (FALSE, 32);
1131 gtk_widget_show (hbox1);
1132 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1134 btn_quotefmt = gtk_button_new_with_label (_(" Quote format "));
1135 gtk_widget_show (btn_quotefmt);
1136 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotefmt, FALSE, FALSE, 0);
1137 gtk_signal_connect(GTK_OBJECT(btn_quotefmt), "clicked",
1138 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), NULL);
1140 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1142 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1143 gtk_widget_show (vbox_sig);
1144 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1145 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1147 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1148 _("Insert signature automatically"));
1150 hbox1 = gtk_hbox_new (FALSE, 8);
1151 gtk_widget_show (hbox1);
1152 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1154 label_sigsep = gtk_label_new (_("Signature separator"));
1155 gtk_widget_show (label_sigsep);
1156 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1158 entry_sigsep = gtk_entry_new ();
1159 gtk_widget_show (entry_sigsep);
1160 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1161 gtk_widget_set_usize (entry_sigsep, 64, -1);
1164 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1165 gtk_widget_show (vbox_linewrap);
1166 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1168 hbox3 = gtk_hbox_new (FALSE, 8);
1169 gtk_widget_show (hbox3);
1170 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1172 label_linewrap = gtk_label_new (_("Wrap messages at"));
1173 gtk_widget_show (label_linewrap);
1174 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1176 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1177 spinbtn_linewrap = gtk_spin_button_new
1178 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1179 gtk_widget_show (spinbtn_linewrap);
1180 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1181 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1182 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1184 label_linewrap = gtk_label_new (_("characters"));
1185 gtk_widget_show (label_linewrap);
1186 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1188 hbox4 = gtk_hbox_new (FALSE, 32);
1189 gtk_widget_show (hbox4);
1190 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1192 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1194 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1196 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1197 _("Forward as attachment"));
1199 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_account_autoselect,
1200 _("Automatically select account for mail replys"));
1203 compose.checkbtn_quote = checkbtn_quote;
1204 compose.entry_quotemark = entry_quotemark;
1205 compose.text_quotefmt = text_quotefmt;
1207 compose.checkbtn_autosig = checkbtn_autosig;
1208 compose.entry_sigsep = entry_sigsep;
1210 compose.spinbtn_linewrap = spinbtn_linewrap;
1211 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1212 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1213 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1215 compose.checkbtn_forward_as_attachment =
1216 checkbtn_forward_as_attachment;
1217 compose.checkbtn_reply_account_autoselect =
1218 checkbtn_reply_account_autoselect;
1221 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
1224 GtkWidget *datefmt_sample = NULL;
1226 g_return_if_fail(widget != NULL);
1227 g_return_if_fail(*widget != NULL);
1228 g_return_if_fail(display.entry_datefmt != NULL);
1230 datefmt_sample = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(*widget), "datefmt_sample");
1231 g_return_if_fail(datefmt_sample != NULL);
1233 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
1234 g_free(prefs_common.date_format);
1235 prefs_common.date_format = text;
1236 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
1238 gtk_widget_destroy(*widget);
1242 static void date_format_cancel_btn_clicked(GtkButton *button,
1245 g_return_if_fail(widget != NULL);
1246 g_return_if_fail(*widget != NULL);
1248 gtk_widget_destroy(*widget);
1252 static gboolean date_format_on_delete(GtkWidget *dialogwidget, gpointer d1, GtkWidget **widget)
1254 g_return_val_if_fail(widget != NULL, FALSE);
1255 g_return_val_if_fail(*widget != NULL, FALSE);
1260 static void date_format_entry_on_change(GtkEditable *editable, GtkLabel *example)
1263 struct tm *cal_time;
1266 cur_time = time(NULL);
1267 cal_time = localtime(&cur_time);
1269 text = gtk_editable_get_chars(editable, 0, -1);
1271 strftime(buffer, sizeof buffer, text, cal_time);
1273 gtk_label_set_text(example, buffer);
1276 static void date_format_select_row(GtkWidget *date_format_list, gint row,
1277 gint column, GdkEventButton *event,
1278 GtkWidget *date_format)
1284 GtkWidget *datefmt_sample = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(date_format), "datefmt_sample");
1286 g_return_if_fail(date_format_list != NULL);
1287 g_return_if_fail(date_format != NULL);
1288 g_return_if_fail(datefmt_sample != NULL);
1290 /* only on double click */
1291 if (event->type != GDK_2BUTTON_PRESS)
1294 /* get format from clist */
1295 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
1297 curs_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
1298 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
1300 /* insert the format into the text entry */
1301 new_format = g_malloc(strlen(old_format) + 3);
1303 strncpy(new_format, old_format, curs_pos);
1304 new_format[curs_pos] = '\0';
1305 strcat(new_format, format);
1306 strcat(new_format, &old_format[curs_pos]);
1308 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
1309 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), curs_pos + 2);
1314 static GtkWidget *create_date_format(GtkButton *button, void *data)
1316 static GtkWidget *date_format = NULL;
1318 GtkWidget *scrolledwindow1;
1319 GtkWidget *date_format_list;
1330 GtkWidget *confirm_area;
1332 GtkWidget *cancel_btn;
1333 GtkWidget *datefmt_sample = NULL;
1339 { "%a", _("the full abbreviated weekday name") },
1340 { "%A", _("the full weekday name") },
1341 { "%b", _("the abbreviated month name") },
1342 { "%B", _("the full month name") },
1343 { "%c", _("the preferred date and time for the current locale") },
1344 { "%C", _("the century number (year/100)") },
1345 { "%d", _("the day of the month as a decimal number") },
1346 { "%H", _("the hour as a decimal number using a 24-hour clock") },
1347 { "%I", _("the hour as a decimal number using a 12-hour clock") },
1348 { "%j", _("the day of the year as a decimal number") },
1349 { "%m", _("the month as a decimal number") },
1350 { "%M", _("the minute as a decimal number") },
1351 { "%p", _("either AM or PM") },
1352 { "%S", _("the second as a decimal number") },
1353 { "%w", _("the day of the week as a decimal number") },
1354 { "%x", _("the preferred date for the current locale") },
1355 { "%y", _("the last two digits of a year") },
1356 { "%Y", _("the year as a decimal number") },
1357 { "%Z", _("the time zone or name or abbreviation") }
1360 const int TIME_FORMAT_ELEMS = sizeof time_format / sizeof time_format[0];
1362 if (date_format) return date_format;
1364 date_format = gtk_window_new(GTK_WINDOW_DIALOG);
1365 gtk_window_set_title(GTK_WINDOW(date_format), _("Date format"));
1366 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1367 gtk_window_set_default_size(GTK_WINDOW(date_format), 440, 280);
1369 vbox1 = gtk_vbox_new(FALSE, 10);
1370 gtk_widget_show(vbox1);
1371 gtk_container_add(GTK_CONTAINER(date_format), vbox1);
1373 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
1374 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow1),
1375 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1376 gtk_widget_show(scrolledwindow1);
1377 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
1379 date_format_list = gtk_clist_new(2);
1380 gtk_widget_show(date_format_list);
1381 gtk_container_add(GTK_CONTAINER(scrolledwindow1), date_format_list);
1382 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 0, 80);
1383 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 1, 80);
1384 gtk_clist_column_titles_show(GTK_CLIST(date_format_list));
1386 label3 = gtk_label_new(_("Date Format"));
1387 gtk_widget_show(label3);
1388 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 0, label3);
1390 label4 = gtk_label_new(_("Date Format Description"));
1391 gtk_widget_show(label4);
1392 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 1, label4);
1394 for (tmp = 0; tmp < TIME_FORMAT_ELEMS; tmp++) {
1396 /* phoney casting necessary because of gtk... */
1397 text[0] = (gchar *) time_format[tmp].fmt;
1398 text[1] = (gchar *) time_format[tmp].txt;
1400 gtk_clist_append(GTK_CLIST(date_format_list), text);
1403 table2 = gtk_table_new(1, 1, TRUE);
1404 gtk_widget_show(table2);
1405 gtk_box_pack_start(GTK_BOX(vbox1), table2, FALSE, TRUE, 0);
1407 vbox2 = gtk_vbox_new(FALSE, 0);
1408 gtk_widget_show(vbox2);
1409 gtk_table_attach(GTK_TABLE(table2), vbox2, 0, 1, 0, 1,
1410 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1411 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1413 vbox3 = gtk_vbox_new(TRUE, 4);
1414 gtk_widget_show(vbox3);
1415 gtk_box_pack_end(GTK_BOX(vbox2), vbox3, FALSE, FALSE, 10);
1417 hbox2 = gtk_hbox_new(FALSE, 0);
1418 gtk_widget_show(hbox2);
1419 gtk_box_pack_start(GTK_BOX(vbox3), hbox2, TRUE, TRUE, 0);
1421 label5 = gtk_label_new(_("Date format"));
1422 gtk_widget_show(label5);
1423 gtk_box_pack_start(GTK_BOX(hbox2), label5, FALSE, FALSE, 0);
1424 gtk_misc_set_padding(GTK_MISC(label5), 8, 0);
1426 datefmt_sample = gtk_entry_new_with_max_length(300);
1427 gtk_widget_show(datefmt_sample);
1428 gtk_box_pack_start(GTK_BOX(hbox2), datefmt_sample, TRUE, TRUE, 40);
1430 /* we need the "sample" entry box; add it as data so callbacks can
1431 * get the entry box */
1432 gtk_object_set_data(GTK_OBJECT(date_format), "datefmt_sample", datefmt_sample);
1434 hbox1 = gtk_hbox_new(FALSE, 0);
1435 gtk_widget_show(hbox1);
1436 gtk_box_pack_start(GTK_BOX(vbox3), hbox1, TRUE, TRUE, 0);
1438 label6 = gtk_label_new(_("Example"));
1439 gtk_widget_show(label6);
1440 gtk_box_pack_start(GTK_BOX(hbox1), label6, FALSE, TRUE, 0);
1441 gtk_misc_set_padding(GTK_MISC(label6), 8, 0);
1443 label7 = gtk_label_new("");
1444 gtk_widget_show(label7);
1445 gtk_box_pack_start(GTK_BOX(hbox1), label7, TRUE, TRUE, 60);
1446 gtk_label_set_justify(GTK_LABEL(label7), GTK_JUSTIFY_LEFT);
1448 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
1449 &cancel_btn, _("Cancel"), NULL, NULL);
1450 gtk_widget_grab_default(ok_btn);
1452 gtk_widget_show(confirm_area);
1454 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
1456 /* set the current format */
1457 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), prefs_common.date_format);
1458 date_format_entry_on_change(GTK_EDITABLE(datefmt_sample),
1461 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1462 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
1465 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
1466 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
1469 gtk_signal_connect(GTK_OBJECT(date_format), "delete_event",
1470 GTK_SIGNAL_FUNC(date_format_on_delete),
1473 gtk_signal_connect(GTK_OBJECT(datefmt_sample), "changed",
1474 GTK_SIGNAL_FUNC(date_format_entry_on_change),
1477 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1478 gtk_window_set_modal(GTK_WINDOW(date_format), TRUE);
1480 gtk_widget_show(date_format);
1482 gtk_signal_connect(GTK_OBJECT(date_format_list), "select_row",
1483 GTK_SIGNAL_FUNC(date_format_select_row),
1489 static void prefs_display_create(void)
1492 GtkWidget *frame_font;
1494 GtkWidget *label_textfont;
1495 GtkWidget *entry_textfont;
1496 GtkWidget *button_textfont;
1497 GtkWidget *chkbtn_folder_unread;
1498 GtkWidget *chkbtn_transhdr;
1499 GtkWidget *frame_summary;
1501 GtkWidget *chkbtn_swapfrom;
1502 GtkWidget *chkbtn_hscrollbar;
1503 GtkWidget *chkbtn_useaddrbook;
1505 GtkWidget *label_datefmt;
1506 GtkWidget *label_datefmt_btn;
1507 GtkWidget *tmplabel, *tmpentry, *tmpbutton;
1508 GtkWidget *entry_datefmt;
1509 GtkTooltips *tooltips_datefmt;
1510 GtkWidget *button_dispitem;
1512 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1513 gtk_widget_show (vbox1);
1514 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1515 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1517 PACK_FRAME(vbox1, frame_font, _("Font"));
1519 table1 = gtk_table_new (1, 3, FALSE);
1520 gtk_widget_show (table1);
1521 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1522 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1523 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1524 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1526 label_textfont = gtk_label_new (_("Text"));
1527 gtk_widget_show (label_textfont);
1528 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1529 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1531 entry_textfont = gtk_entry_new ();
1532 gtk_widget_show (entry_textfont);
1533 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1534 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1536 button_textfont = gtk_button_new_with_label ("... ");
1537 gtk_widget_show (button_textfont);
1538 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1540 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1541 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1543 tmplabel = gtk_label_new (_("Small"));
1544 gtk_widget_show (tmplabel);
1545 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1546 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1548 tmpentry = gtk_entry_new ();
1549 gtk_widget_show (tmpentry);
1550 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1551 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1553 tmpbutton = gtk_button_new_with_label ("... ");
1554 gtk_widget_show (tmpbutton);
1555 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1557 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1558 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1559 display.entry_smallfont = tmpentry;
1561 tmplabel = gtk_label_new (_("Normal"));
1562 gtk_widget_show (tmplabel);
1563 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1564 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1566 tmpentry = gtk_entry_new ();
1567 gtk_widget_show (tmpentry);
1568 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1569 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1571 tmpbutton = gtk_button_new_with_label ("... ");
1572 gtk_widget_show (tmpbutton);
1573 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1575 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1576 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1577 display.entry_normalfont = tmpentry;
1579 tmplabel = gtk_label_new (_("Bold"));
1580 gtk_widget_show (tmplabel);
1581 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1582 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1584 tmpentry = gtk_entry_new ();
1585 gtk_widget_show (tmpentry);
1586 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1587 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1589 tmpbutton = gtk_button_new_with_label ("... ");
1590 gtk_widget_show (tmpbutton);
1591 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1593 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1594 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1595 display.entry_boldfont = tmpentry;
1597 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1598 gtk_widget_show (vbox2);
1599 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1602 (vbox2, chkbtn_transhdr,
1603 _("Translate header name (such as `From:', `Subject:')"));
1605 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1606 _("Display unread number next to folder name"));
1608 /* ---- Summary ---- */
1610 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1612 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1613 gtk_widget_show (vbox2);
1614 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1615 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1618 (vbox2, chkbtn_swapfrom,
1619 _("Display recipient on `From' column if sender is yourself"));
1621 (vbox2, chkbtn_useaddrbook,
1622 _("Display sender using address book"));
1624 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1626 hbox1 = gtk_hbox_new (FALSE, 8);
1627 gtk_widget_show (hbox1);
1628 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1630 label_datefmt = gtk_label_new (_("Date format"));
1631 gtk_widget_show (label_datefmt);
1632 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1634 entry_datefmt = gtk_entry_new ();
1635 gtk_widget_show (entry_datefmt);
1636 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1638 label_datefmt_btn = gtk_button_new_with_label(_("Customize"));
1639 gtk_widget_show(label_datefmt_btn);
1640 gtk_box_pack_start(GTK_BOX (hbox1), label_datefmt_btn, FALSE, FALSE, 0);
1641 gtk_signal_connect(GTK_OBJECT(label_datefmt_btn), "clicked",
1642 GTK_SIGNAL_FUNC(create_date_format), NULL);
1644 hbox1 = gtk_hbox_new (FALSE, 8);
1645 gtk_widget_show (hbox1);
1646 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1648 button_dispitem = gtk_button_new_with_label
1649 (_(" Set display item of summary... "));
1650 gtk_widget_show (button_dispitem);
1651 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1652 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1653 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1656 display.entry_textfont = entry_textfont;
1657 display.button_textfont = button_textfont;
1659 display.chkbtn_folder_unread = chkbtn_folder_unread;
1660 display.chkbtn_transhdr = chkbtn_transhdr;
1662 display.chkbtn_swapfrom = chkbtn_swapfrom;
1663 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1664 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1665 display.entry_datefmt = entry_datefmt;
1668 static void prefs_message_create(void)
1673 GtkWidget *chkbtn_enablecol;
1674 GtkWidget *button_edit_col;
1675 GtkWidget *chkbtn_mbalnum;
1676 GtkWidget *chkbtn_disphdrpane;
1677 GtkWidget *chkbtn_disphdr;
1678 GtkWidget *button_edit_disphdr;
1679 GtkWidget *hbox_linespc;
1680 GtkWidget *label_linespc;
1681 GtkObject *spinbtn_linespc_adj;
1682 GtkWidget *spinbtn_linespc;
1683 GtkWidget *chkbtn_headspc;
1685 GtkWidget *frame_scr;
1686 GtkWidget *vbox_scr;
1687 GtkWidget *chkbtn_smoothscroll;
1688 GtkWidget *hbox_scr;
1689 GtkWidget *label_scr;
1690 GtkObject *spinbtn_scrollstep_adj;
1691 GtkWidget *spinbtn_scrollstep;
1692 GtkWidget *chkbtn_halfpage;
1694 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1695 gtk_widget_show (vbox1);
1696 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1697 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1699 hbox1 = gtk_hbox_new (FALSE, 8);
1700 gtk_widget_show (hbox1);
1701 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1703 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1704 _("Enable coloration of message"));
1705 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1706 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1709 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1710 gtk_widget_show (button_edit_col);
1711 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1712 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1713 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1715 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1717 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1718 gtk_widget_show (vbox2);
1719 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1722 (vbox2, chkbtn_mbalnum,
1723 _("Display 2-byte alphabet and numeric with 1-byte character"));
1724 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1725 _("Display header pane above message view"));
1727 hbox1 = gtk_hbox_new (FALSE, 8);
1728 gtk_widget_show (hbox1);
1729 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1731 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1732 _("Display short headers on message view"));
1734 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1735 gtk_widget_show (button_edit_disphdr);
1736 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1738 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1739 GTK_SIGNAL_FUNC (prefs_display_header_open),
1742 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1744 hbox1 = gtk_hbox_new (FALSE, 32);
1745 gtk_widget_show (hbox1);
1746 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1748 hbox_linespc = gtk_hbox_new (FALSE, 8);
1749 gtk_widget_show (hbox1);
1750 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1752 label_linespc = gtk_label_new (_("Line space"));
1753 gtk_widget_show (label_linespc);
1754 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1757 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1758 spinbtn_linespc = gtk_spin_button_new
1759 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1760 gtk_widget_show (spinbtn_linespc);
1761 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1763 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1764 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1766 label_linespc = gtk_label_new (_("pixel(s)"));
1767 gtk_widget_show (label_linespc);
1768 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1771 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1773 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1775 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1776 gtk_widget_show (vbox_scr);
1777 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1778 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1780 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1782 hbox1 = gtk_hbox_new (FALSE, 32);
1783 gtk_widget_show (hbox1);
1784 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1786 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1788 hbox_scr = gtk_hbox_new (FALSE, 8);
1789 gtk_widget_show (hbox_scr);
1790 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1792 label_scr = gtk_label_new (_("Step"));
1793 gtk_widget_show (label_scr);
1794 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1796 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1797 spinbtn_scrollstep = gtk_spin_button_new
1798 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1799 gtk_widget_show (spinbtn_scrollstep);
1800 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1802 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1803 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1806 label_scr = gtk_label_new (_("pixel(s)"));
1807 gtk_widget_show (label_scr);
1808 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1810 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1812 message.chkbtn_enablecol = chkbtn_enablecol;
1813 message.button_edit_col = button_edit_col;
1814 message.chkbtn_mbalnum = chkbtn_mbalnum;
1815 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1816 message.chkbtn_disphdr = chkbtn_disphdr;
1817 message.spinbtn_linespc = spinbtn_linespc;
1818 message.chkbtn_headspc = chkbtn_headspc;
1820 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1821 message.spinbtn_scrollstep = spinbtn_scrollstep;
1822 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1823 message.chkbtn_halfpage = chkbtn_halfpage;
1827 static void prefs_privacy_create(void)
1832 GtkWidget *checkbtn_default_encrypt;
1833 GtkWidget *checkbtn_default_sign;
1834 GtkWidget *checkbtn_auto_check_signatures;
1835 GtkWidget *checkbtn_gpg_signature_popup;
1836 GtkWidget *checkbtn_passphrase_grab;
1837 GtkWidget *checkbtn_gpg_warning;
1839 GtkWidget *menuitem;
1841 GtkWidget *optmenu_menu;
1843 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1844 gtk_widget_show (vbox1);
1845 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1846 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1848 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1849 gtk_widget_show (vbox2);
1850 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1852 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1853 _("Encrypt message by default"));
1855 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1856 _("Sign message by default"));
1858 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1859 _("Automatically check signatures"));
1861 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
1862 _("Show signature check result in a popup window"));
1865 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1866 _("Grab input while entering a passphrase"));
1870 (vbox2, checkbtn_gpg_warning,
1871 _("Display warning on startup if GnuPG doesn't work"));
1873 hbox1 = gtk_hbox_new (FALSE, 8);
1874 gtk_widget_show (hbox1);
1875 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1877 /* create default signkey box */
1878 label = gtk_label_new (_("Default Sign Key"));
1879 gtk_widget_show (label);
1880 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1881 optmenu = gtk_option_menu_new ();
1882 gtk_widget_show (optmenu);
1883 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1884 optmenu_menu = gtk_menu_new ();
1886 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1887 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1888 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1889 /* FIXME: disabled because not implemented */
1890 gtk_widget_set_sensitive(optmenu, FALSE);
1892 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1893 privacy.checkbtn_default_sign = checkbtn_default_sign;
1894 privacy.checkbtn_auto_check_signatures
1895 = checkbtn_auto_check_signatures;
1896 privacy.checkbtn_gpg_signature_popup
1897 = checkbtn_gpg_signature_popup;
1898 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1899 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
1900 privacy.optmenu_default_signkey = optmenu;
1904 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1908 GtkWidget *menuitem;
1911 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1912 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1913 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1914 g_free(*((gchar **)pparam->data));
1915 *((gchar **)pparam->data) = g_strdup(charset);
1919 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1923 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1925 GtkWidget *menuitem;
1929 g_return_if_fail(optmenu != NULL);
1930 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1932 menu = gtk_option_menu_get_menu(optmenu);
1933 for (cur = GTK_MENU_SHELL(menu)->children;
1934 cur != NULL; cur = cur->next) {
1935 menuitem = GTK_WIDGET(cur->data);
1936 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1937 if (!strcmp(charset, *((gchar **)pparam->data))) {
1938 gtk_option_menu_set_history(optmenu, n);
1944 gtk_option_menu_set_history(optmenu, 0);
1945 prefs_common_charset_set_data_from_optmenu(pparam);
1948 #endif /* USE_GPGME */
1950 static void prefs_interface_create(void)
1955 GtkWidget *checkbtn_emacs;
1956 GtkWidget *checkbtn_openunread;
1957 GtkWidget *checkbtn_openinbox;
1958 GtkWidget *checkbtn_immedexec;
1959 GtkWidget *checkbtn_addaddrbyclick;
1961 GtkWidget *recvdialog_optmenu;
1962 GtkWidget *recvdialog_optmenu_menu;
1963 GtkWidget *recvdialog_menuitem;
1966 GtkWidget *frame_exit;
1967 GtkWidget *vbox_exit;
1969 GtkWidget *checkbtn_confonexit;
1970 GtkWidget *checkbtn_cleanonexit;
1971 GtkWidget *checkbtn_askonclean;
1972 GtkWidget *checkbtn_warnqueued;
1974 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1975 gtk_widget_show (vbox1);
1976 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1977 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1979 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1980 gtk_widget_show (vbox2);
1981 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1983 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1984 _("Emulate the behavior of mouse operation of\n"
1985 "Emacs-based mailer"));
1986 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1990 (vbox2, checkbtn_openunread,
1991 _("Open first unread message when entering a folder"));
1994 (vbox2, checkbtn_openinbox,
1995 _("Go to inbox after receiving new mail"));
1997 vbox3 = gtk_vbox_new (FALSE, 0);
1998 gtk_widget_show (vbox3);
1999 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2002 (vbox3, checkbtn_immedexec,
2003 _("Execute immediately when moving or deleting messages"));
2005 hbox1 = gtk_hbox_new (FALSE, 0);
2006 gtk_widget_show (hbox1);
2007 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2009 label = gtk_label_new
2010 (_("(Messages will be just marked till execution\n"
2011 " if this is turned off)"));
2012 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2013 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2016 (vbox2, checkbtn_addaddrbyclick,
2017 _("Add address to destination when double-clicked"));
2019 /* Receive Dialog */
2020 hbox = gtk_hbox_new (FALSE, 8);
2021 gtk_widget_show (hbox);
2022 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2024 label = gtk_label_new (_("Show receive Dialog"));
2025 gtk_widget_show (label);
2026 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2028 recvdialog_optmenu = gtk_option_menu_new ();
2029 gtk_widget_show (recvdialog_optmenu);
2030 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2032 recvdialog_optmenu_menu = gtk_menu_new ();
2034 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2035 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2036 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2038 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu);
2041 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2043 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
2044 gtk_widget_show (vbox_exit);
2045 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2046 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2048 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2049 _("Confirm on exit"));
2051 hbox1 = gtk_hbox_new (FALSE, 32);
2052 gtk_widget_show (hbox1);
2053 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2055 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2056 _("Empty trash on exit"));
2057 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2058 _("Ask before emptying"));
2059 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2061 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2062 _("Warn if there are queued messages"));
2064 interface.checkbtn_emacs = checkbtn_emacs;
2065 interface.checkbtn_openunread = checkbtn_openunread;
2066 interface.checkbtn_openinbox = checkbtn_openinbox;
2067 interface.checkbtn_immedexec = checkbtn_immedexec;
2068 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2069 interface.recvdialog_optmenu = recvdialog_optmenu;
2070 interface.checkbtn_confonexit = checkbtn_confonexit;
2071 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2072 interface.checkbtn_askonclean = checkbtn_askonclean;
2073 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2076 static void prefs_other_create(void)
2081 GtkWidget *uri_frame;
2082 GtkWidget *uri_label;
2083 GtkWidget *uri_combo;
2084 GtkWidget *uri_entry;
2086 GtkWidget *print_frame;
2087 GtkWidget *printcmd_label;
2088 GtkWidget *printcmd_entry;
2090 GtkWidget *exteditor_frame;
2091 GtkWidget *exteditor_label;
2092 GtkWidget *exteditor_combo;
2093 GtkWidget *exteditor_entry;
2095 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2096 gtk_widget_show (vbox1);
2097 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2098 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2100 PACK_FRAME(vbox1, uri_frame,
2101 _("External Web browser (%s will be replaced with URI)"));
2103 hbox1 = gtk_hbox_new (FALSE, 8);
2104 gtk_widget_show (hbox1);
2105 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2106 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2108 uri_label = gtk_label_new (_("Command"));
2109 gtk_widget_show(uri_label);
2110 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2112 uri_combo = gtk_combo_new ();
2113 gtk_widget_show (uri_combo);
2114 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2115 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2116 "netscape -remote 'openURL(%s,raise)'",
2118 "gnome-moz-remote --raise --newwin '%s'",
2119 "kterm -e w3m '%s'",
2120 "kterm -e lynx '%s'",
2123 uri_entry = GTK_COMBO (uri_combo)->entry;
2125 PACK_FRAME(vbox1, print_frame,
2126 _("Printing (%s will be replaced with file name)"));
2128 hbox1 = gtk_hbox_new (FALSE, 8);
2129 gtk_widget_show (hbox1);
2130 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2131 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2133 printcmd_label = gtk_label_new (_("Command"));
2134 gtk_widget_show (printcmd_label);
2135 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2137 printcmd_entry = gtk_entry_new ();
2138 gtk_widget_show (printcmd_entry);
2139 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2141 PACK_FRAME(vbox1, exteditor_frame,
2142 _("External editor (%s will be replaced with file name)"));
2144 hbox1 = gtk_hbox_new (FALSE, 8);
2145 gtk_widget_show (hbox1);
2146 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2147 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2149 exteditor_label = gtk_label_new (_("Command"));
2150 gtk_widget_show (exteditor_label);
2151 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2153 exteditor_combo = gtk_combo_new ();
2154 gtk_widget_show (exteditor_combo);
2155 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2156 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2158 "mgedit --no-fork %s",
2164 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2166 other.uri_combo = uri_combo;
2167 other.uri_entry = uri_entry;
2168 other.printcmd_entry = printcmd_entry;
2170 other.exteditor_combo = exteditor_combo;
2171 other.exteditor_entry = exteditor_entry;
2174 void prefs_quote_colors_dialog(void)
2176 if (!quote_color_win)
2177 prefs_quote_colors_dialog_create();
2178 gtk_widget_show(quote_color_win);
2179 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2182 gtk_widget_hide(quote_color_win);
2184 textview_update_message_colors();
2185 main_window_reflect_prefs_all();
2188 static void prefs_quote_colors_dialog_create(void)
2193 GtkWidget *quotelevel1_label;
2194 GtkWidget *quotelevel2_label;
2195 GtkWidget *quotelevel3_label;
2196 GtkWidget *uri_label;
2199 //GtkWidget *cancel_btn;
2200 GtkWidget *recycle_colors_btn;
2201 GtkWidget *frame_colors;
2203 window = gtk_window_new(GTK_WINDOW_DIALOG);
2204 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2205 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2206 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2207 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2208 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2210 vbox = gtk_vbox_new (FALSE, VSPACING);
2211 gtk_container_add (GTK_CONTAINER (window), vbox);
2212 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2213 PACK_FRAME(vbox, frame_colors, _("Colors"));
2215 table = gtk_table_new (4, 2, FALSE);
2216 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2217 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2218 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2219 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
2221 color_buttons.quote_level1_btn = gtk_button_new();
2222 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2223 0, 1, 0, 1, 0, 0, 0, 0);
2224 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2225 gtk_container_set_border_width
2226 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2228 color_buttons.quote_level2_btn = gtk_button_new();
2229 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2230 0, 1, 1, 2, 0, 0, 0, 0);
2231 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2232 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2234 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2235 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2236 0, 1, 2, 3, 0, 0, 0, 0);
2237 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2238 gtk_container_set_border_width
2239 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2241 color_buttons.uri_btn = gtk_button_new_with_label ("");
2242 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2243 0, 1, 3, 4, 0, 0, 0, 0);
2244 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2245 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2247 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2248 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2249 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2250 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2251 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2253 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2254 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2255 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2256 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2257 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2259 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2260 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2261 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2262 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2263 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2265 uri_label = gtk_label_new (_("URI link"));
2266 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2267 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2268 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2269 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2271 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2272 _("Recycle quote colors"));
2274 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2275 NULL, NULL, NULL, NULL);
2276 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2278 gtk_widget_grab_default(ok_btn);
2279 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2280 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2281 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2282 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2283 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2284 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2285 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2286 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2289 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2290 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2291 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2292 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2293 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2294 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2295 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2296 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2297 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2298 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2299 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2300 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2302 /* show message button colors and recycle options */
2303 set_button_bg_color(color_buttons.quote_level1_btn,
2304 prefs_common.quote_level1_col);
2305 set_button_bg_color(color_buttons.quote_level2_btn,
2306 prefs_common.quote_level2_col);
2307 set_button_bg_color(color_buttons.quote_level3_btn,
2308 prefs_common.quote_level3_col);
2309 set_button_bg_color(color_buttons.uri_btn,
2310 prefs_common.uri_col);
2311 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2312 prefs_common.recycle_quote_colors);
2314 gtk_widget_show_all(vbox);
2315 quote_color_win = window;
2318 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2319 GdkEventKey *event, gpointer data)
2321 if (event && event->keyval == GDK_Escape)
2325 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2327 gchar *type = (gchar *)data;
2328 gchar *title = NULL;
2329 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2331 GtkColorSelectionDialog *dialog;
2333 if(g_strcasecmp(type, "LEVEL1") == 0) {
2334 title = _("Pick color for quotation level 1");
2335 rgbvalue = prefs_common.quote_level1_col;
2336 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2337 title = _("Pick color for quotation level 2");
2338 rgbvalue = prefs_common.quote_level2_col;
2339 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2340 title = _("Pick color for quotation level 3");
2341 rgbvalue = prefs_common.quote_level3_col;
2342 } else if(g_strcasecmp(type, "URI") == 0) {
2343 title = _("Pick color for URI");
2344 rgbvalue = prefs_common.uri_col;
2345 } else { /* Should never be called */
2346 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2350 color_dialog = gtk_color_selection_dialog_new(title);
2351 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2352 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2353 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2354 manage_window_set_transient(GTK_WINDOW(color_dialog));
2356 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2357 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2358 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2359 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2360 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2361 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2364 /* preselect the previous color in the color selection dialog */
2365 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2366 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2367 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2368 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2369 gtk_color_selection_set_color
2370 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2372 gtk_widget_show(color_dialog);
2375 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2377 GtkColorSelection *colorsel = (GtkColorSelection *)
2378 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2380 gint red, green, blue, rgbvalue;
2381 gchar *type = (gchar *)data;
2383 gtk_color_selection_get_color(colorsel, color);
2385 red = (gint) (color[0] * 255.0);
2386 green = (gint) (color[1] * 255.0);
2387 blue = (gint) (color[2] * 255.0);
2388 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2391 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2392 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2393 fprintf(stderr, "Color is %x\n", rgbvalue);
2396 if (g_strcasecmp(type, "LEVEL1") == 0) {
2397 prefs_common.quote_level1_col = rgbvalue;
2398 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2399 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2400 prefs_common.quote_level2_col = rgbvalue;
2401 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2402 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2403 prefs_common.quote_level3_col = rgbvalue;
2404 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2405 } else if (g_strcasecmp(type, "URI") == 0) {
2406 prefs_common.uri_col = rgbvalue;
2407 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2409 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2411 gtk_widget_destroy(color_dialog);
2414 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2416 gtk_widget_destroy(color_dialog);
2419 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
2423 gtk_widget_destroy(color_dialog);
2426 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2431 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2432 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2433 newstyle->bg[GTK_STATE_NORMAL] = color;
2434 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2435 newstyle->bg[GTK_STATE_ACTIVE] = color;
2437 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2440 static void prefs_enable_message_color_toggled(void)
2444 is_active = gtk_toggle_button_get_active
2445 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2446 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2447 prefs_common.enable_color = is_active;
2450 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2454 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2455 prefs_common.recycle_quote_colors = is_active;
2458 static void prefs_quote_description(void)
2460 if (!quote_desc_win)
2461 prefs_quote_description_create();
2463 gtk_widget_show(quote_desc_win);
2465 gtk_widget_hide(quote_desc_win);
2468 static void prefs_quote_description_create(void)
2476 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2477 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2478 _("Description of symbols"));
2479 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2480 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2481 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2482 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2484 vbox = gtk_vbox_new(FALSE, 8);
2485 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2487 hbox = gtk_hbox_new(FALSE, 4);
2488 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2490 label = gtk_label_new
2494 "%N\n" /* full name */
2495 "%F\n" /* first name */
2496 "%I\n" /* sender's initial */
2497 "%s\n" /* subject line */
2500 "%n\n" /* newsgroups */
2501 "%i\n" /* message id */
2502 "%r\n" /* references */
2513 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2514 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2516 label = gtk_label_new
2517 (_("DESCRIPTION\n\n"
2520 "Full Name of Sender\n"
2521 "First Name of Sender\n"
2522 "Initial of Sender\n"
2530 "Display the information\n"
2531 "If the information x is set, displays expr\n"
2534 "Quoted message body\n"
2535 "Message body without signature\n"
2536 "Quoted message body without signature\n"
2539 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2540 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2542 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2543 NULL, NULL, NULL, NULL);
2544 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2546 gtk_widget_grab_default(ok_btn);
2547 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2548 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2550 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2551 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2553 gtk_widget_show_all(vbox);
2556 /* functions for setting items of SummaryView */
2558 static struct _SummaryDisplayItem
2562 GtkWidget *chkbtn[N_SUMMARY_COLS];
2565 GtkWidget *cancel_btn;
2568 #define SET_ACTIVE(column, var) \
2569 gtk_toggle_button_set_active \
2570 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2572 #define GET_ACTIVE(column, var) \
2573 prefs_common.var = gtk_toggle_button_get_active \
2574 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2576 void prefs_summary_display_item_set(void)
2578 static gboolean cancelled;
2580 if (!summarydispitem.window)
2581 prefs_summary_display_item_dialog_create(&cancelled);
2582 gtk_widget_grab_focus(summarydispitem.ok_btn);
2583 gtk_widget_show(summarydispitem.window);
2584 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2586 SET_ACTIVE(S_COL_MARK, show_mark);
2587 SET_ACTIVE(S_COL_UNREAD, show_unread);
2588 SET_ACTIVE(S_COL_MIME, show_mime);
2589 SET_ACTIVE(S_COL_NUMBER, show_number);
2590 SET_ACTIVE(S_COL_SCORE, show_score);
2591 SET_ACTIVE(S_COL_SIZE, show_size);
2592 SET_ACTIVE(S_COL_DATE, show_date);
2593 SET_ACTIVE(S_COL_FROM, show_from);
2594 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2597 gtk_widget_hide(summarydispitem.window);
2599 if (cancelled != TRUE) {
2600 GET_ACTIVE(S_COL_MARK, show_mark);
2601 GET_ACTIVE(S_COL_UNREAD, show_unread);
2602 GET_ACTIVE(S_COL_MIME, show_mime);
2603 GET_ACTIVE(S_COL_NUMBER, show_number);
2604 GET_ACTIVE(S_COL_SCORE, show_score);
2605 GET_ACTIVE(S_COL_SIZE, show_size);
2606 GET_ACTIVE(S_COL_DATE, show_date);
2607 GET_ACTIVE(S_COL_FROM, show_from);
2608 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2610 main_window_reflect_prefs_all();
2614 #define SET_CHECK_BUTTON(column, label) \
2616 summarydispitem.chkbtn[column] = \
2617 gtk_check_button_new_with_label(label); \
2618 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2619 summarydispitem.chkbtn[column], \
2623 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2627 GtkWidget *chkbtn_vbox;
2630 GtkWidget *cancel_btn;
2632 window = gtk_window_new(GTK_WINDOW_DIALOG);
2633 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2634 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2635 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2636 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2637 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2638 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2639 GTK_SIGNAL_FUNC(display_item_delete_event),
2641 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2642 GTK_SIGNAL_FUNC(display_item_key_pressed),
2645 vbox = gtk_vbox_new(FALSE, 8);
2646 gtk_container_add(GTK_CONTAINER(window), vbox);
2648 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2649 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2651 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2652 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2653 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2654 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2655 SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
2656 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2657 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2658 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2659 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2661 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2662 &cancel_btn, _("Cancel"), NULL, NULL);
2663 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2664 gtk_widget_grab_default(ok_btn);
2666 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2667 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2668 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2669 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2671 gtk_widget_show_all(vbox);
2673 summarydispitem.window = window;
2674 summarydispitem.ok_btn = ok_btn;
2675 summarydispitem.cancel_btn = cancel_btn;
2678 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2684 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2690 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2691 gboolean *cancelled)
2699 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2700 gboolean *cancelled)
2702 if (event && event->keyval == GDK_Escape) {
2708 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
2712 g_return_if_fail(entry != NULL);
2714 if (!font_sel_win) {
2715 font_sel_win = gtk_font_selection_dialog_new
2716 (_("Font selection"));
2717 gtk_window_position(GTK_WINDOW(font_sel_win),
2718 GTK_WIN_POS_CENTER);
2719 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2720 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2723 (GTK_OBJECT(font_sel_win), "key_press_event",
2724 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2727 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2729 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2731 gtk_signal_connect_object
2732 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2734 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2735 GTK_OBJECT(font_sel_win));
2738 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
2739 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
2741 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2742 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2743 gtk_widget_grab_focus
2744 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2745 gtk_widget_show(font_sel_win);
2748 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2752 if (event && event->keyval == GDK_Escape)
2753 gtk_widget_hide(font_sel_win);
2756 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
2760 fontname = gtk_font_selection_dialog_get_font_name
2761 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2764 gtk_entry_set_text(entry, fontname);
2768 gtk_widget_hide(font_sel_win);
2771 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2774 GtkWidget *menuitem;
2777 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2778 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2779 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2780 g_free(*((gchar **)pparam->data));
2781 *((gchar **)pparam->data) = g_strdup(charset);
2784 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2787 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2789 GtkWidget *menuitem;
2793 g_return_if_fail(optmenu != NULL);
2794 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2796 menu = gtk_option_menu_get_menu(optmenu);
2797 for (cur = GTK_MENU_SHELL(menu)->children;
2798 cur != NULL; cur = cur->next) {
2799 menuitem = GTK_WIDGET(cur->data);
2800 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2801 if (!strcmp(charset, *((gchar **)pparam->data))) {
2802 gtk_option_menu_set_history(optmenu, n);
2808 gtk_option_menu_set_history(optmenu, 0);
2809 prefs_common_charset_set_data_from_optmenu(pparam);
2812 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
2815 prefs_common_cancel();
2819 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2822 if (event && event->keyval == GDK_Escape)
2823 prefs_common_cancel();
2826 static void prefs_common_ok(void)
2828 prefs_common_apply();
2829 gtk_widget_hide(dialog.window);
2830 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2831 gtk_widget_hide(quote_desc_win);
2833 inc_autocheck_timer_set();
2836 static void prefs_common_apply(void)
2838 prefs_set_data_from_dialog(param);
2839 main_window_reflect_prefs_all();
2840 prefs_common_save_config();
2843 static void prefs_common_cancel(void)
2845 gtk_widget_hide(dialog.window);
2846 inc_autocheck_timer_set();
2850 static struct _ComposePrefs
2854 GtkWidget *close_btn;
2857 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
2858 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
2859 static void compose_prefs_close(GtkWidget *widget);
2860 static void compose_prefs_fmt_create(void);
2862 static void compose_prefs_fmt_open(void)
2864 if (composeprefs.window == NULL)
2865 compose_prefs_fmt_create();
2866 gtk_widget_show(composeprefs.window);
2870 static void compose_prefs_fmt_create(void)
2873 GtkWidget *close_btn;
2875 GtkWidget *frame_quote;
2876 GtkWidget *vbox_quote;
2878 GtkWidget *checkbtn_quote;
2879 GtkWidget *label_quotemark;
2880 GtkWidget *entry_quotemark;
2881 GtkWidget *scrolledwin_quotefmt;
2882 GtkWidget *text_quotefmt;
2883 GtkWidget *label_quotefmt;
2884 GtkWidget *btn_quotedesc;
2886 GtkWidget *label_fw_quotemark;
2887 GtkWidget *entry_fw_quotemark;
2888 GtkWidget *label_fw_quotefmt;
2889 GtkWidget *text_fw_quotefmt;
2891 window = gtk_window_new(GTK_WINDOW_DIALOG);
2892 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2893 gtk_window_set_title(GTK_WINDOW(window), _("Compose Preferences"));
2894 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2895 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2896 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2897 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2898 GTK_SIGNAL_FUNC(compose_prefs_delete_event),
2900 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2901 GTK_SIGNAL_FUNC(compose_prefs_key_pressed),
2904 vbox_quote = gtk_vbox_new(FALSE, 8);
2905 gtk_container_add(GTK_CONTAINER(window), vbox_quote);
2907 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
2908 _("Quote message when replying"));
2910 hbox1 = gtk_hbox_new (FALSE, 8);
2911 gtk_widget_show (hbox1);
2912 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2914 label_quotemark = gtk_label_new (_("Quotation mark"));
2915 gtk_widget_show (label_quotemark);
2916 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
2918 entry_quotemark = gtk_entry_new ();
2919 gtk_widget_show (entry_quotemark);
2920 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
2921 gtk_widget_set_usize (entry_quotemark, 64, -1);
2923 hbox1 = gtk_hbox_new (FALSE, 0);
2924 gtk_widget_show (hbox1);
2925 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2927 label_quotefmt = gtk_label_new (_("Quotation format:"));
2928 gtk_widget_show (label_quotefmt);
2929 gtk_box_pack_start (GTK_BOX (hbox1), label_quotefmt, FALSE, FALSE, 0);
2931 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
2932 gtk_widget_show (scrolledwin_quotefmt);
2933 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
2934 gtk_scrolled_window_set_policy
2935 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
2936 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2938 text_quotefmt = gtk_text_new (NULL, NULL);
2939 gtk_widget_show (text_quotefmt);
2940 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
2941 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
2942 gtk_widget_set_usize(text_quotefmt, 400, 60);
2944 hbox1 = gtk_hbox_new (FALSE, 8);
2945 gtk_widget_show (hbox1);
2946 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2948 label_fw_quotemark = gtk_label_new (_("Forward quotation mark"));
2949 gtk_widget_show (label_fw_quotemark);
2950 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotemark, FALSE, FALSE, 0);
2952 entry_fw_quotemark = gtk_entry_new ();
2953 gtk_widget_show (entry_fw_quotemark);
2954 gtk_box_pack_start (GTK_BOX (hbox1), entry_fw_quotemark, FALSE, FALSE, 0);
2955 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
2957 hbox1 = gtk_hbox_new (FALSE, 0);
2958 gtk_widget_show (hbox1);
2959 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2961 label_fw_quotefmt = gtk_label_new (_("Forward format:"));
2962 gtk_widget_show (label_fw_quotefmt);
2963 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotefmt, FALSE, FALSE, 0);
2965 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
2966 gtk_widget_show (scrolledwin_quotefmt);
2967 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
2968 gtk_scrolled_window_set_policy
2969 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
2970 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2972 text_fw_quotefmt = gtk_text_new (NULL, NULL);
2973 gtk_widget_show (text_fw_quotefmt);
2974 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt);
2975 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
2976 gtk_widget_set_usize(text_fw_quotefmt, 400, 60);
2978 hbox1 = gtk_hbox_new (FALSE, 0);
2979 gtk_widget_show (hbox1);
2980 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2983 gtk_button_new_with_label (_(" Description of symbols "));
2984 gtk_widget_show (btn_quotedesc);
2985 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc,
2988 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
2989 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
2992 gtkut_button_set_create(&hbox1, &close_btn, _("Close"),
2993 NULL, NULL, NULL, NULL);
2994 gtk_box_pack_end(GTK_BOX(vbox_quote), hbox1, FALSE, FALSE, 0);
2995 gtk_widget_grab_default(close_btn);
2997 gtk_signal_connect(GTK_OBJECT(close_btn), "clicked",
2998 GTK_SIGNAL_FUNC(compose_prefs_close), NULL);
3000 gtk_widget_show_all(vbox_quote);
3002 composeprefs.window = window;
3003 composeprefs.close_btn = close_btn;
3005 compose.checkbtn_quote = checkbtn_quote;
3006 compose.entry_quotemark = entry_quotemark;
3007 compose.text_quotefmt = text_quotefmt;
3008 compose.entry_fw_quotemark = entry_fw_quotemark;
3009 compose.text_fw_quotefmt = text_fw_quotefmt;
3012 static void compose_prefs_close(GtkWidget *widget)
3014 gtk_widget_hide(composeprefs.window);
3017 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3019 gtk_widget_hide(composeprefs.window);
3024 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3026 if (event && event->keyval == GDK_Escape) {
3027 gtk_widget_hide(composeprefs.window);
3031 static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3034 GtkWidget *menuitem;
3036 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3037 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3038 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3039 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3042 static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3044 RecvDialogShow dialog_show;
3045 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3047 GtkWidget *menuitem;
3049 dialog_show = *((RecvDialogShow *)pparam->data);
3051 switch (dialog_show) {
3052 case RECVDIALOG_ALWAYS:
3053 gtk_option_menu_set_history(optmenu, 0);
3055 case RECVDIALOG_WINDOW_ACTIVE:
3056 gtk_option_menu_set_history(optmenu, 1);
3058 case RECVDIALOG_NEVER:
3059 gtk_option_menu_set_history(optmenu, 2);
3064 menu = gtk_option_menu_get_menu(optmenu);
3065 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3066 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));