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,
355 /* Account autoselection */
356 {"reply_account_autoselect", "TRUE",
357 &prefs_common.reply_account_autosel, P_BOOL,
358 &compose.checkbtn_reply_account_autosel,
359 prefs_set_data_from_toggle, prefs_set_toggle},
360 {"forward_account_autoselect", "TRUE",
361 &prefs_common.forward_account_autosel, P_BOOL,
362 &compose.checkbtn_forward_account_autosel,
363 prefs_set_data_from_toggle, prefs_set_toggle},
364 {"reedit_account_autoselect", "TRUE",
365 &prefs_common.reedit_account_autosel, P_BOOL,
366 &compose.checkbtn_reedit_account_autosel,
367 prefs_set_data_from_toggle, prefs_set_toggle},
369 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
373 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
374 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
375 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
376 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
377 prefs_set_data_from_text, prefs_set_text},
379 {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
380 "e.entry_fw_quotemark,
381 prefs_set_data_from_entry, prefs_set_entry},
383 "\\n\\nBegin forwarded message:\\n\\n"
384 "?d(Date: %d\\n)?f(From: %f\\n)?t(To: %t\\n)?c(Cc: %c\\n)"
385 "?n(Newsgroups: %n\\n)?s(Subject: %s\\n)\\n\\n%M",
386 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
387 prefs_set_data_from_text, prefs_set_text},
390 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
392 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
393 &prefs_common.textfont, P_STRING,
394 &display.entry_textfont,
395 prefs_set_data_from_entry, prefs_set_entry},
396 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
397 &prefs_common.smallfont, P_STRING,
398 &display.entry_smallfont,
399 prefs_set_data_from_entry, prefs_set_entry},
400 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
401 &prefs_common.boldfont, P_STRING,
402 &display.entry_boldfont,
403 prefs_set_data_from_entry, prefs_set_entry},
404 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
405 &prefs_common.normalfont, P_STRING,
406 &display.entry_normalfont,
407 prefs_set_data_from_entry, prefs_set_entry},
410 {"display_folder_unread_num", "TRUE",
411 &prefs_common.display_folder_unread, P_BOOL,
412 &display.chkbtn_folder_unread,
413 prefs_set_data_from_toggle, prefs_set_toggle},
415 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
416 &display.chkbtn_transhdr,
417 prefs_set_data_from_toggle, prefs_set_toggle},
419 /* Display: Summary View */
420 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
421 &display.chkbtn_swapfrom,
422 prefs_set_data_from_toggle, prefs_set_toggle},
423 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
424 &display.chkbtn_hscrollbar,
425 prefs_set_data_from_toggle, prefs_set_toggle},
426 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
427 &display.chkbtn_useaddrbook,
428 prefs_set_data_from_toggle, prefs_set_toggle},
429 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
430 P_STRING, &display.entry_datefmt,
431 prefs_set_data_from_entry, prefs_set_entry},
432 {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
433 &display.chkbtn_expand_thread,
434 prefs_set_data_from_toggle, prefs_set_toggle},
435 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
436 &display.chkbtn_bold_unread,
437 prefs_set_data_from_toggle, prefs_set_toggle},
439 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
442 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
444 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
447 {"summary_col_show_mark", "TRUE",
448 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
449 {"summary_col_show_unread", "TRUE",
450 &prefs_common.summary_col_visible[S_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
451 {"summary_col_show_mime", "TRUE",
452 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
453 {"summary_col_show_subject", "TRUE",
454 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
455 {"summary_col_show_from", "TRUE",
456 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
457 {"summary_col_show_date", "TRUE",
458 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
459 {"summary_col_show_size", "TRUE",
460 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
461 {"summary_col_show_number", "FALSE",
462 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
463 {"summary_col_show_score", "FALSE",
464 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
465 {"summary_col_show_locked", "FALSE",
466 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
468 {"summary_col_pos_mark", "0",
469 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
470 {"summary_col_pos_unread", "1",
471 &prefs_common.summary_col_pos[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
472 {"summary_col_pos_mime", "2",
473 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
474 {"summary_col_pos_subject", "3",
475 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
476 {"summary_col_pos_from", "4",
477 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
478 {"summary_col_pos_date", "5",
479 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
480 {"summary_col_pos_size", "6",
481 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
482 {"summary_col_pos_number", "7",
483 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
484 {"summary_col_pos_score", "8",
485 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
486 {"summary_col_pos_locked", "9",
487 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
489 {"summary_col_size_mark", "10",
490 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
491 {"summary_col_size_unread", "13",
492 &prefs_common.summary_col_size[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
493 {"summary_col_size_mime", "10",
494 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
495 {"summary_col_size_subject", "200",
496 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
497 {"summary_col_size_from", "120",
498 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
499 {"summary_col_size_date", "118",
500 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
501 {"summary_col_size_size", "45",
502 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
503 {"summary_col_size_number", "40",
504 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
505 {"summary_col_size_score", "40",
506 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
507 {"summary_col_size_locked", "13",
508 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
511 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
513 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
515 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
517 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
519 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
521 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
524 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
526 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
529 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
531 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
533 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
535 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
537 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
539 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
541 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
543 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
545 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
547 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
549 {"compose_width", "600", &prefs_common.compose_width, P_INT,
551 {"compose_height", "560", &prefs_common.compose_height, P_INT,
555 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
556 &message.chkbtn_enablecol,
557 prefs_set_data_from_toggle, prefs_set_toggle},
559 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
561 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
563 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
565 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
567 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
569 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
571 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
572 P_BOOL, NULL, NULL, NULL},
574 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
575 &message.chkbtn_mbalnum,
576 prefs_set_data_from_toggle, prefs_set_toggle},
577 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
578 P_BOOL, &message.chkbtn_disphdrpane,
579 prefs_set_data_from_toggle, prefs_set_toggle},
580 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
581 &message.chkbtn_disphdr,
582 prefs_set_data_from_toggle, prefs_set_toggle},
583 {"line_space", "2", &prefs_common.line_space, P_INT,
584 &message.spinbtn_linespc,
585 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
586 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
587 &message.chkbtn_headspc,
588 prefs_set_data_from_toggle, prefs_set_toggle},
590 {"enable_smooth_scroll", "FALSE",
591 &prefs_common.enable_smooth_scroll, P_BOOL,
592 &message.chkbtn_smoothscroll,
593 prefs_set_data_from_toggle, prefs_set_toggle},
594 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
595 &message.spinbtn_scrollstep,
596 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
597 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
598 &message.chkbtn_halfpage,
599 prefs_set_data_from_toggle, prefs_set_toggle},
601 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
605 {"mime_image_viewer", "display '%s'",
606 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
607 {"mime_audio_player", "play '%s'",
608 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
609 {"mime_open_command", "gedit '%s'",
610 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
614 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
615 &privacy.checkbtn_default_encrypt,
616 prefs_set_data_from_toggle, prefs_set_toggle},
617 {"ascii_armored", "FALSE", &prefs_common.ascii_armored, P_BOOL,
618 &privacy.checkbtn_ascii_armored,
619 prefs_set_data_from_toggle, prefs_set_toggle},
620 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
621 &privacy.checkbtn_default_sign,
622 prefs_set_data_from_toggle, prefs_set_toggle},
623 {"auto_check_signatures", "TRUE",
624 &prefs_common.auto_check_signatures, P_BOOL,
625 &privacy.checkbtn_auto_check_signatures,
626 prefs_set_data_from_toggle, prefs_set_toggle},
627 {"gpg_signature_popup", "FALSE",
628 &prefs_common.gpg_signature_popup, P_BOOL,
629 &privacy.checkbtn_gpg_signature_popup,
630 prefs_set_data_from_toggle, prefs_set_toggle},
632 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
633 &privacy.checkbtn_passphrase_grab,
634 prefs_set_data_from_toggle, prefs_set_toggle},
635 #endif /* __MINGW32__ */
636 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
637 &privacy.checkbtn_gpg_warning,
638 prefs_set_data_from_toggle, prefs_set_toggle},
639 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
640 &privacy.optmenu_default_signkey,
641 prefs_common_default_signkey_set_data_from_optmenu,
642 prefs_common_default_signkey_set_optmenu},
643 #endif /* USE_GPGME */
646 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
648 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
651 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
652 NULL, NULL, NULL}, */
654 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
655 P_BOOL, &interface.checkbtn_openunread,
656 prefs_set_data_from_toggle, prefs_set_toggle},
657 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
658 P_BOOL, &interface.checkbtn_openinbox,
659 prefs_set_data_from_toggle, prefs_set_toggle},
660 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
661 &interface.checkbtn_immedexec,
662 prefs_set_data_from_toggle, prefs_set_toggle},
663 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
664 &interface.optmenu_recvdialog,
665 prefs_common_recv_dialog_set_data_from_optmenu,
666 prefs_common_recv_dialog_set_optmenu},
667 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
668 &interface.optmenu_nextunreadmsgdialog,
669 prefs_nextunreadmsgdialog_set_data_from_optmenu,
670 prefs_nextunreadmsgdialog_set_optmenu},
672 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
673 P_BOOL, &interface.checkbtn_addaddrbyclick,
674 prefs_set_data_from_toggle, prefs_set_toggle},
675 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
676 &interface.checkbtn_confonexit,
677 prefs_set_data_from_toggle, prefs_set_toggle},
678 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
679 &send.checkbtn_returnreceipt,
680 prefs_set_data_from_toggle, prefs_set_toggle},
681 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
682 &interface.checkbtn_cleanonexit,
683 prefs_set_data_from_toggle, prefs_set_toggle},
684 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
685 &interface.checkbtn_askonclean,
686 prefs_set_data_from_toggle, prefs_set_toggle},
687 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
688 P_BOOL, &interface.checkbtn_warnqueued,
689 prefs_set_data_from_toggle, prefs_set_toggle},
692 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
693 &prefs_common.uri_cmd, P_STRING,
694 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
695 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
696 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
697 {"ext_editor_command", "gedit %s",
698 &prefs_common.ext_editor_cmd, P_STRING,
699 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
701 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
703 {"important_score", "1", &prefs_common.important_score, P_INT,
706 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
709 /* widget creating functions */
710 static void prefs_common_create (void);
711 static void prefs_receive_create (void);
712 static void prefs_send_create (void);
713 static void prefs_compose_create (void);
714 static void prefs_quote_create (void);
715 static void prefs_display_create (void);
716 static void prefs_message_create (void);
718 static void prefs_privacy_create (void);
720 static void prefs_interface_create (void);
721 static void prefs_other_create (void);
723 static void date_format_ok_btn_clicked (GtkButton *button,
725 static void date_format_cancel_btn_clicked (GtkButton *button,
727 static void date_format_key_pressed (GtkWidget *keywidget,
730 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
733 static void date_format_entry_on_change (GtkEditable *editable,
735 static void date_format_select_row (GtkWidget *date_format_list,
738 GdkEventButton *event,
739 GtkWidget *date_format);
740 static GtkWidget *date_format_create (GtkButton *button,
743 static void prefs_quote_description_create (void);
744 static void prefs_quote_description_key_pressed (GtkWidget *widget,
748 static void prefs_quote_colors_dialog (void);
749 static void prefs_quote_colors_dialog_create (void);
750 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
753 static void quote_color_set_dialog (GtkWidget *widget,
755 static void quote_colors_set_dialog_ok (GtkWidget *widget,
757 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
759 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
762 static void set_button_bg_color (GtkWidget *widget,
764 static void prefs_enable_message_color_toggled (void);
765 static void prefs_recycle_colors_toggled (GtkWidget *widget);
767 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
769 static void prefs_font_selection_key_pressed (GtkWidget *widget,
772 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
774 static gint prefs_common_deleted (GtkWidget *widget,
777 static void prefs_common_key_pressed (GtkWidget *widget,
780 static void prefs_common_ok (void);
781 static void prefs_common_apply (void);
782 static void prefs_common_cancel (void);
784 void prefs_common_init() {
785 prefs_common.fltlist = NULL;
786 prefs_common.disphdr_list = NULL;
789 void prefs_common_read_config(void)
793 gchar buf[PREFSBUFSIZE];
795 prefs_read_config(param, "Common", COMMON_RC);
797 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
799 if ((fp = fopen(path, "r")) == NULL) {
800 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
805 while (fgets(buf, sizeof(buf), fp) != NULL) {
807 if (buf[0] == '\0') continue;
808 prefs_common.mime_open_cmd_history =
809 add_history(prefs_common.mime_open_cmd_history, buf);
813 prefs_common.mime_open_cmd_history =
814 g_list_reverse(prefs_common.mime_open_cmd_history);
817 void prefs_common_save_config(void)
823 prefs_save_config(param, "Common", COMMON_RC);
825 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
827 if ((fp = fopen(path, "w")) == NULL) {
828 FILE_OP_ERROR(path, "fopen");
833 for (cur = prefs_common.mime_open_cmd_history;
834 cur != NULL; cur = cur->next) {
835 fputs((gchar *)cur->data, fp);
843 void prefs_common_open(void)
845 if (prefs_rc_is_readonly(COMMON_RC))
850 if (!dialog.window) {
851 prefs_common_create();
854 manage_window_set_transient(GTK_WINDOW(dialog.window));
855 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
856 gtk_widget_grab_focus(dialog.ok_btn);
858 prefs_set_dialog(param);
860 gtk_widget_show(dialog.window);
863 static void prefs_common_create(void)
867 debug_print(_("Creating common preferences window...\n"));
869 prefs_dialog_create(&dialog);
870 gtk_window_set_title (GTK_WINDOW(dialog.window),
871 _("Common Preferences"));
872 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
873 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
874 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
875 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
876 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
877 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
878 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
879 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
880 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
881 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
882 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
883 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
884 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
885 GTK_SIGNAL_FUNC(prefs_common_cancel),
886 GTK_OBJECT(dialog.window));
888 /* create all widgets on notebook */
889 prefs_receive_create();
890 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
892 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
893 prefs_compose_create();
894 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
895 prefs_quote_create();
896 SET_NOTEBOOK_LABEL(dialog.notebook, _("Quote"), page++);
897 prefs_display_create();
898 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
899 prefs_message_create();
900 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
902 prefs_privacy_create();
903 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
905 prefs_interface_create();
906 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
907 prefs_other_create();
908 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
910 gtk_widget_show_all(dialog.window);
913 static void prefs_receive_create(void)
917 GtkWidget *frame_incext;
918 GtkWidget *checkbtn_incext;
920 GtkWidget *label_incext;
921 GtkWidget *entry_incext;
922 /* GtkWidget *button_incext; */
924 GtkWidget *frame_spool;
925 GtkWidget *checkbtn_local;
926 GtkWidget *checkbtn_filter_on_inc;
927 GtkWidget *label_spool;
928 GtkWidget *entry_spool;
930 GtkWidget *hbox_autochk;
931 GtkWidget *checkbtn_autochk;
932 GtkWidget *label_autochk1;
933 GtkObject *spinbtn_autochk_adj;
934 GtkWidget *spinbtn_autochk;
935 GtkWidget *label_autochk2;
936 GtkWidget *checkbtn_chkonstartup;
937 GtkWidget *checkbtn_noerrorpanel;
938 GtkWidget *checkbtn_scan_after_inc;
941 GtkWidget *frame_news;
942 GtkWidget *label_maxarticle;
943 GtkWidget *spinbtn_maxarticle;
944 GtkObject *spinbtn_maxarticle_adj;
946 vbox1 = gtk_vbox_new (FALSE, VSPACING);
947 gtk_widget_show (vbox1);
948 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
949 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
951 PACK_FRAME(vbox1, frame_incext, _("External program"));
953 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
954 gtk_widget_show (vbox2);
955 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
956 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
958 /* Use of external incorporation program */
959 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
960 _("Use external program for incorporation"));
962 hbox = gtk_hbox_new (FALSE, 8);
963 gtk_widget_show (hbox);
964 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
965 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
967 label_incext = gtk_label_new (_("Command"));
968 gtk_widget_show (label_incext);
969 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
971 entry_incext = gtk_entry_new ();
972 gtk_widget_show (entry_incext);
973 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
976 button_incext = gtk_button_new_with_label ("... ");
977 gtk_widget_show (button_incext);
978 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
981 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
983 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
984 gtk_widget_show (vbox2);
985 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
986 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
988 hbox = gtk_hbox_new (FALSE, 32);
989 gtk_widget_show (hbox);
990 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
992 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
993 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
994 _("Filter on incorporation"));
995 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
997 hbox = gtk_hbox_new (FALSE, 8);
998 gtk_widget_show (hbox);
999 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1000 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
1002 label_spool = gtk_label_new (_("Spool directory"));
1003 gtk_widget_show (label_spool);
1004 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
1006 entry_spool = gtk_entry_new ();
1007 gtk_widget_show (entry_spool);
1008 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
1010 vbox2 = gtk_vbox_new (FALSE, 0);
1011 gtk_widget_show (vbox2);
1012 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1015 hbox_autochk = gtk_hbox_new (FALSE, 8);
1016 gtk_widget_show (hbox_autochk);
1017 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1019 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1020 _("Auto-check new mail"));
1022 label_autochk1 = gtk_label_new (_("every"));
1023 gtk_widget_show (label_autochk1);
1024 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1026 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1027 spinbtn_autochk = gtk_spin_button_new
1028 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1029 gtk_widget_show (spinbtn_autochk);
1030 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1031 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
1032 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1034 label_autochk2 = gtk_label_new (_("minute(s)"));
1035 gtk_widget_show (label_autochk2);
1036 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1038 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1039 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1040 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1042 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1043 _("Check new mail on startup"));
1045 PACK_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel,
1046 _("No error popup on receive error"));
1047 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1048 _("Update all local folders after incorporation"));
1050 PACK_FRAME(vbox1, frame_news, _("News"));
1052 hbox = gtk_hbox_new (FALSE, 8);
1053 gtk_widget_show (hbox);
1054 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
1055 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
1057 label_maxarticle = gtk_label_new
1058 (_("Maximum number of articles to download\n"
1059 "(unlimited if 0 is specified)"));
1060 gtk_widget_show (label_maxarticle);
1061 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
1062 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
1064 spinbtn_maxarticle_adj =
1065 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
1066 spinbtn_maxarticle = gtk_spin_button_new
1067 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
1068 gtk_widget_show (spinbtn_maxarticle);
1069 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
1071 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
1072 gtk_spin_button_set_numeric
1073 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
1075 receive.checkbtn_incext = checkbtn_incext;
1076 receive.entry_incext = entry_incext;
1077 /* receive.button_incext = button_incext; */
1079 receive.checkbtn_local = checkbtn_local;
1080 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
1081 receive.entry_spool = entry_spool;
1083 receive.checkbtn_autochk = checkbtn_autochk;
1084 receive.spinbtn_autochk = spinbtn_autochk;
1085 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1087 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1088 receive.checkbtn_noerrorpanel = checkbtn_noerrorpanel;
1089 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1092 receive.spinbtn_maxarticle = spinbtn_maxarticle;
1093 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
1096 static void prefs_send_create(void)
1100 GtkWidget *frame_extsend;
1101 GtkWidget *vbox_extsend;
1102 GtkWidget *checkbtn_extsend;
1104 GtkWidget *label_extsend;
1105 GtkWidget *entry_extsend;
1106 /* GtkWidget *button_extsend; */
1107 GtkWidget *checkbtn_savemsg;
1108 GtkWidget *checkbtn_queuemsg;
1109 GtkWidget *label_outcharset;
1111 GtkWidget *optmenu_menu;
1112 GtkWidget *menuitem;
1113 GtkWidget *checkbtn_returnreceipt;
1114 GtkWidget *label_charset_desc;
1116 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1117 gtk_widget_show (vbox1);
1118 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1119 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1121 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1123 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1124 gtk_widget_show (vbox_extsend);
1125 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1126 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1128 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1129 _("Use external program for sending"));
1131 hbox1 = gtk_hbox_new (FALSE, 8);
1132 gtk_widget_show (hbox1);
1133 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1134 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1136 label_extsend = gtk_label_new (_("Command"));
1137 gtk_widget_show (label_extsend);
1138 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1140 entry_extsend = gtk_entry_new ();
1141 gtk_widget_show (entry_extsend);
1142 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1145 button_extsend = gtk_button_new_with_label ("... ");
1146 gtk_widget_show (button_extsend);
1147 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1150 vbox2 = gtk_vbox_new (FALSE, 0);
1151 gtk_widget_show (vbox2);
1152 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1154 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1155 _("Save sent messages to outbox"));
1156 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1157 _("Queue messages that fail to send"));
1158 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1159 _("Send return receipt on request"));
1161 hbox1 = gtk_hbox_new (FALSE, 8);
1162 gtk_widget_show (hbox1);
1163 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1165 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1166 gtk_widget_show (label_outcharset);
1167 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1169 optmenu = gtk_option_menu_new ();
1170 gtk_widget_show (optmenu);
1171 gtk_box_pack_start (GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1173 optmenu_menu = gtk_menu_new ();
1175 #define SET_MENUITEM(str, charset) \
1177 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1180 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1181 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1183 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1185 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1186 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1187 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1188 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1189 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1190 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1192 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1194 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1196 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1197 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1199 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1201 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1202 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1204 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1205 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1207 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1208 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1210 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1211 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1212 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1214 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1216 hbox1 = gtk_hbox_new (FALSE, 8);
1217 gtk_widget_show (hbox1);
1218 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1220 label_charset_desc = gtk_label_new
1221 (_("If `Automatic' is selected, the optimal encoding\n"
1222 "for the current locale will be used."));
1223 gtk_widget_show (label_charset_desc);
1224 gtk_box_pack_start (GTK_BOX (hbox1), label_charset_desc,
1226 gtk_label_set_justify(GTK_LABEL (label_charset_desc), GTK_JUSTIFY_LEFT);
1228 send.checkbtn_extsend = checkbtn_extsend;
1229 send.entry_extsend = entry_extsend;
1230 /* send.button_extsend = button_extsend; */
1232 send.checkbtn_savemsg = checkbtn_savemsg;
1233 send.checkbtn_queuemsg = checkbtn_queuemsg;
1234 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1236 send.optmenu_charset = optmenu;
1240 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1245 g_return_if_fail(param);
1246 g_return_if_fail(param->data);
1247 g_return_if_fail(param->widget);
1248 g_return_if_fail(*(param->widget));
1250 dict_name = gtkpspell_get_dictionary_menu_active_item
1251 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1252 str = *((gchar **) param->data);
1255 *((gchar **) param->data) = dict_name;
1258 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1261 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1263 GtkWidget *menuitem;
1267 g_return_if_fail(optmenu != NULL);
1268 g_return_if_fail(pparam->data != NULL);
1270 if (*(gchar **) pparam->data) {
1271 menu = gtk_option_menu_get_menu(optmenu);
1272 for (cur = GTK_MENU_SHELL(menu)->children;
1273 cur != NULL; cur = cur->next) {
1274 menuitem = GTK_WIDGET(cur->data);
1275 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem), "dict_name");
1276 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1277 gtk_option_menu_set_history(optmenu, n);
1284 gtk_option_menu_set_history(optmenu, 0);
1285 prefs_dictionary_set_data_from_optmenu(pparam);
1288 static void prefs_compose_checkbtn_enable_pspell_toggle_cb
1294 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1295 gtk_widget_set_sensitive(compose.entry_pspell_path, toggled);
1296 gtk_widget_set_sensitive(compose.optmenu_dictionary, toggled);
1297 gtk_widget_set_sensitive(compose.btn_pspell_path, toggled);
1300 static void prefs_compose_btn_pspell_path_clicked_cb(GtkWidget *widget,
1303 gchar *file_path, *tmp;
1304 GtkWidget *new_menu;
1306 file_path = filesel_select_file(_("Select dictionaries location"),
1307 prefs_common.pspell_path);
1308 if (file_path == NULL) {
1312 tmp=g_dirname(file_path);
1314 if (prefs_common.pspell_path)
1315 g_free(prefs_common.pspell_path);
1316 prefs_common.pspell_path = g_strdup_printf("%s%s",tmp,G_DIR_SEPARATOR_S);
1318 new_menu = gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path);
1319 gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_dictionary),
1322 gtk_entry_set_text(GTK_ENTRY(compose.entry_pspell_path), prefs_common.pspell_path);
1323 /* select first one */
1324 gtk_option_menu_set_history(GTK_OPTION_MENU(compose.optmenu_dictionary), 0);
1326 prefs_common.dictionary = gtkpspell_get_dictionary_menu_active_item(
1327 gtk_option_menu_get_menu(GTK_OPTION_MENU(compose.optmenu_dictionary)));
1335 static void prefs_compose_create(void)
1342 GtkWidget *btn_quotefmt;
1344 GtkWidget *frame_sig;
1345 GtkWidget *vbox_sig;
1346 GtkWidget *checkbtn_autosig;
1347 GtkWidget *label_sigsep;
1348 GtkWidget *entry_sigsep;
1350 GtkWidget *frame_editor;
1351 GtkWidget *hbox_editor;
1352 GtkWidget *checkbtn_autoextedit;
1354 GtkWidget *frame_autosel;
1355 GtkWidget *hbox_autosel;
1356 GtkWidget *vbox_autosel;
1357 GtkWidget *checkbtn_reply_account_autosel;
1358 GtkWidget *checkbtn_forward_account_autosel;
1359 GtkWidget *checkbtn_reedit_account_autosel;
1361 GtkWidget *vbox_linewrap;
1366 GtkWidget *label_linewrap;
1367 GtkObject *spinbtn_linewrap_adj;
1368 GtkWidget *spinbtn_linewrap;
1369 GtkWidget *checkbtn_wrapquote;
1370 GtkWidget *checkbtn_wrapatsend;
1372 GtkWidget *frame_reply;
1373 GtkWidget *checkbtn_quote;
1374 GtkWidget *checkbtn_forward_as_attachment;
1375 GtkWidget *checkbtn_smart_wrapping;
1376 GtkWidget *checkbtn_block_cursor;
1379 GtkWidget *frame_spell;
1380 GtkWidget *hbox_spell;
1381 GtkWidget *vbox_spell;
1382 GtkWidget *hbox_pspell_path;
1383 GtkWidget *checkbtn_enable_pspell;
1384 GtkWidget *label_pspell_path;
1385 GtkWidget *entry_pspell_path;
1386 GtkWidget *btn_pspell_path;
1387 GtkWidget *hbox_dictionary;
1388 GtkWidget *label_dictionary;
1389 GtkWidget *optmenu_dictionary;
1391 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1392 gtk_widget_show (vbox1);
1393 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1394 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1398 hbox1 = gtk_hbox_new (FALSE, 32);
1399 gtk_widget_show (hbox1);
1401 hbox2 = gtk_hbox_new (FALSE, 8);
1402 gtk_widget_show (hbox2);
1403 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1406 hbox1 = gtk_hbox_new (FALSE, 32);
1407 gtk_widget_show (hbox1);
1408 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1410 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1412 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1413 gtk_widget_show (vbox_sig);
1414 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1415 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1417 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1418 _("Insert signature automatically"));
1420 hbox1 = gtk_hbox_new (FALSE, 8);
1421 gtk_widget_show (hbox1);
1422 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1423 label_sigsep = gtk_label_new (_("Signature separator"));
1424 gtk_widget_show (label_sigsep);
1425 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1427 entry_sigsep = gtk_entry_new ();
1428 gtk_widget_show (entry_sigsep);
1429 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1431 gtk_widget_set_usize (entry_sigsep, 64, -1);
1433 /* Account autoselection */
1434 PACK_FRAME(vbox1, frame_autosel, _("Automatic Account Selection"));
1436 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1437 gtk_widget_show (hbox_autosel);
1438 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1439 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1441 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1442 _("when replying"));
1443 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1444 _("when forwarding"));
1445 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1446 _("when re-editing"));
1448 vbox2 = gtk_vbox_new (FALSE, 0);
1449 gtk_widget_show (vbox2);
1450 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1452 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1453 _("Automatically launch the external editor"));
1455 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1458 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1459 gtk_widget_show (vbox_linewrap);
1460 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1462 hbox3 = gtk_hbox_new (FALSE, 8);
1463 gtk_widget_show (hbox3);
1464 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1467 label_linewrap = gtk_label_new (_("Wrap messages at"));
1468 gtk_widget_show (label_linewrap);
1469 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1471 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1472 spinbtn_linewrap = gtk_spin_button_new
1473 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1474 gtk_widget_show (spinbtn_linewrap);
1475 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1476 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1477 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1479 label_linewrap = gtk_label_new (_("characters"));
1480 gtk_widget_show (label_linewrap);
1481 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1483 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1485 hbox4 = gtk_hbox_new (FALSE, 32);
1486 gtk_widget_show (hbox4);
1487 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1489 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1491 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1493 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1494 _("Forward as attachment"));
1496 PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping,
1497 _("Smart wrapping (EXPERIMENTAL)"));
1499 PACK_CHECK_BUTTON (vbox1, checkbtn_block_cursor,
1503 /* spell checker defaults */
1504 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1505 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1506 gtk_widget_show (vbox_spell);
1507 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1508 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1510 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_pspell,
1511 _("Enable spell checker (EXPERIMENTAL)"));
1513 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_pspell), "toggled",
1514 GTK_SIGNAL_FUNC(prefs_compose_checkbtn_enable_pspell_toggle_cb),
1517 hbox_pspell_path = gtk_hbox_new (FALSE, 8);
1518 gtk_widget_show(hbox_pspell_path);
1519 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_pspell_path, TRUE, TRUE, 0);
1521 label_pspell_path = gtk_label_new (_("Dictionaries path"));
1522 gtk_widget_show(label_pspell_path);
1523 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), label_pspell_path, FALSE, FALSE, 0);
1525 entry_pspell_path = gtk_entry_new();
1526 gtk_widget_show(entry_pspell_path);
1527 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), entry_pspell_path, FALSE, FALSE, 0);
1528 gtk_widget_set_usize(entry_pspell_path, 150, -1);
1529 gtk_widget_set_sensitive(entry_pspell_path, prefs_common.enable_pspell);
1531 btn_pspell_path = gtk_button_new_with_label(_("..."));
1532 gtk_widget_show(btn_pspell_path);
1533 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), btn_pspell_path, FALSE, FALSE, 0);
1534 gtk_widget_set_sensitive(btn_pspell_path, prefs_common.enable_pspell);
1536 gtk_signal_connect(GTK_OBJECT(btn_pspell_path), "clicked",
1537 GTK_SIGNAL_FUNC(prefs_compose_btn_pspell_path_clicked_cb),
1540 hbox_dictionary = gtk_hbox_new(FALSE, 8);
1541 gtk_widget_show(hbox_dictionary);
1542 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_dictionary, TRUE, TRUE, 0);
1544 label_dictionary = gtk_label_new(_("Dictionary"));
1545 gtk_widget_show(label_dictionary);
1546 gtk_box_pack_start(GTK_BOX(hbox_dictionary), label_dictionary, FALSE, FALSE, 0);
1548 optmenu_dictionary = gtk_option_menu_new();
1549 gtk_widget_show(optmenu_dictionary);
1550 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1551 gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path));
1552 gtk_box_pack_start(GTK_BOX(hbox_dictionary), optmenu_dictionary, FALSE, FALSE, 0);
1553 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_pspell);
1557 compose.checkbtn_quote = checkbtn_quote;
1558 compose.entry_quotemark = entry_quotemark;
1559 compose.text_quotefmt = text_quotefmt;
1561 compose.checkbtn_autosig = checkbtn_autosig;
1562 compose.entry_sigsep = entry_sigsep;
1564 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1566 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1567 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1568 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1570 compose.spinbtn_linewrap = spinbtn_linewrap;
1571 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1572 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1573 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1575 compose.checkbtn_forward_as_attachment =
1576 checkbtn_forward_as_attachment;
1577 compose.checkbtn_smart_wrapping =
1578 checkbtn_smart_wrapping;
1579 compose.checkbtn_block_cursor =
1580 checkbtn_block_cursor;
1583 compose.checkbtn_enable_pspell = checkbtn_enable_pspell;
1584 compose.entry_pspell_path = entry_pspell_path;
1585 compose.btn_pspell_path = btn_pspell_path;
1586 compose.optmenu_dictionary = optmenu_dictionary;
1590 static void prefs_quote_create(void)
1593 GtkWidget *frame_quote;
1594 GtkWidget *vbox_quote;
1597 GtkWidget *label_quotemark;
1598 GtkWidget *entry_quotemark;
1599 GtkWidget *scrolledwin_quotefmt;
1600 GtkWidget *text_quotefmt;
1602 GtkWidget *entry_fw_quotemark;
1603 GtkWidget *text_fw_quotefmt;
1605 GtkWidget *btn_quotedesc;
1607 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1608 gtk_widget_show (vbox1);
1609 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1610 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1614 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1616 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1617 gtk_widget_show (vbox_quote);
1618 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1619 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1621 hbox1 = gtk_hbox_new (FALSE, 32);
1622 gtk_widget_show (hbox1);
1623 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1625 hbox2 = gtk_hbox_new (FALSE, 8);
1626 gtk_widget_show (hbox2);
1627 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1629 label_quotemark = gtk_label_new (_("Quotation mark"));
1630 gtk_widget_show (label_quotemark);
1631 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1633 entry_quotemark = gtk_entry_new ();
1634 gtk_widget_show (entry_quotemark);
1635 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1636 gtk_widget_set_usize (entry_quotemark, 64, -1);
1638 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1639 gtk_widget_show (scrolledwin_quotefmt);
1640 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1641 gtk_scrolled_window_set_policy
1642 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1643 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1645 text_quotefmt = gtk_text_new (NULL, NULL);
1646 gtk_widget_show (text_quotefmt);
1647 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1648 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1649 gtk_widget_set_usize(text_quotefmt, -1, 60);
1653 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1655 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1656 gtk_widget_show (vbox_quote);
1657 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1658 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1660 hbox1 = gtk_hbox_new (FALSE, 32);
1661 gtk_widget_show (hbox1);
1662 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1664 hbox2 = gtk_hbox_new (FALSE, 8);
1665 gtk_widget_show (hbox2);
1666 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1668 label_quotemark = gtk_label_new (_("Quotation mark"));
1669 gtk_widget_show (label_quotemark);
1670 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1672 entry_fw_quotemark = gtk_entry_new ();
1673 gtk_widget_show (entry_fw_quotemark);
1674 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1676 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
1678 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1679 gtk_widget_show (scrolledwin_quotefmt);
1680 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1681 gtk_scrolled_window_set_policy
1682 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1683 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1685 text_fw_quotefmt = gtk_text_new (NULL, NULL);
1686 gtk_widget_show (text_fw_quotefmt);
1687 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1689 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
1690 gtk_widget_set_usize(text_fw_quotefmt, -1, 60);
1692 hbox1 = gtk_hbox_new (FALSE, 32);
1693 gtk_widget_show (hbox1);
1694 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1697 gtk_button_new_with_label (_(" Description of symbols "));
1698 gtk_widget_show (btn_quotedesc);
1699 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1700 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1701 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1703 quote.entry_quotemark = entry_quotemark;
1704 quote.text_quotefmt = text_quotefmt;
1705 quote.entry_fw_quotemark = entry_fw_quotemark;
1706 quote.text_fw_quotefmt = text_fw_quotefmt;
1709 static void prefs_display_create(void)
1712 GtkWidget *frame_font;
1714 GtkWidget *label_textfont;
1715 GtkWidget *entry_textfont;
1716 GtkWidget *button_textfont;
1717 GtkWidget *chkbtn_folder_unread;
1718 GtkWidget *chkbtn_transhdr;
1719 GtkWidget *frame_summary;
1721 GtkWidget *chkbtn_swapfrom;
1722 GtkWidget *chkbtn_hscrollbar;
1723 GtkWidget *chkbtn_useaddrbook;
1724 GtkWidget *chkbtn_expand_thread;
1725 GtkWidget *chkbtn_bold_unread;
1728 GtkWidget *label_datefmt;
1729 GtkWidget *button_datefmt;
1730 GtkWidget *entry_datefmt;
1731 GtkWidget *button_dispitem;
1732 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
1734 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1735 gtk_widget_show (vbox1);
1736 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1737 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1739 PACK_FRAME(vbox1, frame_font, _("Font"));
1741 table1 = gtk_table_new (4, 3, FALSE);
1743 gtk_widget_show (table1);
1744 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1745 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1746 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1747 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1749 label_textfont = gtk_label_new (_("Text"));
1750 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1751 gtk_widget_show (label_textfont);
1752 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1753 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1755 entry_textfont = gtk_entry_new ();
1756 gtk_widget_show (entry_textfont);
1757 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1758 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1760 button_textfont = gtk_button_new_with_label ("... ");
1762 gtk_widget_show (button_textfont);
1763 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1765 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1766 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1768 tmplabel = gtk_label_new (_("Small"));
1769 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1770 gtk_widget_show (tmplabel);
1771 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1772 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1774 tmpentry = gtk_entry_new ();
1775 gtk_widget_show (tmpentry);
1776 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1777 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1779 tmpbutton = gtk_button_new_with_label (" ... ");
1780 gtk_widget_show (tmpbutton);
1781 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1783 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1784 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1785 display.entry_smallfont = tmpentry;
1787 tmplabel = gtk_label_new (_("Normal"));
1788 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1789 gtk_widget_show (tmplabel);
1790 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1791 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1793 tmpentry = gtk_entry_new ();
1794 gtk_widget_show (tmpentry);
1795 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1796 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1798 tmpbutton = gtk_button_new_with_label (" ... ");
1799 gtk_widget_show (tmpbutton);
1800 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1802 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1803 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1804 display.entry_normalfont = tmpentry;
1806 tmplabel = gtk_label_new (_("Bold"));
1807 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1808 gtk_widget_show (tmplabel);
1809 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1810 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1812 tmpentry = gtk_entry_new ();
1813 gtk_widget_show (tmpentry);
1814 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1815 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1817 tmpbutton = gtk_button_new_with_label (" ... ");
1818 gtk_widget_show (tmpbutton);
1819 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1821 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1822 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1823 display.entry_boldfont = tmpentry;
1825 vbox2 = gtk_vbox_new (FALSE, 0);
1826 gtk_widget_show (vbox2);
1827 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1830 (vbox2, chkbtn_transhdr,
1831 _("Translate header name (such as `From:', `Subject:')"));
1833 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1834 _("Display unread number next to folder name"));
1836 /* ---- Summary ---- */
1838 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1840 vbox2 = gtk_vbox_new (FALSE, 0);
1841 gtk_widget_show (vbox2);
1842 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1843 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1846 (vbox2, chkbtn_swapfrom,
1847 _("Display recipient on `From' column if sender is yourself"));
1849 (vbox2, chkbtn_useaddrbook,
1850 _("Display sender using address book"));
1852 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1854 (vbox2, chkbtn_expand_thread, _("Expand threads"));
1856 (vbox2, chkbtn_bold_unread,
1857 _("Display unread messages with bold font"));
1859 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1861 hbox1 = gtk_hbox_new (FALSE, 8);
1862 gtk_widget_show (hbox1);
1863 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1865 label_datefmt = gtk_label_new (_("Date format"));
1866 gtk_widget_show (label_datefmt);
1867 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1869 entry_datefmt = gtk_entry_new ();
1870 gtk_widget_show (entry_datefmt);
1871 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1873 button_datefmt = gtk_button_new_with_label ("... ");
1875 gtk_widget_show (button_datefmt);
1876 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1877 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1878 GTK_SIGNAL_FUNC (date_format_create), NULL);
1880 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1882 hbox1 = gtk_hbox_new (FALSE, 8);
1883 gtk_widget_show (hbox1);
1884 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1886 button_dispitem = gtk_button_new_with_label
1887 (_(" Set display item of summary... "));
1888 gtk_widget_show (button_dispitem);
1889 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1890 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1891 GTK_SIGNAL_FUNC (prefs_summary_column_open),
1894 display.entry_textfont = entry_textfont;
1895 display.button_textfont = button_textfont;
1897 display.chkbtn_folder_unread = chkbtn_folder_unread;
1898 display.chkbtn_transhdr = chkbtn_transhdr;
1900 display.chkbtn_swapfrom = chkbtn_swapfrom;
1901 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1902 display.chkbtn_expand_thread = chkbtn_expand_thread;
1903 display.chkbtn_bold_unread = chkbtn_bold_unread;
1904 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1905 display.entry_datefmt = entry_datefmt;
1908 static void prefs_message_create(void)
1914 GtkWidget *chkbtn_enablecol;
1915 GtkWidget *button_edit_col;
1916 GtkWidget *chkbtn_mbalnum;
1917 GtkWidget *chkbtn_disphdrpane;
1918 GtkWidget *chkbtn_disphdr;
1919 GtkWidget *button_edit_disphdr;
1920 GtkWidget *hbox_linespc;
1921 GtkWidget *label_linespc;
1922 GtkObject *spinbtn_linespc_adj;
1923 GtkWidget *spinbtn_linespc;
1924 GtkWidget *chkbtn_headspc;
1926 GtkWidget *frame_scr;
1927 GtkWidget *vbox_scr;
1928 GtkWidget *chkbtn_smoothscroll;
1929 GtkWidget *hbox_scr;
1930 GtkWidget *label_scr;
1931 GtkObject *spinbtn_scrollstep_adj;
1932 GtkWidget *spinbtn_scrollstep;
1933 GtkWidget *chkbtn_halfpage;
1935 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1936 gtk_widget_show (vbox1);
1937 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1938 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1940 hbox1 = gtk_hbox_new (FALSE, 8);
1941 gtk_widget_show (hbox1);
1942 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1944 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1945 _("Enable coloration of message"));
1946 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1947 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1950 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1951 gtk_widget_show (button_edit_col);
1952 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1953 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1954 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1956 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1958 vbox2 = gtk_vbox_new (FALSE, 0);
1959 gtk_widget_show (vbox2);
1960 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1963 (vbox2, chkbtn_mbalnum,
1964 _("Display 2-byte alphabet and numeric with 1-byte character"));
1965 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1966 _("Display header pane above message view"));
1968 hbox1 = gtk_hbox_new (FALSE, 8);
1969 gtk_widget_show (hbox1);
1970 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1972 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1973 _("Display short headers on message view"));
1975 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1976 gtk_widget_show (button_edit_disphdr);
1977 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1979 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1980 GTK_SIGNAL_FUNC (prefs_display_header_open),
1983 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1985 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1987 hbox1 = gtk_hbox_new (FALSE, 32);
1988 gtk_widget_show (hbox1);
1989 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1991 hbox_linespc = gtk_hbox_new (FALSE, 8);
1992 gtk_widget_show (hbox1);
1993 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1995 label_linespc = gtk_label_new (_("Line space"));
1996 gtk_widget_show (label_linespc);
1997 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2000 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
2001 spinbtn_linespc = gtk_spin_button_new
2002 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
2003 gtk_widget_show (spinbtn_linespc);
2004 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
2006 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
2007 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
2009 label_linespc = gtk_label_new (_("pixel(s)"));
2010 gtk_widget_show (label_linespc);
2011 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2014 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
2016 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
2018 vbox_scr = gtk_vbox_new (FALSE, 0);
2019 gtk_widget_show (vbox_scr);
2020 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
2021 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
2023 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
2025 hbox1 = gtk_hbox_new (FALSE, 32);
2026 gtk_widget_show (hbox1);
2027 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
2029 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
2031 hbox_scr = gtk_hbox_new (FALSE, 8);
2032 gtk_widget_show (hbox_scr);
2033 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
2035 label_scr = gtk_label_new (_("Step"));
2036 gtk_widget_show (label_scr);
2037 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2039 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
2040 spinbtn_scrollstep = gtk_spin_button_new
2041 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
2042 gtk_widget_show (spinbtn_scrollstep);
2043 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
2045 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
2046 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
2049 label_scr = gtk_label_new (_("pixel(s)"));
2050 gtk_widget_show (label_scr);
2051 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2053 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
2055 message.chkbtn_enablecol = chkbtn_enablecol;
2056 message.button_edit_col = button_edit_col;
2057 message.chkbtn_mbalnum = chkbtn_mbalnum;
2058 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
2059 message.chkbtn_disphdr = chkbtn_disphdr;
2060 message.spinbtn_linespc = spinbtn_linespc;
2061 message.chkbtn_headspc = chkbtn_headspc;
2063 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
2064 message.spinbtn_scrollstep = spinbtn_scrollstep;
2065 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
2066 message.chkbtn_halfpage = chkbtn_halfpage;
2070 static void prefs_privacy_create(void)
2075 GtkWidget *checkbtn_default_encrypt;
2076 GtkWidget *checkbtn_ascii_armored;
2077 GtkWidget *checkbtn_default_sign;
2078 GtkWidget *checkbtn_auto_check_signatures;
2079 GtkWidget *checkbtn_gpg_signature_popup;
2080 GtkWidget *checkbtn_passphrase_grab;
2081 GtkWidget *checkbtn_gpg_warning;
2083 GtkWidget *menuitem;
2085 GtkWidget *optmenu_menu;
2087 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2088 gtk_widget_show (vbox1);
2089 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2090 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2092 vbox2 = gtk_vbox_new (FALSE, 0);
2093 gtk_widget_show (vbox2);
2094 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2096 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
2097 _("Encrypt message by default"));
2099 PACK_CHECK_BUTTON (vbox2, checkbtn_ascii_armored,
2100 _("Plain ASCII armored"));
2101 gtk_signal_connect(GTK_OBJECT(checkbtn_ascii_armored), "toggled",
2102 prefs_common_ascii_armored_warning, (gpointer)0);
2104 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
2105 _("Sign message by default"));
2107 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
2108 _("Automatically check signatures"));
2110 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
2111 _("Show signature check result in a popup window"));
2114 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
2115 _("Grab input while entering a passphrase"));
2119 (vbox2, checkbtn_gpg_warning,
2120 _("Display warning on startup if GnuPG doesn't work"));
2122 hbox1 = gtk_hbox_new (FALSE, 8);
2123 gtk_widget_show (hbox1);
2124 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2126 /* create default signkey box */
2127 label = gtk_label_new (_("Default Sign Key"));
2128 gtk_widget_show (label);
2129 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2130 optmenu = gtk_option_menu_new ();
2131 gtk_widget_show (optmenu);
2132 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
2133 optmenu_menu = gtk_menu_new ();
2135 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
2136 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
2137 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
2138 /* FIXME: disabled because not implemented */
2139 gtk_widget_set_sensitive(optmenu, FALSE);
2141 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
2142 privacy.checkbtn_ascii_armored = checkbtn_ascii_armored;
2143 privacy.checkbtn_default_sign = checkbtn_default_sign;
2144 privacy.checkbtn_auto_check_signatures
2145 = checkbtn_auto_check_signatures;
2146 privacy.checkbtn_gpg_signature_popup
2147 = checkbtn_gpg_signature_popup;
2148 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2149 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2150 privacy.optmenu_default_signkey = optmenu;
2154 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
2158 GtkWidget *menuitem;
2161 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2162 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2163 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2164 g_free(*((gchar **)pparam->data));
2165 *((gchar **)pparam->data) = g_strdup(charset);
2169 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
2173 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2175 GtkWidget *menuitem;
2179 g_return_if_fail(optmenu != NULL);
2180 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2182 menu = gtk_option_menu_get_menu(optmenu);
2183 for (cur = GTK_MENU_SHELL(menu)->children;
2184 cur != NULL; cur = cur->next) {
2185 menuitem = GTK_WIDGET(cur->data);
2186 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2187 if (!strcmp(charset, *((gchar **)pparam->data))) {
2188 gtk_option_menu_set_history(optmenu, n);
2194 gtk_option_menu_set_history(optmenu, 0);
2195 prefs_common_charset_set_data_from_optmenu(pparam);
2199 static void prefs_common_ascii_armored_warning(GtkWidget* widget,
2202 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))
2203 && gtk_notebook_get_current_page(GTK_NOTEBOOK(dialog.notebook))) {
2204 alertpanel_message(_("Warning - Privacy/Plain ASCII armored"),
2205 _("Its not recommend to use the old style plain ASCII\n"
2206 "armored mode for encypted messages. It doesn't comply\n"
2207 "with the RFC 3156 - MIME security with OpenPGP."));
2210 #endif /* USE_GPGME */
2212 static void prefs_interface_create(void)
2217 /* GtkWidget *checkbtn_emacs; */
2218 GtkWidget *checkbtn_openunread;
2219 GtkWidget *checkbtn_openinbox;
2220 GtkWidget *checkbtn_immedexec;
2223 GtkWidget *optmenu_recvdialog;
2225 GtkWidget *menuitem;
2227 GtkWidget *frame_addr;
2228 GtkWidget *vbox_addr;
2229 GtkWidget *checkbtn_addaddrbyclick;
2231 GtkWidget *frame_exit;
2232 GtkWidget *vbox_exit;
2233 GtkWidget *checkbtn_confonexit;
2234 GtkWidget *checkbtn_cleanonexit;
2235 GtkWidget *checkbtn_askonclean;
2236 GtkWidget *checkbtn_warnqueued;
2239 GtkWidget *optmenu_nextunreadmsgdialog;
2240 GtkWidget *optmenu_nextunreadmsgdialog_menu;
2241 GtkWidget *nextunreadmsgdialog_menuitem;
2243 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2244 gtk_widget_show (vbox1);
2245 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2246 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2248 vbox2 = gtk_vbox_new (FALSE, 0);
2249 gtk_widget_show (vbox2);
2250 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2252 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2253 _("Emulate the behavior of mouse operation of\n"
2254 "Emacs-based mailer"));
2255 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2256 GTK_JUSTIFY_LEFT); */
2259 (vbox2, checkbtn_openunread,
2260 _("Open first unread message when entering a folder"));
2263 (vbox2, checkbtn_openinbox,
2264 _("Go to inbox after receiving new mail"));
2266 vbox3 = gtk_vbox_new (FALSE, 0);
2267 gtk_widget_show (vbox3);
2268 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2271 (vbox3, checkbtn_immedexec,
2272 _("Execute immediately when moving or deleting messages"));
2274 hbox1 = gtk_hbox_new (FALSE, 0);
2275 gtk_widget_show (hbox1);
2276 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2278 label = gtk_label_new
2279 (_("(Messages will be marked until execution\n"
2280 " if this is turned off)"));
2281 gtk_widget_show (label);
2282 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2283 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2285 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2287 hbox1 = gtk_hbox_new (FALSE, 8);
2288 gtk_widget_show (hbox1);
2289 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2291 label = gtk_label_new (_("Show receive dialog"));
2292 gtk_widget_show (label);
2293 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2295 optmenu_recvdialog = gtk_option_menu_new ();
2296 gtk_widget_show (optmenu_recvdialog);
2297 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2300 menu = gtk_menu_new ();
2301 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2302 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2303 RECV_DIALOG_ACTIVE);
2304 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2306 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2308 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2310 vbox_addr = gtk_vbox_new (FALSE, 0);
2311 gtk_widget_show (vbox_addr);
2312 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2313 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2316 (vbox_addr, checkbtn_addaddrbyclick,
2317 _("Add address to destination when double-clicked"));
2319 /* Next Unread Message Dialog */
2320 hbox2 = gtk_hbox_new (FALSE, 8);
2321 gtk_widget_show (hbox2);
2322 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
2324 label = gtk_label_new (_("Show no-unread-message dialog"));
2325 gtk_widget_show (label);
2326 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
2328 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2329 gtk_widget_show (optmenu_nextunreadmsgdialog);
2330 gtk_box_pack_start (GTK_BOX (hbox2), optmenu_nextunreadmsgdialog,
2333 optmenu_nextunreadmsgdialog_menu = gtk_menu_new ();
2334 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2335 _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2336 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2337 _("Assume 'Yes'"), NEXTUNREADMSGDIALOG_ASSUME_YES);
2338 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2339 _("Assume 'No'"), NEXTUNREADMSGDIALOG_ASSUME_NO);
2341 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog),
2342 optmenu_nextunreadmsgdialog_menu);
2345 /* Receive Dialog */
2346 /* hbox = gtk_hbox_new (FALSE, 8);
2347 gtk_widget_show (hbox);
2348 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2350 label = gtk_label_new (_("Show receive Dialog"));
2351 gtk_widget_show (label);
2352 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2354 recvdialog_optmenu = gtk_option_menu_new ();
2355 gtk_widget_show (recvdialog_optmenu);
2356 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2358 recvdialog_optmenu_menu = gtk_menu_new ();
2360 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2361 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2362 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2364 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2367 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2369 vbox_exit = gtk_vbox_new (FALSE, 0);
2370 gtk_widget_show (vbox_exit);
2371 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2372 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2374 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2375 _("Confirm on exit"));
2377 hbox1 = gtk_hbox_new (FALSE, 32);
2378 gtk_widget_show (hbox1);
2379 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2381 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2382 _("Empty trash on exit"));
2383 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2384 _("Ask before emptying"));
2385 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2387 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2388 _("Warn if there are queued messages"));
2390 /* interface.checkbtn_emacs = checkbtn_emacs; */
2391 interface.checkbtn_openunread = checkbtn_openunread;
2392 interface.checkbtn_openinbox = checkbtn_openinbox;
2393 interface.checkbtn_immedexec = checkbtn_immedexec;
2394 interface.optmenu_recvdialog = optmenu_recvdialog;
2395 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2396 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2397 interface.checkbtn_confonexit = checkbtn_confonexit;
2398 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2399 interface.checkbtn_askonclean = checkbtn_askonclean;
2400 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2403 static void prefs_other_create(void)
2408 GtkWidget *uri_frame;
2409 GtkWidget *uri_label;
2410 GtkWidget *uri_combo;
2411 GtkWidget *uri_entry;
2413 GtkWidget *print_frame;
2414 GtkWidget *printcmd_label;
2415 GtkWidget *printcmd_entry;
2417 GtkWidget *exteditor_frame;
2418 GtkWidget *exteditor_label;
2419 GtkWidget *exteditor_combo;
2420 GtkWidget *exteditor_entry;
2422 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2423 gtk_widget_show (vbox1);
2424 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2425 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2427 PACK_FRAME(vbox1, uri_frame,
2428 _("External Web browser (%s will be replaced with URI)"));
2430 hbox1 = gtk_hbox_new (FALSE, 8);
2431 gtk_widget_show (hbox1);
2432 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2433 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2435 uri_label = gtk_label_new (_("Command"));
2436 gtk_widget_show(uri_label);
2437 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2439 uri_combo = gtk_combo_new ();
2440 gtk_widget_show (uri_combo);
2441 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2442 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2443 "netscape -remote 'openURL(%s,raise)'",
2445 "gnome-moz-remote --raise --newwin '%s'",
2446 "kterm -e w3m '%s'",
2447 "kterm -e lynx '%s'",
2450 uri_entry = GTK_COMBO (uri_combo)->entry;
2452 PACK_FRAME(vbox1, print_frame,
2453 _("Printing (%s will be replaced with file name)"));
2455 hbox1 = gtk_hbox_new (FALSE, 8);
2456 gtk_widget_show (hbox1);
2457 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2458 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2460 printcmd_label = gtk_label_new (_("Command"));
2461 gtk_widget_show (printcmd_label);
2462 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2464 printcmd_entry = gtk_entry_new ();
2465 gtk_widget_show (printcmd_entry);
2466 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2468 PACK_FRAME(vbox1, exteditor_frame,
2469 _("External editor (%s will be replaced with file name)"));
2471 hbox1 = gtk_hbox_new (FALSE, 8);
2472 gtk_widget_show (hbox1);
2473 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2474 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2476 exteditor_label = gtk_label_new (_("Command"));
2477 gtk_widget_show (exteditor_label);
2478 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2480 exteditor_combo = gtk_combo_new ();
2481 gtk_widget_show (exteditor_combo);
2482 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2483 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2486 "mgedit --no-fork %s",
2492 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2494 other.uri_combo = uri_combo;
2495 other.uri_entry = uri_entry;
2496 other.printcmd_entry = printcmd_entry;
2498 other.exteditor_combo = exteditor_combo;
2499 other.exteditor_entry = exteditor_entry;
2502 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2504 GtkWidget *datefmt_sample = NULL;
2507 g_return_if_fail(widget != NULL);
2508 g_return_if_fail(*widget != NULL);
2509 g_return_if_fail(display.entry_datefmt != NULL);
2511 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2512 (GTK_OBJECT(*widget), "datefmt_sample"));
2513 g_return_if_fail(datefmt_sample != NULL);
2515 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2516 g_free(prefs_common.date_format);
2517 prefs_common.date_format = text;
2518 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2520 gtk_widget_destroy(*widget);
2524 static void date_format_cancel_btn_clicked(GtkButton *button,
2527 g_return_if_fail(widget != NULL);
2528 g_return_if_fail(*widget != NULL);
2530 gtk_widget_destroy(*widget);
2534 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2537 if (event && event->keyval == GDK_Escape)
2538 date_format_cancel_btn_clicked(NULL, widget);
2541 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2542 GdkEventAny *event, GtkWidget **widget)
2544 g_return_val_if_fail(widget != NULL, FALSE);
2545 g_return_val_if_fail(*widget != NULL, FALSE);
2551 static void date_format_entry_on_change(GtkEditable *editable,
2555 struct tm *cal_time;
2559 cur_time = time(NULL);
2560 cal_time = localtime(&cur_time);
2562 text = gtk_editable_get_chars(editable, 0, -1);
2564 strftime(buffer, sizeof buffer, text, cal_time);
2565 gtk_label_set_text(example, buffer);
2568 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2569 gint column, GdkEventButton *event,
2570 GtkWidget *date_format)
2576 GtkWidget *datefmt_sample;
2578 /* only on double click */
2579 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2582 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2583 (GTK_OBJECT(date_format), "datefmt_sample"));
2585 g_return_if_fail(date_format_list != NULL);
2586 g_return_if_fail(date_format != NULL);
2587 g_return_if_fail(datefmt_sample != NULL);
2589 /* get format from clist */
2590 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2592 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2593 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2595 /* insert the format into the text entry */
2596 new_format = g_malloc(strlen(old_format) + 3);
2598 strncpy(new_format, old_format, cur_pos);
2599 new_format[cur_pos] = '\0';
2600 strcat(new_format, format);
2601 strcat(new_format, &old_format[cur_pos]);
2603 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2604 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2609 static GtkWidget *date_format_create(GtkButton *button, void *data)
2611 static GtkWidget *datefmt_win = NULL;
2613 GtkWidget *scrolledwindow1;
2614 GtkWidget *datefmt_clist;
2619 GtkWidget *confirm_area;
2621 GtkWidget *cancel_btn;
2622 GtkWidget *datefmt_entry;
2628 { "%a", _("the full abbreviated weekday name") },
2629 { "%A", _("the full weekday name") },
2630 { "%b", _("the abbreviated month name") },
2631 { "%B", _("the full month name") },
2632 { "%c", _("the preferred date and time for the current locale") },
2633 { "%C", _("the century number (year/100)") },
2634 { "%d", _("the day of the month as a decimal number") },
2635 { "%H", _("the hour as a decimal number using a 24-hour clock") },
2636 { "%I", _("the hour as a decimal number using a 12-hour clock") },
2637 { "%j", _("the day of the year as a decimal number") },
2638 { "%m", _("the month as a decimal number") },
2639 { "%M", _("the minute as a decimal number") },
2640 { "%p", _("either AM or PM") },
2641 { "%S", _("the second as a decimal number") },
2642 { "%w", _("the day of the week as a decimal number") },
2643 { "%x", _("the preferred date for the current locale") },
2644 { "%y", _("the last two digits of a year") },
2645 { "%Y", _("the year as a decimal number") },
2646 { "%Z", _("the time zone or name or abbreviation") }
2651 const gint TIME_FORMAT_ELEMS =
2652 sizeof time_format / sizeof time_format[0];
2654 if (datefmt_win) return datefmt_win;
2656 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2657 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2658 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2659 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2660 gtk_widget_set_usize(datefmt_win, 440, 280);
2662 vbox1 = gtk_vbox_new(FALSE, 10);
2663 gtk_widget_show(vbox1);
2664 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2666 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2667 gtk_scrolled_window_set_policy
2668 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2669 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2670 gtk_widget_show(scrolledwindow1);
2671 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2673 titles[0] = _("Specifier");
2674 titles[1] = _("Description");
2675 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2676 gtk_widget_show(datefmt_clist);
2677 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2678 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2680 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2681 GTK_SELECTION_BROWSE);
2683 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2685 /* phoney casting necessary because of gtk... */
2686 text[0] = (gchar *)time_format[i].fmt;
2687 text[1] = (gchar *)time_format[i].txt;
2688 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2691 table = gtk_table_new(2, 2, FALSE);
2692 gtk_widget_show(table);
2693 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2694 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2695 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2697 label1 = gtk_label_new(_("Date format"));
2698 gtk_widget_show(label1);
2699 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2701 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2702 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2704 datefmt_entry = gtk_entry_new_with_max_length(256);
2705 gtk_widget_show(datefmt_entry);
2706 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2707 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2709 /* we need the "sample" entry box; add it as data so callbacks can
2710 * get the entry box */
2711 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2714 label2 = gtk_label_new(_("Example"));
2715 gtk_widget_show(label2);
2716 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2718 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2719 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2721 label3 = gtk_label_new("");
2722 gtk_widget_show(label3);
2723 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2724 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2725 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2726 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2728 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2729 &cancel_btn, _("Cancel"), NULL, NULL);
2730 gtk_widget_grab_default(ok_btn);
2731 gtk_widget_show(confirm_area);
2733 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2735 /* set the current format */
2736 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2737 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2740 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2741 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2743 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2744 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2746 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2747 GTK_SIGNAL_FUNC(date_format_key_pressed),
2749 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2750 GTK_SIGNAL_FUNC(date_format_on_delete),
2752 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2753 GTK_SIGNAL_FUNC(date_format_entry_on_change),
2756 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2757 GTK_SIGNAL_FUNC(date_format_select_row),
2760 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2761 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2763 gtk_widget_show(datefmt_win);
2764 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2766 gtk_widget_grab_focus(ok_btn);
2771 void prefs_quote_colors_dialog(void)
2773 if (!quote_color_win)
2774 prefs_quote_colors_dialog_create();
2775 gtk_widget_show(quote_color_win);
2776 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2779 gtk_widget_hide(quote_color_win);
2781 textview_update_message_colors();
2782 main_window_reflect_prefs_all();
2785 static void prefs_quote_colors_dialog_create(void)
2790 GtkWidget *quotelevel1_label;
2791 GtkWidget *quotelevel2_label;
2792 GtkWidget *quotelevel3_label;
2793 GtkWidget *uri_label;
2794 GtkWidget *tgt_folder_label;
2797 //GtkWidget *cancel_btn;
2798 GtkWidget *recycle_colors_btn;
2799 GtkWidget *frame_colors;
2801 window = gtk_window_new(GTK_WINDOW_DIALOG);
2802 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2803 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2804 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2805 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2806 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2808 vbox = gtk_vbox_new (FALSE, VSPACING);
2809 gtk_container_add (GTK_CONTAINER (window), vbox);
2810 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2811 PACK_FRAME(vbox, frame_colors, _("Colors"));
2813 table = gtk_table_new (4, 2, FALSE);
2814 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2815 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2816 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2817 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2820 color_buttons.quote_level1_btn = gtk_button_new();
2821 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2822 0, 1, 0, 1, 0, 0, 0, 0);
2823 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2824 gtk_container_set_border_width
2825 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2827 color_buttons.quote_level2_btn = gtk_button_new();
2828 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2829 0, 1, 1, 2, 0, 0, 0, 0);
2830 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2831 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2833 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2834 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2835 0, 1, 2, 3, 0, 0, 0, 0);
2836 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2837 gtk_container_set_border_width
2838 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2840 color_buttons.uri_btn = gtk_button_new_with_label ("");
2841 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2842 0, 1, 3, 4, 0, 0, 0, 0);
2843 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2844 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2846 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2847 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2848 0, 1, 4, 5, 0, 0, 0, 0);
2849 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
2850 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2852 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2853 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2854 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2855 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2856 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2858 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2859 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2860 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2861 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2862 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2864 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2865 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2866 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2867 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2868 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2870 uri_label = gtk_label_new (_("URI link"));
2871 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2872 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2873 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2874 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2876 tgt_folder_label = gtk_label_new (_("Target folder"));
2877 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
2878 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2879 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
2880 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
2882 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2883 _("Recycle quote colors"));
2885 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2886 NULL, NULL, NULL, NULL);
2887 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2889 gtk_widget_grab_default(ok_btn);
2890 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2891 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2892 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2893 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2894 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2895 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2896 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2897 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2900 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2901 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2902 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2903 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2904 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2905 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2906 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2907 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2908 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
2909 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
2910 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2911 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2912 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2913 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2915 /* show message button colors and recycle options */
2916 set_button_bg_color(color_buttons.quote_level1_btn,
2917 prefs_common.quote_level1_col);
2918 set_button_bg_color(color_buttons.quote_level2_btn,
2919 prefs_common.quote_level2_col);
2920 set_button_bg_color(color_buttons.quote_level3_btn,
2921 prefs_common.quote_level3_col);
2922 set_button_bg_color(color_buttons.uri_btn,
2923 prefs_common.uri_col);
2924 set_button_bg_color(color_buttons.tgt_folder_btn,
2925 prefs_common.tgt_folder_col);
2926 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2927 prefs_common.recycle_quote_colors);
2929 gtk_widget_show_all(vbox);
2930 quote_color_win = window;
2933 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2934 GdkEventKey *event, gpointer data)
2936 if (event && event->keyval == GDK_Escape)
2940 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2942 gchar *type = (gchar *)data;
2943 gchar *title = NULL;
2944 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2946 GtkColorSelectionDialog *dialog;
2948 if(g_strcasecmp(type, "LEVEL1") == 0) {
2949 title = _("Pick color for quotation level 1");
2950 rgbvalue = prefs_common.quote_level1_col;
2951 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2952 title = _("Pick color for quotation level 2");
2953 rgbvalue = prefs_common.quote_level2_col;
2954 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2955 title = _("Pick color for quotation level 3");
2956 rgbvalue = prefs_common.quote_level3_col;
2957 } else if(g_strcasecmp(type, "URI") == 0) {
2958 title = _("Pick color for URI");
2959 rgbvalue = prefs_common.uri_col;
2960 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
2961 title = _("Pick color for target folder");
2962 rgbvalue = prefs_common.tgt_folder_col;
2963 } else { /* Should never be called */
2964 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2968 color_dialog = gtk_color_selection_dialog_new(title);
2969 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2970 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2971 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2972 manage_window_set_transient(GTK_WINDOW(color_dialog));
2974 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2975 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2976 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2977 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2978 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2979 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2982 /* preselect the previous color in the color selection dialog */
2983 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2984 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2985 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2986 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2987 gtk_color_selection_set_color
2988 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2990 gtk_widget_show(color_dialog);
2993 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2995 GtkColorSelection *colorsel = (GtkColorSelection *)
2996 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2998 gint red, green, blue, rgbvalue;
2999 gchar *type = (gchar *)data;
3001 gtk_color_selection_get_color(colorsel, color);
3003 red = (gint) (color[0] * 255.0);
3004 green = (gint) (color[1] * 255.0);
3005 blue = (gint) (color[2] * 255.0);
3006 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
3009 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
3010 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
3011 fprintf(stderr, "Color is %x\n", rgbvalue);
3014 if (g_strcasecmp(type, "LEVEL1") == 0) {
3015 prefs_common.quote_level1_col = rgbvalue;
3016 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
3017 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
3018 prefs_common.quote_level2_col = rgbvalue;
3019 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
3020 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
3021 prefs_common.quote_level3_col = rgbvalue;
3022 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
3023 } else if (g_strcasecmp(type, "URI") == 0) {
3024 prefs_common.uri_col = rgbvalue;
3025 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
3026 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
3027 prefs_common.tgt_folder_col = rgbvalue;
3028 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
3029 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
3031 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
3033 gtk_widget_destroy(color_dialog);
3036 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
3038 gtk_widget_destroy(color_dialog);
3041 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
3045 gtk_widget_destroy(color_dialog);
3048 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
3053 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
3054 newstyle = gtk_style_copy(gtk_widget_get_default_style());
3055 newstyle->bg[GTK_STATE_NORMAL] = color;
3056 newstyle->bg[GTK_STATE_PRELIGHT] = color;
3057 newstyle->bg[GTK_STATE_ACTIVE] = color;
3059 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
3062 static void prefs_enable_message_color_toggled(void)
3066 is_active = gtk_toggle_button_get_active
3067 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
3068 gtk_widget_set_sensitive(message.button_edit_col, is_active);
3069 prefs_common.enable_color = is_active;
3072 static void prefs_recycle_colors_toggled(GtkWidget *widget)
3076 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
3077 prefs_common.recycle_quote_colors = is_active;
3080 void prefs_quote_description(void)
3082 if (!quote_desc_win)
3083 prefs_quote_description_create();
3085 manage_window_set_transient(GTK_WINDOW(quote_desc_win));
3086 gtk_widget_show(quote_desc_win);
3088 gtk_widget_hide(quote_desc_win);
3091 static void prefs_quote_description_create(void)
3100 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
3101 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
3102 _("Description of symbols"));
3103 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
3104 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
3105 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
3106 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, FALSE, FALSE);
3108 vbox = gtk_vbox_new(FALSE, 8);
3109 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
3111 hbox = gtk_hbox_new(FALSE, 8);
3112 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
3114 vbox2 = gtk_vbox_new(FALSE, 8);
3115 gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
3117 #define PACK_LABEL() \
3118 gtk_box_pack_start(GTK_BOX(vbox2), label, TRUE, TRUE, 0); \
3119 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); \
3120 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
3122 label = gtk_label_new
3125 "%N\n" /* full name of sender */
3126 "%F\n" /* first name of sender */
3127 "%I\n" /* initial of sender */
3128 "%s\n" /* subject */
3131 "%n\n" /* newsgroups */
3132 "%r\n" /* references */
3133 "%i"); /* message id */
3136 label = gtk_label_new
3137 ("?x(expr)"); /* condition */
3140 label = gtk_label_new
3141 ("%M\n" /* message body */
3142 "%Q\n" /* quoted message body */
3143 "%m\n" /* message body without signature */
3144 "%q\n" /* quoted message body without signature */
3145 "%%"); /* literal percent */
3148 label = gtk_label_new
3149 ("\\\\\n" /* literal backslash */
3150 "\\?\n" /* literal question mark */
3151 "\\(\n" /* literal opening parenthesis */
3152 "\\)"); /* literal closing parenthesis */
3155 vbox2 = gtk_vbox_new(FALSE, 8);
3156 gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
3158 label = gtk_label_new
3161 "Full Name of Sender\n"
3162 "First Name of Sender\n"
3163 "Initial of Sender\n"
3172 label = gtk_label_new
3173 (_("If x is set, displays expr"));
3176 label = gtk_label_new
3178 "Quoted message body\n"
3179 "Message body without signature\n"
3180 "Quoted message body without signature\n"
3184 label = gtk_label_new
3185 (_("Literal backslash\n"
3186 "Literal question mark\n"
3187 "Literal opening parenthesis\n"
3188 "Literal closing parenthesis"));
3193 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3194 NULL, NULL, NULL, NULL);
3195 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3197 gtk_widget_grab_default(ok_btn);
3198 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3199 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3201 (GTK_OBJECT(quote_desc_win), "key_press_event",
3202 GTK_SIGNAL_FUNC(prefs_quote_description_key_pressed),
3204 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
3205 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3207 gtk_widget_show_all(vbox);
3210 static void prefs_quote_description_key_pressed(GtkWidget *widget,
3214 if (event && event->keyval == GDK_Escape)
3218 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3222 g_return_if_fail(entry != NULL);
3224 if (!font_sel_win) {
3225 font_sel_win = gtk_font_selection_dialog_new
3226 (_("Font selection"));
3227 gtk_window_position(GTK_WINDOW(font_sel_win),
3228 GTK_WIN_POS_CENTER);
3229 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3230 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3233 (GTK_OBJECT(font_sel_win), "key_press_event",
3234 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3236 gtk_signal_connect_object
3237 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3239 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3240 GTK_OBJECT(font_sel_win));
3243 if(font_sel_conn_id) {
3244 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3246 font_sel_conn_id = gtk_signal_connect
3247 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3249 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3251 printf("%i\n", font_sel_conn_id);
3253 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3254 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3256 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3257 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3258 gtk_widget_grab_focus
3259 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3260 gtk_widget_show(font_sel_win);
3263 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3267 if (event && event->keyval == GDK_Escape)
3268 gtk_widget_hide(font_sel_win);
3271 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3275 fontname = gtk_font_selection_dialog_get_font_name
3276 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3279 gtk_entry_set_text(entry, fontname);
3284 gtk_widget_hide(font_sel_win);
3287 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3290 GtkWidget *menuitem;
3293 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3294 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3295 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3296 g_free(*((gchar **)pparam->data));
3297 *((gchar **)pparam->data) = g_strdup(charset);
3300 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3303 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3305 GtkWidget *menuitem;
3309 g_return_if_fail(optmenu != NULL);
3310 g_return_if_fail(*((gchar **)pparam->data) != NULL);
3312 menu = gtk_option_menu_get_menu(optmenu);
3313 for (cur = GTK_MENU_SHELL(menu)->children;
3314 cur != NULL; cur = cur->next) {
3315 menuitem = GTK_WIDGET(cur->data);
3316 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3317 if (!strcmp(charset, *((gchar **)pparam->data))) {
3318 gtk_option_menu_set_history(optmenu, n);
3324 gtk_option_menu_set_history(optmenu, 0);
3325 prefs_common_charset_set_data_from_optmenu(pparam);
3328 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3331 GtkWidget *menuitem;
3333 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3334 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3335 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3336 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3339 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3341 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3342 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3344 GtkWidget *menuitem;
3347 case RECV_DIALOG_ALWAYS:
3348 gtk_option_menu_set_history(optmenu, 0);
3350 case RECV_DIALOG_ACTIVE:
3351 gtk_option_menu_set_history(optmenu, 1);
3353 case RECV_DIALOG_NEVER:
3354 gtk_option_menu_set_history(optmenu, 2);
3359 menu = gtk_option_menu_get_menu(optmenu);
3360 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3361 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3364 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3367 prefs_common_cancel();
3371 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3374 if (event && event->keyval == GDK_Escape)
3375 prefs_common_cancel();
3378 static void prefs_common_ok(void)
3380 prefs_common_apply();
3381 gtk_widget_hide(dialog.window);
3382 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
3383 gtk_widget_hide(quote_desc_win);
3388 static void prefs_common_apply(void)
3390 prefs_set_data_from_dialog(param);
3391 main_window_reflect_prefs_all();
3392 prefs_common_save_config();
3394 inc_autocheck_timer_remove();
3395 inc_autocheck_timer_set();
3398 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3401 GtkWidget *menuitem;
3403 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3404 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3405 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3406 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3409 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3411 NextUnreadMsgDialogShow dialog_show;
3412 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3414 GtkWidget *menuitem;
3416 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3418 switch (dialog_show) {
3419 case NEXTUNREADMSGDIALOG_ALWAYS:
3420 gtk_option_menu_set_history(optmenu, 0);
3422 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3423 gtk_option_menu_set_history(optmenu, 1);
3425 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3426 gtk_option_menu_set_history(optmenu, 2);
3431 menu = gtk_option_menu_get_menu(optmenu);
3432 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3433 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3436 static void prefs_common_cancel(void)
3438 gtk_widget_hide(dialog.window);
3443 static struct _ComposePrefs
3447 GtkWidget *close_btn;
3450 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
3451 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
3452 static void compose_prefs_close(GtkWidget *widget);
3453 static void compose_prefs_fmt_create(void);
3455 static void compose_prefs_close(GtkWidget *widget)
3457 gtk_widget_hide(composeprefs.window);
3460 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3462 gtk_widget_hide(composeprefs.window);
3467 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3469 if (event && event->keyval == GDK_Escape) {
3470 gtk_widget_hide(composeprefs.window);
3474 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3477 GtkWidget *menuitem;
3479 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3480 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3481 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3482 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3485 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3487 RecvDialogShow dialog_show;
3488 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3490 GtkWidget *menuitem;
3492 dialog_show = *((RecvDialogShow *)pparam->data);
3494 switch (dialog_show) {
3495 case RECVDIALOG_ALWAYS:
3496 gtk_option_menu_set_history(optmenu, 0);
3498 case RECVDIALOG_WINDOW_ACTIVE:
3499 gtk_option_menu_set_history(optmenu, 1);
3501 case RECVDIALOG_NEVER:
3502 gtk_option_menu_set_history(optmenu, 2);
3507 menu = gtk_option_menu_get_menu(optmenu);
3508 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3509 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));