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>
40 #include "prefs_common.h"
41 #include "prefs_display_header.h"
42 #include "prefs_summary_column.h"
43 #include "mainwindow.h"
44 #include "summaryview.h"
45 #include "messageview.h"
46 #include "manage_window.h"
52 #include "alertpanel.h"
55 #include "folderview.h"
61 PrefsCommon prefs_common;
63 static PrefsDialog dialog;
65 static struct Receive {
66 GtkWidget *checkbtn_incext;
67 GtkWidget *entry_incext;
68 GtkWidget *button_incext;
70 GtkWidget *checkbtn_local;
71 GtkWidget *checkbtn_filter_on_inc;
72 GtkWidget *entry_spool;
74 GtkWidget *checkbtn_autochk;
75 GtkWidget *spinbtn_autochk;
76 GtkObject *spinbtn_autochk_adj;
78 GtkWidget *checkbtn_chkonstartup;
79 GtkWidget *checkbtn_noerrorpanel;
80 GtkWidget *checkbtn_scan_after_inc;
83 GtkWidget *spinbtn_maxarticle;
84 GtkObject *spinbtn_maxarticle_adj;
88 GtkWidget *checkbtn_extsend;
89 GtkWidget *entry_extsend;
90 GtkWidget *button_extsend;
92 GtkWidget *checkbtn_savemsg;
93 GtkWidget *checkbtn_queuemsg;
95 GtkWidget *optmenu_charset;
97 GtkWidget *checkbtn_returnreceipt;
100 static struct Compose {
101 GtkWidget *checkbtn_autosig;
102 GtkWidget *entry_sigsep;
104 GtkWidget *entry_fw_quotemark;
105 GtkWidget *text_fw_quotefmt;
107 GtkWidget *checkbtn_autoextedit;
109 GtkWidget *checkbtn_reply_account_autosel;
110 GtkWidget *checkbtn_forward_account_autosel;
111 GtkWidget *checkbtn_reedit_account_autosel;
113 GtkWidget *spinbtn_linewrap;
114 GtkObject *spinbtn_linewrap_adj;
115 GtkWidget *checkbtn_wrapquote;
116 GtkWidget *checkbtn_wrapatsend;
118 GtkWidget *checkbtn_quote;
119 GtkWidget * checkbtn_forward_as_attachment;
120 GtkWidget * checkbtn_smart_wrapping;
121 GtkWidget * checkbtn_block_cursor;
125 GtkWidget *checkbtn_enable_pspell;
126 GtkWidget *entry_pspell_path;
127 GtkWidget *btn_pspell_path;
128 GtkWidget *optmenu_dictionary;
133 static struct Quote {
134 GtkWidget *entry_quotemark;
135 GtkWidget *text_quotefmt;
137 GtkWidget *entry_fw_quotemark;
138 GtkWidget *text_fw_quotefmt;
141 static struct Display {
142 GtkWidget *entry_textfont;
143 GtkWidget *button_textfont;
145 GtkWidget *entry_smallfont;
146 GtkWidget *entry_normalfont;
147 GtkWidget *entry_boldfont;
149 GtkWidget *chkbtn_folder_unread;
151 GtkWidget *chkbtn_transhdr;
153 GtkWidget *chkbtn_swapfrom;
154 GtkWidget *chkbtn_hscrollbar;
155 GtkWidget *chkbtn_useaddrbook;
156 GtkWidget *chkbtn_expand_thread;
157 GtkWidget *chkbtn_bold_unread;
159 GtkWidget *entry_datefmt;
162 static struct Message {
163 GtkWidget *chkbtn_enablecol;
164 GtkWidget *button_edit_col;
165 GtkWidget *chkbtn_mbalnum;
166 GtkWidget *chkbtn_disphdrpane;
167 GtkWidget *chkbtn_disphdr;
168 GtkWidget *spinbtn_linespc;
169 GtkObject *spinbtn_linespc_adj;
170 GtkWidget *chkbtn_headspc;
172 GtkWidget *chkbtn_smoothscroll;
173 GtkWidget *spinbtn_scrollstep;
174 GtkObject *spinbtn_scrollstep_adj;
175 GtkWidget *chkbtn_halfpage;
179 static struct Privacy {
180 GtkWidget *checkbtn_default_encrypt;
181 GtkWidget *checkbtn_ascii_armored;
182 GtkWidget *checkbtn_default_sign;
183 GtkWidget *checkbtn_auto_check_signatures;
184 GtkWidget *checkbtn_gpg_signature_popup;
185 GtkWidget *checkbtn_passphrase_grab;
186 GtkWidget *checkbtn_gpg_warning;
187 GtkWidget *optmenu_default_signkey;
191 static struct Interface {
192 /* GtkWidget *checkbtn_emacs; */
193 GtkWidget *checkbtn_openunread;
194 GtkWidget *checkbtn_openinbox;
195 GtkWidget *checkbtn_immedexec;
196 GtkWidget *checkbtn_confonexit;
197 GtkWidget *checkbtn_cleanonexit;
198 GtkWidget *checkbtn_askonclean;
199 GtkWidget *checkbtn_warnqueued;
200 GtkWidget *checkbtn_addaddrbyclick;
201 GtkWidget *optmenu_recvdialog;
202 GtkWidget *optmenu_nextunreadmsgdialog;
205 static struct Other {
206 GtkWidget *uri_combo;
207 GtkWidget *uri_entry;
208 GtkWidget *printcmd_entry;
209 GtkWidget *exteditor_combo;
210 GtkWidget *exteditor_entry;
213 static struct MessageColorButtons {
214 GtkWidget *quote_level1_btn;
215 GtkWidget *quote_level2_btn;
216 GtkWidget *quote_level3_btn;
218 GtkWidget *tgt_folder_btn;
221 static GtkWidget *quote_desc_win;
222 static GtkWidget *font_sel_win;
223 static guint font_sel_conn_id;
224 static GtkWidget *quote_color_win;
225 static GtkWidget *color_dialog;
227 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
228 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
230 static void prefs_common_default_signkey_set_data_from_optmenu
232 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
233 static void prefs_common_ascii_armored_warning(GtkWidget* widget,
236 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
237 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
238 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
239 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
242 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param);
243 static void prefs_dictionary_set_optmenu(PrefParam *pparam);
248 parameter name, default value, pointer to the prefs variable, data type,
249 pointer to the widget pointer,
250 pointer to the function for data setting,
251 pointer to the function for widget setting
254 static PrefParam param[] = {
256 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
257 &receive.checkbtn_incext,
258 prefs_set_data_from_toggle, prefs_set_toggle},
259 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
260 &receive.entry_incext,
261 prefs_set_data_from_entry, prefs_set_entry},
263 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
264 &receive.checkbtn_local,
265 prefs_set_data_from_toggle, prefs_set_toggle},
266 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
267 &receive.checkbtn_filter_on_inc,
268 prefs_set_data_from_toggle, prefs_set_toggle},
269 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
270 &receive.entry_spool,
271 prefs_set_data_from_entry, prefs_set_entry},
273 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
274 &receive.checkbtn_autochk,
275 prefs_set_data_from_toggle, prefs_set_toggle},
276 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
277 &receive.spinbtn_autochk,
278 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
279 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
280 &receive.checkbtn_chkonstartup,
281 prefs_set_data_from_toggle, prefs_set_toggle},
282 {"noerrorpanel", "FALSE", &prefs_common.noerrorpanel, P_BOOL,
283 &receive.checkbtn_noerrorpanel,
284 prefs_set_data_from_toggle, prefs_set_toggle},
285 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
286 P_BOOL, &receive.checkbtn_scan_after_inc,
287 prefs_set_data_from_toggle, prefs_set_toggle},
288 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
289 &receive.spinbtn_maxarticle,
290 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
293 {"use_ext_sendmail", "FALSE", &prefs_common.use_extsend, P_BOOL,
294 &send.checkbtn_extsend,
295 prefs_set_data_from_toggle, prefs_set_toggle},
296 {"ext_sendmail_cmd", DEFAULT_SENDMAIL_CMD,
297 &prefs_common.extsend_cmd, P_STRING,
298 &send.entry_extsend, prefs_set_data_from_entry, prefs_set_entry},
299 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
300 &send.checkbtn_savemsg,
301 prefs_set_data_from_toggle, prefs_set_toggle},
302 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
303 &send.checkbtn_queuemsg,
304 prefs_set_data_from_toggle, prefs_set_toggle},
306 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
307 &send.optmenu_charset,
308 prefs_common_charset_set_data_from_optmenu,
309 prefs_common_charset_set_optmenu},
312 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
313 &compose.checkbtn_autosig,
314 prefs_set_data_from_toggle, prefs_set_toggle},
315 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
316 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
318 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
319 &compose.checkbtn_autoextedit,
320 prefs_set_data_from_toggle, prefs_set_toggle},
322 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
323 &compose.spinbtn_linewrap,
324 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
325 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
326 &compose.checkbtn_wrapquote,
327 prefs_set_data_from_toggle, prefs_set_toggle},
328 {"linewrap_before_sending", "FALSE",
329 &prefs_common.linewrap_at_send, P_BOOL,
330 &compose.checkbtn_wrapatsend,
331 prefs_set_data_from_toggle, prefs_set_toggle},
332 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
333 P_BOOL, &compose.checkbtn_forward_as_attachment,
334 prefs_set_data_from_toggle, prefs_set_toggle},
335 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
336 P_BOOL, &compose.checkbtn_smart_wrapping,
337 prefs_set_data_from_toggle, prefs_set_toggle},
338 {"block_cursor", "FALSE", &prefs_common.block_cursor,
339 P_BOOL, &compose.checkbtn_block_cursor,
340 prefs_set_data_from_toggle, prefs_set_toggle},
342 {"enable_pspell", "TRUE", &prefs_common.enable_pspell,
343 P_BOOL, &compose.checkbtn_enable_pspell,
344 prefs_set_data_from_toggle, prefs_set_toggle},
345 {"pspell_path", "/usr/local/share/pspell/", &prefs_common.pspell_path,
346 P_STRING, &compose.entry_pspell_path,
347 prefs_set_data_from_entry, prefs_set_entry},
348 {"dictionary", "", &prefs_common.dictionary,
349 P_STRING, &compose.optmenu_dictionary,
350 prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
352 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
353 &compose.checkbtn_quote,
354 prefs_set_data_from_toggle, prefs_set_toggle},
356 /* Account autoselection */
357 {"reply_account_autoselect", "TRUE",
358 &prefs_common.reply_account_autosel, P_BOOL,
359 &compose.checkbtn_reply_account_autosel,
360 prefs_set_data_from_toggle, prefs_set_toggle},
361 {"forward_account_autoselect", "TRUE",
362 &prefs_common.forward_account_autosel, P_BOOL,
363 &compose.checkbtn_forward_account_autosel,
364 prefs_set_data_from_toggle, prefs_set_toggle},
365 {"reedit_account_autoselect", "TRUE",
366 &prefs_common.reedit_account_autosel, P_BOOL,
367 &compose.checkbtn_reedit_account_autosel,
368 prefs_set_data_from_toggle, prefs_set_toggle},
370 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
374 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
375 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
376 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
377 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
378 prefs_set_data_from_text, prefs_set_text},
380 {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
381 "e.entry_fw_quotemark,
382 prefs_set_data_from_entry, prefs_set_entry},
384 "\\n\\nBegin forwarded message:\\n\\n"
385 "?d(Date: %d\\n)?f(From: %f\\n)?t(To: %t\\n)?c(Cc: %c\\n)"
386 "?n(Newsgroups: %n\\n)?s(Subject: %s\\n)\\n\\n%M",
387 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
388 prefs_set_data_from_text, prefs_set_text},
391 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
393 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
394 &prefs_common.textfont, P_STRING,
395 &display.entry_textfont,
396 prefs_set_data_from_entry, prefs_set_entry},
397 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
398 &prefs_common.smallfont, P_STRING,
399 &display.entry_smallfont,
400 prefs_set_data_from_entry, prefs_set_entry},
401 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
402 &prefs_common.boldfont, P_STRING,
403 &display.entry_boldfont,
404 prefs_set_data_from_entry, prefs_set_entry},
405 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
406 &prefs_common.normalfont, P_STRING,
407 &display.entry_normalfont,
408 prefs_set_data_from_entry, prefs_set_entry},
411 {"display_folder_unread_num", "TRUE",
412 &prefs_common.display_folder_unread, P_BOOL,
413 &display.chkbtn_folder_unread,
414 prefs_set_data_from_toggle, prefs_set_toggle},
416 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
417 &display.chkbtn_transhdr,
418 prefs_set_data_from_toggle, prefs_set_toggle},
420 /* Display: Summary View */
421 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
422 &display.chkbtn_swapfrom,
423 prefs_set_data_from_toggle, prefs_set_toggle},
424 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
425 &display.chkbtn_hscrollbar,
426 prefs_set_data_from_toggle, prefs_set_toggle},
427 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
428 &display.chkbtn_useaddrbook,
429 prefs_set_data_from_toggle, prefs_set_toggle},
430 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
431 P_STRING, &display.entry_datefmt,
432 prefs_set_data_from_entry, prefs_set_entry},
433 {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
434 &display.chkbtn_expand_thread,
435 prefs_set_data_from_toggle, prefs_set_toggle},
436 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
437 &display.chkbtn_bold_unread,
438 prefs_set_data_from_toggle, prefs_set_toggle},
440 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
443 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
445 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
448 {"summary_col_show_mark", "TRUE",
449 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
450 {"summary_col_show_unread", "TRUE",
451 &prefs_common.summary_col_visible[S_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
452 {"summary_col_show_mime", "TRUE",
453 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_subject", "TRUE",
455 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_from", "TRUE",
457 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
458 {"summary_col_show_date", "TRUE",
459 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
460 {"summary_col_show_size", "TRUE",
461 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
462 {"summary_col_show_number", "FALSE",
463 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
464 {"summary_col_show_score", "FALSE",
465 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
467 {"summary_col_pos_mark", "0",
468 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
469 {"summary_col_pos_unread", "1",
470 &prefs_common.summary_col_pos[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
471 {"summary_col_pos_mime", "2",
472 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
473 {"summary_col_pos_subject", "3",
474 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
475 {"summary_col_pos_from", "4",
476 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
477 {"summary_col_pos_date", "5",
478 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
479 {"summary_col_pos_size", "6",
480 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
481 {"summary_col_pos_number", "7",
482 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
483 {"summary_col_pos_score", "8",
484 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
486 {"summary_col_size_mark", "10",
487 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
488 {"summary_col_size_unread", "13",
489 &prefs_common.summary_col_size[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
490 {"summary_col_size_mime", "10",
491 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
492 {"summary_col_size_subject", "200",
493 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
494 {"summary_col_size_from", "120",
495 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
496 {"summary_col_size_date", "118",
497 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
498 {"summary_col_size_size", "45",
499 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
500 {"summary_col_size_number", "40",
501 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
502 {"summary_col_size_score", "40",
503 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
506 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
508 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
510 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
512 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
514 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
516 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
519 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
521 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
524 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
526 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
528 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
530 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
532 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
534 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
536 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
538 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
540 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
542 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
544 {"compose_width", "600", &prefs_common.compose_width, P_INT,
546 {"compose_height", "560", &prefs_common.compose_height, P_INT,
550 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
551 &message.chkbtn_enablecol,
552 prefs_set_data_from_toggle, prefs_set_toggle},
554 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
556 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
558 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
560 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
562 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
564 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
566 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
567 P_BOOL, NULL, NULL, NULL},
569 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
570 &message.chkbtn_mbalnum,
571 prefs_set_data_from_toggle, prefs_set_toggle},
572 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
573 P_BOOL, &message.chkbtn_disphdrpane,
574 prefs_set_data_from_toggle, prefs_set_toggle},
575 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
576 &message.chkbtn_disphdr,
577 prefs_set_data_from_toggle, prefs_set_toggle},
578 {"line_space", "2", &prefs_common.line_space, P_INT,
579 &message.spinbtn_linespc,
580 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
581 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
582 &message.chkbtn_headspc,
583 prefs_set_data_from_toggle, prefs_set_toggle},
585 {"enable_smooth_scroll", "FALSE",
586 &prefs_common.enable_smooth_scroll, P_BOOL,
587 &message.chkbtn_smoothscroll,
588 prefs_set_data_from_toggle, prefs_set_toggle},
589 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
590 &message.spinbtn_scrollstep,
591 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
592 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
593 &message.chkbtn_halfpage,
594 prefs_set_data_from_toggle, prefs_set_toggle},
596 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
600 {"mime_image_viewer", "display '%s'",
601 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
602 {"mime_audio_player", "play '%s'",
603 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
604 {"mime_open_command", "gedit '%s'",
605 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
609 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
610 &privacy.checkbtn_default_encrypt,
611 prefs_set_data_from_toggle, prefs_set_toggle},
612 {"ascii_armored", "FALSE", &prefs_common.ascii_armored, P_BOOL,
613 &privacy.checkbtn_ascii_armored,
614 prefs_set_data_from_toggle, prefs_set_toggle},
615 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
616 &privacy.checkbtn_default_sign,
617 prefs_set_data_from_toggle, prefs_set_toggle},
618 {"auto_check_signatures", "TRUE",
619 &prefs_common.auto_check_signatures, P_BOOL,
620 &privacy.checkbtn_auto_check_signatures,
621 prefs_set_data_from_toggle, prefs_set_toggle},
622 {"gpg_signature_popup", "FALSE",
623 &prefs_common.gpg_signature_popup, P_BOOL,
624 &privacy.checkbtn_gpg_signature_popup,
625 prefs_set_data_from_toggle, prefs_set_toggle},
627 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
628 &privacy.checkbtn_passphrase_grab,
629 prefs_set_data_from_toggle, prefs_set_toggle},
630 #endif /* __MINGW32__ */
631 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
632 &privacy.checkbtn_gpg_warning,
633 prefs_set_data_from_toggle, prefs_set_toggle},
634 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
635 &privacy.optmenu_default_signkey,
636 prefs_common_default_signkey_set_data_from_optmenu,
637 prefs_common_default_signkey_set_optmenu},
638 #endif /* USE_GPGME */
641 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
643 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
646 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
647 NULL, NULL, NULL}, */
649 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
650 P_BOOL, &interface.checkbtn_openunread,
651 prefs_set_data_from_toggle, prefs_set_toggle},
652 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
653 P_BOOL, &interface.checkbtn_openinbox,
654 prefs_set_data_from_toggle, prefs_set_toggle},
655 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
656 &interface.checkbtn_immedexec,
657 prefs_set_data_from_toggle, prefs_set_toggle},
658 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
659 &interface.optmenu_recvdialog,
660 prefs_common_recv_dialog_set_data_from_optmenu,
661 prefs_common_recv_dialog_set_optmenu},
662 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
663 &interface.optmenu_nextunreadmsgdialog,
664 prefs_nextunreadmsgdialog_set_data_from_optmenu,
665 prefs_nextunreadmsgdialog_set_optmenu},
667 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
668 P_BOOL, &interface.checkbtn_addaddrbyclick,
669 prefs_set_data_from_toggle, prefs_set_toggle},
670 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
671 &interface.checkbtn_confonexit,
672 prefs_set_data_from_toggle, prefs_set_toggle},
673 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
674 &send.checkbtn_returnreceipt,
675 prefs_set_data_from_toggle, prefs_set_toggle},
676 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
677 &interface.checkbtn_cleanonexit,
678 prefs_set_data_from_toggle, prefs_set_toggle},
679 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
680 &interface.checkbtn_askonclean,
681 prefs_set_data_from_toggle, prefs_set_toggle},
682 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
683 P_BOOL, &interface.checkbtn_warnqueued,
684 prefs_set_data_from_toggle, prefs_set_toggle},
687 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
688 &prefs_common.uri_cmd, P_STRING,
689 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
690 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
691 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
692 {"ext_editor_command", "gedit %s",
693 &prefs_common.ext_editor_cmd, P_STRING,
694 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
696 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
698 {"important_score", "1", &prefs_common.important_score, P_INT,
701 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
704 /* widget creating functions */
705 static void prefs_common_create (void);
706 static void prefs_receive_create (void);
707 static void prefs_send_create (void);
708 static void prefs_compose_create (void);
709 static void prefs_quote_create (void);
710 static void prefs_display_create (void);
711 static void prefs_message_create (void);
713 static void prefs_privacy_create (void);
715 static void prefs_interface_create (void);
716 static void prefs_other_create (void);
718 static void date_format_ok_btn_clicked (GtkButton *button,
720 static void date_format_cancel_btn_clicked (GtkButton *button,
722 static void date_format_key_pressed (GtkWidget *keywidget,
725 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
728 static void date_format_entry_on_change (GtkEditable *editable,
730 static void date_format_select_row (GtkWidget *date_format_list,
733 GdkEventButton *event,
734 GtkWidget *date_format);
735 static GtkWidget *date_format_create (GtkButton *button,
738 static void prefs_quote_description_create (void);
739 static void prefs_quote_description_key_pressed (GtkWidget *widget,
743 static void prefs_quote_colors_dialog (void);
744 static void prefs_quote_colors_dialog_create (void);
745 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
748 static void quote_color_set_dialog (GtkWidget *widget,
750 static void quote_colors_set_dialog_ok (GtkWidget *widget,
752 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
754 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
757 static void set_button_bg_color (GtkWidget *widget,
759 static void prefs_enable_message_color_toggled (void);
760 static void prefs_recycle_colors_toggled (GtkWidget *widget);
762 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
764 static void prefs_font_selection_key_pressed (GtkWidget *widget,
767 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
769 static gint prefs_common_deleted (GtkWidget *widget,
772 static void prefs_common_key_pressed (GtkWidget *widget,
775 static void prefs_common_ok (void);
776 static void prefs_common_apply (void);
777 static void prefs_common_cancel (void);
779 void prefs_common_init() {
780 prefs_common.fltlist = NULL;
781 prefs_common.disphdr_list = NULL;
784 void prefs_common_read_config(void)
788 gchar buf[PREFSBUFSIZE];
790 prefs_read_config(param, "Common", COMMON_RC);
792 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
794 if ((fp = fopen(path, "r")) == NULL) {
795 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
800 while (fgets(buf, sizeof(buf), fp) != NULL) {
802 if (buf[0] == '\0') continue;
803 prefs_common.mime_open_cmd_history =
804 add_history(prefs_common.mime_open_cmd_history, buf);
808 prefs_common.mime_open_cmd_history =
809 g_list_reverse(prefs_common.mime_open_cmd_history);
812 void prefs_common_save_config(void)
818 prefs_save_config(param, "Common", COMMON_RC);
820 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
822 if ((fp = fopen(path, "w")) == NULL) {
823 FILE_OP_ERROR(path, "fopen");
828 for (cur = prefs_common.mime_open_cmd_history;
829 cur != NULL; cur = cur->next) {
830 fputs((gchar *)cur->data, fp);
838 void prefs_common_open(void)
840 if (prefs_rc_is_readonly(COMMON_RC))
845 if (!dialog.window) {
846 prefs_common_create();
849 manage_window_set_transient(GTK_WINDOW(dialog.window));
850 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
851 gtk_widget_grab_focus(dialog.ok_btn);
853 prefs_set_dialog(param);
855 gtk_widget_show(dialog.window);
858 static void prefs_common_create(void)
862 debug_print(_("Creating common preferences window...\n"));
864 prefs_dialog_create(&dialog);
865 gtk_window_set_title (GTK_WINDOW(dialog.window),
866 _("Common Preferences"));
867 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
868 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
869 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
870 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
871 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
872 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
873 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
874 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
875 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
876 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
877 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
878 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
879 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
880 GTK_SIGNAL_FUNC(prefs_common_cancel),
881 GTK_OBJECT(dialog.window));
883 /* create all widgets on notebook */
884 prefs_receive_create();
885 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
887 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
888 prefs_compose_create();
889 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
890 prefs_quote_create();
891 SET_NOTEBOOK_LABEL(dialog.notebook, _("Quote"), page++);
892 prefs_display_create();
893 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
894 prefs_message_create();
895 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
897 prefs_privacy_create();
898 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
900 prefs_interface_create();
901 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
902 prefs_other_create();
903 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
905 gtk_widget_show_all(dialog.window);
908 static void prefs_receive_create(void)
912 GtkWidget *frame_incext;
913 GtkWidget *checkbtn_incext;
915 GtkWidget *label_incext;
916 GtkWidget *entry_incext;
917 /* GtkWidget *button_incext; */
919 GtkWidget *frame_spool;
920 GtkWidget *checkbtn_local;
921 GtkWidget *checkbtn_filter_on_inc;
922 GtkWidget *label_spool;
923 GtkWidget *entry_spool;
925 GtkWidget *hbox_autochk;
926 GtkWidget *checkbtn_autochk;
927 GtkWidget *label_autochk1;
928 GtkObject *spinbtn_autochk_adj;
929 GtkWidget *spinbtn_autochk;
930 GtkWidget *label_autochk2;
931 GtkWidget *checkbtn_chkonstartup;
932 GtkWidget *checkbtn_noerrorpanel;
933 GtkWidget *checkbtn_scan_after_inc;
936 GtkWidget *frame_news;
937 GtkWidget *label_maxarticle;
938 GtkWidget *spinbtn_maxarticle;
939 GtkObject *spinbtn_maxarticle_adj;
941 vbox1 = gtk_vbox_new (FALSE, VSPACING);
942 gtk_widget_show (vbox1);
943 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
944 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
946 PACK_FRAME(vbox1, frame_incext, _("External program"));
948 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
949 gtk_widget_show (vbox2);
950 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
951 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
953 /* Use of external incorporation program */
954 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
955 _("Use external program for incorporation"));
957 hbox = gtk_hbox_new (FALSE, 8);
958 gtk_widget_show (hbox);
959 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
960 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
962 label_incext = gtk_label_new (_("Command"));
963 gtk_widget_show (label_incext);
964 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
966 entry_incext = gtk_entry_new ();
967 gtk_widget_show (entry_incext);
968 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
971 button_incext = gtk_button_new_with_label ("... ");
972 gtk_widget_show (button_incext);
973 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
976 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
978 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
979 gtk_widget_show (vbox2);
980 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
981 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
983 hbox = gtk_hbox_new (FALSE, 32);
984 gtk_widget_show (hbox);
985 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
987 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
988 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
989 _("Filter on incorporation"));
990 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
992 hbox = gtk_hbox_new (FALSE, 8);
993 gtk_widget_show (hbox);
994 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
995 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
997 label_spool = gtk_label_new (_("Spool directory"));
998 gtk_widget_show (label_spool);
999 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
1001 entry_spool = gtk_entry_new ();
1002 gtk_widget_show (entry_spool);
1003 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
1005 vbox2 = gtk_vbox_new (FALSE, 0);
1006 gtk_widget_show (vbox2);
1007 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1010 hbox_autochk = gtk_hbox_new (FALSE, 8);
1011 gtk_widget_show (hbox_autochk);
1012 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1014 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1015 _("Auto-check new mail"));
1017 label_autochk1 = gtk_label_new (_("every"));
1018 gtk_widget_show (label_autochk1);
1019 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1021 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1022 spinbtn_autochk = gtk_spin_button_new
1023 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1024 gtk_widget_show (spinbtn_autochk);
1025 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1026 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
1027 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1029 label_autochk2 = gtk_label_new (_("minute(s)"));
1030 gtk_widget_show (label_autochk2);
1031 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1033 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1034 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1035 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1037 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1038 _("Check new mail on startup"));
1040 PACK_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel,
1041 _("No error popup on receive error"));
1042 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1043 _("Update all local folders after incorporation"));
1045 PACK_FRAME(vbox1, frame_news, _("News"));
1047 hbox = gtk_hbox_new (FALSE, 8);
1048 gtk_widget_show (hbox);
1049 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
1050 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
1052 label_maxarticle = gtk_label_new
1053 (_("Maximum number of articles to download\n"
1054 "(unlimited if 0 is specified)"));
1055 gtk_widget_show (label_maxarticle);
1056 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
1057 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
1059 spinbtn_maxarticle_adj =
1060 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
1061 spinbtn_maxarticle = gtk_spin_button_new
1062 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
1063 gtk_widget_show (spinbtn_maxarticle);
1064 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
1066 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
1067 gtk_spin_button_set_numeric
1068 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
1070 receive.checkbtn_incext = checkbtn_incext;
1071 receive.entry_incext = entry_incext;
1072 /* receive.button_incext = button_incext; */
1074 receive.checkbtn_local = checkbtn_local;
1075 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
1076 receive.entry_spool = entry_spool;
1078 receive.checkbtn_autochk = checkbtn_autochk;
1079 receive.spinbtn_autochk = spinbtn_autochk;
1080 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1082 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1083 receive.checkbtn_noerrorpanel = checkbtn_noerrorpanel;
1084 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1087 receive.spinbtn_maxarticle = spinbtn_maxarticle;
1088 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
1091 static void prefs_send_create(void)
1095 GtkWidget *frame_extsend;
1096 GtkWidget *vbox_extsend;
1097 GtkWidget *checkbtn_extsend;
1099 GtkWidget *label_extsend;
1100 GtkWidget *entry_extsend;
1101 /* GtkWidget *button_extsend; */
1102 GtkWidget *checkbtn_savemsg;
1103 GtkWidget *checkbtn_queuemsg;
1104 GtkWidget *label_outcharset;
1106 GtkWidget *optmenu_menu;
1107 GtkWidget *menuitem;
1108 GtkWidget *checkbtn_returnreceipt;
1109 GtkWidget *label_charset_desc;
1111 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1112 gtk_widget_show (vbox1);
1113 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1114 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1116 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1118 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1119 gtk_widget_show (vbox_extsend);
1120 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1121 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1123 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1124 _("Use external program for sending"));
1126 hbox1 = gtk_hbox_new (FALSE, 8);
1127 gtk_widget_show (hbox1);
1128 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1129 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1131 label_extsend = gtk_label_new (_("Command"));
1132 gtk_widget_show (label_extsend);
1133 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1135 entry_extsend = gtk_entry_new ();
1136 gtk_widget_show (entry_extsend);
1137 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1140 button_extsend = gtk_button_new_with_label ("... ");
1141 gtk_widget_show (button_extsend);
1142 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1145 vbox2 = gtk_vbox_new (FALSE, 0);
1146 gtk_widget_show (vbox2);
1147 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1149 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1150 _("Save sent messages to outbox"));
1151 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1152 _("Queue messages that fail to send"));
1153 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1154 _("Send return receipt on request"));
1156 hbox1 = gtk_hbox_new (FALSE, 8);
1157 gtk_widget_show (hbox1);
1158 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1160 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1161 gtk_widget_show (label_outcharset);
1162 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1164 optmenu = gtk_option_menu_new ();
1165 gtk_widget_show (optmenu);
1166 gtk_box_pack_start (GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1168 optmenu_menu = gtk_menu_new ();
1170 #define SET_MENUITEM(str, charset) \
1172 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1175 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1176 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1178 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1180 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1181 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1182 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1183 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1184 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1185 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1187 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1189 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1191 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1192 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1194 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1196 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1197 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1199 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1200 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1202 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1203 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1205 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1206 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1207 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1209 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1211 hbox1 = gtk_hbox_new (FALSE, 8);
1212 gtk_widget_show (hbox1);
1213 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1215 label_charset_desc = gtk_label_new
1216 (_("If `Automatic' is selected, the optimal encoding\n"
1217 "for the current locale will be used."));
1218 gtk_widget_show (label_charset_desc);
1219 gtk_box_pack_start (GTK_BOX (hbox1), label_charset_desc,
1221 gtk_label_set_justify(GTK_LABEL (label_charset_desc), GTK_JUSTIFY_LEFT);
1223 send.checkbtn_extsend = checkbtn_extsend;
1224 send.entry_extsend = entry_extsend;
1225 /* send.button_extsend = button_extsend; */
1227 send.checkbtn_savemsg = checkbtn_savemsg;
1228 send.checkbtn_queuemsg = checkbtn_queuemsg;
1229 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1231 send.optmenu_charset = optmenu;
1235 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1240 g_return_if_fail(param);
1241 g_return_if_fail(param->data);
1242 g_return_if_fail(param->widget);
1243 g_return_if_fail(*(param->widget));
1245 dict_name = gtkpspell_get_dictionary_menu_active_item
1246 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1247 str = *((gchar **) param->data);
1250 *((gchar **) param->data) = dict_name;
1253 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1256 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1258 GtkWidget *menuitem;
1262 g_return_if_fail(optmenu != NULL);
1263 g_return_if_fail(pparam->data != NULL);
1265 if (*(gchar **) pparam->data) {
1266 menu = gtk_option_menu_get_menu(optmenu);
1267 for (cur = GTK_MENU_SHELL(menu)->children;
1268 cur != NULL; cur = cur->next) {
1269 menuitem = GTK_WIDGET(cur->data);
1270 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem), "dict_name");
1271 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1272 gtk_option_menu_set_history(optmenu, n);
1279 gtk_option_menu_set_history(optmenu, 0);
1280 prefs_dictionary_set_data_from_optmenu(pparam);
1283 static void prefs_compose_checkbtn_enable_pspell_toggle_cb
1289 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1290 gtk_widget_set_sensitive(compose.entry_pspell_path, toggled);
1291 gtk_widget_set_sensitive(compose.optmenu_dictionary, toggled);
1292 gtk_widget_set_sensitive(compose.btn_pspell_path, toggled);
1295 static void prefs_compose_btn_pspell_path_clicked_cb(GtkWidget *widget,
1298 gchar *file_path, *tmp;
1299 GtkWidget *new_menu;
1301 file_path = filesel_select_file(_("Select dictionaries location"),
1302 prefs_common.pspell_path);
1303 if (file_path == NULL) {
1307 tmp=g_dirname(file_path);
1309 if (prefs_common.pspell_path)
1310 g_free(prefs_common.pspell_path);
1311 prefs_common.pspell_path = g_strdup_printf("%s%s",tmp,G_DIR_SEPARATOR_S);
1313 new_menu = gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path);
1314 gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_dictionary),
1317 gtk_entry_set_text(GTK_ENTRY(compose.entry_pspell_path), prefs_common.pspell_path);
1318 /* select first one */
1319 gtk_option_menu_set_history(GTK_OPTION_MENU(compose.optmenu_dictionary), 0);
1321 prefs_common.dictionary = gtkpspell_get_dictionary_menu_active_item(
1322 gtk_option_menu_get_menu(GTK_OPTION_MENU(compose.optmenu_dictionary)));
1330 static void prefs_compose_create(void)
1337 GtkWidget *btn_quotefmt;
1339 GtkWidget *frame_sig;
1340 GtkWidget *vbox_sig;
1341 GtkWidget *checkbtn_autosig;
1342 GtkWidget *label_sigsep;
1343 GtkWidget *entry_sigsep;
1345 GtkWidget *frame_editor;
1346 GtkWidget *hbox_editor;
1347 GtkWidget *checkbtn_autoextedit;
1349 GtkWidget *frame_autosel;
1350 GtkWidget *hbox_autosel;
1351 GtkWidget *vbox_autosel;
1352 GtkWidget *checkbtn_reply_account_autosel;
1353 GtkWidget *checkbtn_forward_account_autosel;
1354 GtkWidget *checkbtn_reedit_account_autosel;
1356 GtkWidget *vbox_linewrap;
1361 GtkWidget *label_linewrap;
1362 GtkObject *spinbtn_linewrap_adj;
1363 GtkWidget *spinbtn_linewrap;
1364 GtkWidget *checkbtn_wrapquote;
1365 GtkWidget *checkbtn_wrapatsend;
1367 GtkWidget *frame_reply;
1368 GtkWidget *checkbtn_quote;
1369 GtkWidget *checkbtn_forward_as_attachment;
1370 GtkWidget *checkbtn_smart_wrapping;
1371 GtkWidget *checkbtn_block_cursor;
1374 GtkWidget *frame_spell;
1375 GtkWidget *hbox_spell;
1376 GtkWidget *vbox_spell;
1377 GtkWidget *hbox_pspell_path;
1378 GtkWidget *checkbtn_enable_pspell;
1379 GtkWidget *label_pspell_path;
1380 GtkWidget *entry_pspell_path;
1381 GtkWidget *btn_pspell_path;
1382 GtkWidget *hbox_dictionary;
1383 GtkWidget *label_dictionary;
1384 GtkWidget *optmenu_dictionary;
1386 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1387 gtk_widget_show (vbox1);
1388 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1389 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1393 hbox1 = gtk_hbox_new (FALSE, 32);
1394 gtk_widget_show (hbox1);
1396 hbox2 = gtk_hbox_new (FALSE, 8);
1397 gtk_widget_show (hbox2);
1398 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1401 hbox1 = gtk_hbox_new (FALSE, 32);
1402 gtk_widget_show (hbox1);
1403 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1405 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1407 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1408 gtk_widget_show (vbox_sig);
1409 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1410 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1412 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1413 _("Insert signature automatically"));
1415 hbox1 = gtk_hbox_new (FALSE, 8);
1416 gtk_widget_show (hbox1);
1417 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1418 label_sigsep = gtk_label_new (_("Signature separator"));
1419 gtk_widget_show (label_sigsep);
1420 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1422 entry_sigsep = gtk_entry_new ();
1423 gtk_widget_show (entry_sigsep);
1424 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1426 gtk_widget_set_usize (entry_sigsep, 64, -1);
1428 /* Account autoselection */
1429 PACK_FRAME(vbox1, frame_autosel, _("Automatic Account Selection"));
1431 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1432 gtk_widget_show (hbox_autosel);
1433 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1434 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1436 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1437 _("when replying"));
1438 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1439 _("when forwarding"));
1440 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1441 _("when re-editing"));
1443 vbox2 = gtk_vbox_new (FALSE, 0);
1444 gtk_widget_show (vbox2);
1445 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1447 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1448 _("Automatically launch the external editor"));
1450 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1453 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1454 gtk_widget_show (vbox_linewrap);
1455 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1457 hbox3 = gtk_hbox_new (FALSE, 8);
1458 gtk_widget_show (hbox3);
1459 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1462 label_linewrap = gtk_label_new (_("Wrap messages at"));
1463 gtk_widget_show (label_linewrap);
1464 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1466 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1467 spinbtn_linewrap = gtk_spin_button_new
1468 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1469 gtk_widget_show (spinbtn_linewrap);
1470 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1471 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1472 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1474 label_linewrap = gtk_label_new (_("characters"));
1475 gtk_widget_show (label_linewrap);
1476 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1478 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1480 hbox4 = gtk_hbox_new (FALSE, 32);
1481 gtk_widget_show (hbox4);
1482 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1484 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1486 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1488 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1489 _("Forward as attachment"));
1491 PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping,
1492 _("Smart wrapping (EXPERIMENTAL)"));
1494 PACK_CHECK_BUTTON (vbox1, checkbtn_block_cursor,
1498 /* spell checker defaults */
1499 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1500 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1501 gtk_widget_show (vbox_spell);
1502 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1503 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1505 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_pspell,
1506 _("Enable spell checker (EXPERIMENTAL)"));
1508 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_pspell), "toggled",
1509 GTK_SIGNAL_FUNC(prefs_compose_checkbtn_enable_pspell_toggle_cb),
1512 hbox_pspell_path = gtk_hbox_new (FALSE, 8);
1513 gtk_widget_show(hbox_pspell_path);
1514 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_pspell_path, TRUE, TRUE, 0);
1516 label_pspell_path = gtk_label_new (_("Dictionaries path"));
1517 gtk_widget_show(label_pspell_path);
1518 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), label_pspell_path, FALSE, FALSE, 0);
1520 entry_pspell_path = gtk_entry_new();
1521 gtk_widget_show(entry_pspell_path);
1522 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), entry_pspell_path, FALSE, FALSE, 0);
1523 gtk_widget_set_usize(entry_pspell_path, 150, -1);
1524 gtk_widget_set_sensitive(entry_pspell_path, prefs_common.enable_pspell);
1526 btn_pspell_path = gtk_button_new_with_label(_("..."));
1527 gtk_widget_show(btn_pspell_path);
1528 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), btn_pspell_path, FALSE, FALSE, 0);
1529 gtk_widget_set_sensitive(btn_pspell_path, prefs_common.enable_pspell);
1531 gtk_signal_connect(GTK_OBJECT(btn_pspell_path), "clicked",
1532 GTK_SIGNAL_FUNC(prefs_compose_btn_pspell_path_clicked_cb),
1535 hbox_dictionary = gtk_hbox_new(FALSE, 8);
1536 gtk_widget_show(hbox_dictionary);
1537 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_dictionary, TRUE, TRUE, 0);
1539 label_dictionary = gtk_label_new(_("Dictionary"));
1540 gtk_widget_show(label_dictionary);
1541 gtk_box_pack_start(GTK_BOX(hbox_dictionary), label_dictionary, FALSE, FALSE, 0);
1543 optmenu_dictionary = gtk_option_menu_new();
1544 gtk_widget_show(optmenu_dictionary);
1545 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1546 gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path));
1547 gtk_box_pack_start(GTK_BOX(hbox_dictionary), optmenu_dictionary, FALSE, FALSE, 0);
1548 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_pspell);
1552 compose.checkbtn_quote = checkbtn_quote;
1553 compose.entry_quotemark = entry_quotemark;
1554 compose.text_quotefmt = text_quotefmt;
1556 compose.checkbtn_autosig = checkbtn_autosig;
1557 compose.entry_sigsep = entry_sigsep;
1559 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1561 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1562 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1563 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1565 compose.spinbtn_linewrap = spinbtn_linewrap;
1566 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1567 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1568 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1570 compose.checkbtn_forward_as_attachment =
1571 checkbtn_forward_as_attachment;
1572 compose.checkbtn_smart_wrapping =
1573 checkbtn_smart_wrapping;
1574 compose.checkbtn_block_cursor =
1575 checkbtn_block_cursor;
1578 compose.checkbtn_enable_pspell = checkbtn_enable_pspell;
1579 compose.entry_pspell_path = entry_pspell_path;
1580 compose.btn_pspell_path = btn_pspell_path;
1581 compose.optmenu_dictionary = optmenu_dictionary;
1585 static void prefs_quote_create(void)
1588 GtkWidget *frame_quote;
1589 GtkWidget *vbox_quote;
1592 GtkWidget *label_quotemark;
1593 GtkWidget *entry_quotemark;
1594 GtkWidget *scrolledwin_quotefmt;
1595 GtkWidget *text_quotefmt;
1597 GtkWidget *entry_fw_quotemark;
1598 GtkWidget *text_fw_quotefmt;
1600 GtkWidget *btn_quotedesc;
1602 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1603 gtk_widget_show (vbox1);
1604 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1605 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1609 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1611 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1612 gtk_widget_show (vbox_quote);
1613 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1614 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1616 hbox1 = gtk_hbox_new (FALSE, 32);
1617 gtk_widget_show (hbox1);
1618 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1620 hbox2 = gtk_hbox_new (FALSE, 8);
1621 gtk_widget_show (hbox2);
1622 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1624 label_quotemark = gtk_label_new (_("Quotation mark"));
1625 gtk_widget_show (label_quotemark);
1626 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1628 entry_quotemark = gtk_entry_new ();
1629 gtk_widget_show (entry_quotemark);
1630 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1631 gtk_widget_set_usize (entry_quotemark, 64, -1);
1633 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1634 gtk_widget_show (scrolledwin_quotefmt);
1635 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1636 gtk_scrolled_window_set_policy
1637 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1638 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1640 text_quotefmt = gtk_text_new (NULL, NULL);
1641 gtk_widget_show (text_quotefmt);
1642 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1643 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1644 gtk_widget_set_usize(text_quotefmt, -1, 60);
1648 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1650 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1651 gtk_widget_show (vbox_quote);
1652 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1653 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1655 hbox1 = gtk_hbox_new (FALSE, 32);
1656 gtk_widget_show (hbox1);
1657 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1659 hbox2 = gtk_hbox_new (FALSE, 8);
1660 gtk_widget_show (hbox2);
1661 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1663 label_quotemark = gtk_label_new (_("Quotation mark"));
1664 gtk_widget_show (label_quotemark);
1665 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1667 entry_fw_quotemark = gtk_entry_new ();
1668 gtk_widget_show (entry_fw_quotemark);
1669 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1671 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
1673 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1674 gtk_widget_show (scrolledwin_quotefmt);
1675 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1676 gtk_scrolled_window_set_policy
1677 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1678 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1680 text_fw_quotefmt = gtk_text_new (NULL, NULL);
1681 gtk_widget_show (text_fw_quotefmt);
1682 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1684 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
1685 gtk_widget_set_usize(text_fw_quotefmt, -1, 60);
1687 hbox1 = gtk_hbox_new (FALSE, 32);
1688 gtk_widget_show (hbox1);
1689 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1692 gtk_button_new_with_label (_(" Description of symbols "));
1693 gtk_widget_show (btn_quotedesc);
1694 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1695 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1696 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1698 quote.entry_quotemark = entry_quotemark;
1699 quote.text_quotefmt = text_quotefmt;
1700 quote.entry_fw_quotemark = entry_fw_quotemark;
1701 quote.text_fw_quotefmt = text_fw_quotefmt;
1704 static void prefs_display_create(void)
1707 GtkWidget *frame_font;
1709 GtkWidget *label_textfont;
1710 GtkWidget *entry_textfont;
1711 GtkWidget *button_textfont;
1712 GtkWidget *chkbtn_folder_unread;
1713 GtkWidget *chkbtn_transhdr;
1714 GtkWidget *frame_summary;
1716 GtkWidget *chkbtn_swapfrom;
1717 GtkWidget *chkbtn_hscrollbar;
1718 GtkWidget *chkbtn_useaddrbook;
1719 GtkWidget *chkbtn_expand_thread;
1720 GtkWidget *chkbtn_bold_unread;
1723 GtkWidget *label_datefmt;
1724 GtkWidget *button_datefmt;
1725 GtkWidget *entry_datefmt;
1726 GtkWidget *button_dispitem;
1727 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
1729 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1730 gtk_widget_show (vbox1);
1731 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1732 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1734 PACK_FRAME(vbox1, frame_font, _("Font"));
1736 table1 = gtk_table_new (4, 3, FALSE);
1738 gtk_widget_show (table1);
1739 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1740 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1741 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1742 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1744 label_textfont = gtk_label_new (_("Text"));
1745 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1746 gtk_widget_show (label_textfont);
1747 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1748 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1750 entry_textfont = gtk_entry_new ();
1751 gtk_widget_show (entry_textfont);
1752 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1753 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1755 button_textfont = gtk_button_new_with_label ("... ");
1757 gtk_widget_show (button_textfont);
1758 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1760 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1761 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1763 tmplabel = gtk_label_new (_("Small"));
1764 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1765 gtk_widget_show (tmplabel);
1766 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1767 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1769 tmpentry = gtk_entry_new ();
1770 gtk_widget_show (tmpentry);
1771 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1772 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1774 tmpbutton = gtk_button_new_with_label (" ... ");
1775 gtk_widget_show (tmpbutton);
1776 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1778 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1779 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1780 display.entry_smallfont = tmpentry;
1782 tmplabel = gtk_label_new (_("Normal"));
1783 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1784 gtk_widget_show (tmplabel);
1785 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1786 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1788 tmpentry = gtk_entry_new ();
1789 gtk_widget_show (tmpentry);
1790 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1791 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1793 tmpbutton = gtk_button_new_with_label (" ... ");
1794 gtk_widget_show (tmpbutton);
1795 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1797 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1798 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1799 display.entry_normalfont = tmpentry;
1801 tmplabel = gtk_label_new (_("Bold"));
1802 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1803 gtk_widget_show (tmplabel);
1804 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1805 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1807 tmpentry = gtk_entry_new ();
1808 gtk_widget_show (tmpentry);
1809 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1810 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1812 tmpbutton = gtk_button_new_with_label (" ... ");
1813 gtk_widget_show (tmpbutton);
1814 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1816 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1817 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1818 display.entry_boldfont = tmpentry;
1820 vbox2 = gtk_vbox_new (FALSE, 0);
1821 gtk_widget_show (vbox2);
1822 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1825 (vbox2, chkbtn_transhdr,
1826 _("Translate header name (such as `From:', `Subject:')"));
1828 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1829 _("Display unread number next to folder name"));
1831 /* ---- Summary ---- */
1833 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1835 vbox2 = gtk_vbox_new (FALSE, 0);
1836 gtk_widget_show (vbox2);
1837 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1838 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1841 (vbox2, chkbtn_swapfrom,
1842 _("Display recipient on `From' column if sender is yourself"));
1844 (vbox2, chkbtn_useaddrbook,
1845 _("Display sender using address book"));
1847 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1849 (vbox2, chkbtn_expand_thread, _("Expand threads"));
1851 (vbox2, chkbtn_bold_unread,
1852 _("Display unread messages with bold font"));
1854 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1856 hbox1 = gtk_hbox_new (FALSE, 8);
1857 gtk_widget_show (hbox1);
1858 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1860 label_datefmt = gtk_label_new (_("Date format"));
1861 gtk_widget_show (label_datefmt);
1862 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1864 entry_datefmt = gtk_entry_new ();
1865 gtk_widget_show (entry_datefmt);
1866 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1868 button_datefmt = gtk_button_new_with_label ("... ");
1870 gtk_widget_show (button_datefmt);
1871 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1872 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1873 GTK_SIGNAL_FUNC (date_format_create), NULL);
1875 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1877 hbox1 = gtk_hbox_new (FALSE, 8);
1878 gtk_widget_show (hbox1);
1879 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1881 button_dispitem = gtk_button_new_with_label
1882 (_(" Set display item of summary... "));
1883 gtk_widget_show (button_dispitem);
1884 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1885 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1886 GTK_SIGNAL_FUNC (prefs_summary_column_open),
1889 display.entry_textfont = entry_textfont;
1890 display.button_textfont = button_textfont;
1892 display.chkbtn_folder_unread = chkbtn_folder_unread;
1893 display.chkbtn_transhdr = chkbtn_transhdr;
1895 display.chkbtn_swapfrom = chkbtn_swapfrom;
1896 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1897 display.chkbtn_expand_thread = chkbtn_expand_thread;
1898 display.chkbtn_bold_unread = chkbtn_bold_unread;
1899 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1900 display.entry_datefmt = entry_datefmt;
1903 static void prefs_message_create(void)
1909 GtkWidget *chkbtn_enablecol;
1910 GtkWidget *button_edit_col;
1911 GtkWidget *chkbtn_mbalnum;
1912 GtkWidget *chkbtn_disphdrpane;
1913 GtkWidget *chkbtn_disphdr;
1914 GtkWidget *button_edit_disphdr;
1915 GtkWidget *hbox_linespc;
1916 GtkWidget *label_linespc;
1917 GtkObject *spinbtn_linespc_adj;
1918 GtkWidget *spinbtn_linespc;
1919 GtkWidget *chkbtn_headspc;
1921 GtkWidget *frame_scr;
1922 GtkWidget *vbox_scr;
1923 GtkWidget *chkbtn_smoothscroll;
1924 GtkWidget *hbox_scr;
1925 GtkWidget *label_scr;
1926 GtkObject *spinbtn_scrollstep_adj;
1927 GtkWidget *spinbtn_scrollstep;
1928 GtkWidget *chkbtn_halfpage;
1930 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1931 gtk_widget_show (vbox1);
1932 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1933 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1935 hbox1 = gtk_hbox_new (FALSE, 8);
1936 gtk_widget_show (hbox1);
1937 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1939 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1940 _("Enable coloration of message"));
1941 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1942 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1945 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1946 gtk_widget_show (button_edit_col);
1947 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1948 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1949 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1951 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1953 vbox2 = gtk_vbox_new (FALSE, 0);
1954 gtk_widget_show (vbox2);
1955 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1958 (vbox2, chkbtn_mbalnum,
1959 _("Display 2-byte alphabet and numeric with 1-byte character"));
1960 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1961 _("Display header pane above message view"));
1963 hbox1 = gtk_hbox_new (FALSE, 8);
1964 gtk_widget_show (hbox1);
1965 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1967 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1968 _("Display short headers on message view"));
1970 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1971 gtk_widget_show (button_edit_disphdr);
1972 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1974 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1975 GTK_SIGNAL_FUNC (prefs_display_header_open),
1978 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1980 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1982 hbox1 = gtk_hbox_new (FALSE, 32);
1983 gtk_widget_show (hbox1);
1984 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1986 hbox_linespc = gtk_hbox_new (FALSE, 8);
1987 gtk_widget_show (hbox1);
1988 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1990 label_linespc = gtk_label_new (_("Line space"));
1991 gtk_widget_show (label_linespc);
1992 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1995 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1996 spinbtn_linespc = gtk_spin_button_new
1997 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1998 gtk_widget_show (spinbtn_linespc);
1999 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
2001 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
2002 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
2004 label_linespc = gtk_label_new (_("pixel(s)"));
2005 gtk_widget_show (label_linespc);
2006 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2009 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
2011 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
2013 vbox_scr = gtk_vbox_new (FALSE, 0);
2014 gtk_widget_show (vbox_scr);
2015 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
2016 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
2018 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
2020 hbox1 = gtk_hbox_new (FALSE, 32);
2021 gtk_widget_show (hbox1);
2022 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
2024 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
2026 hbox_scr = gtk_hbox_new (FALSE, 8);
2027 gtk_widget_show (hbox_scr);
2028 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
2030 label_scr = gtk_label_new (_("Step"));
2031 gtk_widget_show (label_scr);
2032 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2034 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
2035 spinbtn_scrollstep = gtk_spin_button_new
2036 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
2037 gtk_widget_show (spinbtn_scrollstep);
2038 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
2040 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
2041 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
2044 label_scr = gtk_label_new (_("pixel(s)"));
2045 gtk_widget_show (label_scr);
2046 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2048 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
2050 message.chkbtn_enablecol = chkbtn_enablecol;
2051 message.button_edit_col = button_edit_col;
2052 message.chkbtn_mbalnum = chkbtn_mbalnum;
2053 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
2054 message.chkbtn_disphdr = chkbtn_disphdr;
2055 message.spinbtn_linespc = spinbtn_linespc;
2056 message.chkbtn_headspc = chkbtn_headspc;
2058 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
2059 message.spinbtn_scrollstep = spinbtn_scrollstep;
2060 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
2061 message.chkbtn_halfpage = chkbtn_halfpage;
2065 static void prefs_privacy_create(void)
2070 GtkWidget *checkbtn_default_encrypt;
2071 GtkWidget *checkbtn_ascii_armored;
2072 GtkWidget *checkbtn_default_sign;
2073 GtkWidget *checkbtn_auto_check_signatures;
2074 GtkWidget *checkbtn_gpg_signature_popup;
2075 GtkWidget *checkbtn_passphrase_grab;
2076 GtkWidget *checkbtn_gpg_warning;
2078 GtkWidget *menuitem;
2080 GtkWidget *optmenu_menu;
2082 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2083 gtk_widget_show (vbox1);
2084 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2085 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2087 vbox2 = gtk_vbox_new (FALSE, 0);
2088 gtk_widget_show (vbox2);
2089 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2091 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
2092 _("Encrypt message by default"));
2094 PACK_CHECK_BUTTON (vbox2, checkbtn_ascii_armored,
2095 _("Plain ASCII armored"));
2096 gtk_signal_connect(GTK_OBJECT(checkbtn_ascii_armored), "toggled",
2097 prefs_common_ascii_armored_warning, (gpointer)0);
2099 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
2100 _("Sign message by default"));
2102 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
2103 _("Automatically check signatures"));
2105 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
2106 _("Show signature check result in a popup window"));
2109 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
2110 _("Grab input while entering a passphrase"));
2114 (vbox2, checkbtn_gpg_warning,
2115 _("Display warning on startup if GnuPG doesn't work"));
2117 hbox1 = gtk_hbox_new (FALSE, 8);
2118 gtk_widget_show (hbox1);
2119 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2121 /* create default signkey box */
2122 label = gtk_label_new (_("Default Sign Key"));
2123 gtk_widget_show (label);
2124 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2125 optmenu = gtk_option_menu_new ();
2126 gtk_widget_show (optmenu);
2127 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
2128 optmenu_menu = gtk_menu_new ();
2130 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
2131 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
2132 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
2133 /* FIXME: disabled because not implemented */
2134 gtk_widget_set_sensitive(optmenu, FALSE);
2136 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
2137 privacy.checkbtn_ascii_armored = checkbtn_ascii_armored;
2138 privacy.checkbtn_default_sign = checkbtn_default_sign;
2139 privacy.checkbtn_auto_check_signatures
2140 = checkbtn_auto_check_signatures;
2141 privacy.checkbtn_gpg_signature_popup
2142 = checkbtn_gpg_signature_popup;
2143 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2144 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2145 privacy.optmenu_default_signkey = optmenu;
2149 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
2153 GtkWidget *menuitem;
2156 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2157 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2158 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2159 g_free(*((gchar **)pparam->data));
2160 *((gchar **)pparam->data) = g_strdup(charset);
2164 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
2168 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2170 GtkWidget *menuitem;
2174 g_return_if_fail(optmenu != NULL);
2175 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2177 menu = gtk_option_menu_get_menu(optmenu);
2178 for (cur = GTK_MENU_SHELL(menu)->children;
2179 cur != NULL; cur = cur->next) {
2180 menuitem = GTK_WIDGET(cur->data);
2181 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2182 if (!strcmp(charset, *((gchar **)pparam->data))) {
2183 gtk_option_menu_set_history(optmenu, n);
2189 gtk_option_menu_set_history(optmenu, 0);
2190 prefs_common_charset_set_data_from_optmenu(pparam);
2194 static void prefs_common_ascii_armored_warning(GtkWidget* widget,
2197 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))
2198 && gtk_notebook_get_current_page(GTK_NOTEBOOK(dialog.notebook))) {
2199 alertpanel_message(_("Warning - Privacy/Plain ASCII armored"),
2200 _("Its not recommend to use the old style plain ASCII\n"
2201 "armored mode for encypted messages. It doesn't comply\n"
2202 "with the RFC 3156 - MIME security with OpenPGP."));
2205 #endif /* USE_GPGME */
2207 static void prefs_interface_create(void)
2212 /* GtkWidget *checkbtn_emacs; */
2213 GtkWidget *checkbtn_openunread;
2214 GtkWidget *checkbtn_openinbox;
2215 GtkWidget *checkbtn_immedexec;
2218 GtkWidget *optmenu_recvdialog;
2220 GtkWidget *menuitem;
2222 GtkWidget *frame_addr;
2223 GtkWidget *vbox_addr;
2224 GtkWidget *checkbtn_addaddrbyclick;
2226 GtkWidget *frame_exit;
2227 GtkWidget *vbox_exit;
2228 GtkWidget *checkbtn_confonexit;
2229 GtkWidget *checkbtn_cleanonexit;
2230 GtkWidget *checkbtn_askonclean;
2231 GtkWidget *checkbtn_warnqueued;
2234 GtkWidget *optmenu_nextunreadmsgdialog;
2235 GtkWidget *optmenu_nextunreadmsgdialog_menu;
2236 GtkWidget *nextunreadmsgdialog_menuitem;
2238 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2239 gtk_widget_show (vbox1);
2240 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2241 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2243 vbox2 = gtk_vbox_new (FALSE, 0);
2244 gtk_widget_show (vbox2);
2245 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2247 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2248 _("Emulate the behavior of mouse operation of\n"
2249 "Emacs-based mailer"));
2250 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2251 GTK_JUSTIFY_LEFT); */
2254 (vbox2, checkbtn_openunread,
2255 _("Open first unread message when entering a folder"));
2258 (vbox2, checkbtn_openinbox,
2259 _("Go to inbox after receiving new mail"));
2261 vbox3 = gtk_vbox_new (FALSE, 0);
2262 gtk_widget_show (vbox3);
2263 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2266 (vbox3, checkbtn_immedexec,
2267 _("Execute immediately when moving or deleting messages"));
2269 hbox1 = gtk_hbox_new (FALSE, 0);
2270 gtk_widget_show (hbox1);
2271 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2273 label = gtk_label_new
2274 (_("(Messages will be marked until execution\n"
2275 " if this is turned off)"));
2276 gtk_widget_show (label);
2277 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2278 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2280 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2282 hbox1 = gtk_hbox_new (FALSE, 8);
2283 gtk_widget_show (hbox1);
2284 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2286 label = gtk_label_new (_("Show receive dialog"));
2287 gtk_widget_show (label);
2288 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2290 optmenu_recvdialog = gtk_option_menu_new ();
2291 gtk_widget_show (optmenu_recvdialog);
2292 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2295 menu = gtk_menu_new ();
2296 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2297 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2298 RECV_DIALOG_ACTIVE);
2299 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2301 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2303 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2305 vbox_addr = gtk_vbox_new (FALSE, 0);
2306 gtk_widget_show (vbox_addr);
2307 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2308 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2311 (vbox_addr, checkbtn_addaddrbyclick,
2312 _("Add address to destination when double-clicked"));
2314 /* Next Unread Message Dialog */
2315 hbox2 = gtk_hbox_new (FALSE, 8);
2316 gtk_widget_show (hbox2);
2317 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
2319 label = gtk_label_new (_("Show no-unread-message dialog"));
2320 gtk_widget_show (label);
2321 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
2323 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2324 gtk_widget_show (optmenu_nextunreadmsgdialog);
2325 gtk_box_pack_start (GTK_BOX (hbox2), optmenu_nextunreadmsgdialog,
2328 optmenu_nextunreadmsgdialog_menu = gtk_menu_new ();
2329 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2330 _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2331 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2332 _("Assume 'Yes'"), NEXTUNREADMSGDIALOG_ASSUME_YES);
2333 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2334 _("Assume 'No'"), NEXTUNREADMSGDIALOG_ASSUME_NO);
2336 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog),
2337 optmenu_nextunreadmsgdialog_menu);
2340 /* Receive Dialog */
2341 /* hbox = gtk_hbox_new (FALSE, 8);
2342 gtk_widget_show (hbox);
2343 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2345 label = gtk_label_new (_("Show receive Dialog"));
2346 gtk_widget_show (label);
2347 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2349 recvdialog_optmenu = gtk_option_menu_new ();
2350 gtk_widget_show (recvdialog_optmenu);
2351 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2353 recvdialog_optmenu_menu = gtk_menu_new ();
2355 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2356 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2357 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2359 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2362 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2364 vbox_exit = gtk_vbox_new (FALSE, 0);
2365 gtk_widget_show (vbox_exit);
2366 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2367 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2369 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2370 _("Confirm on exit"));
2372 hbox1 = gtk_hbox_new (FALSE, 32);
2373 gtk_widget_show (hbox1);
2374 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2376 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2377 _("Empty trash on exit"));
2378 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2379 _("Ask before emptying"));
2380 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2382 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2383 _("Warn if there are queued messages"));
2385 /* interface.checkbtn_emacs = checkbtn_emacs; */
2386 interface.checkbtn_openunread = checkbtn_openunread;
2387 interface.checkbtn_openinbox = checkbtn_openinbox;
2388 interface.checkbtn_immedexec = checkbtn_immedexec;
2389 interface.optmenu_recvdialog = optmenu_recvdialog;
2390 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2391 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2392 interface.checkbtn_confonexit = checkbtn_confonexit;
2393 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2394 interface.checkbtn_askonclean = checkbtn_askonclean;
2395 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2398 static void prefs_other_create(void)
2403 GtkWidget *uri_frame;
2404 GtkWidget *uri_label;
2405 GtkWidget *uri_combo;
2406 GtkWidget *uri_entry;
2408 GtkWidget *print_frame;
2409 GtkWidget *printcmd_label;
2410 GtkWidget *printcmd_entry;
2412 GtkWidget *exteditor_frame;
2413 GtkWidget *exteditor_label;
2414 GtkWidget *exteditor_combo;
2415 GtkWidget *exteditor_entry;
2417 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2418 gtk_widget_show (vbox1);
2419 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2420 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2422 PACK_FRAME(vbox1, uri_frame,
2423 _("External Web browser (%s will be replaced with URI)"));
2425 hbox1 = gtk_hbox_new (FALSE, 8);
2426 gtk_widget_show (hbox1);
2427 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2428 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2430 uri_label = gtk_label_new (_("Command"));
2431 gtk_widget_show(uri_label);
2432 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2434 uri_combo = gtk_combo_new ();
2435 gtk_widget_show (uri_combo);
2436 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2437 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2438 "netscape -remote 'openURL(%s,raise)'",
2440 "gnome-moz-remote --raise --newwin '%s'",
2441 "kterm -e w3m '%s'",
2442 "kterm -e lynx '%s'",
2445 uri_entry = GTK_COMBO (uri_combo)->entry;
2447 PACK_FRAME(vbox1, print_frame,
2448 _("Printing (%s will be replaced with file name)"));
2450 hbox1 = gtk_hbox_new (FALSE, 8);
2451 gtk_widget_show (hbox1);
2452 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2453 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2455 printcmd_label = gtk_label_new (_("Command"));
2456 gtk_widget_show (printcmd_label);
2457 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2459 printcmd_entry = gtk_entry_new ();
2460 gtk_widget_show (printcmd_entry);
2461 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2463 PACK_FRAME(vbox1, exteditor_frame,
2464 _("External editor (%s will be replaced with file name)"));
2466 hbox1 = gtk_hbox_new (FALSE, 8);
2467 gtk_widget_show (hbox1);
2468 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2469 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2471 exteditor_label = gtk_label_new (_("Command"));
2472 gtk_widget_show (exteditor_label);
2473 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2475 exteditor_combo = gtk_combo_new ();
2476 gtk_widget_show (exteditor_combo);
2477 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2478 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2481 "mgedit --no-fork %s",
2487 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2489 other.uri_combo = uri_combo;
2490 other.uri_entry = uri_entry;
2491 other.printcmd_entry = printcmd_entry;
2493 other.exteditor_combo = exteditor_combo;
2494 other.exteditor_entry = exteditor_entry;
2497 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2499 GtkWidget *datefmt_sample = NULL;
2502 g_return_if_fail(widget != NULL);
2503 g_return_if_fail(*widget != NULL);
2504 g_return_if_fail(display.entry_datefmt != NULL);
2506 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2507 (GTK_OBJECT(*widget), "datefmt_sample"));
2508 g_return_if_fail(datefmt_sample != NULL);
2510 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2511 g_free(prefs_common.date_format);
2512 prefs_common.date_format = text;
2513 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2515 gtk_widget_destroy(*widget);
2519 static void date_format_cancel_btn_clicked(GtkButton *button,
2522 g_return_if_fail(widget != NULL);
2523 g_return_if_fail(*widget != NULL);
2525 gtk_widget_destroy(*widget);
2529 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2532 if (event && event->keyval == GDK_Escape)
2533 date_format_cancel_btn_clicked(NULL, widget);
2536 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2537 GdkEventAny *event, GtkWidget **widget)
2539 g_return_val_if_fail(widget != NULL, FALSE);
2540 g_return_val_if_fail(*widget != NULL, FALSE);
2546 static void date_format_entry_on_change(GtkEditable *editable,
2550 struct tm *cal_time;
2554 cur_time = time(NULL);
2555 cal_time = localtime(&cur_time);
2557 text = gtk_editable_get_chars(editable, 0, -1);
2559 strftime(buffer, sizeof buffer, text, cal_time);
2560 gtk_label_set_text(example, buffer);
2563 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2564 gint column, GdkEventButton *event,
2565 GtkWidget *date_format)
2571 GtkWidget *datefmt_sample;
2573 /* only on double click */
2574 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2577 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2578 (GTK_OBJECT(date_format), "datefmt_sample"));
2580 g_return_if_fail(date_format_list != NULL);
2581 g_return_if_fail(date_format != NULL);
2582 g_return_if_fail(datefmt_sample != NULL);
2584 /* get format from clist */
2585 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2587 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2588 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2590 /* insert the format into the text entry */
2591 new_format = g_malloc(strlen(old_format) + 3);
2593 strncpy(new_format, old_format, cur_pos);
2594 new_format[cur_pos] = '\0';
2595 strcat(new_format, format);
2596 strcat(new_format, &old_format[cur_pos]);
2598 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2599 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2604 static GtkWidget *date_format_create(GtkButton *button, void *data)
2606 static GtkWidget *datefmt_win = NULL;
2608 GtkWidget *scrolledwindow1;
2609 GtkWidget *datefmt_clist;
2614 GtkWidget *confirm_area;
2616 GtkWidget *cancel_btn;
2617 GtkWidget *datefmt_entry;
2623 { "%a", _("the full abbreviated weekday name") },
2624 { "%A", _("the full weekday name") },
2625 { "%b", _("the abbreviated month name") },
2626 { "%B", _("the full month name") },
2627 { "%c", _("the preferred date and time for the current locale") },
2628 { "%C", _("the century number (year/100)") },
2629 { "%d", _("the day of the month as a decimal number") },
2630 { "%H", _("the hour as a decimal number using a 24-hour clock") },
2631 { "%I", _("the hour as a decimal number using a 12-hour clock") },
2632 { "%j", _("the day of the year as a decimal number") },
2633 { "%m", _("the month as a decimal number") },
2634 { "%M", _("the minute as a decimal number") },
2635 { "%p", _("either AM or PM") },
2636 { "%S", _("the second as a decimal number") },
2637 { "%w", _("the day of the week as a decimal number") },
2638 { "%x", _("the preferred date for the current locale") },
2639 { "%y", _("the last two digits of a year") },
2640 { "%Y", _("the year as a decimal number") },
2641 { "%Z", _("the time zone or name or abbreviation") }
2646 const gint TIME_FORMAT_ELEMS =
2647 sizeof time_format / sizeof time_format[0];
2649 if (datefmt_win) return datefmt_win;
2651 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2652 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2653 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2654 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2655 gtk_widget_set_usize(datefmt_win, 440, 280);
2657 vbox1 = gtk_vbox_new(FALSE, 10);
2658 gtk_widget_show(vbox1);
2659 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2661 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2662 gtk_scrolled_window_set_policy
2663 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2664 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2665 gtk_widget_show(scrolledwindow1);
2666 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2668 titles[0] = _("Specifier");
2669 titles[1] = _("Description");
2670 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2671 gtk_widget_show(datefmt_clist);
2672 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2673 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2675 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2676 GTK_SELECTION_BROWSE);
2678 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2680 /* phoney casting necessary because of gtk... */
2681 text[0] = (gchar *)time_format[i].fmt;
2682 text[1] = (gchar *)time_format[i].txt;
2683 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2686 table = gtk_table_new(2, 2, FALSE);
2687 gtk_widget_show(table);
2688 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2689 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2690 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2692 label1 = gtk_label_new(_("Date format"));
2693 gtk_widget_show(label1);
2694 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2696 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2697 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2699 datefmt_entry = gtk_entry_new_with_max_length(256);
2700 gtk_widget_show(datefmt_entry);
2701 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2702 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2704 /* we need the "sample" entry box; add it as data so callbacks can
2705 * get the entry box */
2706 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2709 label2 = gtk_label_new(_("Example"));
2710 gtk_widget_show(label2);
2711 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2713 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2714 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2716 label3 = gtk_label_new("");
2717 gtk_widget_show(label3);
2718 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2719 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2720 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2721 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2723 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2724 &cancel_btn, _("Cancel"), NULL, NULL);
2725 gtk_widget_grab_default(ok_btn);
2726 gtk_widget_show(confirm_area);
2728 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2730 /* set the current format */
2731 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2732 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2735 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2736 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2738 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2739 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2741 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2742 GTK_SIGNAL_FUNC(date_format_key_pressed),
2744 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2745 GTK_SIGNAL_FUNC(date_format_on_delete),
2747 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2748 GTK_SIGNAL_FUNC(date_format_entry_on_change),
2751 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2752 GTK_SIGNAL_FUNC(date_format_select_row),
2755 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2756 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2758 gtk_widget_show(datefmt_win);
2759 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2761 gtk_widget_grab_focus(ok_btn);
2766 void prefs_quote_colors_dialog(void)
2768 if (!quote_color_win)
2769 prefs_quote_colors_dialog_create();
2770 gtk_widget_show(quote_color_win);
2771 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2774 gtk_widget_hide(quote_color_win);
2776 textview_update_message_colors();
2777 main_window_reflect_prefs_all();
2780 static void prefs_quote_colors_dialog_create(void)
2785 GtkWidget *quotelevel1_label;
2786 GtkWidget *quotelevel2_label;
2787 GtkWidget *quotelevel3_label;
2788 GtkWidget *uri_label;
2789 GtkWidget *tgt_folder_label;
2792 //GtkWidget *cancel_btn;
2793 GtkWidget *recycle_colors_btn;
2794 GtkWidget *frame_colors;
2796 window = gtk_window_new(GTK_WINDOW_DIALOG);
2797 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2798 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2799 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2800 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2801 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2803 vbox = gtk_vbox_new (FALSE, VSPACING);
2804 gtk_container_add (GTK_CONTAINER (window), vbox);
2805 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2806 PACK_FRAME(vbox, frame_colors, _("Colors"));
2808 table = gtk_table_new (4, 2, FALSE);
2809 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2810 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2811 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2812 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2815 color_buttons.quote_level1_btn = gtk_button_new();
2816 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2817 0, 1, 0, 1, 0, 0, 0, 0);
2818 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2819 gtk_container_set_border_width
2820 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2822 color_buttons.quote_level2_btn = gtk_button_new();
2823 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2824 0, 1, 1, 2, 0, 0, 0, 0);
2825 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2826 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2828 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2829 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2830 0, 1, 2, 3, 0, 0, 0, 0);
2831 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2832 gtk_container_set_border_width
2833 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2835 color_buttons.uri_btn = gtk_button_new_with_label ("");
2836 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2837 0, 1, 3, 4, 0, 0, 0, 0);
2838 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2839 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2841 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2842 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2843 0, 1, 4, 5, 0, 0, 0, 0);
2844 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
2845 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2847 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2848 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2849 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2850 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2851 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2853 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2854 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2855 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2856 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2857 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2859 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2860 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2861 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2862 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2863 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2865 uri_label = gtk_label_new (_("URI link"));
2866 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2867 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2868 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2869 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2871 tgt_folder_label = gtk_label_new (_("Target folder"));
2872 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
2873 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2874 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
2875 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
2877 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2878 _("Recycle quote colors"));
2880 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2881 NULL, NULL, NULL, NULL);
2882 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2884 gtk_widget_grab_default(ok_btn);
2885 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2886 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2887 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2888 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2889 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2890 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2891 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2892 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2895 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2896 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2897 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2898 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2899 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2900 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2901 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2902 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2903 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
2904 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
2905 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2906 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2907 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2908 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2910 /* show message button colors and recycle options */
2911 set_button_bg_color(color_buttons.quote_level1_btn,
2912 prefs_common.quote_level1_col);
2913 set_button_bg_color(color_buttons.quote_level2_btn,
2914 prefs_common.quote_level2_col);
2915 set_button_bg_color(color_buttons.quote_level3_btn,
2916 prefs_common.quote_level3_col);
2917 set_button_bg_color(color_buttons.uri_btn,
2918 prefs_common.uri_col);
2919 set_button_bg_color(color_buttons.tgt_folder_btn,
2920 prefs_common.tgt_folder_col);
2921 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2922 prefs_common.recycle_quote_colors);
2924 gtk_widget_show_all(vbox);
2925 quote_color_win = window;
2928 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2929 GdkEventKey *event, gpointer data)
2931 if (event && event->keyval == GDK_Escape)
2935 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2937 gchar *type = (gchar *)data;
2938 gchar *title = NULL;
2939 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2941 GtkColorSelectionDialog *dialog;
2943 if(g_strcasecmp(type, "LEVEL1") == 0) {
2944 title = _("Pick color for quotation level 1");
2945 rgbvalue = prefs_common.quote_level1_col;
2946 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2947 title = _("Pick color for quotation level 2");
2948 rgbvalue = prefs_common.quote_level2_col;
2949 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2950 title = _("Pick color for quotation level 3");
2951 rgbvalue = prefs_common.quote_level3_col;
2952 } else if(g_strcasecmp(type, "URI") == 0) {
2953 title = _("Pick color for URI");
2954 rgbvalue = prefs_common.uri_col;
2955 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
2956 title = _("Pick color for target folder");
2957 rgbvalue = prefs_common.tgt_folder_col;
2958 } else { /* Should never be called */
2959 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2963 color_dialog = gtk_color_selection_dialog_new(title);
2964 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2965 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2966 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2967 manage_window_set_transient(GTK_WINDOW(color_dialog));
2969 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2970 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2971 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2972 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2973 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2974 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2977 /* preselect the previous color in the color selection dialog */
2978 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2979 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2980 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2981 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2982 gtk_color_selection_set_color
2983 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2985 gtk_widget_show(color_dialog);
2988 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2990 GtkColorSelection *colorsel = (GtkColorSelection *)
2991 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2993 gint red, green, blue, rgbvalue;
2994 gchar *type = (gchar *)data;
2996 gtk_color_selection_get_color(colorsel, color);
2998 red = (gint) (color[0] * 255.0);
2999 green = (gint) (color[1] * 255.0);
3000 blue = (gint) (color[2] * 255.0);
3001 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
3004 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
3005 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
3006 fprintf(stderr, "Color is %x\n", rgbvalue);
3009 if (g_strcasecmp(type, "LEVEL1") == 0) {
3010 prefs_common.quote_level1_col = rgbvalue;
3011 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
3012 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
3013 prefs_common.quote_level2_col = rgbvalue;
3014 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
3015 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
3016 prefs_common.quote_level3_col = rgbvalue;
3017 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
3018 } else if (g_strcasecmp(type, "URI") == 0) {
3019 prefs_common.uri_col = rgbvalue;
3020 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
3021 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
3022 prefs_common.tgt_folder_col = rgbvalue;
3023 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
3024 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
3026 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
3028 gtk_widget_destroy(color_dialog);
3031 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
3033 gtk_widget_destroy(color_dialog);
3036 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
3040 gtk_widget_destroy(color_dialog);
3043 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
3048 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
3049 newstyle = gtk_style_copy(gtk_widget_get_default_style());
3050 newstyle->bg[GTK_STATE_NORMAL] = color;
3051 newstyle->bg[GTK_STATE_PRELIGHT] = color;
3052 newstyle->bg[GTK_STATE_ACTIVE] = color;
3054 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
3057 static void prefs_enable_message_color_toggled(void)
3061 is_active = gtk_toggle_button_get_active
3062 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
3063 gtk_widget_set_sensitive(message.button_edit_col, is_active);
3064 prefs_common.enable_color = is_active;
3067 static void prefs_recycle_colors_toggled(GtkWidget *widget)
3071 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
3072 prefs_common.recycle_quote_colors = is_active;
3075 void prefs_quote_description(void)
3077 if (!quote_desc_win)
3078 prefs_quote_description_create();
3080 manage_window_set_transient(GTK_WINDOW(quote_desc_win));
3081 gtk_widget_show(quote_desc_win);
3083 gtk_widget_hide(quote_desc_win);
3086 static void prefs_quote_description_create(void)
3094 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
3095 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
3096 _("Description of symbols"));
3097 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
3098 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
3099 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
3100 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
3102 vbox = gtk_vbox_new(FALSE, 8);
3103 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
3105 hbox = gtk_hbox_new(FALSE, 4);
3106 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
3108 label = gtk_label_new
3112 "%N\n" /* full name of sender */
3113 "%F\n" /* first name of sender */
3114 "%I\n" /* initial of sender */
3115 "%s\n" /* subject */
3118 "%n\n" /* newsgroups */
3119 "%i\n" /* message id */
3120 "%r\n" /* references */
3123 "?x(expr)\n" /* condition */
3125 "%M\n" /* message body */
3126 "%Q\n" /* quoted message body */
3127 "%m\n" /* message body without signature */
3128 "%q\n" /* quoted message body without signature */
3129 "%%"); /* literal percent */
3131 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
3132 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
3134 label = gtk_label_new
3135 (_("DESCRIPTION\n\n"
3138 "Full Name of Sender\n"
3139 "First Name of Sender\n"
3140 "Initial of Sender\n"
3148 "Display the information\n"
3149 "If the information x is set, displays expr\n"
3152 "Quoted message body\n"
3153 "Message body without signature\n"
3154 "Quoted message body without signature\n"
3157 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
3158 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
3160 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3161 NULL, NULL, NULL, NULL);
3162 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3164 gtk_widget_grab_default(ok_btn);
3165 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3166 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3168 (GTK_OBJECT(quote_desc_win), "key_press_event",
3169 GTK_SIGNAL_FUNC(prefs_quote_description_key_pressed),
3171 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
3172 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3174 gtk_widget_show_all(vbox);
3177 static void prefs_quote_description_key_pressed(GtkWidget *widget,
3181 if (event && event->keyval == GDK_Escape)
3185 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3189 g_return_if_fail(entry != NULL);
3191 if (!font_sel_win) {
3192 font_sel_win = gtk_font_selection_dialog_new
3193 (_("Font selection"));
3194 gtk_window_position(GTK_WINDOW(font_sel_win),
3195 GTK_WIN_POS_CENTER);
3196 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3197 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3200 (GTK_OBJECT(font_sel_win), "key_press_event",
3201 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3203 gtk_signal_connect_object
3204 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3206 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3207 GTK_OBJECT(font_sel_win));
3210 if(font_sel_conn_id) {
3211 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3213 font_sel_conn_id = gtk_signal_connect
3214 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3216 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3218 printf("%i\n", font_sel_conn_id);
3220 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3221 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3223 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3224 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3225 gtk_widget_grab_focus
3226 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3227 gtk_widget_show(font_sel_win);
3230 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3234 if (event && event->keyval == GDK_Escape)
3235 gtk_widget_hide(font_sel_win);
3238 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3242 fontname = gtk_font_selection_dialog_get_font_name
3243 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3246 gtk_entry_set_text(entry, fontname);
3251 gtk_widget_hide(font_sel_win);
3254 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3257 GtkWidget *menuitem;
3260 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3261 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3262 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3263 g_free(*((gchar **)pparam->data));
3264 *((gchar **)pparam->data) = g_strdup(charset);
3267 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3270 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3272 GtkWidget *menuitem;
3276 g_return_if_fail(optmenu != NULL);
3277 g_return_if_fail(*((gchar **)pparam->data) != NULL);
3279 menu = gtk_option_menu_get_menu(optmenu);
3280 for (cur = GTK_MENU_SHELL(menu)->children;
3281 cur != NULL; cur = cur->next) {
3282 menuitem = GTK_WIDGET(cur->data);
3283 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3284 if (!strcmp(charset, *((gchar **)pparam->data))) {
3285 gtk_option_menu_set_history(optmenu, n);
3291 gtk_option_menu_set_history(optmenu, 0);
3292 prefs_common_charset_set_data_from_optmenu(pparam);
3295 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3298 GtkWidget *menuitem;
3300 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3301 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3302 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3303 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3306 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3308 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3309 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3311 GtkWidget *menuitem;
3314 case RECV_DIALOG_ALWAYS:
3315 gtk_option_menu_set_history(optmenu, 0);
3317 case RECV_DIALOG_ACTIVE:
3318 gtk_option_menu_set_history(optmenu, 1);
3320 case RECV_DIALOG_NEVER:
3321 gtk_option_menu_set_history(optmenu, 2);
3326 menu = gtk_option_menu_get_menu(optmenu);
3327 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3328 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3331 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3334 prefs_common_cancel();
3338 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3341 if (event && event->keyval == GDK_Escape)
3342 prefs_common_cancel();
3345 static void prefs_common_ok(void)
3347 prefs_common_apply();
3348 gtk_widget_hide(dialog.window);
3349 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
3350 gtk_widget_hide(quote_desc_win);
3355 static void prefs_common_apply(void)
3357 prefs_set_data_from_dialog(param);
3358 main_window_reflect_prefs_all();
3359 prefs_common_save_config();
3361 inc_autocheck_timer_remove();
3362 inc_autocheck_timer_set();
3365 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3368 GtkWidget *menuitem;
3370 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3371 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3372 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3373 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3376 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3378 NextUnreadMsgDialogShow dialog_show;
3379 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3381 GtkWidget *menuitem;
3383 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3385 switch (dialog_show) {
3386 case NEXTUNREADMSGDIALOG_ALWAYS:
3387 gtk_option_menu_set_history(optmenu, 0);
3389 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3390 gtk_option_menu_set_history(optmenu, 1);
3392 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3393 gtk_option_menu_set_history(optmenu, 2);
3398 menu = gtk_option_menu_get_menu(optmenu);
3399 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3400 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3403 static void prefs_common_cancel(void)
3405 gtk_widget_hide(dialog.window);
3410 static struct _ComposePrefs
3414 GtkWidget *close_btn;
3417 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
3418 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
3419 static void compose_prefs_close(GtkWidget *widget);
3420 static void compose_prefs_fmt_create(void);
3422 static void compose_prefs_close(GtkWidget *widget)
3424 gtk_widget_hide(composeprefs.window);
3427 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3429 gtk_widget_hide(composeprefs.window);
3434 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3436 if (event && event->keyval == GDK_Escape) {
3437 gtk_widget_hide(composeprefs.window);
3441 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3444 GtkWidget *menuitem;
3446 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3447 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3448 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3449 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3452 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3454 RecvDialogShow dialog_show;
3455 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3457 GtkWidget *menuitem;
3459 dialog_show = *((RecvDialogShow *)pparam->data);
3461 switch (dialog_show) {
3462 case RECVDIALOG_ALWAYS:
3463 gtk_option_menu_set_history(optmenu, 0);
3465 case RECVDIALOG_WINDOW_ACTIVE:
3466 gtk_option_menu_set_history(optmenu, 1);
3468 case RECVDIALOG_NEVER:
3469 gtk_option_menu_set_history(optmenu, 2);
3474 menu = gtk_option_menu_get_menu(optmenu);
3475 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3476 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));