2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2001 Hiroyuki Yamamoto
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
28 #include <gdk/gdkkeysyms.h>
33 #include <sys/types.h>
39 #include "prefs_common.h"
40 #include "prefs_display_header.h"
41 #include "mainwindow.h"
42 #include "summaryview.h"
43 #include "messageview.h"
44 #include "manage_window.h"
50 #include "alertpanel.h"
54 #include "folderview.h"
56 PrefsCommon prefs_common;
58 static PrefsDialog dialog;
60 static struct Receive {
61 GtkWidget *checkbtn_incext;
62 GtkWidget *entry_incext;
63 GtkWidget *button_incext;
65 GtkWidget *checkbtn_local;
66 GtkWidget *checkbtn_filter_on_inc;
67 GtkWidget *entry_spool;
69 GtkWidget *checkbtn_autochk;
70 GtkWidget *spinbtn_autochk;
71 GtkObject *spinbtn_autochk_adj;
73 GtkWidget *checkbtn_chkonstartup;
74 GtkWidget *checkbtn_noerrorpanel;
75 GtkWidget *checkbtn_scan_after_inc;
78 GtkWidget *spinbtn_maxarticle;
79 GtkObject *spinbtn_maxarticle_adj;
83 GtkWidget *checkbtn_sendext;
84 GtkWidget *entry_sendext;
85 GtkWidget *button_sendext;
87 GtkWidget *checkbtn_savemsg;
88 GtkWidget *checkbtn_queuemsg;
90 GtkWidget *optmenu_charset;
92 GtkWidget *checkbtn_returnreceipt;
95 static struct Compose {
96 GtkWidget *checkbtn_quote;
97 GtkWidget *entry_quotemark;
98 GtkWidget *text_quotefmt;
99 GtkWidget *checkbtn_autosig;
100 GtkWidget *entry_sigsep;
102 GtkWidget *checkbtn_reply_account_autosel;
103 GtkWidget *entry_fw_quotemark;
104 GtkWidget *text_fw_quotefmt;
106 GtkWidget *spinbtn_linewrap;
107 GtkObject *spinbtn_linewrap_adj;
108 GtkWidget *checkbtn_wrapquote;
109 GtkWidget *checkbtn_wrapatsend;
111 GtkWidget * checkbtn_forward_as_attachment;
112 GtkWidget * checkbtn_smart_wrapping;
115 GtkWidget *checkbtn_enable_ispell;
116 GtkWidget *entry_ispell_path;
117 GtkWidget *btn_ispell_path;
118 GtkWidget *optmenu_dictionary_path;
121 static struct Display {
122 GtkWidget *entry_textfont;
123 GtkWidget *button_textfont;
125 GtkWidget *entry_smallfont;
126 GtkWidget *entry_normalfont;
127 GtkWidget *entry_boldfont;
129 GtkWidget *chkbtn_folder_unread;
131 GtkWidget *chkbtn_transhdr;
133 GtkWidget *chkbtn_swapfrom;
134 GtkWidget *chkbtn_hscrollbar;
135 GtkWidget *chkbtn_useaddrbook;
136 GtkWidget *chkbtn_expand_thread;
137 GtkWidget *chkbtn_bold_unread;
139 GtkWidget *entry_datefmt;
142 static struct Message {
143 GtkWidget *chkbtn_enablecol;
144 GtkWidget *button_edit_col;
145 GtkWidget *chkbtn_mbalnum;
146 GtkWidget *chkbtn_disphdrpane;
147 GtkWidget *chkbtn_disphdr;
148 GtkWidget *spinbtn_linespc;
149 GtkObject *spinbtn_linespc_adj;
150 GtkWidget *chkbtn_headspc;
152 GtkWidget *chkbtn_smoothscroll;
153 GtkWidget *spinbtn_scrollstep;
154 GtkObject *spinbtn_scrollstep_adj;
155 GtkWidget *chkbtn_halfpage;
159 static struct Privacy {
160 GtkWidget *checkbtn_default_encrypt;
161 GtkWidget *checkbtn_default_sign;
162 GtkWidget *checkbtn_auto_check_signatures;
163 GtkWidget *checkbtn_gpg_signature_popup;
164 GtkWidget *checkbtn_passphrase_grab;
165 GtkWidget *checkbtn_gpg_warning;
166 GtkWidget *optmenu_default_signkey;
170 static struct Interface {
171 GtkWidget *checkbtn_emacs;
172 GtkWidget *checkbtn_openunread;
173 GtkWidget *checkbtn_openinbox;
174 GtkWidget *checkbtn_immedexec;
175 GtkWidget *checkbtn_confonexit;
176 GtkWidget *checkbtn_cleanonexit;
177 GtkWidget *checkbtn_askonclean;
178 GtkWidget *checkbtn_warnqueued;
179 GtkWidget *checkbtn_addaddrbyclick;
180 GtkWidget *recvdialog_optmenu;
183 static struct Other {
184 GtkWidget *uri_combo;
185 GtkWidget *uri_entry;
186 GtkWidget *printcmd_entry;
187 GtkWidget *exteditor_combo;
188 GtkWidget *exteditor_entry;
191 static struct MessageColorButtons {
192 GtkWidget *quote_level1_btn;
193 GtkWidget *quote_level2_btn;
194 GtkWidget *quote_level3_btn;
196 GtkWidget *tgt_folder_btn;
199 static GtkWidget *quote_desc_win;
200 static GtkWidget *font_sel_win;
201 static guint font_sel_conn_id;
202 static GtkWidget *quote_color_win;
203 static GtkWidget *color_dialog;
205 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
206 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
208 static void prefs_common_default_signkey_set_data_from_optmenu
210 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
212 static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam);
213 static void prefs_recvdialog_set_optmenu(PrefParam *pparam);
215 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param);
216 static void prefs_dictionary_set_optmenu(PrefParam *pparam);
220 parameter name, default value, pointer to the prefs variable, data type,
221 pointer to the widget pointer,
222 pointer to the function for data setting,
223 pointer to the function for widget setting
226 static PrefParam param[] = {
228 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
229 &receive.checkbtn_incext,
230 prefs_set_data_from_toggle, prefs_set_toggle},
231 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
232 &receive.entry_incext,
233 prefs_set_data_from_entry, prefs_set_entry},
235 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
236 &receive.checkbtn_local,
237 prefs_set_data_from_toggle, prefs_set_toggle},
238 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
239 &receive.checkbtn_filter_on_inc,
240 prefs_set_data_from_toggle, prefs_set_toggle},
241 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
242 &receive.entry_spool,
243 prefs_set_data_from_entry, prefs_set_entry},
245 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
246 &receive.checkbtn_autochk,
247 prefs_set_data_from_toggle, prefs_set_toggle},
248 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
249 &receive.spinbtn_autochk,
250 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
251 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
252 &receive.checkbtn_chkonstartup,
253 prefs_set_data_from_toggle, prefs_set_toggle},
254 {"noerrorpanel", "FALSE", &prefs_common.noerrorpanel, P_BOOL,
255 &receive.checkbtn_noerrorpanel,
256 prefs_set_data_from_toggle, prefs_set_toggle},
257 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
258 P_BOOL, &receive.checkbtn_scan_after_inc,
259 prefs_set_data_from_toggle, prefs_set_toggle},
260 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
261 &receive.spinbtn_maxarticle,
262 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
265 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
266 &send.checkbtn_sendext,
267 prefs_set_data_from_toggle, prefs_set_toggle},
268 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
269 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
270 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
271 &send.checkbtn_savemsg,
272 prefs_set_data_from_toggle, prefs_set_toggle},
273 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
274 &send.checkbtn_queuemsg,
275 prefs_set_data_from_toggle, prefs_set_toggle},
277 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
278 &send.optmenu_charset,
279 prefs_common_charset_set_data_from_optmenu,
280 prefs_common_charset_set_optmenu},
283 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
284 &compose.checkbtn_quote,
285 prefs_set_data_from_toggle, prefs_set_toggle},
286 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
287 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
288 {"quote_format", "On %d\\n%f wrote:\\n\\n%Q",
290 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
291 prefs_set_data_from_text, prefs_set_text},
292 {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
293 &compose.entry_fw_quotemark, prefs_set_data_from_entry, prefs_set_entry},
294 {"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",
295 &prefs_common.fw_quotefmt, P_STRING, &compose.text_fw_quotefmt,
296 prefs_set_data_from_text, prefs_set_text},
298 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
299 &compose.checkbtn_autosig,
300 prefs_set_data_from_toggle, prefs_set_toggle},
301 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
302 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
304 {"reply_account_autoselect", "TRUE",
305 &prefs_common.reply_account_autosel, P_BOOL,
306 &compose.checkbtn_reply_account_autosel,
307 prefs_set_data_from_toggle, prefs_set_toggle},
309 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
310 &compose.spinbtn_linewrap,
311 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
312 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
313 &compose.checkbtn_wrapquote,
314 prefs_set_data_from_toggle, prefs_set_toggle},
315 {"linewrap_before_sending", "FALSE",
316 &prefs_common.linewrap_at_send, P_BOOL,
317 &compose.checkbtn_wrapatsend,
318 prefs_set_data_from_toggle, prefs_set_toggle},
319 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
320 P_BOOL, &compose.checkbtn_forward_as_attachment,
321 prefs_set_data_from_toggle, prefs_set_toggle},
322 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
323 P_BOOL, &compose.checkbtn_smart_wrapping,
324 prefs_set_data_from_toggle, prefs_set_toggle},
325 {"enable_ispell", "TRUE", &prefs_common.enable_ispell,
326 P_BOOL, &compose.checkbtn_enable_ispell,
327 prefs_set_data_from_toggle, prefs_set_toggle},
328 {"ispell_path", ISPELL_PATH, &prefs_common.ispell_path,
329 P_STRING, &compose.entry_ispell_path,
330 prefs_set_data_from_entry, prefs_set_entry},
331 {"dictionary_path", "", &prefs_common.dictionary_path,
332 P_STRING, &compose.optmenu_dictionary_path,
333 prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
335 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
339 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
341 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
342 &prefs_common.textfont, P_STRING,
343 &display.entry_textfont,
344 prefs_set_data_from_entry, prefs_set_entry},
345 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
346 &prefs_common.smallfont, P_STRING,
347 &display.entry_smallfont,
348 prefs_set_data_from_entry, prefs_set_entry},
349 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
350 &prefs_common.boldfont, P_STRING,
351 &display.entry_boldfont,
352 prefs_set_data_from_entry, prefs_set_entry},
353 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
354 &prefs_common.normalfont, P_STRING,
355 &display.entry_normalfont,
356 prefs_set_data_from_entry, prefs_set_entry},
359 {"display_folder_unread_num", "TRUE",
360 &prefs_common.display_folder_unread, P_BOOL,
361 &display.chkbtn_folder_unread,
362 prefs_set_data_from_toggle, prefs_set_toggle},
364 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
365 &display.chkbtn_transhdr,
366 prefs_set_data_from_toggle, prefs_set_toggle},
368 /* Display: Summary View */
369 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
370 &display.chkbtn_swapfrom,
371 prefs_set_data_from_toggle, prefs_set_toggle},
372 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
373 &display.chkbtn_hscrollbar,
374 prefs_set_data_from_toggle, prefs_set_toggle},
375 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
376 &display.chkbtn_useaddrbook,
377 prefs_set_data_from_toggle, prefs_set_toggle},
378 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
379 P_STRING, &display.entry_datefmt,
380 prefs_set_data_from_entry, prefs_set_entry},
381 {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
382 &display.chkbtn_expand_thread,
383 prefs_set_data_from_toggle, prefs_set_toggle},
384 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
385 &display.chkbtn_bold_unread,
386 prefs_set_data_from_toggle, prefs_set_toggle},
388 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
391 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
393 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
396 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
398 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
400 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
402 {"show_number", "FALSE", &prefs_common.show_number, P_BOOL,
404 {"show_score", "TRUE", &prefs_common.show_score, P_BOOL,
406 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
408 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
410 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
412 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
416 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
418 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
420 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
422 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
424 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
426 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
428 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
430 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
432 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
434 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
436 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
438 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
440 {"summary_col_score", "40", &prefs_common.summary_col_score,
441 P_INT, NULL, NULL, NULL},
442 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
444 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
446 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
448 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
449 P_INT, NULL, NULL, NULL},
450 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
452 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
454 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
456 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
458 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
460 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
462 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
464 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
466 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
468 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
470 {"compose_width", "600", &prefs_common.compose_width, P_INT,
472 {"compose_height", "560", &prefs_common.compose_height, P_INT,
476 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
477 &message.chkbtn_enablecol,
478 prefs_set_data_from_toggle, prefs_set_toggle},
480 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
482 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
484 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
486 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
488 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
490 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
492 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
493 P_BOOL, NULL, NULL, NULL},
495 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
496 &message.chkbtn_mbalnum,
497 prefs_set_data_from_toggle, prefs_set_toggle},
498 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
499 P_BOOL, &message.chkbtn_disphdrpane,
500 prefs_set_data_from_toggle, prefs_set_toggle},
501 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
502 &message.chkbtn_disphdr,
503 prefs_set_data_from_toggle, prefs_set_toggle},
504 {"line_space", "2", &prefs_common.line_space, P_INT,
505 &message.spinbtn_linespc,
506 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
507 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
508 &message.chkbtn_headspc,
509 prefs_set_data_from_toggle, prefs_set_toggle},
511 {"enable_smooth_scroll", "FALSE",
512 &prefs_common.enable_smooth_scroll, P_BOOL,
513 &message.chkbtn_smoothscroll,
514 prefs_set_data_from_toggle, prefs_set_toggle},
515 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
516 &message.spinbtn_scrollstep,
517 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
518 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
519 &message.chkbtn_halfpage,
520 prefs_set_data_from_toggle, prefs_set_toggle},
522 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
526 {"mime_image_viewer", "display '%s'",
527 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
528 {"mime_audio_player", "play '%s'",
529 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
533 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
534 &privacy.checkbtn_default_encrypt,
535 prefs_set_data_from_toggle, prefs_set_toggle},
536 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
537 &privacy.checkbtn_default_sign,
538 prefs_set_data_from_toggle, prefs_set_toggle},
539 {"auto_check_signatures", "TRUE",
540 &prefs_common.auto_check_signatures, P_BOOL,
541 &privacy.checkbtn_auto_check_signatures,
542 prefs_set_data_from_toggle, prefs_set_toggle},
543 {"gpg_signature_popup", "FALSE",
544 &prefs_common.gpg_signature_popup, P_BOOL,
545 &privacy.checkbtn_gpg_signature_popup,
546 prefs_set_data_from_toggle, prefs_set_toggle},
548 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
549 &privacy.checkbtn_passphrase_grab,
550 prefs_set_data_from_toggle, prefs_set_toggle},
551 #endif /* __MINGW32__ */
552 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
553 &privacy.checkbtn_gpg_warning,
554 prefs_set_data_from_toggle, prefs_set_toggle},
555 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
556 &privacy.optmenu_default_signkey,
557 prefs_common_default_signkey_set_data_from_optmenu,
558 prefs_common_default_signkey_set_optmenu},
559 #endif /* USE_GPGME */
562 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
564 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
567 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
570 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
571 P_BOOL, &interface.checkbtn_openunread,
572 prefs_set_data_from_toggle, prefs_set_toggle},
573 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
574 P_BOOL, &interface.checkbtn_openinbox,
575 prefs_set_data_from_toggle, prefs_set_toggle},
576 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
577 &interface.checkbtn_immedexec,
578 prefs_set_data_from_toggle, prefs_set_toggle},
579 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
580 P_BOOL, &interface.checkbtn_addaddrbyclick,
581 prefs_set_data_from_toggle, prefs_set_toggle},
582 {"receive_dialog", NULL, &prefs_common.receive_dialog, P_ENUM,
583 &interface.recvdialog_optmenu,
584 prefs_recvdialog_set_data_from_optmenu,
585 prefs_recvdialog_set_optmenu},
587 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
588 &interface.checkbtn_confonexit,
589 prefs_set_data_from_toggle, prefs_set_toggle},
590 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
591 &send.checkbtn_returnreceipt,
592 prefs_set_data_from_toggle, prefs_set_toggle},
593 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
594 &interface.checkbtn_cleanonexit,
595 prefs_set_data_from_toggle, prefs_set_toggle},
596 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
597 &interface.checkbtn_askonclean,
598 prefs_set_data_from_toggle, prefs_set_toggle},
599 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
600 P_BOOL, &interface.checkbtn_warnqueued,
601 prefs_set_data_from_toggle, prefs_set_toggle},
604 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
605 &prefs_common.uri_cmd, P_STRING,
606 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
607 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
608 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
609 {"ext_editor_command", "gedit %s",
610 &prefs_common.ext_editor_cmd, P_STRING,
611 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
613 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
615 {"important_score", "1", &prefs_common.important_score, P_INT,
618 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
622 #define VSPACING_NARROW 3
624 #define VBOX_BORDER 16
625 #define DEFAULT_ENTRY_WIDTH 80
626 #define PREFSBUFSIZE 1024
628 /* widget creating functions */
629 static void prefs_common_create (void);
630 static void prefs_receive_create (void);
631 static void prefs_send_create (void);
632 static void prefs_compose_create (void);
633 static void prefs_display_create (void);
634 static void prefs_message_create (void);
636 static void prefs_privacy_create (void);
638 static void prefs_interface_create (void);
639 static void prefs_other_create (void);
641 static void date_format_ok_btn_clicked (GtkButton *button,
643 static void date_format_cancel_btn_clicked (GtkButton *button,
645 static void date_format_key_pressed (GtkWidget *keywidget,
648 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
651 static void date_format_entry_on_change (GtkEditable *editable,
653 static void date_format_select_row (GtkWidget *date_format_list,
656 GdkEventButton *event,
657 GtkWidget *date_format);
658 static GtkWidget *date_format_create (GtkButton *button,
661 static void prefs_quote_description (void);
662 static void prefs_quote_description_create (void);
663 static void prefs_quote_colors_dialog (void);
664 static void prefs_quote_colors_dialog_create (void);
665 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
668 static void quote_color_set_dialog (GtkWidget *widget,
670 static void quote_colors_set_dialog_ok (GtkWidget *widget,
672 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
674 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
677 static void set_button_bg_color (GtkWidget *widget,
679 static void prefs_enable_message_color_toggled (void);
680 static void prefs_recycle_colors_toggled (GtkWidget *widget);
682 /* functions for setting items of SummaryView */
683 static void prefs_summary_display_item_dialog_create
684 (gboolean *cancelled);
685 static void display_item_ok (GtkWidget *widget,
686 gboolean *cancelled);
687 static void display_item_cancel (GtkWidget *widget,
688 gboolean *cancelled);
689 static gint display_item_delete_event (GtkWidget *widget,
691 gboolean *cancelled);
692 static void display_item_key_pressed (GtkWidget *widget,
694 gboolean *cancelled);
696 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
698 static void prefs_font_selection_key_pressed (GtkWidget *widget,
701 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
703 static gint prefs_common_deleted (GtkWidget *widget,
706 static void prefs_common_key_pressed (GtkWidget *widget,
709 static void prefs_common_ok (void);
710 static void prefs_common_apply (void);
711 static void prefs_common_cancel (void);
713 static void compose_prefs_fmt_open(void);
714 static void compose_prefs_fmt_create(void);
716 void prefs_common_read_config(void)
718 prefs_read_config(param, "Common", COMMON_RC);
721 void prefs_common_save_config(void)
723 prefs_save_config(param, "Common", COMMON_RC);
726 void prefs_common_open(void)
728 if (prefs_rc_is_readonly(COMMON_RC))
731 inc_autocheck_timer_remove();
733 if (!dialog.window) {
734 prefs_common_create();
737 manage_window_set_transient(GTK_WINDOW(dialog.window));
738 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
739 gtk_widget_grab_focus(dialog.ok_btn);
741 prefs_set_dialog(param);
743 gtk_widget_show(dialog.window);
746 static void prefs_common_create(void)
750 debug_print(_("Creating common preferences window...\n"));
752 prefs_dialog_create(&dialog);
753 gtk_window_set_title (GTK_WINDOW(dialog.window),
754 _("Common Preferences"));
755 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
756 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
757 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
758 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
759 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
760 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
761 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
762 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
763 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
764 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
765 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
766 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
767 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
768 GTK_SIGNAL_FUNC(prefs_common_cancel),
769 GTK_OBJECT(dialog.window));
771 /* create all widgets on notebook */
772 prefs_receive_create();
773 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
775 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
776 prefs_compose_create();
777 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
778 prefs_display_create();
779 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
780 prefs_message_create();
781 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
783 prefs_privacy_create();
784 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
786 prefs_interface_create();
787 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
788 prefs_other_create();
789 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
791 compose_prefs_fmt_create();
793 gtk_widget_show_all(dialog.window);
796 static void prefs_receive_create(void)
800 GtkWidget *frame_incext;
801 GtkWidget *checkbtn_incext;
803 GtkWidget *label_incext;
804 GtkWidget *entry_incext;
805 GtkWidget *button_incext;
807 GtkWidget *frame_spool;
808 GtkWidget *checkbtn_local;
809 GtkWidget *checkbtn_filter_on_inc;
810 GtkWidget *label_spool;
811 GtkWidget *entry_spool;
813 GtkWidget *hbox_autochk;
814 GtkWidget *checkbtn_autochk;
815 GtkWidget *label_autochk1;
816 GtkObject *spinbtn_autochk_adj;
817 GtkWidget *spinbtn_autochk;
818 GtkWidget *label_autochk2;
819 GtkWidget *checkbtn_chkonstartup;
820 GtkWidget *checkbtn_noerrorpanel;
821 GtkWidget *checkbtn_scan_after_inc;
824 GtkWidget *frame_news;
825 GtkWidget *label_maxarticle;
826 GtkWidget *spinbtn_maxarticle;
827 GtkObject *spinbtn_maxarticle_adj;
829 vbox1 = gtk_vbox_new (FALSE, VSPACING);
830 gtk_widget_show (vbox1);
831 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
832 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
834 PACK_FRAME(vbox1, frame_incext, _("External program"));
836 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
837 gtk_widget_show (vbox2);
838 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
839 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
841 /* Use of external incorporation program */
842 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
843 _("Use external program for incorporation"));
845 hbox = gtk_hbox_new (FALSE, 8);
846 gtk_widget_show (hbox);
847 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
848 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
850 label_incext = gtk_label_new (_("Program path"));
851 gtk_widget_show (label_incext);
852 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
854 entry_incext = gtk_entry_new ();
855 gtk_widget_show (entry_incext);
856 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
858 button_incext = gtk_button_new_with_label ("... ");
860 gtk_widget_show (button_incext);
861 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
863 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
865 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
866 gtk_widget_show (vbox2);
867 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
868 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
870 hbox = gtk_hbox_new (FALSE, 32);
871 gtk_widget_show (hbox);
872 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
874 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
875 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
876 _("Filter on incorporation"));
877 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
879 hbox = gtk_hbox_new (FALSE, 8);
880 gtk_widget_show (hbox);
881 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
882 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
884 label_spool = gtk_label_new (_("Spool directory"));
885 gtk_widget_show (label_spool);
886 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
888 entry_spool = gtk_entry_new ();
889 gtk_widget_show (entry_spool);
890 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
892 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
893 gtk_widget_show (vbox2);
894 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
897 hbox_autochk = gtk_hbox_new (FALSE, 8);
898 gtk_widget_show (hbox_autochk);
899 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
901 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
902 _("Auto-check new mail"));
904 label_autochk1 = gtk_label_new (_("each"));
905 gtk_widget_show (label_autochk1);
906 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
908 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
909 spinbtn_autochk = gtk_spin_button_new
910 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
911 gtk_widget_show (spinbtn_autochk);
912 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
913 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
914 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
916 label_autochk2 = gtk_label_new (_("minute(s)"));
917 gtk_widget_show (label_autochk2);
918 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
920 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
921 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
922 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
924 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
925 _("Check new mail on startup"));
927 PACK_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel,
928 _("No error popup on receive error"));
929 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
930 _("Update all local folders after incorporation"));
933 PACK_FRAME(vbox1, frame_news, _("News"));
935 hbox = gtk_hbox_new (FALSE, 8);
936 gtk_widget_show (hbox);
937 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
938 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
940 label_maxarticle = gtk_label_new
941 (_("Maximum article number to download\n"
942 "(unlimited if 0 is specified)"));
943 gtk_widget_show (label_maxarticle);
944 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
945 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
947 spinbtn_maxarticle_adj =
948 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
949 spinbtn_maxarticle = gtk_spin_button_new
950 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
951 gtk_widget_show (spinbtn_maxarticle);
952 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
954 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
955 gtk_spin_button_set_numeric
956 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
958 receive.checkbtn_incext = checkbtn_incext;
959 receive.entry_incext = entry_incext;
960 receive.button_incext = button_incext;
962 receive.checkbtn_local = checkbtn_local;
963 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
964 receive.entry_spool = entry_spool;
966 receive.checkbtn_autochk = checkbtn_autochk;
967 receive.spinbtn_autochk = spinbtn_autochk;
968 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
970 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
971 receive.checkbtn_noerrorpanel = checkbtn_noerrorpanel;
972 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
975 receive.spinbtn_maxarticle = spinbtn_maxarticle;
976 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
979 static void prefs_send_create(void)
983 GtkWidget *frame_sendext;
984 GtkWidget *vbox_sendext;
985 GtkWidget *checkbtn_sendext;
987 GtkWidget *label_sendext;
988 GtkWidget *entry_sendext;
989 GtkWidget *button_sendext;
990 GtkWidget *checkbtn_savemsg;
991 GtkWidget *checkbtn_queuemsg;
992 GtkWidget *label_outcharset;
994 GtkWidget *optmenu_menu;
996 GtkWidget *checkbtn_returnreceipt;
998 vbox1 = gtk_vbox_new (FALSE, VSPACING);
999 gtk_widget_show (vbox1);
1000 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1001 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1003 PACK_FRAME(vbox1, frame_sendext, _("External program"));
1005 gtk_widget_set_sensitive(frame_sendext, FALSE);
1007 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
1008 gtk_widget_show (vbox_sendext);
1009 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
1010 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
1012 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
1013 _("Use external program for sending"));
1015 hbox1 = gtk_hbox_new (FALSE, 8);
1016 gtk_widget_show (hbox1);
1017 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
1018 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
1020 label_sendext = gtk_label_new (_("Program path"));
1021 gtk_widget_show (label_sendext);
1022 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
1024 entry_sendext = gtk_entry_new ();
1025 gtk_widget_show (entry_sendext);
1026 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
1028 button_sendext = gtk_button_new_with_label ("... ");
1029 gtk_widget_show (button_sendext);
1030 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
1032 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1033 gtk_widget_show (vbox2);
1034 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1036 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1037 _("Save sent messages to outbox"));
1038 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1039 _("Queue messages that fail to send"));
1040 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1041 _("Send return receipt on request"));
1043 hbox1 = gtk_hbox_new (FALSE, 8);
1044 gtk_widget_show (hbox1);
1045 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1047 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1048 gtk_widget_show (label_outcharset);
1049 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1051 optmenu = gtk_option_menu_new ();
1052 gtk_widget_show (optmenu);
1053 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1055 optmenu_menu = gtk_menu_new ();
1057 #define SET_MENUITEM(str, charset) \
1059 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1062 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1063 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1065 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1067 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1068 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1069 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1070 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1071 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1072 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1074 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1076 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1078 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1079 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1081 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1083 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1084 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1086 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1087 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1089 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1090 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1092 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1094 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1096 send.checkbtn_sendext = checkbtn_sendext;
1097 send.entry_sendext = entry_sendext;
1098 send.button_sendext = button_sendext;
1100 send.checkbtn_savemsg = checkbtn_savemsg;
1101 send.checkbtn_queuemsg = checkbtn_queuemsg;
1102 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1104 send.optmenu_charset = optmenu;
1107 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1112 g_return_if_fail(param);
1113 g_return_if_fail(param->data);
1114 g_return_if_fail(param->widget);
1115 g_return_if_fail(*(param->widget));
1117 dict_path = gtkspell_get_dictionary_menu_active_item
1118 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1119 str = *((gchar **) param->data);
1122 *((gchar **) param->data) = dict_path;
1125 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1128 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1130 GtkWidget *menuitem;
1134 g_return_if_fail(optmenu != NULL);
1135 g_return_if_fail(pparam->data != NULL);
1137 if (*(gchar **) pparam->data) {
1138 menu = gtk_option_menu_get_menu(optmenu);
1139 for (cur = GTK_MENU_SHELL(menu)->children;
1140 cur != NULL; cur = cur->next) {
1141 menuitem = GTK_WIDGET(cur->data);
1142 dict_path = gtk_object_get_data(GTK_OBJECT(menuitem), "full_path");
1143 if (!strcmp(dict_path, *((gchar **)pparam->data))) {
1144 gtk_option_menu_set_history(optmenu, n);
1151 gtk_option_menu_set_history(optmenu, 0);
1152 prefs_dictionary_set_data_from_optmenu(pparam);
1155 static void prefs_compose_checkbtn_enable_ispell_toggle_cb
1161 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1162 gtk_widget_set_sensitive(compose.entry_ispell_path, toggled);
1163 gtk_widget_set_sensitive(compose.optmenu_dictionary_path, toggled);
1164 gtk_widget_set_sensitive(compose.btn_ispell_path, toggled);
1167 static void prefs_compose_btn_ispell_path_clicked_cb(GtkWidget *widget,
1171 GtkWidget *new_menu;
1173 file_path = filesel_select_file(_("Select spelling checker location"),
1174 prefs_common.ispell_path);
1175 if (file_path == NULL) {
1179 if (prefs_common.ispell_path)
1180 g_free(prefs_common.ispell_path);
1181 prefs_common.ispell_path = file_path;
1183 new_menu = gtkspell_dictionary_option_menu_new(file_path);
1184 gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_dictionary_path),
1187 gtk_entry_set_text(GTK_ENTRY(compose.entry_ispell_path), file_path);
1188 /* select first one */
1189 gtk_option_menu_set_history(GTK_OPTION_MENU(compose.optmenu_dictionary_path), 0);
1191 prefs_common.dictionary_path = gtkspell_get_dictionary_menu_active_item(
1192 gtk_option_menu_get_menu(GTK_OPTION_MENU(compose.optmenu_dictionary_path)));
1197 static void prefs_compose_create(void)
1202 GtkWidget *frame_quote;
1203 GtkWidget *vbox_quote;
1204 GtkWidget *checkbtn_quote;
1206 GtkWidget *label_quotemark;
1207 GtkWidget *entry_quotemark;
1209 GtkWidget *label_quotefmt;
1210 GtkWidget *btn_quotedesc;
1211 GtkWidget *scrolledwin_quotefmt;
1212 GtkWidget *text_quotefmt;
1217 GtkWidget *btn_quotefmt;
1219 GtkWidget *frame_sig;
1220 GtkWidget *vbox_sig;
1221 GtkWidget *checkbtn_autosig;
1222 GtkWidget *label_sigsep;
1223 GtkWidget *entry_sigsep;
1225 GtkWidget *checkbtn_reply_account_autosel;
1226 GtkWidget *vbox_linewrap;
1230 GtkWidget *label_linewrap;
1231 GtkObject *spinbtn_linewrap_adj;
1232 GtkWidget *spinbtn_linewrap;
1233 GtkWidget *checkbtn_wrapquote;
1234 GtkWidget *checkbtn_wrapatsend;
1236 GtkWidget *checkbtn_forward_as_attachment;
1237 GtkWidget *checkbtn_smart_wrapping;
1239 GtkWidget *frame_spell;
1240 GtkWidget *hbox_spell;
1241 GtkWidget *vbox_spell;
1242 GtkWidget *hbox_ispell_path;
1243 GtkWidget *checkbtn_enable_ispell;
1244 GtkWidget *label_ispell_path;
1245 GtkWidget *entry_ispell_path;
1246 GtkWidget *btn_ispell_path;
1247 GtkWidget *hbox_dictionary_path;
1248 GtkWidget *label_dictionary_path;
1249 GtkWidget *optmenu_dictionary_path;
1251 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1252 gtk_widget_show (vbox1);
1253 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1254 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1257 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
1259 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1260 gtk_widget_show (vbox_quote);
1261 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1262 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1264 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
1265 _("Quote message when replying"));
1267 hbox1 = gtk_hbox_new (FALSE, 8);
1268 gtk_widget_show (hbox1);
1269 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
1271 label_quotemark = gtk_label_new (_("Quotation mark"));
1272 gtk_widget_show (label_quotemark);
1273 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
1275 entry_quotemark = gtk_entry_new ();
1276 gtk_widget_show (entry_quotemark);
1277 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
1278 gtk_widget_set_usize (entry_quotemark, 64, -1);
1280 hbox2 = gtk_hbox_new (FALSE, 0);
1281 gtk_widget_show (hbox2);
1282 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1284 label_quotefmt = gtk_label_new (_("Quotation format:"));
1285 gtk_widget_show (label_quotefmt);
1286 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1289 gtk_button_new_with_label (_(" Description of symbols "));
1291 gtk_widget_show (btn_quotedesc);
1292 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1293 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1294 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1297 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1298 gtk_widget_show (scrolledwin_quotefmt);
1299 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1300 gtk_scrolled_window_set_policy
1301 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1302 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1304 text_quotefmt = gtk_text_new (NULL, NULL);
1305 gtk_widget_show (text_quotefmt);
1306 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1307 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1308 gtk_widget_set_usize(text_quotefmt, -1, 60);
1311 hbox1 = gtk_hbox_new (FALSE, 32);
1312 gtk_widget_show (hbox1);
1313 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1315 btn_quotefmt = gtk_button_new_with_label (_(" Quote format "));
1316 gtk_widget_show (btn_quotefmt);
1317 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotefmt, FALSE, FALSE, 0);
1318 gtk_signal_connect(GTK_OBJECT(btn_quotefmt), "clicked",
1319 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), NULL);
1321 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1323 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1324 gtk_widget_show (vbox_sig);
1325 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1326 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1328 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1329 _("Insert signature automatically"));
1331 hbox1 = gtk_hbox_new (FALSE, 8);
1332 gtk_widget_show (hbox1);
1333 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1334 label_sigsep = gtk_label_new (_("Signature separator"));
1335 gtk_widget_show (label_sigsep);
1336 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1338 entry_sigsep = gtk_entry_new ();
1339 gtk_widget_show (entry_sigsep);
1340 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1342 gtk_widget_set_usize (entry_sigsep, 64, -1);
1345 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1346 gtk_widget_show (vbox_linewrap);
1347 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1349 hbox3 = gtk_hbox_new (FALSE, 8);
1350 gtk_widget_show (hbox3);
1351 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1354 label_linewrap = gtk_label_new (_("Wrap messages at"));
1355 gtk_widget_show (label_linewrap);
1356 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1358 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1359 spinbtn_linewrap = gtk_spin_button_new
1360 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1361 gtk_widget_show (spinbtn_linewrap);
1362 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1363 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1364 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1366 label_linewrap = gtk_label_new (_("characters"));
1367 gtk_widget_show (label_linewrap);
1368 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1370 hbox4 = gtk_hbox_new (FALSE, 32);
1371 gtk_widget_show (hbox4);
1372 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1374 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1376 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1378 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1379 _("Forward as attachment"));
1381 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_account_autosel,
1382 _("Automatically select account for mail replies"));
1384 PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping,
1385 _("Smart wrapping (EXPERIMENTAL)"));
1387 /* spell checker defaults */
1388 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1389 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1390 gtk_widget_show (vbox_spell);
1391 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1392 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1394 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_ispell,
1395 _("Enable spell checker"));
1397 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_ispell), "toggled",
1398 GTK_SIGNAL_FUNC(prefs_compose_checkbtn_enable_ispell_toggle_cb),
1401 hbox_ispell_path = gtk_hbox_new (FALSE, 8);
1402 gtk_widget_show(hbox_ispell_path);
1403 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_ispell_path, TRUE, TRUE, 0);
1405 label_ispell_path = gtk_label_new (_("Ispelll path"));
1406 gtk_widget_show(label_ispell_path);
1407 gtk_box_pack_start(GTK_BOX(hbox_ispell_path), label_ispell_path, FALSE, FALSE, 0);
1409 entry_ispell_path = gtk_entry_new();
1410 gtk_widget_show(entry_ispell_path);
1411 gtk_box_pack_start(GTK_BOX(hbox_ispell_path), entry_ispell_path, FALSE, FALSE, 0);
1412 gtk_widget_set_usize(entry_ispell_path, 150, -1);
1413 gtk_widget_set_sensitive(entry_ispell_path, prefs_common.enable_ispell);
1415 btn_ispell_path = gtk_button_new_with_label(_("..."));
1416 gtk_widget_show(btn_ispell_path);
1417 gtk_box_pack_start(GTK_BOX(hbox_ispell_path), btn_ispell_path, FALSE, FALSE, 0);
1418 gtk_widget_set_sensitive(btn_ispell_path, prefs_common.enable_ispell);
1420 gtk_signal_connect(GTK_OBJECT(btn_ispell_path), "clicked",
1421 GTK_SIGNAL_FUNC(prefs_compose_btn_ispell_path_clicked_cb),
1424 hbox_dictionary_path = gtk_hbox_new(FALSE, 8);
1425 gtk_widget_show(hbox_dictionary_path);
1426 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_dictionary_path, TRUE, TRUE, 0);
1428 label_dictionary_path = gtk_label_new(_("Dictionaries"));
1429 gtk_widget_show(label_dictionary_path);
1430 gtk_box_pack_start(GTK_BOX(hbox_dictionary_path), label_dictionary_path, FALSE, FALSE, 0);
1432 optmenu_dictionary_path = gtk_option_menu_new();
1433 gtk_widget_show(optmenu_dictionary_path);
1434 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary_path),
1435 gtkspell_dictionary_option_menu_new(prefs_common.ispell_path));
1436 gtk_box_pack_start(GTK_BOX(hbox_dictionary_path), optmenu_dictionary_path, FALSE, FALSE, 0);
1437 gtk_widget_set_sensitive(optmenu_dictionary_path, prefs_common.enable_ispell);
1440 compose.checkbtn_quote = checkbtn_quote;
1441 compose.entry_quotemark = entry_quotemark;
1442 compose.text_quotefmt = text_quotefmt;
1444 compose.checkbtn_autosig = checkbtn_autosig;
1445 compose.entry_sigsep = entry_sigsep;
1447 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1449 compose.spinbtn_linewrap = spinbtn_linewrap;
1450 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1451 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1452 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1454 compose.checkbtn_forward_as_attachment =
1455 checkbtn_forward_as_attachment;
1456 compose.checkbtn_smart_wrapping =
1457 checkbtn_smart_wrapping;
1459 compose.checkbtn_enable_ispell = checkbtn_enable_ispell;
1460 compose.entry_ispell_path = entry_ispell_path;
1461 compose.btn_ispell_path = btn_ispell_path;
1462 compose.optmenu_dictionary_path = optmenu_dictionary_path;
1465 static void prefs_display_create(void)
1468 GtkWidget *frame_font;
1470 GtkWidget *label_textfont;
1471 GtkWidget *entry_textfont;
1472 GtkWidget *button_textfont;
1473 GtkWidget *chkbtn_folder_unread;
1474 GtkWidget *chkbtn_transhdr;
1475 GtkWidget *frame_summary;
1477 GtkWidget *chkbtn_swapfrom;
1478 GtkWidget *chkbtn_hscrollbar;
1479 GtkWidget *chkbtn_useaddrbook;
1480 GtkWidget *chkbtn_expand_thread;
1481 GtkWidget *chkbtn_bold_unread;
1483 GtkWidget *label_datefmt;
1484 GtkWidget *button_datefmt;
1485 GtkWidget *entry_datefmt;
1487 GtkWidget *button_dispitem;
1488 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
1490 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1491 gtk_widget_show (vbox1);
1492 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1493 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1495 PACK_FRAME(vbox1, frame_font, _("Font"));
1497 table1 = gtk_table_new (4, 3, FALSE);
1499 gtk_widget_show (table1);
1500 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1501 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1502 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1503 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1505 label_textfont = gtk_label_new (_("Text"));
1506 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1507 gtk_widget_show (label_textfont);
1508 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1509 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1511 entry_textfont = gtk_entry_new ();
1512 gtk_widget_show (entry_textfont);
1513 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1514 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1516 button_textfont = gtk_button_new_with_label ("... ");
1518 gtk_widget_show (button_textfont);
1519 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1521 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1522 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1524 tmplabel = gtk_label_new (_("Small"));
1525 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1526 gtk_widget_show (tmplabel);
1527 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1528 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1530 tmpentry = gtk_entry_new ();
1531 gtk_widget_show (tmpentry);
1532 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1533 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1535 tmpbutton = gtk_button_new_with_label (" ... ");
1536 gtk_widget_show (tmpbutton);
1537 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1539 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1540 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1541 display.entry_smallfont = tmpentry;
1543 tmplabel = gtk_label_new (_("Normal"));
1544 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1545 gtk_widget_show (tmplabel);
1546 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1547 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1549 tmpentry = gtk_entry_new ();
1550 gtk_widget_show (tmpentry);
1551 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1552 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1554 tmpbutton = gtk_button_new_with_label (" ... ");
1555 gtk_widget_show (tmpbutton);
1556 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1558 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1559 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1560 display.entry_normalfont = tmpentry;
1562 tmplabel = gtk_label_new (_("Bold"));
1563 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1564 gtk_widget_show (tmplabel);
1565 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1566 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1568 tmpentry = gtk_entry_new ();
1569 gtk_widget_show (tmpentry);
1570 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1571 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1573 tmpbutton = gtk_button_new_with_label (" ... ");
1574 gtk_widget_show (tmpbutton);
1575 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1577 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1578 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1579 display.entry_boldfont = tmpentry;
1581 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1582 gtk_widget_show (vbox2);
1583 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1586 (vbox2, chkbtn_transhdr,
1587 _("Translate header name (such as `From:', `Subject:')"));
1589 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1590 _("Display unread number next to folder name"));
1592 /* ---- Summary ---- */
1594 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1596 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1597 gtk_widget_show (vbox2);
1598 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1599 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1602 (vbox2, chkbtn_swapfrom,
1603 _("Display recipient on `From' column if sender is yourself"));
1605 (vbox2, chkbtn_useaddrbook,
1606 _("Display sender using address book"));
1608 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1610 (vbox2, chkbtn_expand_thread, _("Expand threads"));
1612 (vbox2, chkbtn_bold_unread,
1613 _("Display unread messages with bold font"));
1615 hbox1 = gtk_hbox_new (FALSE, 8);
1616 gtk_widget_show (hbox1);
1617 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1619 label_datefmt = gtk_label_new (_("Date format"));
1620 gtk_widget_show (label_datefmt);
1621 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1623 entry_datefmt = gtk_entry_new ();
1624 gtk_widget_show (entry_datefmt);
1625 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1627 button_datefmt = gtk_button_new_with_label ("... ");
1629 gtk_widget_show (button_datefmt);
1630 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1631 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1632 GTK_SIGNAL_FUNC (date_format_create), NULL);
1635 vbox3 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1636 gtk_widget_show (vbox3);
1637 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, TRUE, 0);
1639 hbox1 = gtk_hbox_new (FALSE, 8);
1640 gtk_widget_show (hbox1);
1641 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1643 button_dispitem = gtk_button_new_with_label
1644 (_(" Set display item of summary... "));
1645 gtk_widget_show (button_dispitem);
1646 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1647 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1648 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1651 display.entry_textfont = entry_textfont;
1652 display.button_textfont = button_textfont;
1654 display.chkbtn_folder_unread = chkbtn_folder_unread;
1655 display.chkbtn_transhdr = chkbtn_transhdr;
1657 display.chkbtn_swapfrom = chkbtn_swapfrom;
1658 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1659 display.chkbtn_expand_thread = chkbtn_expand_thread;
1660 display.chkbtn_bold_unread = chkbtn_bold_unread;
1661 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1662 display.entry_datefmt = entry_datefmt;
1665 static void prefs_message_create(void)
1670 GtkWidget *chkbtn_enablecol;
1671 GtkWidget *button_edit_col;
1672 GtkWidget *chkbtn_mbalnum;
1673 GtkWidget *chkbtn_disphdrpane;
1674 GtkWidget *chkbtn_disphdr;
1675 GtkWidget *button_edit_disphdr;
1676 GtkWidget *hbox_linespc;
1677 GtkWidget *label_linespc;
1678 GtkObject *spinbtn_linespc_adj;
1679 GtkWidget *spinbtn_linespc;
1680 GtkWidget *chkbtn_headspc;
1682 GtkWidget *frame_scr;
1683 GtkWidget *vbox_scr;
1684 GtkWidget *chkbtn_smoothscroll;
1685 GtkWidget *hbox_scr;
1686 GtkWidget *label_scr;
1687 GtkObject *spinbtn_scrollstep_adj;
1688 GtkWidget *spinbtn_scrollstep;
1689 GtkWidget *chkbtn_halfpage;
1691 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1692 gtk_widget_show (vbox1);
1693 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1694 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1696 hbox1 = gtk_hbox_new (FALSE, 8);
1697 gtk_widget_show (hbox1);
1698 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1700 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1701 _("Enable coloration of message"));
1702 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1703 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1706 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1707 gtk_widget_show (button_edit_col);
1708 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1709 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1710 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1712 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1714 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1715 gtk_widget_show (vbox2);
1716 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1719 (vbox2, chkbtn_mbalnum,
1720 _("Display 2-byte alphabet and numeric with 1-byte character"));
1721 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1722 _("Display header pane above message view"));
1724 hbox1 = gtk_hbox_new (FALSE, 8);
1725 gtk_widget_show (hbox1);
1726 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1728 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1729 _("Display short headers on message view"));
1731 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1732 gtk_widget_show (button_edit_disphdr);
1733 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1735 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1736 GTK_SIGNAL_FUNC (prefs_display_header_open),
1739 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1741 hbox1 = gtk_hbox_new (FALSE, 32);
1742 gtk_widget_show (hbox1);
1743 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1745 hbox_linespc = gtk_hbox_new (FALSE, 8);
1746 gtk_widget_show (hbox1);
1747 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1749 label_linespc = gtk_label_new (_("Line space"));
1750 gtk_widget_show (label_linespc);
1751 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1754 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1755 spinbtn_linespc = gtk_spin_button_new
1756 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1757 gtk_widget_show (spinbtn_linespc);
1758 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1760 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1761 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1763 label_linespc = gtk_label_new (_("pixel(s)"));
1764 gtk_widget_show (label_linespc);
1765 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1768 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1770 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1772 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1773 gtk_widget_show (vbox_scr);
1774 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1775 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1777 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1779 hbox1 = gtk_hbox_new (FALSE, 32);
1780 gtk_widget_show (hbox1);
1781 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1783 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1785 hbox_scr = gtk_hbox_new (FALSE, 8);
1786 gtk_widget_show (hbox_scr);
1787 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1789 label_scr = gtk_label_new (_("Step"));
1790 gtk_widget_show (label_scr);
1791 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1793 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1794 spinbtn_scrollstep = gtk_spin_button_new
1795 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1796 gtk_widget_show (spinbtn_scrollstep);
1797 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1799 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1800 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1803 label_scr = gtk_label_new (_("pixel(s)"));
1804 gtk_widget_show (label_scr);
1805 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1807 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1809 message.chkbtn_enablecol = chkbtn_enablecol;
1810 message.button_edit_col = button_edit_col;
1811 message.chkbtn_mbalnum = chkbtn_mbalnum;
1812 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1813 message.chkbtn_disphdr = chkbtn_disphdr;
1814 message.spinbtn_linespc = spinbtn_linespc;
1815 message.chkbtn_headspc = chkbtn_headspc;
1817 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1818 message.spinbtn_scrollstep = spinbtn_scrollstep;
1819 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1820 message.chkbtn_halfpage = chkbtn_halfpage;
1824 static void prefs_privacy_create(void)
1829 GtkWidget *checkbtn_default_encrypt;
1830 GtkWidget *checkbtn_default_sign;
1831 GtkWidget *checkbtn_auto_check_signatures;
1832 GtkWidget *checkbtn_gpg_signature_popup;
1833 GtkWidget *checkbtn_passphrase_grab;
1834 GtkWidget *checkbtn_gpg_warning;
1836 GtkWidget *menuitem;
1838 GtkWidget *optmenu_menu;
1840 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1841 gtk_widget_show (vbox1);
1842 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1843 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1845 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1846 gtk_widget_show (vbox2);
1847 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1849 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1850 _("Encrypt message by default"));
1852 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1853 _("Sign message by default"));
1855 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1856 _("Automatically check signatures"));
1858 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
1859 _("Show signature check result in a popup window"));
1862 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1863 _("Grab input while entering a passphrase"));
1867 (vbox2, checkbtn_gpg_warning,
1868 _("Display warning on startup if GnuPG doesn't work"));
1870 hbox1 = gtk_hbox_new (FALSE, 8);
1871 gtk_widget_show (hbox1);
1872 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1874 /* create default signkey box */
1875 label = gtk_label_new (_("Default Sign Key"));
1876 gtk_widget_show (label);
1877 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1878 optmenu = gtk_option_menu_new ();
1879 gtk_widget_show (optmenu);
1880 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1881 optmenu_menu = gtk_menu_new ();
1883 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1884 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1885 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1886 /* FIXME: disabled because not implemented */
1887 gtk_widget_set_sensitive(optmenu, FALSE);
1889 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1890 privacy.checkbtn_default_sign = checkbtn_default_sign;
1891 privacy.checkbtn_auto_check_signatures
1892 = checkbtn_auto_check_signatures;
1893 privacy.checkbtn_gpg_signature_popup
1894 = checkbtn_gpg_signature_popup;
1895 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1896 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
1897 privacy.optmenu_default_signkey = optmenu;
1901 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1905 GtkWidget *menuitem;
1908 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1909 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1910 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1911 g_free(*((gchar **)pparam->data));
1912 *((gchar **)pparam->data) = g_strdup(charset);
1916 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1920 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1922 GtkWidget *menuitem;
1926 g_return_if_fail(optmenu != NULL);
1927 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1929 menu = gtk_option_menu_get_menu(optmenu);
1930 for (cur = GTK_MENU_SHELL(menu)->children;
1931 cur != NULL; cur = cur->next) {
1932 menuitem = GTK_WIDGET(cur->data);
1933 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1934 if (!strcmp(charset, *((gchar **)pparam->data))) {
1935 gtk_option_menu_set_history(optmenu, n);
1941 gtk_option_menu_set_history(optmenu, 0);
1942 prefs_common_charset_set_data_from_optmenu(pparam);
1945 #endif /* USE_GPGME */
1947 static void prefs_interface_create(void)
1952 GtkWidget *checkbtn_emacs;
1953 GtkWidget *checkbtn_openunread;
1954 GtkWidget *checkbtn_openinbox;
1955 GtkWidget *checkbtn_immedexec;
1956 GtkWidget *checkbtn_addaddrbyclick;
1958 GtkWidget *recvdialog_optmenu;
1959 GtkWidget *recvdialog_optmenu_menu;
1960 GtkWidget *recvdialog_menuitem;
1963 GtkWidget *frame_exit;
1964 GtkWidget *vbox_exit;
1966 GtkWidget *checkbtn_confonexit;
1967 GtkWidget *checkbtn_cleanonexit;
1968 GtkWidget *checkbtn_askonclean;
1969 GtkWidget *checkbtn_warnqueued;
1971 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1972 gtk_widget_show (vbox1);
1973 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1974 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1976 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1977 gtk_widget_show (vbox2);
1978 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1980 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1981 _("Emulate the behavior of mouse operation of\n"
1982 "Emacs-based mailer"));
1983 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1987 (vbox2, checkbtn_openunread,
1988 _("Open first unread message when entering a folder"));
1991 (vbox2, checkbtn_openinbox,
1992 _("Go to inbox after receiving new mail"));
1994 vbox3 = gtk_vbox_new (FALSE, 0);
1995 gtk_widget_show (vbox3);
1996 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1999 (vbox3, checkbtn_immedexec,
2000 _("Execute immediately when moving or deleting messages"));
2002 hbox1 = gtk_hbox_new (FALSE, 0);
2003 gtk_widget_show (hbox1);
2004 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2006 label = gtk_label_new
2007 (_("(Messages will be just marked till execution\n"
2008 " if this is turned off)"));
2009 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2010 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2013 (vbox2, checkbtn_addaddrbyclick,
2014 _("Add address to destination when double-clicked"));
2017 /* Receive Dialog */
2018 hbox = gtk_hbox_new (FALSE, 8);
2019 gtk_widget_show (hbox);
2020 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2022 label = gtk_label_new (_("Show receive Dialog"));
2023 gtk_widget_show (label);
2024 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2026 recvdialog_optmenu = gtk_option_menu_new ();
2027 gtk_widget_show (recvdialog_optmenu);
2028 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2030 recvdialog_optmenu_menu = gtk_menu_new ();
2032 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2033 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2034 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2036 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu);
2039 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2041 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
2042 gtk_widget_show (vbox_exit);
2043 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2044 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2046 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2047 _("Confirm on exit"));
2049 hbox1 = gtk_hbox_new (FALSE, 32);
2050 gtk_widget_show (hbox1);
2051 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2053 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2054 _("Empty trash on exit"));
2055 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2056 _("Ask before emptying"));
2057 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2059 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2060 _("Warn if there are queued messages"));
2062 interface.checkbtn_emacs = checkbtn_emacs;
2063 interface.checkbtn_openunread = checkbtn_openunread;
2064 interface.checkbtn_openinbox = checkbtn_openinbox;
2065 interface.checkbtn_immedexec = checkbtn_immedexec;
2066 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2067 interface.recvdialog_optmenu = recvdialog_optmenu;
2068 interface.checkbtn_confonexit = checkbtn_confonexit;
2069 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2070 interface.checkbtn_askonclean = checkbtn_askonclean;
2071 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2074 static void prefs_other_create(void)
2079 GtkWidget *uri_frame;
2080 GtkWidget *uri_label;
2081 GtkWidget *uri_combo;
2082 GtkWidget *uri_entry;
2084 GtkWidget *print_frame;
2085 GtkWidget *printcmd_label;
2086 GtkWidget *printcmd_entry;
2088 GtkWidget *exteditor_frame;
2089 GtkWidget *exteditor_label;
2090 GtkWidget *exteditor_combo;
2091 GtkWidget *exteditor_entry;
2093 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2094 gtk_widget_show (vbox1);
2095 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2096 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2098 PACK_FRAME(vbox1, uri_frame,
2099 _("External Web browser (%s will be replaced with URI)"));
2101 hbox1 = gtk_hbox_new (FALSE, 8);
2102 gtk_widget_show (hbox1);
2103 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2104 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2106 uri_label = gtk_label_new (_("Command"));
2107 gtk_widget_show(uri_label);
2108 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2110 uri_combo = gtk_combo_new ();
2111 gtk_widget_show (uri_combo);
2112 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2113 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2114 "netscape -remote 'openURL(%s,raise)'",
2116 "gnome-moz-remote --raise --newwin '%s'",
2117 "kterm -e w3m '%s'",
2118 "kterm -e lynx '%s'",
2121 uri_entry = GTK_COMBO (uri_combo)->entry;
2123 PACK_FRAME(vbox1, print_frame,
2124 _("Printing (%s will be replaced with file name)"));
2126 hbox1 = gtk_hbox_new (FALSE, 8);
2127 gtk_widget_show (hbox1);
2128 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2129 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2131 printcmd_label = gtk_label_new (_("Command"));
2132 gtk_widget_show (printcmd_label);
2133 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2135 printcmd_entry = gtk_entry_new ();
2136 gtk_widget_show (printcmd_entry);
2137 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2139 PACK_FRAME(vbox1, exteditor_frame,
2140 _("External editor (%s will be replaced with file name)"));
2142 hbox1 = gtk_hbox_new (FALSE, 8);
2143 gtk_widget_show (hbox1);
2144 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2145 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2147 exteditor_label = gtk_label_new (_("Command"));
2148 gtk_widget_show (exteditor_label);
2149 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2151 exteditor_combo = gtk_combo_new ();
2152 gtk_widget_show (exteditor_combo);
2153 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2154 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2156 "mgedit --no-fork %s",
2162 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2164 other.uri_combo = uri_combo;
2165 other.uri_entry = uri_entry;
2166 other.printcmd_entry = printcmd_entry;
2168 other.exteditor_combo = exteditor_combo;
2169 other.exteditor_entry = exteditor_entry;
2172 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2174 GtkWidget *datefmt_sample = NULL;
2177 g_return_if_fail(widget != NULL);
2178 g_return_if_fail(*widget != NULL);
2179 g_return_if_fail(display.entry_datefmt != NULL);
2181 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2182 (GTK_OBJECT(*widget), "datefmt_sample"));
2183 g_return_if_fail(datefmt_sample != NULL);
2185 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2186 g_free(prefs_common.date_format);
2187 prefs_common.date_format = text;
2188 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2190 gtk_widget_destroy(*widget);
2194 static void date_format_cancel_btn_clicked(GtkButton *button,
2197 g_return_if_fail(widget != NULL);
2198 g_return_if_fail(*widget != NULL);
2200 gtk_widget_destroy(*widget);
2204 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2207 if (event && event->keyval == GDK_Escape)
2208 date_format_cancel_btn_clicked(NULL, widget);
2211 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2212 GdkEventAny *event, GtkWidget **widget)
2214 g_return_val_if_fail(widget != NULL, FALSE);
2215 g_return_val_if_fail(*widget != NULL, FALSE);
2221 static void date_format_entry_on_change(GtkEditable *editable,
2225 struct tm *cal_time;
2229 cur_time = time(NULL);
2230 cal_time = localtime(&cur_time);
2232 text = gtk_editable_get_chars(editable, 0, -1);
2234 strftime(buffer, sizeof buffer, text, cal_time);
2235 gtk_label_set_text(example, buffer);
2238 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2239 gint column, GdkEventButton *event,
2240 GtkWidget *date_format)
2246 GtkWidget *datefmt_sample;
2248 /* only on double click */
2249 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2252 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2253 (GTK_OBJECT(date_format), "datefmt_sample"));
2255 g_return_if_fail(date_format_list != NULL);
2256 g_return_if_fail(date_format != NULL);
2257 g_return_if_fail(datefmt_sample != NULL);
2259 /* get format from clist */
2260 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2262 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2263 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2265 /* insert the format into the text entry */
2266 new_format = g_malloc(strlen(old_format) + 3);
2268 strncpy(new_format, old_format, cur_pos);
2269 new_format[cur_pos] = '\0';
2270 strcat(new_format, format);
2271 strcat(new_format, &old_format[cur_pos]);
2273 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2274 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2279 static GtkWidget *date_format_create(GtkButton *button, void *data)
2281 static GtkWidget *datefmt_win = NULL;
2283 GtkWidget *scrolledwindow1;
2284 GtkWidget *datefmt_clist;
2289 GtkWidget *confirm_area;
2291 GtkWidget *cancel_btn;
2292 GtkWidget *datefmt_entry;
2298 { "%a", _("the full abbreviated weekday name") },
2299 { "%A", _("the full weekday name") },
2300 { "%b", _("the abbreviated month name") },
2301 { "%B", _("the full month name") },
2302 { "%c", _("the preferred date and time for the current locale") },
2303 { "%C", _("the century number (year/100)") },
2304 { "%d", _("the day of the month as a decimal number") },
2305 { "%H", _("the hour as a decimal number using a 24-hour clock") },
2306 { "%I", _("the hour as a decimal number using a 12-hour clock") },
2307 { "%j", _("the day of the year as a decimal number") },
2308 { "%m", _("the month as a decimal number") },
2309 { "%M", _("the minute as a decimal number") },
2310 { "%p", _("either AM or PM") },
2311 { "%S", _("the second as a decimal number") },
2312 { "%w", _("the day of the week as a decimal number") },
2313 { "%x", _("the preferred date for the current locale") },
2314 { "%y", _("the last two digits of a year") },
2315 { "%Y", _("the year as a decimal number") },
2316 { "%Z", _("the time zone or name or abbreviation") }
2321 const gint TIME_FORMAT_ELEMS =
2322 sizeof time_format / sizeof time_format[0];
2324 if (datefmt_win) return datefmt_win;
2326 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2327 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2328 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2329 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2330 gtk_widget_set_usize(datefmt_win, 440, 280);
2332 vbox1 = gtk_vbox_new(FALSE, 10);
2333 gtk_widget_show(vbox1);
2334 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2336 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2337 gtk_scrolled_window_set_policy
2338 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2339 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2340 gtk_widget_show(scrolledwindow1);
2341 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2343 titles[0] = _("Specifier");
2344 titles[1] = _("Description");
2345 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2346 gtk_widget_show(datefmt_clist);
2347 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2348 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2350 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2351 GTK_SELECTION_BROWSE);
2353 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2355 /* phoney casting necessary because of gtk... */
2356 text[0] = (gchar *)time_format[i].fmt;
2357 text[1] = (gchar *)time_format[i].txt;
2358 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2361 table = gtk_table_new(2, 2, FALSE);
2362 gtk_widget_show(table);
2363 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2364 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2365 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2367 label1 = gtk_label_new(_("Date format"));
2368 gtk_widget_show(label1);
2369 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2371 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2372 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2374 datefmt_entry = gtk_entry_new_with_max_length(256);
2375 gtk_widget_show(datefmt_entry);
2376 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2377 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2379 /* we need the "sample" entry box; add it as data so callbacks can
2380 * get the entry box */
2381 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2384 label2 = gtk_label_new(_("Example"));
2385 gtk_widget_show(label2);
2386 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2388 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2389 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2391 label3 = gtk_label_new("");
2392 gtk_widget_show(label3);
2393 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2394 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2395 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2396 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2398 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2399 &cancel_btn, _("Cancel"), NULL, NULL);
2400 gtk_widget_grab_default(ok_btn);
2401 gtk_widget_show(confirm_area);
2403 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2405 /* set the current format */
2406 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2407 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2410 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2411 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2413 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2414 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2416 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2417 GTK_SIGNAL_FUNC(date_format_key_pressed),
2419 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2420 GTK_SIGNAL_FUNC(date_format_on_delete),
2422 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2423 GTK_SIGNAL_FUNC(date_format_entry_on_change),
2426 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2427 GTK_SIGNAL_FUNC(date_format_select_row),
2430 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2431 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2433 gtk_widget_show(datefmt_win);
2434 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2436 gtk_widget_grab_focus(ok_btn);
2441 void prefs_quote_colors_dialog(void)
2443 if (!quote_color_win)
2444 prefs_quote_colors_dialog_create();
2445 gtk_widget_show(quote_color_win);
2446 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2449 gtk_widget_hide(quote_color_win);
2451 textview_update_message_colors();
2452 main_window_reflect_prefs_all();
2455 static void prefs_quote_colors_dialog_create(void)
2460 GtkWidget *quotelevel1_label;
2461 GtkWidget *quotelevel2_label;
2462 GtkWidget *quotelevel3_label;
2463 GtkWidget *uri_label;
2464 GtkWidget *tgt_folder_label;
2467 //GtkWidget *cancel_btn;
2468 GtkWidget *recycle_colors_btn;
2469 GtkWidget *frame_colors;
2471 window = gtk_window_new(GTK_WINDOW_DIALOG);
2472 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2473 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2474 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2475 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2476 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2478 vbox = gtk_vbox_new (FALSE, VSPACING);
2479 gtk_container_add (GTK_CONTAINER (window), vbox);
2480 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2481 PACK_FRAME(vbox, frame_colors, _("Colors"));
2483 table = gtk_table_new (4, 2, FALSE);
2484 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2485 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2486 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2487 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2490 color_buttons.quote_level1_btn = gtk_button_new();
2491 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2492 0, 1, 0, 1, 0, 0, 0, 0);
2493 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2494 gtk_container_set_border_width
2495 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2497 color_buttons.quote_level2_btn = gtk_button_new();
2498 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2499 0, 1, 1, 2, 0, 0, 0, 0);
2500 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2501 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2503 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2504 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2505 0, 1, 2, 3, 0, 0, 0, 0);
2506 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2507 gtk_container_set_border_width
2508 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2510 color_buttons.uri_btn = gtk_button_new_with_label ("");
2511 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2512 0, 1, 3, 4, 0, 0, 0, 0);
2513 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2514 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2516 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2517 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2518 0, 1, 4, 5, 0, 0, 0, 0);
2519 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
2520 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2522 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2523 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2524 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2525 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2526 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2528 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2529 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2530 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2531 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2532 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2534 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2535 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2536 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2537 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2538 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2540 uri_label = gtk_label_new (_("URI link"));
2541 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2542 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2543 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2544 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2546 tgt_folder_label = gtk_label_new (_("Target folder"));
2547 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
2548 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2549 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
2550 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
2552 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2553 _("Recycle quote colors"));
2555 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2556 NULL, NULL, NULL, NULL);
2557 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2559 gtk_widget_grab_default(ok_btn);
2560 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2561 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2562 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2563 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2564 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2565 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2566 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2567 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2570 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2571 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2572 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2573 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2574 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2575 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2576 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2577 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2578 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
2579 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
2580 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2581 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2582 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2583 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2585 /* show message button colors and recycle options */
2586 set_button_bg_color(color_buttons.quote_level1_btn,
2587 prefs_common.quote_level1_col);
2588 set_button_bg_color(color_buttons.quote_level2_btn,
2589 prefs_common.quote_level2_col);
2590 set_button_bg_color(color_buttons.quote_level3_btn,
2591 prefs_common.quote_level3_col);
2592 set_button_bg_color(color_buttons.uri_btn,
2593 prefs_common.uri_col);
2594 set_button_bg_color(color_buttons.tgt_folder_btn,
2595 prefs_common.tgt_folder_col);
2596 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2597 prefs_common.recycle_quote_colors);
2599 gtk_widget_show_all(vbox);
2600 quote_color_win = window;
2603 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2604 GdkEventKey *event, gpointer data)
2606 if (event && event->keyval == GDK_Escape)
2610 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2612 gchar *type = (gchar *)data;
2613 gchar *title = NULL;
2614 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2616 GtkColorSelectionDialog *dialog;
2618 if(g_strcasecmp(type, "LEVEL1") == 0) {
2619 title = _("Pick color for quotation level 1");
2620 rgbvalue = prefs_common.quote_level1_col;
2621 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2622 title = _("Pick color for quotation level 2");
2623 rgbvalue = prefs_common.quote_level2_col;
2624 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2625 title = _("Pick color for quotation level 3");
2626 rgbvalue = prefs_common.quote_level3_col;
2627 } else if(g_strcasecmp(type, "URI") == 0) {
2628 title = _("Pick color for URI");
2629 rgbvalue = prefs_common.uri_col;
2630 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
2631 title = _("Pick color for target folder");
2632 rgbvalue = prefs_common.tgt_folder_col;
2633 } else { /* Should never be called */
2634 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2638 color_dialog = gtk_color_selection_dialog_new(title);
2639 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2640 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2641 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2642 manage_window_set_transient(GTK_WINDOW(color_dialog));
2644 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2645 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2646 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2647 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2648 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2649 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2652 /* preselect the previous color in the color selection dialog */
2653 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2654 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2655 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2656 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2657 gtk_color_selection_set_color
2658 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2660 gtk_widget_show(color_dialog);
2663 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2665 GtkColorSelection *colorsel = (GtkColorSelection *)
2666 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2668 gint red, green, blue, rgbvalue;
2669 gchar *type = (gchar *)data;
2671 gtk_color_selection_get_color(colorsel, color);
2673 red = (gint) (color[0] * 255.0);
2674 green = (gint) (color[1] * 255.0);
2675 blue = (gint) (color[2] * 255.0);
2676 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2679 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2680 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2681 fprintf(stderr, "Color is %x\n", rgbvalue);
2684 if (g_strcasecmp(type, "LEVEL1") == 0) {
2685 prefs_common.quote_level1_col = rgbvalue;
2686 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2687 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2688 prefs_common.quote_level2_col = rgbvalue;
2689 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2690 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2691 prefs_common.quote_level3_col = rgbvalue;
2692 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2693 } else if (g_strcasecmp(type, "URI") == 0) {
2694 prefs_common.uri_col = rgbvalue;
2695 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2696 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
2697 prefs_common.tgt_folder_col = rgbvalue;
2698 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
2699 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
2701 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2703 gtk_widget_destroy(color_dialog);
2706 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2708 gtk_widget_destroy(color_dialog);
2711 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
2715 gtk_widget_destroy(color_dialog);
2718 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2723 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2724 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2725 newstyle->bg[GTK_STATE_NORMAL] = color;
2726 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2727 newstyle->bg[GTK_STATE_ACTIVE] = color;
2729 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2732 static void prefs_enable_message_color_toggled(void)
2736 is_active = gtk_toggle_button_get_active
2737 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2738 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2739 prefs_common.enable_color = is_active;
2742 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2746 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2747 prefs_common.recycle_quote_colors = is_active;
2750 static void prefs_quote_description(void)
2752 if (!quote_desc_win)
2753 prefs_quote_description_create();
2755 gtk_widget_show(quote_desc_win);
2757 gtk_widget_hide(quote_desc_win);
2760 static void prefs_quote_description_create(void)
2768 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2769 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2770 _("Description of symbols"));
2771 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2772 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2773 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2774 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2776 vbox = gtk_vbox_new(FALSE, 8);
2777 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2779 hbox = gtk_hbox_new(FALSE, 4);
2780 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2782 label = gtk_label_new
2786 "%N\n" /* full name */
2787 "%F\n" /* first name */
2788 "%I\n" /* sender's initial */
2789 "%s\n" /* subject line */
2792 "%n\n" /* newsgroups */
2793 "%i\n" /* message id */
2794 "%r\n" /* references */
2805 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2806 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2808 label = gtk_label_new
2809 (_("DESCRIPTION\n\n"
2812 "Full Name of Sender\n"
2813 "First Name of Sender\n"
2814 "Initial of Sender\n"
2822 "Display the information\n"
2823 "If the information x is set, displays expr\n"
2826 "Quoted message body\n"
2827 "Message body without signature\n"
2828 "Quoted message body without signature\n"
2831 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2832 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2834 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2835 NULL, NULL, NULL, NULL);
2836 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2838 gtk_widget_grab_default(ok_btn);
2839 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2840 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2842 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2843 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2845 gtk_widget_show_all(vbox);
2848 /* functions for setting items of SummaryView */
2850 static struct _SummaryDisplayItem
2854 GtkWidget *chkbtn[N_SUMMARY_COLS];
2857 GtkWidget *cancel_btn;
2860 #define SET_ACTIVE(column, var) \
2861 gtk_toggle_button_set_active \
2862 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2864 #define GET_ACTIVE(column, var) \
2865 prefs_common.var = gtk_toggle_button_get_active \
2866 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2868 void prefs_summary_display_item_set(void)
2870 static gboolean cancelled;
2872 if (!summarydispitem.window)
2873 prefs_summary_display_item_dialog_create(&cancelled);
2874 gtk_widget_grab_focus(summarydispitem.ok_btn);
2875 gtk_widget_show(summarydispitem.window);
2876 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2878 SET_ACTIVE(S_COL_MARK, show_mark);
2879 SET_ACTIVE(S_COL_UNREAD, show_unread);
2880 SET_ACTIVE(S_COL_MIME, show_mime);
2881 SET_ACTIVE(S_COL_NUMBER, show_number);
2882 SET_ACTIVE(S_COL_SCORE, show_score);
2883 SET_ACTIVE(S_COL_SIZE, show_size);
2884 SET_ACTIVE(S_COL_DATE, show_date);
2885 SET_ACTIVE(S_COL_FROM, show_from);
2886 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2889 gtk_widget_hide(summarydispitem.window);
2891 if (cancelled != TRUE) {
2892 GET_ACTIVE(S_COL_MARK, show_mark);
2893 GET_ACTIVE(S_COL_UNREAD, show_unread);
2894 GET_ACTIVE(S_COL_MIME, show_mime);
2895 GET_ACTIVE(S_COL_NUMBER, show_number);
2896 GET_ACTIVE(S_COL_SCORE, show_score);
2897 GET_ACTIVE(S_COL_SIZE, show_size);
2898 GET_ACTIVE(S_COL_DATE, show_date);
2899 GET_ACTIVE(S_COL_FROM, show_from);
2900 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2902 main_window_reflect_prefs_all();
2906 #define SET_CHECK_BUTTON(column, label) \
2908 summarydispitem.chkbtn[column] = \
2909 gtk_check_button_new_with_label(label); \
2910 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2911 summarydispitem.chkbtn[column], \
2915 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2919 GtkWidget *chkbtn_vbox;
2922 GtkWidget *cancel_btn;
2924 window = gtk_window_new(GTK_WINDOW_DIALOG);
2925 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2926 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2927 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2928 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2929 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2930 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2931 GTK_SIGNAL_FUNC(display_item_delete_event),
2933 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2934 GTK_SIGNAL_FUNC(display_item_key_pressed),
2937 vbox = gtk_vbox_new(FALSE, 8);
2938 gtk_container_add(GTK_CONTAINER(window), vbox);
2940 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2941 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2943 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2944 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2945 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2946 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2947 SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
2948 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2949 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2950 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2951 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2953 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2954 &cancel_btn, _("Cancel"), NULL, NULL);
2955 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2956 gtk_widget_grab_default(ok_btn);
2958 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2959 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2960 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2961 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2963 gtk_widget_show_all(vbox);
2965 summarydispitem.window = window;
2966 summarydispitem.ok_btn = ok_btn;
2967 summarydispitem.cancel_btn = cancel_btn;
2970 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2976 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2982 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2983 gboolean *cancelled)
2991 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2992 gboolean *cancelled)
2994 if (event && event->keyval == GDK_Escape) {
3000 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3004 g_return_if_fail(entry != NULL);
3006 if (!font_sel_win) {
3007 font_sel_win = gtk_font_selection_dialog_new
3008 (_("Font selection"));
3009 gtk_window_position(GTK_WINDOW(font_sel_win),
3010 GTK_WIN_POS_CENTER);
3011 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3012 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3015 (GTK_OBJECT(font_sel_win), "key_press_event",
3016 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3018 gtk_signal_connect_object
3019 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3021 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3022 GTK_OBJECT(font_sel_win));
3025 if(font_sel_conn_id) {
3026 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3028 font_sel_conn_id = gtk_signal_connect
3029 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3031 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3033 printf("%i\n", font_sel_conn_id);
3035 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3036 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3038 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3039 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3040 gtk_widget_grab_focus
3041 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3042 gtk_widget_show(font_sel_win);
3045 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3049 if (event && event->keyval == GDK_Escape)
3050 gtk_widget_hide(font_sel_win);
3053 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3057 fontname = gtk_font_selection_dialog_get_font_name
3058 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3061 gtk_entry_set_text(entry, fontname);
3066 gtk_widget_hide(font_sel_win);
3069 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3072 GtkWidget *menuitem;
3075 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3076 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3077 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3078 g_free(*((gchar **)pparam->data));
3079 *((gchar **)pparam->data) = g_strdup(charset);
3082 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3085 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3087 GtkWidget *menuitem;
3091 g_return_if_fail(optmenu != NULL);
3092 g_return_if_fail(*((gchar **)pparam->data) != NULL);
3094 menu = gtk_option_menu_get_menu(optmenu);
3095 for (cur = GTK_MENU_SHELL(menu)->children;
3096 cur != NULL; cur = cur->next) {
3097 menuitem = GTK_WIDGET(cur->data);
3098 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3099 if (!strcmp(charset, *((gchar **)pparam->data))) {
3100 gtk_option_menu_set_history(optmenu, n);
3106 gtk_option_menu_set_history(optmenu, 0);
3107 prefs_common_charset_set_data_from_optmenu(pparam);
3110 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3113 prefs_common_cancel();
3117 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3120 if (event && event->keyval == GDK_Escape)
3121 prefs_common_cancel();
3124 static void prefs_common_ok(void)
3126 prefs_common_apply();
3127 gtk_widget_hide(dialog.window);
3128 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
3129 gtk_widget_hide(quote_desc_win);
3131 inc_autocheck_timer_set();
3134 static void prefs_common_apply(void)
3136 prefs_set_data_from_dialog(param);
3137 main_window_reflect_prefs_all();
3138 prefs_common_save_config();
3141 static void prefs_common_cancel(void)
3143 gtk_widget_hide(dialog.window);
3144 inc_autocheck_timer_set();
3148 static struct _ComposePrefs
3152 GtkWidget *close_btn;
3155 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
3156 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
3157 static void compose_prefs_close(GtkWidget *widget);
3158 static void compose_prefs_fmt_create(void);
3160 static void compose_prefs_fmt_open(void)
3162 if (composeprefs.window == NULL)
3163 compose_prefs_fmt_create();
3164 gtk_widget_show(composeprefs.window);
3168 static void compose_prefs_fmt_create(void)
3171 GtkWidget *close_btn;
3173 GtkWidget *frame_quote;
3174 GtkWidget *vbox_quote;
3176 GtkWidget *checkbtn_quote;
3177 GtkWidget *label_quotemark;
3178 GtkWidget *entry_quotemark;
3179 GtkWidget *scrolledwin_quotefmt;
3180 GtkWidget *text_quotefmt;
3181 GtkWidget *label_quotefmt;
3182 GtkWidget *btn_quotedesc;
3184 GtkWidget *label_fw_quotemark;
3185 GtkWidget *entry_fw_quotemark;
3186 GtkWidget *label_fw_quotefmt;
3187 GtkWidget *text_fw_quotefmt;
3189 window = gtk_window_new(GTK_WINDOW_DIALOG);
3190 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
3191 gtk_window_set_title(GTK_WINDOW(window), _("Compose Preferences"));
3192 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3193 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3194 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3195 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3196 GTK_SIGNAL_FUNC(compose_prefs_delete_event),
3198 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3199 GTK_SIGNAL_FUNC(compose_prefs_key_pressed),
3202 vbox_quote = gtk_vbox_new(FALSE, 8);
3203 gtk_container_add(GTK_CONTAINER(window), vbox_quote);
3205 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
3206 _("Quote message when replying"));
3208 hbox1 = gtk_hbox_new (FALSE, 8);
3209 gtk_widget_show (hbox1);
3210 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3212 label_quotemark = gtk_label_new (_("Quotation mark"));
3213 gtk_widget_show (label_quotemark);
3214 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
3216 entry_quotemark = gtk_entry_new ();
3217 gtk_widget_show (entry_quotemark);
3218 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
3219 gtk_widget_set_usize (entry_quotemark, 64, -1);
3221 hbox1 = gtk_hbox_new (FALSE, 0);
3222 gtk_widget_show (hbox1);
3223 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3225 label_quotefmt = gtk_label_new (_("Quotation format:"));
3226 gtk_widget_show (label_quotefmt);
3227 gtk_box_pack_start (GTK_BOX (hbox1), label_quotefmt, FALSE, FALSE, 0);
3229 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3230 gtk_widget_show (scrolledwin_quotefmt);
3231 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3232 gtk_scrolled_window_set_policy
3233 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3234 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3236 text_quotefmt = gtk_text_new (NULL, NULL);
3237 gtk_widget_show (text_quotefmt);
3238 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
3239 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
3240 gtk_widget_set_usize(text_quotefmt, 400, 60);
3242 hbox1 = gtk_hbox_new (FALSE, 8);
3243 gtk_widget_show (hbox1);
3244 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3246 label_fw_quotemark = gtk_label_new (_("Forward quotation mark"));
3247 gtk_widget_show (label_fw_quotemark);
3248 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotemark, FALSE, FALSE, 0);
3250 entry_fw_quotemark = gtk_entry_new ();
3251 gtk_widget_show (entry_fw_quotemark);
3252 gtk_box_pack_start (GTK_BOX (hbox1), entry_fw_quotemark, FALSE, FALSE, 0);
3253 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
3255 hbox1 = gtk_hbox_new (FALSE, 0);
3256 gtk_widget_show (hbox1);
3257 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3259 label_fw_quotefmt = gtk_label_new (_("Forward format:"));
3260 gtk_widget_show (label_fw_quotefmt);
3261 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotefmt, FALSE, FALSE, 0);
3263 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3264 gtk_widget_show (scrolledwin_quotefmt);
3265 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3266 gtk_scrolled_window_set_policy
3267 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3268 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3270 text_fw_quotefmt = gtk_text_new (NULL, NULL);
3271 gtk_widget_show (text_fw_quotefmt);
3272 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt);
3273 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
3274 gtk_widget_set_usize(text_fw_quotefmt, 400, 60);
3276 hbox1 = gtk_hbox_new (FALSE, 0);
3277 gtk_widget_show (hbox1);
3278 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
3281 gtk_button_new_with_label (_(" Description of symbols "));
3282 gtk_widget_show (btn_quotedesc);
3283 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc,
3286 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
3287 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
3290 gtkut_button_set_create(&hbox1, &close_btn, _("Close"),
3291 NULL, NULL, NULL, NULL);
3292 gtk_box_pack_end(GTK_BOX(vbox_quote), hbox1, FALSE, FALSE, 0);
3293 gtk_widget_grab_default(close_btn);
3295 gtk_signal_connect(GTK_OBJECT(close_btn), "clicked",
3296 GTK_SIGNAL_FUNC(compose_prefs_close), NULL);
3298 gtk_widget_show_all(vbox_quote);
3300 composeprefs.window = window;
3301 composeprefs.close_btn = close_btn;
3303 compose.checkbtn_quote = checkbtn_quote;
3304 compose.entry_quotemark = entry_quotemark;
3305 compose.text_quotefmt = text_quotefmt;
3306 compose.entry_fw_quotemark = entry_fw_quotemark;
3307 compose.text_fw_quotefmt = text_fw_quotefmt;
3310 static void compose_prefs_close(GtkWidget *widget)
3312 gtk_widget_hide(composeprefs.window);
3315 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3317 gtk_widget_hide(composeprefs.window);
3322 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3324 if (event && event->keyval == GDK_Escape) {
3325 gtk_widget_hide(composeprefs.window);
3329 static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3332 GtkWidget *menuitem;
3334 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3335 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3336 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3337 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3340 static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3342 RecvDialogShow dialog_show;
3343 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3345 GtkWidget *menuitem;
3347 dialog_show = *((RecvDialogShow *)pparam->data);
3349 switch (dialog_show) {
3350 case RECVDIALOG_ALWAYS:
3351 gtk_option_menu_set_history(optmenu, 0);
3353 case RECVDIALOG_WINDOW_ACTIVE:
3354 gtk_option_menu_set_history(optmenu, 1);
3356 case RECVDIALOG_NEVER:
3357 gtk_option_menu_set_history(optmenu, 2);
3362 menu = gtk_option_menu_get_menu(optmenu);
3363 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3364 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));