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 guint font_sel_conn_id;
187 static GtkWidget *quote_color_win;
188 static GtkWidget *color_dialog;
190 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
191 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
193 static void prefs_common_default_signkey_set_data_from_optmenu
195 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
197 static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam);
198 static void prefs_recvdialog_set_optmenu(PrefParam *pparam);
201 parameter name, default value, pointer to the prefs variable, data type,
202 pointer to the widget pointer,
203 pointer to the function for data setting,
204 pointer to the function for widget setting
207 static PrefParam param[] = {
209 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
210 &receive.checkbtn_incext,
211 prefs_set_data_from_toggle, prefs_set_toggle},
212 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
213 &receive.entry_incext,
214 prefs_set_data_from_entry, prefs_set_entry},
216 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
217 &receive.checkbtn_local,
218 prefs_set_data_from_toggle, prefs_set_toggle},
219 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
220 &receive.checkbtn_filter_on_inc,
221 prefs_set_data_from_toggle, prefs_set_toggle},
222 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
223 &receive.entry_spool,
224 prefs_set_data_from_entry, prefs_set_entry},
226 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
227 &receive.checkbtn_autochk,
228 prefs_set_data_from_toggle, prefs_set_toggle},
229 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
230 &receive.spinbtn_autochk,
231 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
232 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
233 &receive.checkbtn_chkonstartup,
234 prefs_set_data_from_toggle, prefs_set_toggle},
235 {"noerrorpanel", "FALSE", &prefs_common.noerrorpanel, P_BOOL,
236 &receive.checkbtn_noerrorpanel,
237 prefs_set_data_from_toggle, prefs_set_toggle},
239 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
240 &receive.spinbtn_maxarticle,
241 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
244 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
245 &send.checkbtn_sendext,
246 prefs_set_data_from_toggle, prefs_set_toggle},
247 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
248 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
249 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
250 &send.checkbtn_savemsg,
251 prefs_set_data_from_toggle, prefs_set_toggle},
252 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
253 &send.checkbtn_queuemsg,
254 prefs_set_data_from_toggle, prefs_set_toggle},
256 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
257 &send.optmenu_charset,
258 prefs_common_charset_set_data_from_optmenu,
259 prefs_common_charset_set_optmenu},
262 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
263 &compose.checkbtn_quote,
264 prefs_set_data_from_toggle, prefs_set_toggle},
265 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
266 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
267 {"quote_format", "On %d\\n%f wrote:\\n\\n%Q",
268 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
269 prefs_set_data_from_text, prefs_set_text},
270 {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
271 &compose.entry_fw_quotemark, prefs_set_data_from_entry, prefs_set_entry},
272 {"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",
273 &prefs_common.fw_quotefmt, P_STRING, &compose.text_fw_quotefmt,
274 prefs_set_data_from_text, prefs_set_text},
276 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
277 &compose.checkbtn_autosig,
278 prefs_set_data_from_toggle, prefs_set_toggle},
279 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
280 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
282 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
283 &compose.spinbtn_linewrap,
284 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
285 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
286 &compose.checkbtn_wrapquote,
287 prefs_set_data_from_toggle, prefs_set_toggle},
288 {"linewrap_before_sending", "FALSE",
289 &prefs_common.linewrap_at_send, P_BOOL,
290 &compose.checkbtn_wrapatsend,
291 prefs_set_data_from_toggle, prefs_set_toggle},
292 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
293 P_BOOL, &compose.checkbtn_forward_as_attachment,
294 prefs_set_data_from_toggle, prefs_set_toggle},
295 {"reply_account_autoselect", "TRUE", &prefs_common.reply_account_autoselect,
296 P_BOOL, &compose.checkbtn_reply_account_autoselect,
297 prefs_set_data_from_toggle, prefs_set_toggle},
299 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
303 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
305 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
306 &prefs_common.textfont, P_STRING,
307 &display.entry_textfont,
308 prefs_set_data_from_entry, prefs_set_entry},
309 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
310 &prefs_common.smallfont, P_STRING,
311 &display.entry_smallfont,
312 prefs_set_data_from_entry, prefs_set_entry},
313 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
314 &prefs_common.boldfont, P_STRING,
315 &display.entry_boldfont,
316 prefs_set_data_from_entry, prefs_set_entry},
317 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
318 &prefs_common.normalfont, P_STRING,
319 &display.entry_normalfont,
320 prefs_set_data_from_entry, prefs_set_entry},
322 {"display_folder_unread_num", "TRUE",
323 &prefs_common.display_folder_unread, P_BOOL,
324 &display.chkbtn_folder_unread,
325 prefs_set_data_from_toggle, prefs_set_toggle},
327 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
328 &display.chkbtn_transhdr,
329 prefs_set_data_from_toggle, prefs_set_toggle},
331 /* Display: Summary View */
332 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
333 &display.chkbtn_swapfrom,
334 prefs_set_data_from_toggle, prefs_set_toggle},
335 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
336 &display.chkbtn_hscrollbar,
337 prefs_set_data_from_toggle, prefs_set_toggle},
338 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
339 &display.chkbtn_useaddrbook,
340 prefs_set_data_from_toggle, prefs_set_toggle},
341 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
342 P_STRING, &display.entry_datefmt,
343 prefs_set_data_from_entry, prefs_set_entry},
346 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
349 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
351 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
354 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
356 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
358 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
360 {"show_number", "FALSE", &prefs_common.show_number, P_BOOL,
362 {"show_score", "TRUE", &prefs_common.show_score, P_BOOL,
364 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
366 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
368 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
370 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
374 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
376 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
378 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
380 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
382 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
384 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
386 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
388 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
390 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
392 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
394 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
396 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
398 {"summary_col_score", "40", &prefs_common.summary_col_score,
399 P_INT, NULL, NULL, NULL},
400 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
402 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
404 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
406 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
407 P_INT, NULL, NULL, NULL},
408 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
410 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
412 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
414 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
416 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
418 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
420 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
422 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
424 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
426 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
428 {"compose_width", "600", &prefs_common.compose_width, P_INT,
430 {"compose_height", "560", &prefs_common.compose_height, P_INT,
434 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
435 &message.chkbtn_enablecol,
436 prefs_set_data_from_toggle, prefs_set_toggle},
438 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
440 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
442 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
444 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
446 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
448 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
449 P_BOOL, NULL, NULL, NULL},
451 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
452 &message.chkbtn_mbalnum,
453 prefs_set_data_from_toggle, prefs_set_toggle},
454 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
455 P_BOOL, &message.chkbtn_disphdrpane,
456 prefs_set_data_from_toggle, prefs_set_toggle},
457 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
458 &message.chkbtn_disphdr,
459 prefs_set_data_from_toggle, prefs_set_toggle},
460 {"line_space", "2", &prefs_common.line_space, P_INT,
461 &message.spinbtn_linespc,
462 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
463 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
464 &message.chkbtn_headspc,
465 prefs_set_data_from_toggle, prefs_set_toggle},
467 {"enable_smooth_scroll", "FALSE",
468 &prefs_common.enable_smooth_scroll, P_BOOL,
469 &message.chkbtn_smoothscroll,
470 prefs_set_data_from_toggle, prefs_set_toggle},
471 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
472 &message.spinbtn_scrollstep,
473 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
474 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
475 &message.chkbtn_halfpage,
476 prefs_set_data_from_toggle, prefs_set_toggle},
478 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
482 {"mime_image_viewer", "display '%s'",
483 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
484 {"mime_audio_player", "play '%s'",
485 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
489 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
490 &privacy.checkbtn_default_encrypt,
491 prefs_set_data_from_toggle, prefs_set_toggle},
492 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
493 &privacy.checkbtn_default_sign,
494 prefs_set_data_from_toggle, prefs_set_toggle},
495 {"auto_check_signatures", "TRUE",
496 &prefs_common.auto_check_signatures, P_BOOL,
497 &privacy.checkbtn_auto_check_signatures,
498 prefs_set_data_from_toggle, prefs_set_toggle},
499 {"gpg_signature_popup", "FALSE",
500 &prefs_common.gpg_signature_popup, P_BOOL,
501 &privacy.checkbtn_gpg_signature_popup,
502 prefs_set_data_from_toggle, prefs_set_toggle},
504 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
505 &privacy.checkbtn_passphrase_grab,
506 prefs_set_data_from_toggle, prefs_set_toggle},
507 #endif /* __MINGW32__ */
508 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
509 &privacy.checkbtn_gpg_warning,
510 prefs_set_data_from_toggle, prefs_set_toggle},
511 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
512 &privacy.optmenu_default_signkey,
513 prefs_common_default_signkey_set_data_from_optmenu,
514 prefs_common_default_signkey_set_optmenu},
515 #endif /* USE_GPGME */
518 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
520 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
523 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
524 &interface.checkbtn_emacs,
525 prefs_set_data_from_toggle, prefs_set_toggle},
526 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
527 P_BOOL, &interface.checkbtn_openunread,
528 prefs_set_data_from_toggle, prefs_set_toggle},
529 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
530 P_BOOL, &interface.checkbtn_openinbox,
531 prefs_set_data_from_toggle, prefs_set_toggle},
532 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
533 &interface.checkbtn_immedexec,
534 prefs_set_data_from_toggle, prefs_set_toggle},
535 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
536 P_BOOL, &interface.checkbtn_addaddrbyclick,
537 prefs_set_data_from_toggle, prefs_set_toggle},
538 {"receive_dialog", NULL, &prefs_common.receive_dialog, P_ENUM,
539 &interface.recvdialog_optmenu,
540 prefs_recvdialog_set_data_from_optmenu,
541 prefs_recvdialog_set_optmenu},
543 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
544 &interface.checkbtn_confonexit,
545 prefs_set_data_from_toggle, prefs_set_toggle},
546 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
547 &send.checkbtn_returnreceipt,
548 prefs_set_data_from_toggle, prefs_set_toggle},
549 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
550 &interface.checkbtn_cleanonexit,
551 prefs_set_data_from_toggle, prefs_set_toggle},
552 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
553 &interface.checkbtn_askonclean,
554 prefs_set_data_from_toggle, prefs_set_toggle},
555 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
556 P_BOOL, &interface.checkbtn_warnqueued,
557 prefs_set_data_from_toggle, prefs_set_toggle},
560 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
561 &prefs_common.uri_cmd, P_STRING,
562 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
563 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
564 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
565 {"ext_editor_command", "gedit %s",
566 &prefs_common.ext_editor_cmd, P_STRING,
567 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
569 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
571 {"important_score", "1", &prefs_common.important_score, P_INT,
574 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
578 #define VSPACING_NARROW 4
579 #define VBOX_BORDER 16
580 #define DEFAULT_ENTRY_WIDTH 80
581 #define PREFSBUFSIZE 1024
583 /* widget creating functions */
584 static void prefs_common_create (void);
585 static void prefs_receive_create (void);
586 static void prefs_send_create (void);
587 static void prefs_compose_create (void);
588 static void prefs_display_create (void);
589 static void prefs_message_create (void);
591 static void prefs_privacy_create (void);
593 static void prefs_interface_create (void);
594 static void prefs_other_create (void);
596 static void prefs_quote_description (void);
597 static void prefs_quote_description_create (void);
598 static void prefs_quote_colors_dialog (void);
599 static void prefs_quote_colors_dialog_create (void);
600 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
603 static void quote_color_set_dialog (GtkWidget *widget,
605 static void quote_colors_set_dialog_ok (GtkWidget *widget,
607 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
609 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
612 static void set_button_bg_color (GtkWidget *widget,
614 static void prefs_enable_message_color_toggled (void);
615 static void prefs_recycle_colors_toggled (GtkWidget *widget);
617 /* functions for setting items of SummaryView */
618 static void prefs_summary_display_item_dialog_create
619 (gboolean *cancelled);
620 static void display_item_ok (GtkWidget *widget,
621 gboolean *cancelled);
622 static void display_item_cancel (GtkWidget *widget,
623 gboolean *cancelled);
624 static gint display_item_delete_event (GtkWidget *widget,
626 gboolean *cancelled);
627 static void display_item_key_pressed (GtkWidget *widget,
629 gboolean *cancelled);
631 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
632 static void prefs_font_selection_key_pressed (GtkWidget *widget,
635 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
637 static gint prefs_common_deleted (GtkWidget *widget,
640 static void prefs_common_key_pressed (GtkWidget *widget,
643 static void prefs_common_ok (void);
644 static void prefs_common_apply (void);
645 static void prefs_common_cancel (void);
647 static void compose_prefs_fmt_open(void);
648 static void compose_prefs_fmt_create(void);
650 void prefs_common_read_config(void)
652 prefs_read_config(param, "Common", COMMON_RC);
655 void prefs_common_save_config(void)
657 prefs_save_config(param, "Common", COMMON_RC);
660 void prefs_common_open(void)
662 if (prefs_rc_is_readonly(COMMON_RC))
665 inc_autocheck_timer_remove();
667 if (!dialog.window) {
668 prefs_common_create();
671 manage_window_set_transient(GTK_WINDOW(dialog.window));
672 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
673 gtk_widget_grab_focus(dialog.ok_btn);
675 prefs_set_dialog(param);
677 gtk_widget_show(dialog.window);
680 static void prefs_common_create(void)
684 debug_print(_("Creating common preferences window...\n"));
686 prefs_dialog_create(&dialog);
687 gtk_window_set_title (GTK_WINDOW(dialog.window),
688 _("Common Preferences"));
689 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
690 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
691 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
692 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
693 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
694 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
695 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
696 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
697 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
698 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
699 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
700 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
701 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
702 GTK_SIGNAL_FUNC(prefs_common_cancel),
703 GTK_OBJECT(dialog.window));
705 /* create all widgets on notebook */
706 prefs_receive_create();
707 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
709 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
710 prefs_compose_create();
711 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
712 prefs_display_create();
713 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
714 prefs_message_create();
715 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
717 prefs_privacy_create();
718 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
720 prefs_interface_create();
721 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
722 prefs_other_create();
723 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
725 compose_prefs_fmt_create();
727 gtk_widget_show_all(dialog.window);
730 static void prefs_receive_create(void)
734 GtkWidget *frame_incext;
735 GtkWidget *checkbtn_incext;
737 GtkWidget *label_incext;
738 GtkWidget *entry_incext;
739 GtkWidget *button_incext;
741 GtkWidget *frame_spool;
742 GtkWidget *checkbtn_local;
743 GtkWidget *checkbtn_filter_on_inc;
744 GtkWidget *label_spool;
745 GtkWidget *entry_spool;
747 GtkWidget *hbox_autochk;
748 GtkWidget *checkbtn_autochk;
749 GtkWidget *label_autochk1;
750 GtkObject *spinbtn_autochk_adj;
751 GtkWidget *spinbtn_autochk;
752 GtkWidget *label_autochk2;
753 GtkWidget *checkbtn_chkonstartup;
754 GtkWidget *checkbtn_noerrorpanel;
756 GtkWidget *frame_news;
757 GtkWidget *label_maxarticle;
758 GtkWidget *spinbtn_maxarticle;
759 GtkObject *spinbtn_maxarticle_adj;
761 vbox1 = gtk_vbox_new (FALSE, VSPACING);
762 gtk_widget_show (vbox1);
763 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
764 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
766 PACK_FRAME(vbox1, frame_incext, _("External program"));
768 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
769 gtk_widget_show (vbox2);
770 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
771 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
773 /* Use of external incorporation program */
774 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
775 _("Use external program for incorporation"));
777 hbox = gtk_hbox_new (FALSE, 8);
778 gtk_widget_show (hbox);
779 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
780 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
782 label_incext = gtk_label_new (_("Program path"));
783 gtk_widget_show (label_incext);
784 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
786 entry_incext = gtk_entry_new ();
787 gtk_widget_show (entry_incext);
788 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
790 button_incext = gtk_button_new_with_label (" ... ");
791 gtk_widget_show (button_incext);
792 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
794 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
796 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
797 gtk_widget_show (vbox2);
798 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
799 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
801 hbox = gtk_hbox_new (FALSE, 32);
802 gtk_widget_show (hbox);
803 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
805 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
806 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
807 _("Filter on incorporation"));
808 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
810 hbox = gtk_hbox_new (FALSE, 8);
811 gtk_widget_show (hbox);
812 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
813 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
815 label_spool = gtk_label_new (_("Spool directory"));
816 gtk_widget_show (label_spool);
817 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
819 entry_spool = gtk_entry_new ();
820 gtk_widget_show (entry_spool);
821 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
823 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
824 gtk_widget_show (vbox2);
825 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
828 hbox_autochk = gtk_hbox_new (FALSE, 8);
829 gtk_widget_show (hbox_autochk);
830 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
832 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
833 _("Auto-check new mail"));
835 label_autochk1 = gtk_label_new (_("each"));
836 gtk_widget_show (label_autochk1);
837 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
839 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
840 spinbtn_autochk = gtk_spin_button_new
841 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
842 gtk_widget_show (spinbtn_autochk);
843 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
844 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
845 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
847 label_autochk2 = gtk_label_new (_("minute(s)"));
848 gtk_widget_show (label_autochk2);
849 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
851 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
852 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
853 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
855 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
856 _("Check new mail on startup"));
858 PACK_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel,
859 _("No error popup on receive error"));
861 PACK_FRAME(vbox1, frame_news, _("News"));
863 hbox = gtk_hbox_new (FALSE, 8);
864 gtk_widget_show (hbox);
865 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
866 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
868 label_maxarticle = gtk_label_new
869 (_("Maximum article number to download\n"
870 "(unlimited if 0 is specified)"));
871 gtk_widget_show (label_maxarticle);
872 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
873 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
875 spinbtn_maxarticle_adj =
876 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
877 spinbtn_maxarticle = gtk_spin_button_new
878 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
879 gtk_widget_show (spinbtn_maxarticle);
880 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
882 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
883 gtk_spin_button_set_numeric
884 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
886 receive.checkbtn_incext = checkbtn_incext;
887 receive.entry_incext = entry_incext;
888 receive.button_incext = button_incext;
890 receive.checkbtn_local = checkbtn_local;
891 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
892 receive.entry_spool = entry_spool;
894 receive.checkbtn_autochk = checkbtn_autochk;
895 receive.spinbtn_autochk = spinbtn_autochk;
896 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
898 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
899 receive.checkbtn_noerrorpanel = checkbtn_noerrorpanel;
901 receive.spinbtn_maxarticle = spinbtn_maxarticle;
902 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
905 static void prefs_send_create(void)
909 GtkWidget *frame_sendext;
910 GtkWidget *vbox_sendext;
911 GtkWidget *checkbtn_sendext;
913 GtkWidget *label_sendext;
914 GtkWidget *entry_sendext;
915 GtkWidget *button_sendext;
916 GtkWidget *checkbtn_savemsg;
917 GtkWidget *checkbtn_queuemsg;
918 GtkWidget *label_outcharset;
920 GtkWidget *optmenu_menu;
922 GtkWidget *checkbtn_returnreceipt;
924 vbox1 = gtk_vbox_new (FALSE, VSPACING);
925 gtk_widget_show (vbox1);
926 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
927 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
929 PACK_FRAME(vbox1, frame_sendext, _("External program"));
931 gtk_widget_set_sensitive(frame_sendext, FALSE);
933 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
934 gtk_widget_show (vbox_sendext);
935 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
936 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
938 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
939 _("Use external program for sending"));
941 hbox1 = gtk_hbox_new (FALSE, 8);
942 gtk_widget_show (hbox1);
943 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
944 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
946 label_sendext = gtk_label_new (_("Program path"));
947 gtk_widget_show (label_sendext);
948 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
950 entry_sendext = gtk_entry_new ();
951 gtk_widget_show (entry_sendext);
952 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
954 button_sendext = gtk_button_new_with_label ("... ");
955 gtk_widget_show (button_sendext);
956 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
958 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
959 gtk_widget_show (vbox2);
960 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
962 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
963 _("Save sent messages to outbox"));
964 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
965 _("Queue messages that fail to send"));
966 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
967 _("Send return receipt on request"));
969 hbox1 = gtk_hbox_new (FALSE, 8);
970 gtk_widget_show (hbox1);
971 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
973 label_outcharset = gtk_label_new (_("Outgoing codeset"));
974 gtk_widget_show (label_outcharset);
975 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
977 optmenu = gtk_option_menu_new ();
978 gtk_widget_show (optmenu);
979 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
981 optmenu_menu = gtk_menu_new ();
983 #define SET_MENUITEM(str, charset) \
985 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
988 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
989 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
991 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
993 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
995 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
996 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
997 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
998 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
999 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1000 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1001 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1002 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1003 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1004 #endif /* HAVE_LIBJCONV */
1005 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1007 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1008 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1011 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1012 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1014 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1015 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1017 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1018 #endif /* HAVE_LIBJCONV */
1020 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1022 send.checkbtn_sendext = checkbtn_sendext;
1023 send.entry_sendext = entry_sendext;
1024 send.button_sendext = button_sendext;
1026 send.checkbtn_savemsg = checkbtn_savemsg;
1027 send.checkbtn_queuemsg = checkbtn_queuemsg;
1028 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1030 send.optmenu_charset = optmenu;
1033 static void prefs_compose_create(void)
1038 GtkWidget *frame_quote;
1039 GtkWidget *vbox_quote;
1040 GtkWidget *checkbtn_quote;
1042 GtkWidget *label_quotemark;
1043 GtkWidget *entry_quotemark;
1045 GtkWidget *label_quotefmt;
1046 GtkWidget *btn_quotedesc;
1047 GtkWidget *scrolledwin_quotefmt;
1048 GtkWidget *text_quotefmt;
1053 GtkWidget *btn_quotefmt;
1055 GtkWidget *frame_sig;
1056 GtkWidget *vbox_sig;
1057 GtkWidget *checkbtn_autosig;
1058 GtkWidget *label_sigsep;
1059 GtkWidget *entry_sigsep;
1061 GtkWidget *vbox_linewrap;
1064 GtkWidget *label_linewrap;
1065 GtkObject *spinbtn_linewrap_adj;
1066 GtkWidget *spinbtn_linewrap;
1067 GtkWidget *checkbtn_wrapquote;
1068 GtkWidget *checkbtn_wrapatsend;
1070 GtkWidget *checkbtn_forward_as_attachment;
1071 GtkWidget *checkbtn_reply_account_autoselect;
1073 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1074 gtk_widget_show (vbox1);
1075 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1076 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1079 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
1081 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1082 gtk_widget_show (vbox_quote);
1083 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1084 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1086 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
1087 _("Quote message when replying"));
1089 hbox1 = gtk_hbox_new (FALSE, 8);
1090 gtk_widget_show (hbox1);
1091 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
1093 label_quotemark = gtk_label_new (_("Quotation mark"));
1094 gtk_widget_show (label_quotemark);
1095 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
1097 entry_quotemark = gtk_entry_new ();
1098 gtk_widget_show (entry_quotemark);
1099 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
1100 gtk_widget_set_usize (entry_quotemark, 64, -1);
1102 hbox2 = gtk_hbox_new (FALSE, 0);
1103 gtk_widget_show (hbox2);
1104 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1106 label_quotefmt = gtk_label_new (_("Quotation format:"));
1107 gtk_widget_show (label_quotefmt);
1108 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1111 gtk_button_new_with_label (_(" Quote format "));
1112 gtk_widget_show (btn_quotedesc);
1113 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1114 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1115 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), &cancelled);
1117 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1118 gtk_widget_show (scrolledwin_quotefmt);
1119 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1120 gtk_scrolled_window_set_policy
1121 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1122 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1124 text_quotefmt = gtk_text_new (NULL, NULL);
1125 gtk_widget_show (text_quotefmt);
1126 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1127 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1128 gtk_widget_set_usize(text_quotefmt, -1, 60);
1131 hbox1 = gtk_hbox_new (FALSE, 32);
1132 gtk_widget_show (hbox1);
1133 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1135 btn_quotefmt = gtk_button_new_with_label (_(" Quote format "));
1136 gtk_widget_show (btn_quotefmt);
1137 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotefmt, FALSE, FALSE, 0);
1138 gtk_signal_connect(GTK_OBJECT(btn_quotefmt), "clicked",
1139 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), NULL);
1141 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1143 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1144 gtk_widget_show (vbox_sig);
1145 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1146 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1148 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1149 _("Insert signature automatically"));
1151 hbox1 = gtk_hbox_new (FALSE, 8);
1152 gtk_widget_show (hbox1);
1153 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1155 label_sigsep = gtk_label_new (_("Signature separator"));
1156 gtk_widget_show (label_sigsep);
1157 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1159 entry_sigsep = gtk_entry_new ();
1160 gtk_widget_show (entry_sigsep);
1161 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1162 gtk_widget_set_usize (entry_sigsep, 64, -1);
1165 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1166 gtk_widget_show (vbox_linewrap);
1167 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1169 hbox3 = gtk_hbox_new (FALSE, 8);
1170 gtk_widget_show (hbox3);
1171 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1173 label_linewrap = gtk_label_new (_("Wrap messages at"));
1174 gtk_widget_show (label_linewrap);
1175 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1177 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1178 spinbtn_linewrap = gtk_spin_button_new
1179 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1180 gtk_widget_show (spinbtn_linewrap);
1181 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1182 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1183 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1185 label_linewrap = gtk_label_new (_("characters"));
1186 gtk_widget_show (label_linewrap);
1187 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1189 hbox4 = gtk_hbox_new (FALSE, 32);
1190 gtk_widget_show (hbox4);
1191 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1193 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1195 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1197 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1198 _("Forward as attachment"));
1200 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_account_autoselect,
1201 _("Automatically select account for mail replies"));
1204 compose.checkbtn_quote = checkbtn_quote;
1205 compose.entry_quotemark = entry_quotemark;
1206 compose.text_quotefmt = text_quotefmt;
1208 compose.checkbtn_autosig = checkbtn_autosig;
1209 compose.entry_sigsep = entry_sigsep;
1211 compose.spinbtn_linewrap = spinbtn_linewrap;
1212 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1213 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1214 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1216 compose.checkbtn_forward_as_attachment =
1217 checkbtn_forward_as_attachment;
1218 compose.checkbtn_reply_account_autoselect =
1219 checkbtn_reply_account_autoselect;
1222 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
1225 GtkWidget *datefmt_sample = NULL;
1227 g_return_if_fail(widget != NULL);
1228 g_return_if_fail(*widget != NULL);
1229 g_return_if_fail(display.entry_datefmt != NULL);
1231 datefmt_sample = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(*widget), "datefmt_sample");
1232 g_return_if_fail(datefmt_sample != NULL);
1234 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
1235 g_free(prefs_common.date_format);
1236 prefs_common.date_format = text;
1237 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
1239 gtk_widget_destroy(*widget);
1243 static void date_format_cancel_btn_clicked(GtkButton *button,
1246 g_return_if_fail(widget != NULL);
1247 g_return_if_fail(*widget != NULL);
1249 gtk_widget_destroy(*widget);
1253 static gboolean date_format_on_delete(GtkWidget *dialogwidget, gpointer d1, GtkWidget **widget)
1255 g_return_val_if_fail(widget != NULL, FALSE);
1256 g_return_val_if_fail(*widget != NULL, FALSE);
1261 static void date_format_entry_on_change(GtkEditable *editable, GtkLabel *example)
1264 struct tm *cal_time;
1267 cur_time = time(NULL);
1268 cal_time = localtime(&cur_time);
1270 text = gtk_editable_get_chars(editable, 0, -1);
1272 strftime(buffer, sizeof buffer, text, cal_time);
1274 gtk_label_set_text(example, buffer);
1277 static void date_format_select_row(GtkWidget *date_format_list, gint row,
1278 gint column, GdkEventButton *event,
1279 GtkWidget *date_format)
1285 GtkWidget *datefmt_sample = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(date_format), "datefmt_sample");
1287 g_return_if_fail(date_format_list != NULL);
1288 g_return_if_fail(date_format != NULL);
1289 g_return_if_fail(datefmt_sample != NULL);
1291 /* only on double click */
1292 if (event->type != GDK_2BUTTON_PRESS)
1295 /* get format from clist */
1296 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
1298 curs_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
1299 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
1301 /* insert the format into the text entry */
1302 new_format = g_malloc(strlen(old_format) + 3);
1304 strncpy(new_format, old_format, curs_pos);
1305 new_format[curs_pos] = '\0';
1306 strcat(new_format, format);
1307 strcat(new_format, &old_format[curs_pos]);
1309 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
1310 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), curs_pos + 2);
1315 static GtkWidget *create_date_format(GtkButton *button, void *data)
1317 static GtkWidget *date_format = NULL;
1319 GtkWidget *scrolledwindow1;
1320 GtkWidget *date_format_list;
1331 GtkWidget *confirm_area;
1333 GtkWidget *cancel_btn;
1334 GtkWidget *datefmt_sample = NULL;
1340 { "%a", _("the full abbreviated weekday name") },
1341 { "%A", _("the full weekday name") },
1342 { "%b", _("the abbreviated month name") },
1343 { "%B", _("the full month name") },
1344 { "%c", _("the preferred date and time for the current locale") },
1345 { "%C", _("the century number (year/100)") },
1346 { "%d", _("the day of the month as a decimal number") },
1347 { "%H", _("the hour as a decimal number using a 24-hour clock") },
1348 { "%I", _("the hour as a decimal number using a 12-hour clock") },
1349 { "%j", _("the day of the year as a decimal number") },
1350 { "%m", _("the month as a decimal number") },
1351 { "%M", _("the minute as a decimal number") },
1352 { "%p", _("either AM or PM") },
1353 { "%S", _("the second as a decimal number") },
1354 { "%w", _("the day of the week as a decimal number") },
1355 { "%x", _("the preferred date for the current locale") },
1356 { "%y", _("the last two digits of a year") },
1357 { "%Y", _("the year as a decimal number") },
1358 { "%Z", _("the time zone or name or abbreviation") }
1361 const int TIME_FORMAT_ELEMS = sizeof time_format / sizeof time_format[0];
1363 if (date_format) return date_format;
1365 date_format = gtk_window_new(GTK_WINDOW_DIALOG);
1366 gtk_window_set_title(GTK_WINDOW(date_format), _("Date format"));
1367 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1368 gtk_window_set_default_size(GTK_WINDOW(date_format), 440, 280);
1370 vbox1 = gtk_vbox_new(FALSE, 10);
1371 gtk_widget_show(vbox1);
1372 gtk_container_add(GTK_CONTAINER(date_format), vbox1);
1374 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
1375 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow1),
1376 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1377 gtk_widget_show(scrolledwindow1);
1378 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
1380 date_format_list = gtk_clist_new(2);
1381 gtk_widget_show(date_format_list);
1382 gtk_container_add(GTK_CONTAINER(scrolledwindow1), date_format_list);
1383 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 0, 80);
1384 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 1, 80);
1385 gtk_clist_column_titles_show(GTK_CLIST(date_format_list));
1387 label3 = gtk_label_new(_("Date Format"));
1388 gtk_widget_show(label3);
1389 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 0, label3);
1391 label4 = gtk_label_new(_("Date Format Description"));
1392 gtk_widget_show(label4);
1393 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 1, label4);
1395 for (tmp = 0; tmp < TIME_FORMAT_ELEMS; tmp++) {
1397 /* phoney casting necessary because of gtk... */
1398 text[0] = (gchar *) time_format[tmp].fmt;
1399 text[1] = (gchar *) time_format[tmp].txt;
1401 gtk_clist_append(GTK_CLIST(date_format_list), text);
1404 table2 = gtk_table_new(1, 1, TRUE);
1405 gtk_widget_show(table2);
1406 gtk_box_pack_start(GTK_BOX(vbox1), table2, FALSE, TRUE, 0);
1408 vbox2 = gtk_vbox_new(FALSE, 0);
1409 gtk_widget_show(vbox2);
1410 gtk_table_attach(GTK_TABLE(table2), vbox2, 0, 1, 0, 1,
1411 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1412 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1414 vbox3 = gtk_vbox_new(TRUE, 4);
1415 gtk_widget_show(vbox3);
1416 gtk_box_pack_end(GTK_BOX(vbox2), vbox3, FALSE, FALSE, 10);
1418 hbox2 = gtk_hbox_new(FALSE, 0);
1419 gtk_widget_show(hbox2);
1420 gtk_box_pack_start(GTK_BOX(vbox3), hbox2, TRUE, TRUE, 0);
1422 label5 = gtk_label_new(_("Date format"));
1423 gtk_widget_show(label5);
1424 gtk_box_pack_start(GTK_BOX(hbox2), label5, FALSE, FALSE, 0);
1425 gtk_misc_set_padding(GTK_MISC(label5), 8, 0);
1427 datefmt_sample = gtk_entry_new_with_max_length(300);
1428 gtk_widget_show(datefmt_sample);
1429 gtk_box_pack_start(GTK_BOX(hbox2), datefmt_sample, TRUE, TRUE, 40);
1431 /* we need the "sample" entry box; add it as data so callbacks can
1432 * get the entry box */
1433 gtk_object_set_data(GTK_OBJECT(date_format), "datefmt_sample", datefmt_sample);
1435 hbox1 = gtk_hbox_new(FALSE, 0);
1436 gtk_widget_show(hbox1);
1437 gtk_box_pack_start(GTK_BOX(vbox3), hbox1, TRUE, TRUE, 0);
1439 label6 = gtk_label_new(_("Example"));
1440 gtk_widget_show(label6);
1441 gtk_box_pack_start(GTK_BOX(hbox1), label6, FALSE, TRUE, 0);
1442 gtk_misc_set_padding(GTK_MISC(label6), 8, 0);
1444 label7 = gtk_label_new("");
1445 gtk_widget_show(label7);
1446 gtk_box_pack_start(GTK_BOX(hbox1), label7, TRUE, TRUE, 60);
1447 gtk_label_set_justify(GTK_LABEL(label7), GTK_JUSTIFY_LEFT);
1449 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
1450 &cancel_btn, _("Cancel"), NULL, NULL);
1451 gtk_widget_grab_default(ok_btn);
1453 gtk_widget_show(confirm_area);
1455 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
1457 /* set the current format */
1458 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), prefs_common.date_format);
1459 date_format_entry_on_change(GTK_EDITABLE(datefmt_sample),
1462 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1463 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
1466 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
1467 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
1470 gtk_signal_connect(GTK_OBJECT(date_format), "delete_event",
1471 GTK_SIGNAL_FUNC(date_format_on_delete),
1474 gtk_signal_connect(GTK_OBJECT(datefmt_sample), "changed",
1475 GTK_SIGNAL_FUNC(date_format_entry_on_change),
1478 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1479 gtk_window_set_modal(GTK_WINDOW(date_format), TRUE);
1481 gtk_widget_show(date_format);
1483 gtk_signal_connect(GTK_OBJECT(date_format_list), "select_row",
1484 GTK_SIGNAL_FUNC(date_format_select_row),
1490 static void prefs_display_create(void)
1493 GtkWidget *frame_font;
1495 GtkWidget *label_textfont;
1496 GtkWidget *entry_textfont;
1497 GtkWidget *button_textfont;
1498 GtkWidget *chkbtn_folder_unread;
1499 GtkWidget *chkbtn_transhdr;
1500 GtkWidget *frame_summary;
1502 GtkWidget *chkbtn_swapfrom;
1503 GtkWidget *chkbtn_hscrollbar;
1504 GtkWidget *chkbtn_useaddrbook;
1506 GtkWidget *label_datefmt;
1507 GtkWidget *label_datefmt_btn;
1508 GtkWidget *tmplabel, *tmpentry, *tmpbutton;
1509 GtkWidget *entry_datefmt;
1510 GtkTooltips *tooltips_datefmt;
1511 GtkWidget *button_dispitem;
1513 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1514 gtk_widget_show (vbox1);
1515 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1516 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1518 PACK_FRAME(vbox1, frame_font, _("Font"));
1520 table1 = gtk_table_new (4, 3, FALSE);
1521 gtk_widget_show (table1);
1522 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1523 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1524 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1525 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1527 label_textfont = gtk_label_new (_("Text"));
1528 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1529 gtk_widget_show (label_textfont);
1530 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1531 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1533 entry_textfont = gtk_entry_new ();
1534 gtk_widget_show (entry_textfont);
1535 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1536 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1538 button_textfont = gtk_button_new_with_label (" ... ");
1539 gtk_widget_show (button_textfont);
1540 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1542 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1543 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1545 tmplabel = gtk_label_new (_("Small"));
1546 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1547 gtk_widget_show (tmplabel);
1548 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1549 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1551 tmpentry = gtk_entry_new ();
1552 gtk_widget_show (tmpentry);
1553 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1554 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1556 tmpbutton = gtk_button_new_with_label (" ... ");
1557 gtk_widget_show (tmpbutton);
1558 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1560 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1561 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1562 display.entry_smallfont = tmpentry;
1564 tmplabel = gtk_label_new (_("Normal"));
1565 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1566 gtk_widget_show (tmplabel);
1567 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1568 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1570 tmpentry = gtk_entry_new ();
1571 gtk_widget_show (tmpentry);
1572 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1573 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1575 tmpbutton = gtk_button_new_with_label (" ... ");
1576 gtk_widget_show (tmpbutton);
1577 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1579 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1580 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1581 display.entry_normalfont = tmpentry;
1583 tmplabel = gtk_label_new (_("Bold"));
1584 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1585 gtk_widget_show (tmplabel);
1586 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1587 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1589 tmpentry = gtk_entry_new ();
1590 gtk_widget_show (tmpentry);
1591 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1592 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1594 tmpbutton = gtk_button_new_with_label (" ... ");
1595 gtk_widget_show (tmpbutton);
1596 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1598 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1599 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1600 display.entry_boldfont = tmpentry;
1602 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1603 gtk_widget_show (vbox2);
1604 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1607 (vbox2, chkbtn_transhdr,
1608 _("Translate header name (such as `From:', `Subject:')"));
1610 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1611 _("Display unread number next to folder name"));
1613 /* ---- Summary ---- */
1615 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1617 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1618 gtk_widget_show (vbox2);
1619 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1620 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1623 (vbox2, chkbtn_swapfrom,
1624 _("Display recipient on `From' column if sender is yourself"));
1626 (vbox2, chkbtn_useaddrbook,
1627 _("Display sender using address book"));
1629 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1631 hbox1 = gtk_hbox_new (FALSE, 8);
1632 gtk_widget_show (hbox1);
1633 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1635 label_datefmt = gtk_label_new (_("Date format"));
1636 gtk_widget_show (label_datefmt);
1637 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1639 entry_datefmt = gtk_entry_new ();
1640 gtk_widget_show (entry_datefmt);
1641 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1643 label_datefmt_btn = gtk_button_new_with_label(_("Customize"));
1644 gtk_widget_show(label_datefmt_btn);
1645 gtk_box_pack_start(GTK_BOX (hbox1), label_datefmt_btn, FALSE, FALSE, 0);
1646 gtk_signal_connect(GTK_OBJECT(label_datefmt_btn), "clicked",
1647 GTK_SIGNAL_FUNC(create_date_format), NULL);
1649 hbox1 = gtk_hbox_new (FALSE, 8);
1650 gtk_widget_show (hbox1);
1651 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1653 button_dispitem = gtk_button_new_with_label
1654 (_(" Set display item of summary... "));
1655 gtk_widget_show (button_dispitem);
1656 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1657 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1658 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1661 display.entry_textfont = entry_textfont;
1662 display.button_textfont = button_textfont;
1664 display.chkbtn_folder_unread = chkbtn_folder_unread;
1665 display.chkbtn_transhdr = chkbtn_transhdr;
1667 display.chkbtn_swapfrom = chkbtn_swapfrom;
1668 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1669 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1670 display.entry_datefmt = entry_datefmt;
1673 static void prefs_message_create(void)
1678 GtkWidget *chkbtn_enablecol;
1679 GtkWidget *button_edit_col;
1680 GtkWidget *chkbtn_mbalnum;
1681 GtkWidget *chkbtn_disphdrpane;
1682 GtkWidget *chkbtn_disphdr;
1683 GtkWidget *button_edit_disphdr;
1684 GtkWidget *hbox_linespc;
1685 GtkWidget *label_linespc;
1686 GtkObject *spinbtn_linespc_adj;
1687 GtkWidget *spinbtn_linespc;
1688 GtkWidget *chkbtn_headspc;
1690 GtkWidget *frame_scr;
1691 GtkWidget *vbox_scr;
1692 GtkWidget *chkbtn_smoothscroll;
1693 GtkWidget *hbox_scr;
1694 GtkWidget *label_scr;
1695 GtkObject *spinbtn_scrollstep_adj;
1696 GtkWidget *spinbtn_scrollstep;
1697 GtkWidget *chkbtn_halfpage;
1699 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1700 gtk_widget_show (vbox1);
1701 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1702 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1704 hbox1 = gtk_hbox_new (FALSE, 8);
1705 gtk_widget_show (hbox1);
1706 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1708 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1709 _("Enable coloration of message"));
1710 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1711 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1714 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1715 gtk_widget_show (button_edit_col);
1716 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1717 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1718 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1720 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1722 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1723 gtk_widget_show (vbox2);
1724 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1727 (vbox2, chkbtn_mbalnum,
1728 _("Display 2-byte alphabet and numeric with 1-byte character"));
1729 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1730 _("Display header pane above message view"));
1732 hbox1 = gtk_hbox_new (FALSE, 8);
1733 gtk_widget_show (hbox1);
1734 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1736 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1737 _("Display short headers on message view"));
1739 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1740 gtk_widget_show (button_edit_disphdr);
1741 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1743 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1744 GTK_SIGNAL_FUNC (prefs_display_header_open),
1747 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1749 hbox1 = gtk_hbox_new (FALSE, 32);
1750 gtk_widget_show (hbox1);
1751 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1753 hbox_linespc = gtk_hbox_new (FALSE, 8);
1754 gtk_widget_show (hbox1);
1755 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1757 label_linespc = gtk_label_new (_("Line space"));
1758 gtk_widget_show (label_linespc);
1759 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1762 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1763 spinbtn_linespc = gtk_spin_button_new
1764 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1765 gtk_widget_show (spinbtn_linespc);
1766 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1768 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1769 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1771 label_linespc = gtk_label_new (_("pixel(s)"));
1772 gtk_widget_show (label_linespc);
1773 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1776 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1778 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1780 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1781 gtk_widget_show (vbox_scr);
1782 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1783 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1785 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1787 hbox1 = gtk_hbox_new (FALSE, 32);
1788 gtk_widget_show (hbox1);
1789 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1791 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1793 hbox_scr = gtk_hbox_new (FALSE, 8);
1794 gtk_widget_show (hbox_scr);
1795 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1797 label_scr = gtk_label_new (_("Step"));
1798 gtk_widget_show (label_scr);
1799 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1801 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1802 spinbtn_scrollstep = gtk_spin_button_new
1803 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1804 gtk_widget_show (spinbtn_scrollstep);
1805 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1807 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1808 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1811 label_scr = gtk_label_new (_("pixel(s)"));
1812 gtk_widget_show (label_scr);
1813 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1815 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1817 message.chkbtn_enablecol = chkbtn_enablecol;
1818 message.button_edit_col = button_edit_col;
1819 message.chkbtn_mbalnum = chkbtn_mbalnum;
1820 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1821 message.chkbtn_disphdr = chkbtn_disphdr;
1822 message.spinbtn_linespc = spinbtn_linespc;
1823 message.chkbtn_headspc = chkbtn_headspc;
1825 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1826 message.spinbtn_scrollstep = spinbtn_scrollstep;
1827 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1828 message.chkbtn_halfpage = chkbtn_halfpage;
1832 static void prefs_privacy_create(void)
1837 GtkWidget *checkbtn_default_encrypt;
1838 GtkWidget *checkbtn_default_sign;
1839 GtkWidget *checkbtn_auto_check_signatures;
1840 GtkWidget *checkbtn_gpg_signature_popup;
1841 GtkWidget *checkbtn_passphrase_grab;
1842 GtkWidget *checkbtn_gpg_warning;
1844 GtkWidget *menuitem;
1846 GtkWidget *optmenu_menu;
1848 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1849 gtk_widget_show (vbox1);
1850 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1851 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1853 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1854 gtk_widget_show (vbox2);
1855 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1857 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1858 _("Encrypt message by default"));
1860 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1861 _("Sign message by default"));
1863 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1864 _("Automatically check signatures"));
1866 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
1867 _("Show signature check result in a popup window"));
1870 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1871 _("Grab input while entering a passphrase"));
1875 (vbox2, checkbtn_gpg_warning,
1876 _("Display warning on startup if GnuPG doesn't work"));
1878 hbox1 = gtk_hbox_new (FALSE, 8);
1879 gtk_widget_show (hbox1);
1880 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1882 /* create default signkey box */
1883 label = gtk_label_new (_("Default Sign Key"));
1884 gtk_widget_show (label);
1885 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1886 optmenu = gtk_option_menu_new ();
1887 gtk_widget_show (optmenu);
1888 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1889 optmenu_menu = gtk_menu_new ();
1891 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1892 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1893 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1894 /* FIXME: disabled because not implemented */
1895 gtk_widget_set_sensitive(optmenu, FALSE);
1897 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1898 privacy.checkbtn_default_sign = checkbtn_default_sign;
1899 privacy.checkbtn_auto_check_signatures
1900 = checkbtn_auto_check_signatures;
1901 privacy.checkbtn_gpg_signature_popup
1902 = checkbtn_gpg_signature_popup;
1903 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1904 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
1905 privacy.optmenu_default_signkey = optmenu;
1909 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1913 GtkWidget *menuitem;
1916 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1917 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1918 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1919 g_free(*((gchar **)pparam->data));
1920 *((gchar **)pparam->data) = g_strdup(charset);
1924 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1928 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1930 GtkWidget *menuitem;
1934 g_return_if_fail(optmenu != NULL);
1935 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1937 menu = gtk_option_menu_get_menu(optmenu);
1938 for (cur = GTK_MENU_SHELL(menu)->children;
1939 cur != NULL; cur = cur->next) {
1940 menuitem = GTK_WIDGET(cur->data);
1941 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1942 if (!strcmp(charset, *((gchar **)pparam->data))) {
1943 gtk_option_menu_set_history(optmenu, n);
1949 gtk_option_menu_set_history(optmenu, 0);
1950 prefs_common_charset_set_data_from_optmenu(pparam);
1953 #endif /* USE_GPGME */
1955 static void prefs_interface_create(void)
1960 GtkWidget *checkbtn_emacs;
1961 GtkWidget *checkbtn_openunread;
1962 GtkWidget *checkbtn_openinbox;
1963 GtkWidget *checkbtn_immedexec;
1964 GtkWidget *checkbtn_addaddrbyclick;
1966 GtkWidget *recvdialog_optmenu;
1967 GtkWidget *recvdialog_optmenu_menu;
1968 GtkWidget *recvdialog_menuitem;
1971 GtkWidget *frame_exit;
1972 GtkWidget *vbox_exit;
1974 GtkWidget *checkbtn_confonexit;
1975 GtkWidget *checkbtn_cleanonexit;
1976 GtkWidget *checkbtn_askonclean;
1977 GtkWidget *checkbtn_warnqueued;
1979 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1980 gtk_widget_show (vbox1);
1981 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1982 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1984 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1985 gtk_widget_show (vbox2);
1986 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1988 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1989 _("Emulate the behavior of mouse operation of\n"
1990 "Emacs-based mailer"));
1991 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1995 (vbox2, checkbtn_openunread,
1996 _("Open first unread message when entering a folder"));
1999 (vbox2, checkbtn_openinbox,
2000 _("Go to inbox after receiving new mail"));
2002 vbox3 = gtk_vbox_new (FALSE, 0);
2003 gtk_widget_show (vbox3);
2004 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2007 (vbox3, checkbtn_immedexec,
2008 _("Execute immediately when moving or deleting messages"));
2010 hbox1 = gtk_hbox_new (FALSE, 0);
2011 gtk_widget_show (hbox1);
2012 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2014 label = gtk_label_new
2015 (_("(Messages will be just marked till execution\n"
2016 " if this is turned off)"));
2017 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2018 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2021 (vbox2, checkbtn_addaddrbyclick,
2022 _("Add address to destination when double-clicked"));
2024 /* Receive Dialog */
2025 hbox = gtk_hbox_new (FALSE, 8);
2026 gtk_widget_show (hbox);
2027 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2029 label = gtk_label_new (_("Show receive Dialog"));
2030 gtk_widget_show (label);
2031 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2033 recvdialog_optmenu = gtk_option_menu_new ();
2034 gtk_widget_show (recvdialog_optmenu);
2035 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2037 recvdialog_optmenu_menu = gtk_menu_new ();
2039 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2040 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2041 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2043 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu);
2046 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2048 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
2049 gtk_widget_show (vbox_exit);
2050 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2051 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2053 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2054 _("Confirm on exit"));
2056 hbox1 = gtk_hbox_new (FALSE, 32);
2057 gtk_widget_show (hbox1);
2058 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2060 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2061 _("Empty trash on exit"));
2062 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2063 _("Ask before emptying"));
2064 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2066 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2067 _("Warn if there are queued messages"));
2069 interface.checkbtn_emacs = checkbtn_emacs;
2070 interface.checkbtn_openunread = checkbtn_openunread;
2071 interface.checkbtn_openinbox = checkbtn_openinbox;
2072 interface.checkbtn_immedexec = checkbtn_immedexec;
2073 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2074 interface.recvdialog_optmenu = recvdialog_optmenu;
2075 interface.checkbtn_confonexit = checkbtn_confonexit;
2076 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2077 interface.checkbtn_askonclean = checkbtn_askonclean;
2078 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2081 static void prefs_other_create(void)
2086 GtkWidget *uri_frame;
2087 GtkWidget *uri_label;
2088 GtkWidget *uri_combo;
2089 GtkWidget *uri_entry;
2091 GtkWidget *print_frame;
2092 GtkWidget *printcmd_label;
2093 GtkWidget *printcmd_entry;
2095 GtkWidget *exteditor_frame;
2096 GtkWidget *exteditor_label;
2097 GtkWidget *exteditor_combo;
2098 GtkWidget *exteditor_entry;
2100 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2101 gtk_widget_show (vbox1);
2102 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2103 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2105 PACK_FRAME(vbox1, uri_frame,
2106 _("External Web browser (%s will be replaced with URI)"));
2108 hbox1 = gtk_hbox_new (FALSE, 8);
2109 gtk_widget_show (hbox1);
2110 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2111 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2113 uri_label = gtk_label_new (_("Command"));
2114 gtk_widget_show(uri_label);
2115 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2117 uri_combo = gtk_combo_new ();
2118 gtk_widget_show (uri_combo);
2119 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2120 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2121 "netscape -remote 'openURL(%s,raise)'",
2123 "gnome-moz-remote --raise --newwin '%s'",
2124 "kterm -e w3m '%s'",
2125 "kterm -e lynx '%s'",
2128 uri_entry = GTK_COMBO (uri_combo)->entry;
2130 PACK_FRAME(vbox1, print_frame,
2131 _("Printing (%s will be replaced with file name)"));
2133 hbox1 = gtk_hbox_new (FALSE, 8);
2134 gtk_widget_show (hbox1);
2135 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2136 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2138 printcmd_label = gtk_label_new (_("Command"));
2139 gtk_widget_show (printcmd_label);
2140 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2142 printcmd_entry = gtk_entry_new ();
2143 gtk_widget_show (printcmd_entry);
2144 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2146 PACK_FRAME(vbox1, exteditor_frame,
2147 _("External editor (%s will be replaced with file name)"));
2149 hbox1 = gtk_hbox_new (FALSE, 8);
2150 gtk_widget_show (hbox1);
2151 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2152 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2154 exteditor_label = gtk_label_new (_("Command"));
2155 gtk_widget_show (exteditor_label);
2156 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2158 exteditor_combo = gtk_combo_new ();
2159 gtk_widget_show (exteditor_combo);
2160 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2161 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2163 "mgedit --no-fork %s",
2169 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2171 other.uri_combo = uri_combo;
2172 other.uri_entry = uri_entry;
2173 other.printcmd_entry = printcmd_entry;
2175 other.exteditor_combo = exteditor_combo;
2176 other.exteditor_entry = exteditor_entry;
2179 void prefs_quote_colors_dialog(void)
2181 if (!quote_color_win)
2182 prefs_quote_colors_dialog_create();
2183 gtk_widget_show(quote_color_win);
2184 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2187 gtk_widget_hide(quote_color_win);
2189 textview_update_message_colors();
2190 main_window_reflect_prefs_all();
2193 static void prefs_quote_colors_dialog_create(void)
2198 GtkWidget *quotelevel1_label;
2199 GtkWidget *quotelevel2_label;
2200 GtkWidget *quotelevel3_label;
2201 GtkWidget *uri_label;
2204 //GtkWidget *cancel_btn;
2205 GtkWidget *recycle_colors_btn;
2206 GtkWidget *frame_colors;
2208 window = gtk_window_new(GTK_WINDOW_DIALOG);
2209 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2210 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2211 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2212 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2213 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2215 vbox = gtk_vbox_new (FALSE, VSPACING);
2216 gtk_container_add (GTK_CONTAINER (window), vbox);
2217 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2218 PACK_FRAME(vbox, frame_colors, _("Colors"));
2220 table = gtk_table_new (4, 2, FALSE);
2221 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2222 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2223 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2224 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
2226 color_buttons.quote_level1_btn = gtk_button_new();
2227 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2228 0, 1, 0, 1, 0, 0, 0, 0);
2229 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2230 gtk_container_set_border_width
2231 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2233 color_buttons.quote_level2_btn = gtk_button_new();
2234 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2235 0, 1, 1, 2, 0, 0, 0, 0);
2236 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2237 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2239 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2240 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2241 0, 1, 2, 3, 0, 0, 0, 0);
2242 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2243 gtk_container_set_border_width
2244 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2246 color_buttons.uri_btn = gtk_button_new_with_label ("");
2247 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2248 0, 1, 3, 4, 0, 0, 0, 0);
2249 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2250 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2252 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2253 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2254 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2255 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2256 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2258 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2259 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2260 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2261 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2262 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2264 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2265 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2266 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2267 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2268 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2270 uri_label = gtk_label_new (_("URI link"));
2271 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2272 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2273 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2274 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2276 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2277 _("Recycle quote colors"));
2279 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2280 NULL, NULL, NULL, NULL);
2281 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2283 gtk_widget_grab_default(ok_btn);
2284 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2285 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2286 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2287 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2288 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2289 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2290 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2291 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2294 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2295 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2296 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2297 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2298 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2299 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2300 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2301 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2302 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2303 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2304 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2305 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2307 /* show message button colors and recycle options */
2308 set_button_bg_color(color_buttons.quote_level1_btn,
2309 prefs_common.quote_level1_col);
2310 set_button_bg_color(color_buttons.quote_level2_btn,
2311 prefs_common.quote_level2_col);
2312 set_button_bg_color(color_buttons.quote_level3_btn,
2313 prefs_common.quote_level3_col);
2314 set_button_bg_color(color_buttons.uri_btn,
2315 prefs_common.uri_col);
2316 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2317 prefs_common.recycle_quote_colors);
2319 gtk_widget_show_all(vbox);
2320 quote_color_win = window;
2323 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2324 GdkEventKey *event, gpointer data)
2326 if (event && event->keyval == GDK_Escape)
2330 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2332 gchar *type = (gchar *)data;
2333 gchar *title = NULL;
2334 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2336 GtkColorSelectionDialog *dialog;
2338 if(g_strcasecmp(type, "LEVEL1") == 0) {
2339 title = _("Pick color for quotation level 1");
2340 rgbvalue = prefs_common.quote_level1_col;
2341 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2342 title = _("Pick color for quotation level 2");
2343 rgbvalue = prefs_common.quote_level2_col;
2344 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2345 title = _("Pick color for quotation level 3");
2346 rgbvalue = prefs_common.quote_level3_col;
2347 } else if(g_strcasecmp(type, "URI") == 0) {
2348 title = _("Pick color for URI");
2349 rgbvalue = prefs_common.uri_col;
2350 } else { /* Should never be called */
2351 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2355 color_dialog = gtk_color_selection_dialog_new(title);
2356 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2357 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2358 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2359 manage_window_set_transient(GTK_WINDOW(color_dialog));
2361 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2362 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2363 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2364 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2365 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2366 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2369 /* preselect the previous color in the color selection dialog */
2370 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2371 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2372 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2373 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2374 gtk_color_selection_set_color
2375 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2377 gtk_widget_show(color_dialog);
2380 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2382 GtkColorSelection *colorsel = (GtkColorSelection *)
2383 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2385 gint red, green, blue, rgbvalue;
2386 gchar *type = (gchar *)data;
2388 gtk_color_selection_get_color(colorsel, color);
2390 red = (gint) (color[0] * 255.0);
2391 green = (gint) (color[1] * 255.0);
2392 blue = (gint) (color[2] * 255.0);
2393 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2396 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2397 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2398 fprintf(stderr, "Color is %x\n", rgbvalue);
2401 if (g_strcasecmp(type, "LEVEL1") == 0) {
2402 prefs_common.quote_level1_col = rgbvalue;
2403 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2404 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2405 prefs_common.quote_level2_col = rgbvalue;
2406 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2407 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2408 prefs_common.quote_level3_col = rgbvalue;
2409 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2410 } else if (g_strcasecmp(type, "URI") == 0) {
2411 prefs_common.uri_col = rgbvalue;
2412 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2414 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2416 gtk_widget_destroy(color_dialog);
2419 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2421 gtk_widget_destroy(color_dialog);
2424 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
2428 gtk_widget_destroy(color_dialog);
2431 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2436 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2437 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2438 newstyle->bg[GTK_STATE_NORMAL] = color;
2439 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2440 newstyle->bg[GTK_STATE_ACTIVE] = color;
2442 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2445 static void prefs_enable_message_color_toggled(void)
2449 is_active = gtk_toggle_button_get_active
2450 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2451 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2452 prefs_common.enable_color = is_active;
2455 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2459 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2460 prefs_common.recycle_quote_colors = is_active;
2463 static void prefs_quote_description(void)
2465 if (!quote_desc_win)
2466 prefs_quote_description_create();
2468 gtk_widget_show(quote_desc_win);
2470 gtk_widget_hide(quote_desc_win);
2473 static void prefs_quote_description_create(void)
2481 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2482 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2483 _("Description of symbols"));
2484 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2485 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2486 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2487 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2489 vbox = gtk_vbox_new(FALSE, 8);
2490 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2492 hbox = gtk_hbox_new(FALSE, 4);
2493 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2495 label = gtk_label_new
2499 "%N\n" /* full name */
2500 "%F\n" /* first name */
2501 "%I\n" /* sender's initial */
2502 "%s\n" /* subject line */
2505 "%n\n" /* newsgroups */
2506 "%i\n" /* message id */
2507 "%r\n" /* references */
2518 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2519 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2521 label = gtk_label_new
2522 (_("DESCRIPTION\n\n"
2525 "Full Name of Sender\n"
2526 "First Name of Sender\n"
2527 "Initial of Sender\n"
2535 "Display the information\n"
2536 "If the information x is set, displays expr\n"
2539 "Quoted message body\n"
2540 "Message body without signature\n"
2541 "Quoted message body without signature\n"
2544 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2545 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2547 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2548 NULL, NULL, NULL, NULL);
2549 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2551 gtk_widget_grab_default(ok_btn);
2552 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2553 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2555 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2556 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2558 gtk_widget_show_all(vbox);
2561 /* functions for setting items of SummaryView */
2563 static struct _SummaryDisplayItem
2567 GtkWidget *chkbtn[N_SUMMARY_COLS];
2570 GtkWidget *cancel_btn;
2573 #define SET_ACTIVE(column, var) \
2574 gtk_toggle_button_set_active \
2575 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2577 #define GET_ACTIVE(column, var) \
2578 prefs_common.var = gtk_toggle_button_get_active \
2579 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2581 void prefs_summary_display_item_set(void)
2583 static gboolean cancelled;
2585 if (!summarydispitem.window)
2586 prefs_summary_display_item_dialog_create(&cancelled);
2587 gtk_widget_grab_focus(summarydispitem.ok_btn);
2588 gtk_widget_show(summarydispitem.window);
2589 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2591 SET_ACTIVE(S_COL_MARK, show_mark);
2592 SET_ACTIVE(S_COL_UNREAD, show_unread);
2593 SET_ACTIVE(S_COL_MIME, show_mime);
2594 SET_ACTIVE(S_COL_NUMBER, show_number);
2595 SET_ACTIVE(S_COL_SCORE, show_score);
2596 SET_ACTIVE(S_COL_SIZE, show_size);
2597 SET_ACTIVE(S_COL_DATE, show_date);
2598 SET_ACTIVE(S_COL_FROM, show_from);
2599 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2602 gtk_widget_hide(summarydispitem.window);
2604 if (cancelled != TRUE) {
2605 GET_ACTIVE(S_COL_MARK, show_mark);
2606 GET_ACTIVE(S_COL_UNREAD, show_unread);
2607 GET_ACTIVE(S_COL_MIME, show_mime);
2608 GET_ACTIVE(S_COL_NUMBER, show_number);
2609 GET_ACTIVE(S_COL_SCORE, show_score);
2610 GET_ACTIVE(S_COL_SIZE, show_size);
2611 GET_ACTIVE(S_COL_DATE, show_date);
2612 GET_ACTIVE(S_COL_FROM, show_from);
2613 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2615 main_window_reflect_prefs_all();
2619 #define SET_CHECK_BUTTON(column, label) \
2621 summarydispitem.chkbtn[column] = \
2622 gtk_check_button_new_with_label(label); \
2623 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2624 summarydispitem.chkbtn[column], \
2628 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2632 GtkWidget *chkbtn_vbox;
2635 GtkWidget *cancel_btn;
2637 window = gtk_window_new(GTK_WINDOW_DIALOG);
2638 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2639 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2640 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2641 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2642 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2643 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2644 GTK_SIGNAL_FUNC(display_item_delete_event),
2646 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2647 GTK_SIGNAL_FUNC(display_item_key_pressed),
2650 vbox = gtk_vbox_new(FALSE, 8);
2651 gtk_container_add(GTK_CONTAINER(window), vbox);
2653 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2654 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2656 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2657 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2658 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2659 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2660 SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
2661 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2662 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2663 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2664 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2666 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2667 &cancel_btn, _("Cancel"), NULL, NULL);
2668 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2669 gtk_widget_grab_default(ok_btn);
2671 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2672 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2673 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2674 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2676 gtk_widget_show_all(vbox);
2678 summarydispitem.window = window;
2679 summarydispitem.ok_btn = ok_btn;
2680 summarydispitem.cancel_btn = cancel_btn;
2683 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2689 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2695 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2696 gboolean *cancelled)
2704 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2705 gboolean *cancelled)
2707 if (event && event->keyval == GDK_Escape) {
2713 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
2717 g_return_if_fail(entry != NULL);
2719 if (!font_sel_win) {
2720 font_sel_win = gtk_font_selection_dialog_new
2721 (_("Font selection"));
2722 gtk_window_position(GTK_WINDOW(font_sel_win),
2723 GTK_WIN_POS_CENTER);
2724 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2725 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2728 (GTK_OBJECT(font_sel_win), "key_press_event",
2729 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
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 if(font_sel_conn_id) {
2739 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
2741 font_sel_conn_id = gtk_signal_connect
2742 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2744 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2746 printf("%i\n", font_sel_conn_id);
2748 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
2749 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
2751 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2752 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2753 gtk_widget_grab_focus
2754 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2755 gtk_widget_show(font_sel_win);
2758 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2762 if (event && event->keyval == GDK_Escape)
2763 gtk_widget_hide(font_sel_win);
2766 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
2770 fontname = gtk_font_selection_dialog_get_font_name
2771 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2774 gtk_entry_set_text(entry, fontname);
2778 gtk_widget_hide(font_sel_win);
2781 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2784 GtkWidget *menuitem;
2787 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2788 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2789 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2790 g_free(*((gchar **)pparam->data));
2791 *((gchar **)pparam->data) = g_strdup(charset);
2794 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2797 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2799 GtkWidget *menuitem;
2803 g_return_if_fail(optmenu != NULL);
2804 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2806 menu = gtk_option_menu_get_menu(optmenu);
2807 for (cur = GTK_MENU_SHELL(menu)->children;
2808 cur != NULL; cur = cur->next) {
2809 menuitem = GTK_WIDGET(cur->data);
2810 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2811 if (!strcmp(charset, *((gchar **)pparam->data))) {
2812 gtk_option_menu_set_history(optmenu, n);
2818 gtk_option_menu_set_history(optmenu, 0);
2819 prefs_common_charset_set_data_from_optmenu(pparam);
2822 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
2825 prefs_common_cancel();
2829 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2832 if (event && event->keyval == GDK_Escape)
2833 prefs_common_cancel();
2836 static void prefs_common_ok(void)
2838 prefs_common_apply();
2839 gtk_widget_hide(dialog.window);
2840 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2841 gtk_widget_hide(quote_desc_win);
2843 inc_autocheck_timer_set();
2846 static void prefs_common_apply(void)
2848 prefs_set_data_from_dialog(param);
2849 main_window_reflect_prefs_all();
2850 prefs_common_save_config();
2853 static void prefs_common_cancel(void)
2855 gtk_widget_hide(dialog.window);
2856 inc_autocheck_timer_set();
2860 static struct _ComposePrefs
2864 GtkWidget *close_btn;
2867 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
2868 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
2869 static void compose_prefs_close(GtkWidget *widget);
2870 static void compose_prefs_fmt_create(void);
2872 static void compose_prefs_fmt_open(void)
2874 if (composeprefs.window == NULL)
2875 compose_prefs_fmt_create();
2876 gtk_widget_show(composeprefs.window);
2880 static void compose_prefs_fmt_create(void)
2883 GtkWidget *close_btn;
2885 GtkWidget *frame_quote;
2886 GtkWidget *vbox_quote;
2888 GtkWidget *checkbtn_quote;
2889 GtkWidget *label_quotemark;
2890 GtkWidget *entry_quotemark;
2891 GtkWidget *scrolledwin_quotefmt;
2892 GtkWidget *text_quotefmt;
2893 GtkWidget *label_quotefmt;
2894 GtkWidget *btn_quotedesc;
2896 GtkWidget *label_fw_quotemark;
2897 GtkWidget *entry_fw_quotemark;
2898 GtkWidget *label_fw_quotefmt;
2899 GtkWidget *text_fw_quotefmt;
2901 window = gtk_window_new(GTK_WINDOW_DIALOG);
2902 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2903 gtk_window_set_title(GTK_WINDOW(window), _("Compose Preferences"));
2904 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2905 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2906 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2907 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2908 GTK_SIGNAL_FUNC(compose_prefs_delete_event),
2910 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2911 GTK_SIGNAL_FUNC(compose_prefs_key_pressed),
2914 vbox_quote = gtk_vbox_new(FALSE, 8);
2915 gtk_container_add(GTK_CONTAINER(window), vbox_quote);
2917 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
2918 _("Quote message when replying"));
2920 hbox1 = gtk_hbox_new (FALSE, 8);
2921 gtk_widget_show (hbox1);
2922 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2924 label_quotemark = gtk_label_new (_("Quotation mark"));
2925 gtk_widget_show (label_quotemark);
2926 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
2928 entry_quotemark = gtk_entry_new ();
2929 gtk_widget_show (entry_quotemark);
2930 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
2931 gtk_widget_set_usize (entry_quotemark, 64, -1);
2933 hbox1 = gtk_hbox_new (FALSE, 0);
2934 gtk_widget_show (hbox1);
2935 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2937 label_quotefmt = gtk_label_new (_("Quotation format:"));
2938 gtk_widget_show (label_quotefmt);
2939 gtk_box_pack_start (GTK_BOX (hbox1), label_quotefmt, FALSE, FALSE, 0);
2941 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
2942 gtk_widget_show (scrolledwin_quotefmt);
2943 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
2944 gtk_scrolled_window_set_policy
2945 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
2946 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2948 text_quotefmt = gtk_text_new (NULL, NULL);
2949 gtk_widget_show (text_quotefmt);
2950 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
2951 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
2952 gtk_widget_set_usize(text_quotefmt, 400, 60);
2954 hbox1 = gtk_hbox_new (FALSE, 8);
2955 gtk_widget_show (hbox1);
2956 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2958 label_fw_quotemark = gtk_label_new (_("Forward quotation mark"));
2959 gtk_widget_show (label_fw_quotemark);
2960 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotemark, FALSE, FALSE, 0);
2962 entry_fw_quotemark = gtk_entry_new ();
2963 gtk_widget_show (entry_fw_quotemark);
2964 gtk_box_pack_start (GTK_BOX (hbox1), entry_fw_quotemark, FALSE, FALSE, 0);
2965 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
2967 hbox1 = gtk_hbox_new (FALSE, 0);
2968 gtk_widget_show (hbox1);
2969 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2971 label_fw_quotefmt = gtk_label_new (_("Forward format:"));
2972 gtk_widget_show (label_fw_quotefmt);
2973 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotefmt, FALSE, FALSE, 0);
2975 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
2976 gtk_widget_show (scrolledwin_quotefmt);
2977 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
2978 gtk_scrolled_window_set_policy
2979 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
2980 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2982 text_fw_quotefmt = gtk_text_new (NULL, NULL);
2983 gtk_widget_show (text_fw_quotefmt);
2984 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt);
2985 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
2986 gtk_widget_set_usize(text_fw_quotefmt, 400, 60);
2988 hbox1 = gtk_hbox_new (FALSE, 0);
2989 gtk_widget_show (hbox1);
2990 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2993 gtk_button_new_with_label (_(" Description of symbols "));
2994 gtk_widget_show (btn_quotedesc);
2995 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc,
2998 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
2999 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
3002 gtkut_button_set_create(&hbox1, &close_btn, _("Close"),
3003 NULL, NULL, NULL, NULL);
3004 gtk_box_pack_end(GTK_BOX(vbox_quote), hbox1, FALSE, FALSE, 0);
3005 gtk_widget_grab_default(close_btn);
3007 gtk_signal_connect(GTK_OBJECT(close_btn), "clicked",
3008 GTK_SIGNAL_FUNC(compose_prefs_close), NULL);
3010 gtk_widget_show_all(vbox_quote);
3012 composeprefs.window = window;
3013 composeprefs.close_btn = close_btn;
3015 compose.checkbtn_quote = checkbtn_quote;
3016 compose.entry_quotemark = entry_quotemark;
3017 compose.text_quotefmt = text_quotefmt;
3018 compose.entry_fw_quotemark = entry_fw_quotemark;
3019 compose.text_fw_quotefmt = text_fw_quotefmt;
3022 static void compose_prefs_close(GtkWidget *widget)
3024 gtk_widget_hide(composeprefs.window);
3027 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3029 gtk_widget_hide(composeprefs.window);
3034 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3036 if (event && event->keyval == GDK_Escape) {
3037 gtk_widget_hide(composeprefs.window);
3041 static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3044 GtkWidget *menuitem;
3046 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3047 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3048 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3049 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3052 static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3054 RecvDialogShow dialog_show;
3055 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3057 GtkWidget *menuitem;
3059 dialog_show = *((RecvDialogShow *)pparam->data);
3061 switch (dialog_show) {
3062 case RECVDIALOG_ALWAYS:
3063 gtk_option_menu_set_history(optmenu, 0);
3065 case RECVDIALOG_WINDOW_ACTIVE:
3066 gtk_option_menu_set_history(optmenu, 1);
3068 case RECVDIALOG_NEVER:
3069 gtk_option_menu_set_history(optmenu, 2);
3074 menu = gtk_option_menu_get_menu(optmenu);
3075 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3076 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));