2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2001 Hiroyuki Yamamoto
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
28 #include <gdk/gdkkeysyms.h>
33 #include <sys/types.h>
39 #include "prefs_common.h"
40 #include "prefs_display_header.h"
41 #include "prefs_summary_column.h"
42 #include "mainwindow.h"
43 #include "summaryview.h"
44 #include "messageview.h"
45 #include "manage_window.h"
51 #include "alertpanel.h"
54 #include "folderview.h"
60 PrefsCommon prefs_common;
62 static PrefsDialog dialog;
64 static struct Receive {
65 GtkWidget *checkbtn_incext;
66 GtkWidget *entry_incext;
67 GtkWidget *button_incext;
69 GtkWidget *checkbtn_local;
70 GtkWidget *checkbtn_filter_on_inc;
71 GtkWidget *entry_spool;
73 GtkWidget *checkbtn_autochk;
74 GtkWidget *spinbtn_autochk;
75 GtkObject *spinbtn_autochk_adj;
77 GtkWidget *checkbtn_chkonstartup;
78 GtkWidget *checkbtn_noerrorpanel;
79 GtkWidget *checkbtn_scan_after_inc;
82 GtkWidget *spinbtn_maxarticle;
83 GtkObject *spinbtn_maxarticle_adj;
87 GtkWidget *checkbtn_extsend;
88 GtkWidget *entry_extsend;
89 GtkWidget *button_extsend;
91 GtkWidget *checkbtn_savemsg;
92 GtkWidget *checkbtn_queuemsg;
94 GtkWidget *optmenu_charset;
96 GtkWidget *checkbtn_returnreceipt;
99 static struct Compose {
100 GtkWidget *checkbtn_quote;
101 GtkWidget *entry_quotemark;
102 GtkWidget *text_quotefmt;
103 GtkWidget *checkbtn_autosig;
104 GtkWidget *entry_sigsep;
106 GtkWidget *entry_fw_quotemark;
107 GtkWidget *text_fw_quotefmt;
109 GtkWidget *checkbtn_autoextedit;
110 GtkWidget *checkbtn_reply_account_autosel;
111 GtkWidget *checkbtn_forward_account_autosel;
112 GtkWidget *checkbtn_reedit_account_autosel;
114 GtkWidget *spinbtn_linewrap;
115 GtkObject *spinbtn_linewrap_adj;
116 GtkWidget *checkbtn_wrapquote;
117 GtkWidget *checkbtn_wrapatsend;
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 Display {
134 GtkWidget *entry_textfont;
135 GtkWidget *button_textfont;
137 GtkWidget *entry_smallfont;
138 GtkWidget *entry_normalfont;
139 GtkWidget *entry_boldfont;
141 GtkWidget *chkbtn_folder_unread;
143 GtkWidget *chkbtn_transhdr;
145 GtkWidget *chkbtn_swapfrom;
146 GtkWidget *chkbtn_hscrollbar;
147 GtkWidget *chkbtn_useaddrbook;
148 GtkWidget *chkbtn_expand_thread;
149 GtkWidget *chkbtn_bold_unread;
151 GtkWidget *entry_datefmt;
154 static struct Message {
155 GtkWidget *chkbtn_enablecol;
156 GtkWidget *button_edit_col;
157 GtkWidget *chkbtn_mbalnum;
158 GtkWidget *chkbtn_disphdrpane;
159 GtkWidget *chkbtn_disphdr;
160 GtkWidget *spinbtn_linespc;
161 GtkObject *spinbtn_linespc_adj;
162 GtkWidget *chkbtn_headspc;
164 GtkWidget *chkbtn_smoothscroll;
165 GtkWidget *spinbtn_scrollstep;
166 GtkObject *spinbtn_scrollstep_adj;
167 GtkWidget *chkbtn_halfpage;
171 static struct Privacy {
172 GtkWidget *checkbtn_default_encrypt;
173 GtkWidget *checkbtn_ascii_armored;
174 GtkWidget *checkbtn_default_sign;
175 GtkWidget *checkbtn_auto_check_signatures;
176 GtkWidget *checkbtn_gpg_signature_popup;
177 GtkWidget *checkbtn_passphrase_grab;
178 GtkWidget *checkbtn_gpg_warning;
179 GtkWidget *optmenu_default_signkey;
183 static struct Interface {
184 /* GtkWidget *checkbtn_emacs; */
185 GtkWidget *checkbtn_openunread;
186 GtkWidget *checkbtn_openinbox;
187 GtkWidget *checkbtn_immedexec;
188 GtkWidget *checkbtn_confonexit;
189 GtkWidget *checkbtn_cleanonexit;
190 GtkWidget *checkbtn_askonclean;
191 GtkWidget *checkbtn_warnqueued;
192 GtkWidget *checkbtn_addaddrbyclick;
193 GtkWidget *optmenu_recvdialog;
194 GtkWidget *optmenu_nextunreadmsgdialog;
197 static struct Other {
198 GtkWidget *uri_combo;
199 GtkWidget *uri_entry;
200 GtkWidget *printcmd_entry;
201 GtkWidget *exteditor_combo;
202 GtkWidget *exteditor_entry;
205 static struct MessageColorButtons {
206 GtkWidget *quote_level1_btn;
207 GtkWidget *quote_level2_btn;
208 GtkWidget *quote_level3_btn;
210 GtkWidget *tgt_folder_btn;
213 static GtkWidget *quote_desc_win;
214 static GtkWidget *font_sel_win;
215 static guint font_sel_conn_id;
216 static GtkWidget *quote_color_win;
217 static GtkWidget *color_dialog;
219 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
220 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
222 static void prefs_common_default_signkey_set_data_from_optmenu
224 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
225 static void prefs_common_ascii_armored_warning(GtkWidget* widget,
228 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
229 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
230 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
231 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
234 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param);
235 static void prefs_dictionary_set_optmenu(PrefParam *pparam);
240 parameter name, default value, pointer to the prefs variable, data type,
241 pointer to the widget pointer,
242 pointer to the function for data setting,
243 pointer to the function for widget setting
246 static PrefParam param[] = {
248 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
249 &receive.checkbtn_incext,
250 prefs_set_data_from_toggle, prefs_set_toggle},
251 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
252 &receive.entry_incext,
253 prefs_set_data_from_entry, prefs_set_entry},
255 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
256 &receive.checkbtn_local,
257 prefs_set_data_from_toggle, prefs_set_toggle},
258 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
259 &receive.checkbtn_filter_on_inc,
260 prefs_set_data_from_toggle, prefs_set_toggle},
261 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
262 &receive.entry_spool,
263 prefs_set_data_from_entry, prefs_set_entry},
265 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
266 &receive.checkbtn_autochk,
267 prefs_set_data_from_toggle, prefs_set_toggle},
268 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
269 &receive.spinbtn_autochk,
270 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
271 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
272 &receive.checkbtn_chkonstartup,
273 prefs_set_data_from_toggle, prefs_set_toggle},
274 {"noerrorpanel", "FALSE", &prefs_common.noerrorpanel, P_BOOL,
275 &receive.checkbtn_noerrorpanel,
276 prefs_set_data_from_toggle, prefs_set_toggle},
277 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
278 P_BOOL, &receive.checkbtn_scan_after_inc,
279 prefs_set_data_from_toggle, prefs_set_toggle},
280 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
281 &receive.spinbtn_maxarticle,
282 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
285 {"use_ext_sendmail", "FALSE", &prefs_common.use_extsend, P_BOOL,
286 &send.checkbtn_extsend,
287 prefs_set_data_from_toggle, prefs_set_toggle},
288 {"ext_sendmail_cmd", DEFAULT_SENDMAIL_CMD,
289 &prefs_common.extsend_cmd, P_STRING,
290 &send.entry_extsend, prefs_set_data_from_entry, prefs_set_entry},
291 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
292 &send.checkbtn_savemsg,
293 prefs_set_data_from_toggle, prefs_set_toggle},
294 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
295 &send.checkbtn_queuemsg,
296 prefs_set_data_from_toggle, prefs_set_toggle},
298 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
299 &send.optmenu_charset,
300 prefs_common_charset_set_data_from_optmenu,
301 prefs_common_charset_set_optmenu},
304 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
305 &compose.checkbtn_quote,
306 prefs_set_data_from_toggle, prefs_set_toggle},
307 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
308 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
309 {"quote_format", "On %d\\n%f wrote:\\n\\n%Q",
311 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
312 prefs_set_data_from_text, prefs_set_text},
313 {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
314 &compose.entry_fw_quotemark, prefs_set_data_from_entry, prefs_set_entry},
315 {"fw_quote_format", "---------- Forwarded message ----------\\n?d(Date: %d\\n)?f(From: %f\\n)?t(To: %t\\n)?c(Cc: %c\\n)?n(Newsgroups: %n\\n)?s(Subject: %s\\n)\\n%Q",
316 &prefs_common.fw_quotefmt, P_STRING, &compose.text_fw_quotefmt,
317 prefs_set_data_from_text, prefs_set_text},
319 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
320 &compose.checkbtn_autosig,
321 prefs_set_data_from_toggle, prefs_set_toggle},
322 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
323 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
325 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
326 &compose.checkbtn_autoextedit,
327 prefs_set_data_from_toggle, prefs_set_toggle},
328 {"reply_account_autoselect", "TRUE",
329 &prefs_common.reply_account_autosel, P_BOOL,
330 &compose.checkbtn_reply_account_autosel,
331 prefs_set_data_from_toggle, prefs_set_toggle},
332 {"forward_account_autoselect", "TRUE",
333 &prefs_common.forward_account_autosel, P_BOOL,
334 &compose.checkbtn_forward_account_autosel,
335 prefs_set_data_from_toggle, prefs_set_toggle},
336 {"reedit_account_autoselect", "TRUE",
337 &prefs_common.reedit_account_autosel, P_BOOL,
338 &compose.checkbtn_reedit_account_autosel,
339 prefs_set_data_from_toggle, prefs_set_toggle},
341 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
342 &compose.spinbtn_linewrap,
343 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
344 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
345 &compose.checkbtn_wrapquote,
346 prefs_set_data_from_toggle, prefs_set_toggle},
347 {"linewrap_before_sending", "FALSE",
348 &prefs_common.linewrap_at_send, P_BOOL,
349 &compose.checkbtn_wrapatsend,
350 prefs_set_data_from_toggle, prefs_set_toggle},
351 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
352 P_BOOL, &compose.checkbtn_forward_as_attachment,
353 prefs_set_data_from_toggle, prefs_set_toggle},
354 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
355 P_BOOL, &compose.checkbtn_smart_wrapping,
356 prefs_set_data_from_toggle, prefs_set_toggle},
357 {"block_cursor", "FALSE", &prefs_common.block_cursor,
358 P_BOOL, &compose.checkbtn_block_cursor,
359 prefs_set_data_from_toggle, prefs_set_toggle},
361 {"enable_pspell", "TRUE", &prefs_common.enable_pspell,
362 P_BOOL, &compose.checkbtn_enable_pspell,
363 prefs_set_data_from_toggle, prefs_set_toggle},
364 {"pspell_path", "/usr/local/share/pspell/", &prefs_common.pspell_path,
365 P_STRING, &compose.entry_pspell_path,
366 prefs_set_data_from_entry, prefs_set_entry},
367 {"dictionary", "", &prefs_common.dictionary,
368 P_STRING, &compose.optmenu_dictionary,
369 prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
371 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
375 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
377 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
378 &prefs_common.textfont, P_STRING,
379 &display.entry_textfont,
380 prefs_set_data_from_entry, prefs_set_entry},
381 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
382 &prefs_common.smallfont, P_STRING,
383 &display.entry_smallfont,
384 prefs_set_data_from_entry, prefs_set_entry},
385 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
386 &prefs_common.boldfont, P_STRING,
387 &display.entry_boldfont,
388 prefs_set_data_from_entry, prefs_set_entry},
389 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
390 &prefs_common.normalfont, P_STRING,
391 &display.entry_normalfont,
392 prefs_set_data_from_entry, prefs_set_entry},
395 {"display_folder_unread_num", "TRUE",
396 &prefs_common.display_folder_unread, P_BOOL,
397 &display.chkbtn_folder_unread,
398 prefs_set_data_from_toggle, prefs_set_toggle},
400 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
401 &display.chkbtn_transhdr,
402 prefs_set_data_from_toggle, prefs_set_toggle},
404 /* Display: Summary View */
405 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
406 &display.chkbtn_swapfrom,
407 prefs_set_data_from_toggle, prefs_set_toggle},
408 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
409 &display.chkbtn_hscrollbar,
410 prefs_set_data_from_toggle, prefs_set_toggle},
411 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
412 &display.chkbtn_useaddrbook,
413 prefs_set_data_from_toggle, prefs_set_toggle},
414 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
415 P_STRING, &display.entry_datefmt,
416 prefs_set_data_from_entry, prefs_set_entry},
417 {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
418 &display.chkbtn_expand_thread,
419 prefs_set_data_from_toggle, prefs_set_toggle},
420 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
421 &display.chkbtn_bold_unread,
422 prefs_set_data_from_toggle, prefs_set_toggle},
424 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
427 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
429 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
432 {"summary_col_show_mark", "TRUE",
433 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
434 {"summary_col_show_unread", "TRUE",
435 &prefs_common.summary_col_visible[S_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
436 {"summary_col_show_mime", "TRUE",
437 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
438 {"summary_col_show_subject", "TRUE",
439 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
440 {"summary_col_show_from", "TRUE",
441 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
442 {"summary_col_show_date", "TRUE",
443 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
444 {"summary_col_show_size", "TRUE",
445 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
446 {"summary_col_show_number", "FALSE",
447 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
448 {"summary_col_show_score", "FALSE",
449 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
451 {"summary_col_pos_mark", "0",
452 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
453 {"summary_col_pos_unread", "1",
454 &prefs_common.summary_col_pos[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
455 {"summary_col_pos_mime", "2",
456 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
457 {"summary_col_pos_subject", "3",
458 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
459 {"summary_col_pos_from", "4",
460 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
461 {"summary_col_pos_date", "5",
462 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
463 {"summary_col_pos_size", "6",
464 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
465 {"summary_col_pos_number", "7",
466 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
467 {"summary_col_pos_score", "8",
468 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
470 {"summary_col_size_mark", "10",
471 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
472 {"summary_col_size_unread", "13",
473 &prefs_common.summary_col_size[S_COL_UNREAD], P_INT, NULL, NULL, NULL},
474 {"summary_col_size_mime", "10",
475 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
476 {"summary_col_size_subject", "200",
477 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
478 {"summary_col_size_from", "120",
479 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
480 {"summary_col_size_date", "118",
481 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
482 {"summary_col_size_size", "45",
483 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
484 {"summary_col_size_number", "40",
485 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
486 {"summary_col_size_score", "40",
487 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
490 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
492 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
494 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
496 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
498 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
500 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
503 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
505 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
508 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
510 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
512 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
514 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
516 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
518 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
520 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
522 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
524 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
526 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
528 {"compose_width", "600", &prefs_common.compose_width, P_INT,
530 {"compose_height", "560", &prefs_common.compose_height, P_INT,
534 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
535 &message.chkbtn_enablecol,
536 prefs_set_data_from_toggle, prefs_set_toggle},
538 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
540 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
542 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
544 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
546 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
548 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
550 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
551 P_BOOL, NULL, NULL, NULL},
553 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
554 &message.chkbtn_mbalnum,
555 prefs_set_data_from_toggle, prefs_set_toggle},
556 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
557 P_BOOL, &message.chkbtn_disphdrpane,
558 prefs_set_data_from_toggle, prefs_set_toggle},
559 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
560 &message.chkbtn_disphdr,
561 prefs_set_data_from_toggle, prefs_set_toggle},
562 {"line_space", "2", &prefs_common.line_space, P_INT,
563 &message.spinbtn_linespc,
564 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
565 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
566 &message.chkbtn_headspc,
567 prefs_set_data_from_toggle, prefs_set_toggle},
569 {"enable_smooth_scroll", "FALSE",
570 &prefs_common.enable_smooth_scroll, P_BOOL,
571 &message.chkbtn_smoothscroll,
572 prefs_set_data_from_toggle, prefs_set_toggle},
573 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
574 &message.spinbtn_scrollstep,
575 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
576 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
577 &message.chkbtn_halfpage,
578 prefs_set_data_from_toggle, prefs_set_toggle},
580 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
584 {"mime_image_viewer", "display '%s'",
585 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
586 {"mime_audio_player", "play '%s'",
587 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
591 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
592 &privacy.checkbtn_default_encrypt,
593 prefs_set_data_from_toggle, prefs_set_toggle},
594 {"ascii_armored", "FALSE", &prefs_common.ascii_armored, P_BOOL,
595 &privacy.checkbtn_ascii_armored,
596 prefs_set_data_from_toggle, prefs_set_toggle},
597 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
598 &privacy.checkbtn_default_sign,
599 prefs_set_data_from_toggle, prefs_set_toggle},
600 {"auto_check_signatures", "TRUE",
601 &prefs_common.auto_check_signatures, P_BOOL,
602 &privacy.checkbtn_auto_check_signatures,
603 prefs_set_data_from_toggle, prefs_set_toggle},
604 {"gpg_signature_popup", "FALSE",
605 &prefs_common.gpg_signature_popup, P_BOOL,
606 &privacy.checkbtn_gpg_signature_popup,
607 prefs_set_data_from_toggle, prefs_set_toggle},
609 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
610 &privacy.checkbtn_passphrase_grab,
611 prefs_set_data_from_toggle, prefs_set_toggle},
612 #endif /* __MINGW32__ */
613 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
614 &privacy.checkbtn_gpg_warning,
615 prefs_set_data_from_toggle, prefs_set_toggle},
616 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
617 &privacy.optmenu_default_signkey,
618 prefs_common_default_signkey_set_data_from_optmenu,
619 prefs_common_default_signkey_set_optmenu},
620 #endif /* USE_GPGME */
623 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
625 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
628 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
629 NULL, NULL, NULL}, */
631 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
632 P_BOOL, &interface.checkbtn_openunread,
633 prefs_set_data_from_toggle, prefs_set_toggle},
634 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
635 P_BOOL, &interface.checkbtn_openinbox,
636 prefs_set_data_from_toggle, prefs_set_toggle},
637 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
638 &interface.checkbtn_immedexec,
639 prefs_set_data_from_toggle, prefs_set_toggle},
640 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
641 &interface.optmenu_recvdialog,
642 prefs_common_recv_dialog_set_data_from_optmenu,
643 prefs_common_recv_dialog_set_optmenu},
644 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
645 &interface.optmenu_nextunreadmsgdialog,
646 prefs_nextunreadmsgdialog_set_data_from_optmenu,
647 prefs_nextunreadmsgdialog_set_optmenu},
649 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
650 P_BOOL, &interface.checkbtn_addaddrbyclick,
651 prefs_set_data_from_toggle, prefs_set_toggle},
652 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
653 &interface.checkbtn_confonexit,
654 prefs_set_data_from_toggle, prefs_set_toggle},
655 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
656 &send.checkbtn_returnreceipt,
657 prefs_set_data_from_toggle, prefs_set_toggle},
658 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
659 &interface.checkbtn_cleanonexit,
660 prefs_set_data_from_toggle, prefs_set_toggle},
661 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
662 &interface.checkbtn_askonclean,
663 prefs_set_data_from_toggle, prefs_set_toggle},
664 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
665 P_BOOL, &interface.checkbtn_warnqueued,
666 prefs_set_data_from_toggle, prefs_set_toggle},
669 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
670 &prefs_common.uri_cmd, P_STRING,
671 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
672 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
673 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
674 {"ext_editor_command", "gedit %s",
675 &prefs_common.ext_editor_cmd, P_STRING,
676 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
678 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
680 {"important_score", "1", &prefs_common.important_score, P_INT,
683 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
686 /* widget creating functions */
687 static void prefs_common_create (void);
688 static void prefs_receive_create (void);
689 static void prefs_send_create (void);
690 static void prefs_compose_create (void);
691 static void prefs_display_create (void);
692 static void prefs_message_create (void);
694 static void prefs_privacy_create (void);
696 static void prefs_interface_create (void);
697 static void prefs_other_create (void);
699 static void date_format_ok_btn_clicked (GtkButton *button,
701 static void date_format_cancel_btn_clicked (GtkButton *button,
703 static void date_format_key_pressed (GtkWidget *keywidget,
706 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
709 static void date_format_entry_on_change (GtkEditable *editable,
711 static void date_format_select_row (GtkWidget *date_format_list,
714 GdkEventButton *event,
715 GtkWidget *date_format);
716 static GtkWidget *date_format_create (GtkButton *button,
719 static void prefs_quote_description (void);
720 static void prefs_quote_description_create (void);
721 static void prefs_quote_colors_dialog (void);
722 static void prefs_quote_colors_dialog_create (void);
723 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
726 static void quote_color_set_dialog (GtkWidget *widget,
728 static void quote_colors_set_dialog_ok (GtkWidget *widget,
730 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
732 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
735 static void set_button_bg_color (GtkWidget *widget,
737 static void prefs_enable_message_color_toggled (void);
738 static void prefs_recycle_colors_toggled (GtkWidget *widget);
740 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
742 static void prefs_font_selection_key_pressed (GtkWidget *widget,
745 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
747 static gint prefs_common_deleted (GtkWidget *widget,
750 static void prefs_common_key_pressed (GtkWidget *widget,
753 static void prefs_common_ok (void);
754 static void prefs_common_apply (void);
755 static void prefs_common_cancel (void);
757 static void compose_prefs_fmt_open(void);
758 static void compose_prefs_fmt_create(void);
760 void prefs_common_read_config(void)
762 prefs_read_config(param, "Common", COMMON_RC);
765 void prefs_common_save_config(void)
767 prefs_save_config(param, "Common", COMMON_RC);
770 void prefs_common_open(void)
772 if (prefs_rc_is_readonly(COMMON_RC))
777 if (!dialog.window) {
778 prefs_common_create();
781 manage_window_set_transient(GTK_WINDOW(dialog.window));
782 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
783 gtk_widget_grab_focus(dialog.ok_btn);
785 prefs_set_dialog(param);
787 gtk_widget_show(dialog.window);
790 static void prefs_common_create(void)
794 debug_print(_("Creating common preferences window...\n"));
796 prefs_dialog_create(&dialog);
797 gtk_window_set_title (GTK_WINDOW(dialog.window),
798 _("Common Preferences"));
799 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
800 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
801 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
802 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
803 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
804 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
805 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
806 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
807 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
808 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
809 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
810 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
811 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
812 GTK_SIGNAL_FUNC(prefs_common_cancel),
813 GTK_OBJECT(dialog.window));
815 /* create all widgets on notebook */
816 prefs_receive_create();
817 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
819 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
820 prefs_compose_create();
821 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
822 prefs_display_create();
823 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
824 prefs_message_create();
825 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
827 prefs_privacy_create();
828 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
830 prefs_interface_create();
831 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
832 prefs_other_create();
833 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
835 compose_prefs_fmt_create();
837 gtk_widget_show_all(dialog.window);
840 static void prefs_receive_create(void)
844 GtkWidget *frame_incext;
845 GtkWidget *checkbtn_incext;
847 GtkWidget *label_incext;
848 GtkWidget *entry_incext;
849 /* GtkWidget *button_incext; */
851 GtkWidget *frame_spool;
852 GtkWidget *checkbtn_local;
853 GtkWidget *checkbtn_filter_on_inc;
854 GtkWidget *label_spool;
855 GtkWidget *entry_spool;
857 GtkWidget *hbox_autochk;
858 GtkWidget *checkbtn_autochk;
859 GtkWidget *label_autochk1;
860 GtkObject *spinbtn_autochk_adj;
861 GtkWidget *spinbtn_autochk;
862 GtkWidget *label_autochk2;
863 GtkWidget *checkbtn_chkonstartup;
864 GtkWidget *checkbtn_noerrorpanel;
865 GtkWidget *checkbtn_scan_after_inc;
868 GtkWidget *frame_news;
869 GtkWidget *label_maxarticle;
870 GtkWidget *spinbtn_maxarticle;
871 GtkObject *spinbtn_maxarticle_adj;
873 vbox1 = gtk_vbox_new (FALSE, VSPACING);
874 gtk_widget_show (vbox1);
875 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
876 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
878 PACK_FRAME(vbox1, frame_incext, _("External program"));
880 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
881 gtk_widget_show (vbox2);
882 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
883 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
885 /* Use of external incorporation program */
886 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
887 _("Use external program for incorporation"));
889 hbox = gtk_hbox_new (FALSE, 8);
890 gtk_widget_show (hbox);
891 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
892 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
894 label_incext = gtk_label_new (_("Program path"));
895 gtk_widget_show (label_incext);
896 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
898 entry_incext = gtk_entry_new ();
899 gtk_widget_show (entry_incext);
900 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
902 button_incext = gtk_button_new_with_label ("... ");
903 gtk_widget_show (button_incext);
904 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
906 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
908 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
909 gtk_widget_show (vbox2);
910 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
911 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
913 hbox = gtk_hbox_new (FALSE, 32);
914 gtk_widget_show (hbox);
915 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
917 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
918 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
919 _("Filter on incorporation"));
920 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
922 hbox = gtk_hbox_new (FALSE, 8);
923 gtk_widget_show (hbox);
924 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
925 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
927 label_spool = gtk_label_new (_("Spool directory"));
928 gtk_widget_show (label_spool);
929 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
931 entry_spool = gtk_entry_new ();
932 gtk_widget_show (entry_spool);
933 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
935 vbox2 = gtk_vbox_new (FALSE, 0);
936 gtk_widget_show (vbox2);
937 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
940 hbox_autochk = gtk_hbox_new (FALSE, 8);
941 gtk_widget_show (hbox_autochk);
942 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
944 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
945 _("Auto-check new mail"));
947 label_autochk1 = gtk_label_new (_("every"));
948 gtk_widget_show (label_autochk1);
949 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
951 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
952 spinbtn_autochk = gtk_spin_button_new
953 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
954 gtk_widget_show (spinbtn_autochk);
955 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
956 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
957 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
959 label_autochk2 = gtk_label_new (_("minute(s)"));
960 gtk_widget_show (label_autochk2);
961 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
963 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
964 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
965 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
967 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
968 _("Check new mail on startup"));
970 PACK_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel,
971 _("No error popup on receive error"));
972 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
973 _("Update all local folders after incorporation"));
976 PACK_FRAME(vbox1, frame_news, _("News"));
978 hbox = gtk_hbox_new (FALSE, 8);
979 gtk_widget_show (hbox);
980 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
981 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
983 label_maxarticle = gtk_label_new
984 (_("Maximum number of articles to download\n"
985 "(unlimited if 0 is specified)"));
986 gtk_widget_show (label_maxarticle);
987 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
988 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
990 spinbtn_maxarticle_adj =
991 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
992 spinbtn_maxarticle = gtk_spin_button_new
993 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
994 gtk_widget_show (spinbtn_maxarticle);
995 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
997 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
998 gtk_spin_button_set_numeric
999 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
1001 receive.checkbtn_incext = checkbtn_incext;
1002 receive.entry_incext = entry_incext;
1003 /* receive.button_incext = button_incext; */
1005 receive.checkbtn_local = checkbtn_local;
1006 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
1007 receive.entry_spool = entry_spool;
1009 receive.checkbtn_autochk = checkbtn_autochk;
1010 receive.spinbtn_autochk = spinbtn_autochk;
1011 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1013 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1014 receive.checkbtn_noerrorpanel = checkbtn_noerrorpanel;
1015 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1018 receive.spinbtn_maxarticle = spinbtn_maxarticle;
1019 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
1022 static void prefs_send_create(void)
1026 GtkWidget *frame_extsend;
1027 GtkWidget *vbox_extsend;
1028 GtkWidget *checkbtn_extsend;
1030 GtkWidget *label_extsend;
1031 GtkWidget *entry_extsend;
1032 /* GtkWidget *button_extsend; */
1033 GtkWidget *checkbtn_savemsg;
1034 GtkWidget *checkbtn_queuemsg;
1035 GtkWidget *label_outcharset;
1037 GtkWidget *optmenu_menu;
1038 GtkWidget *menuitem;
1039 GtkWidget *checkbtn_returnreceipt;
1041 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1042 gtk_widget_show (vbox1);
1043 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1044 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1046 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1048 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1049 gtk_widget_show (vbox_extsend);
1050 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1051 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1053 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1054 _("Use external program for sending"));
1056 hbox1 = gtk_hbox_new (FALSE, 8);
1057 gtk_widget_show (hbox1);
1058 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1059 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1061 label_extsend = gtk_label_new (_("Program path"));
1062 gtk_widget_show (label_extsend);
1063 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1065 entry_extsend = gtk_entry_new ();
1066 gtk_widget_show (entry_extsend);
1067 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1070 button_extsend = gtk_button_new_with_label ("... ");
1071 gtk_widget_show (button_extsend);
1072 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1075 vbox2 = gtk_vbox_new (FALSE, 0);
1076 gtk_widget_show (vbox2);
1077 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1079 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1080 _("Save sent messages to outbox"));
1081 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1082 _("Queue messages that fail to send"));
1083 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1084 _("Send return receipt on request"));
1086 hbox1 = gtk_hbox_new (FALSE, 8);
1087 gtk_widget_show (hbox1);
1088 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1090 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1091 gtk_widget_show (label_outcharset);
1092 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1094 optmenu = gtk_option_menu_new ();
1095 gtk_widget_show (optmenu);
1096 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1098 optmenu_menu = gtk_menu_new ();
1100 #define SET_MENUITEM(str, charset) \
1102 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1105 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1106 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1108 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1110 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1111 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1112 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1113 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1114 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1115 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1117 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1119 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1121 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1122 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1124 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1126 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1127 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1129 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1130 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1132 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1133 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1135 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1137 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1139 send.checkbtn_extsend = checkbtn_extsend;
1140 send.entry_extsend = entry_extsend;
1141 /* send.button_extsend = button_extsend; */
1143 send.checkbtn_savemsg = checkbtn_savemsg;
1144 send.checkbtn_queuemsg = checkbtn_queuemsg;
1145 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1147 send.optmenu_charset = optmenu;
1151 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1156 g_return_if_fail(param);
1157 g_return_if_fail(param->data);
1158 g_return_if_fail(param->widget);
1159 g_return_if_fail(*(param->widget));
1161 dict_name = gtkpspell_get_dictionary_menu_active_item
1162 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1163 str = *((gchar **) param->data);
1166 *((gchar **) param->data) = dict_name;
1169 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1172 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1174 GtkWidget *menuitem;
1178 g_return_if_fail(optmenu != NULL);
1179 g_return_if_fail(pparam->data != NULL);
1181 if (*(gchar **) pparam->data) {
1182 menu = gtk_option_menu_get_menu(optmenu);
1183 for (cur = GTK_MENU_SHELL(menu)->children;
1184 cur != NULL; cur = cur->next) {
1185 menuitem = GTK_WIDGET(cur->data);
1186 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem), "dict_name");
1187 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1188 gtk_option_menu_set_history(optmenu, n);
1195 gtk_option_menu_set_history(optmenu, 0);
1196 prefs_dictionary_set_data_from_optmenu(pparam);
1199 static void prefs_compose_checkbtn_enable_pspell_toggle_cb
1205 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1206 gtk_widget_set_sensitive(compose.entry_pspell_path, toggled);
1207 gtk_widget_set_sensitive(compose.optmenu_dictionary, toggled);
1208 gtk_widget_set_sensitive(compose.btn_pspell_path, toggled);
1211 static void prefs_compose_btn_pspell_path_clicked_cb(GtkWidget *widget,
1214 gchar *file_path, *tmp;
1215 GtkWidget *new_menu;
1217 file_path = filesel_select_file(_("Select dictionaries location"),
1218 prefs_common.pspell_path);
1219 if (file_path == NULL) {
1223 tmp=g_dirname(file_path);
1225 if (prefs_common.pspell_path)
1226 g_free(prefs_common.pspell_path);
1227 prefs_common.pspell_path = g_strdup_printf("%s%s",tmp,G_DIR_SEPARATOR_S);
1229 new_menu = gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path);
1230 gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_dictionary),
1233 gtk_entry_set_text(GTK_ENTRY(compose.entry_pspell_path), prefs_common.pspell_path);
1234 /* select first one */
1235 gtk_option_menu_set_history(GTK_OPTION_MENU(compose.optmenu_dictionary), 0);
1237 prefs_common.dictionary = gtkpspell_get_dictionary_menu_active_item(
1238 gtk_option_menu_get_menu(GTK_OPTION_MENU(compose.optmenu_dictionary)));
1246 static void prefs_compose_create(void)
1253 GtkWidget *frame_quote;
1254 GtkWidget *vbox_quote;
1255 GtkWidget *checkbtn_quote;
1257 GtkWidget *label_quotemark;
1258 GtkWidget *entry_quotemark;
1260 GtkWidget *label_quotefmt;
1261 GtkWidget *btn_quotedesc;
1262 GtkWidget *scrolledwin_quotefmt;
1263 GtkWidget *text_quotefmt;
1268 GtkWidget *btn_quotefmt;
1270 GtkWidget *frame_sig;
1271 GtkWidget *vbox_sig;
1272 GtkWidget *checkbtn_autosig;
1273 GtkWidget *label_sigsep;
1274 GtkWidget *entry_sigsep;
1276 GtkWidget *frame_autosel;
1277 GtkWidget *hbox_autosel;
1278 GtkWidget *vbox_autosel;
1279 GtkWidget *checkbtn_reply_account_autosel;
1280 GtkWidget *checkbtn_forward_account_autosel;
1281 GtkWidget *checkbtn_reedit_account_autosel;
1283 GtkWidget *checkbtn_autoextedit;
1285 GtkWidget *vbox_linewrap;
1290 GtkWidget *label_linewrap;
1291 GtkObject *spinbtn_linewrap_adj;
1292 GtkWidget *spinbtn_linewrap;
1293 GtkWidget *checkbtn_wrapquote;
1294 GtkWidget *checkbtn_wrapatsend;
1296 GtkWidget *checkbtn_forward_as_attachment;
1297 GtkWidget *checkbtn_smart_wrapping;
1298 GtkWidget *checkbtn_block_cursor;
1301 GtkWidget *frame_spell;
1302 GtkWidget *hbox_spell;
1303 GtkWidget *vbox_spell;
1304 GtkWidget *hbox_pspell_path;
1305 GtkWidget *checkbtn_enable_pspell;
1306 GtkWidget *label_pspell_path;
1307 GtkWidget *entry_pspell_path;
1308 GtkWidget *btn_pspell_path;
1309 GtkWidget *hbox_dictionary;
1310 GtkWidget *label_dictionary;
1311 GtkWidget *optmenu_dictionary;
1313 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1314 gtk_widget_show (vbox1);
1315 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1316 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1319 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
1321 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1322 gtk_widget_show (vbox_quote);
1323 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1324 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1326 hbox1 = gtk_hbox_new (FALSE, 32);
1327 gtk_widget_show (hbox1);
1328 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1330 hbox2 = gtk_hbox_new (FALSE, 8);
1331 gtk_widget_show (hbox2);
1332 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1334 label_quotemark = gtk_label_new (_("Quotation mark"));
1335 gtk_widget_show (label_quotemark);
1336 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1338 entry_quotemark = gtk_entry_new ();
1339 gtk_widget_show (entry_quotemark);
1340 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1341 gtk_widget_set_usize (entry_quotemark, 64, -1);
1343 PACK_CHECK_BUTTON (hbox1, checkbtn_quote,
1344 _("Quote message when replying"));
1346 hbox2 = gtk_hbox_new (FALSE, 0);
1347 gtk_widget_show (hbox2);
1348 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1350 label_quotefmt = gtk_label_new (_("Quotation format:"));
1351 gtk_widget_show (label_quotefmt);
1352 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1355 gtk_button_new_with_label (_(" Description of symbols "));
1357 gtk_widget_show (btn_quotedesc);
1358 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1359 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1360 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1363 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1364 gtk_widget_show (scrolledwin_quotefmt);
1365 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1366 gtk_scrolled_window_set_policy
1367 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1368 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1370 text_quotefmt = gtk_text_new (NULL, NULL);
1371 gtk_widget_show (text_quotefmt);
1372 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1373 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1374 gtk_widget_set_usize(text_quotefmt, -1, 60);
1377 hbox1 = gtk_hbox_new (FALSE, 32);
1378 gtk_widget_show (hbox1);
1379 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1381 btn_quotefmt = gtk_button_new_with_label (_(" Quote format "));
1382 gtk_widget_show (btn_quotefmt);
1383 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotefmt, FALSE, FALSE, 0);
1384 gtk_signal_connect(GTK_OBJECT(btn_quotefmt), "clicked",
1385 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), NULL);
1387 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1389 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1390 gtk_widget_show (vbox_sig);
1391 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1392 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1394 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1395 _("Insert signature automatically"));
1397 hbox1 = gtk_hbox_new (FALSE, 8);
1398 gtk_widget_show (hbox1);
1399 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1400 label_sigsep = gtk_label_new (_("Signature separator"));
1401 gtk_widget_show (label_sigsep);
1402 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1404 entry_sigsep = gtk_entry_new ();
1405 gtk_widget_show (entry_sigsep);
1406 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1408 gtk_widget_set_usize (entry_sigsep, 64, -1);
1410 /* Automatic (Smart) Account Selection */
1411 PACK_FRAME(vbox1, frame_autosel, _("Automatic Account Selection"));
1413 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1414 gtk_widget_show (hbox_autosel);
1415 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1416 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1418 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1419 _("when replying"));
1420 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1421 _("when forwarding"));
1422 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1423 _("when re-editing"));
1425 vbox2 = gtk_vbox_new (FALSE, 0);
1426 gtk_widget_show (vbox2);
1427 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1429 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1430 _("Automatically launch the external editor"));
1432 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1435 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1436 gtk_widget_show (vbox_linewrap);
1437 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1439 hbox3 = gtk_hbox_new (FALSE, 8);
1440 gtk_widget_show (hbox3);
1441 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1444 label_linewrap = gtk_label_new (_("Wrap messages at"));
1445 gtk_widget_show (label_linewrap);
1446 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1448 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1449 spinbtn_linewrap = gtk_spin_button_new
1450 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1451 gtk_widget_show (spinbtn_linewrap);
1452 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1453 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1454 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1456 label_linewrap = gtk_label_new (_("characters"));
1457 gtk_widget_show (label_linewrap);
1458 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1460 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1462 hbox4 = gtk_hbox_new (FALSE, 32);
1463 gtk_widget_show (hbox4);
1464 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1466 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1468 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1470 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1471 _("Forward as attachment"));
1473 PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping,
1474 _("Smart wrapping (EXPERIMENTAL)"));
1476 PACK_CHECK_BUTTON (vbox1, checkbtn_block_cursor,
1480 /* spell checker defaults */
1481 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1482 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1483 gtk_widget_show (vbox_spell);
1484 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1485 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1487 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_pspell,
1488 _("Enable spell checker (EXPERIMENTAL)"));
1490 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_pspell), "toggled",
1491 GTK_SIGNAL_FUNC(prefs_compose_checkbtn_enable_pspell_toggle_cb),
1494 hbox_pspell_path = gtk_hbox_new (FALSE, 8);
1495 gtk_widget_show(hbox_pspell_path);
1496 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_pspell_path, TRUE, TRUE, 0);
1498 label_pspell_path = gtk_label_new (_("Dictionaries path"));
1499 gtk_widget_show(label_pspell_path);
1500 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), label_pspell_path, FALSE, FALSE, 0);
1502 entry_pspell_path = gtk_entry_new();
1503 gtk_widget_show(entry_pspell_path);
1504 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), entry_pspell_path, FALSE, FALSE, 0);
1505 gtk_widget_set_usize(entry_pspell_path, 150, -1);
1506 gtk_widget_set_sensitive(entry_pspell_path, prefs_common.enable_pspell);
1508 btn_pspell_path = gtk_button_new_with_label(_("..."));
1509 gtk_widget_show(btn_pspell_path);
1510 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), btn_pspell_path, FALSE, FALSE, 0);
1511 gtk_widget_set_sensitive(btn_pspell_path, prefs_common.enable_pspell);
1513 gtk_signal_connect(GTK_OBJECT(btn_pspell_path), "clicked",
1514 GTK_SIGNAL_FUNC(prefs_compose_btn_pspell_path_clicked_cb),
1517 hbox_dictionary = gtk_hbox_new(FALSE, 8);
1518 gtk_widget_show(hbox_dictionary);
1519 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_dictionary, TRUE, TRUE, 0);
1521 label_dictionary = gtk_label_new(_("Dictionary"));
1522 gtk_widget_show(label_dictionary);
1523 gtk_box_pack_start(GTK_BOX(hbox_dictionary), label_dictionary, FALSE, FALSE, 0);
1525 optmenu_dictionary = gtk_option_menu_new();
1526 gtk_widget_show(optmenu_dictionary);
1527 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1528 gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path));
1529 gtk_box_pack_start(GTK_BOX(hbox_dictionary), optmenu_dictionary, FALSE, FALSE, 0);
1530 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_pspell);
1534 compose.checkbtn_quote = checkbtn_quote;
1535 compose.entry_quotemark = entry_quotemark;
1536 compose.text_quotefmt = text_quotefmt;
1538 compose.checkbtn_autosig = checkbtn_autosig;
1539 compose.entry_sigsep = entry_sigsep;
1541 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1542 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1543 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1544 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1546 compose.spinbtn_linewrap = spinbtn_linewrap;
1547 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1548 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1549 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1551 compose.checkbtn_forward_as_attachment =
1552 checkbtn_forward_as_attachment;
1553 compose.checkbtn_smart_wrapping =
1554 checkbtn_smart_wrapping;
1555 compose.checkbtn_block_cursor =
1556 checkbtn_block_cursor;
1559 compose.checkbtn_enable_pspell = checkbtn_enable_pspell;
1560 compose.entry_pspell_path = entry_pspell_path;
1561 compose.btn_pspell_path = btn_pspell_path;
1562 compose.optmenu_dictionary = optmenu_dictionary;
1566 static void prefs_display_create(void)
1569 GtkWidget *frame_font;
1571 GtkWidget *label_textfont;
1572 GtkWidget *entry_textfont;
1573 GtkWidget *button_textfont;
1574 GtkWidget *chkbtn_folder_unread;
1575 GtkWidget *chkbtn_transhdr;
1576 GtkWidget *frame_summary;
1578 GtkWidget *chkbtn_swapfrom;
1579 GtkWidget *chkbtn_hscrollbar;
1580 GtkWidget *chkbtn_useaddrbook;
1581 GtkWidget *chkbtn_expand_thread;
1582 GtkWidget *chkbtn_bold_unread;
1585 GtkWidget *label_datefmt;
1586 GtkWidget *button_datefmt;
1587 GtkWidget *entry_datefmt;
1588 GtkWidget *button_dispitem;
1589 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
1591 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1592 gtk_widget_show (vbox1);
1593 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1594 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1596 PACK_FRAME(vbox1, frame_font, _("Font"));
1598 table1 = gtk_table_new (4, 3, FALSE);
1600 gtk_widget_show (table1);
1601 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1602 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1603 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1604 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1606 label_textfont = gtk_label_new (_("Text"));
1607 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1608 gtk_widget_show (label_textfont);
1609 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1610 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1612 entry_textfont = gtk_entry_new ();
1613 gtk_widget_show (entry_textfont);
1614 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1615 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1617 button_textfont = gtk_button_new_with_label ("... ");
1619 gtk_widget_show (button_textfont);
1620 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1622 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1623 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1625 tmplabel = gtk_label_new (_("Small"));
1626 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1627 gtk_widget_show (tmplabel);
1628 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1629 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1631 tmpentry = gtk_entry_new ();
1632 gtk_widget_show (tmpentry);
1633 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1634 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1636 tmpbutton = gtk_button_new_with_label (" ... ");
1637 gtk_widget_show (tmpbutton);
1638 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1640 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1641 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1642 display.entry_smallfont = tmpentry;
1644 tmplabel = gtk_label_new (_("Normal"));
1645 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1646 gtk_widget_show (tmplabel);
1647 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1648 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1650 tmpentry = gtk_entry_new ();
1651 gtk_widget_show (tmpentry);
1652 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1653 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1655 tmpbutton = gtk_button_new_with_label (" ... ");
1656 gtk_widget_show (tmpbutton);
1657 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1659 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1660 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1661 display.entry_normalfont = tmpentry;
1663 tmplabel = gtk_label_new (_("Bold"));
1664 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1665 gtk_widget_show (tmplabel);
1666 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1667 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1669 tmpentry = gtk_entry_new ();
1670 gtk_widget_show (tmpentry);
1671 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1672 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1674 tmpbutton = gtk_button_new_with_label (" ... ");
1675 gtk_widget_show (tmpbutton);
1676 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1678 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1679 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1680 display.entry_boldfont = tmpentry;
1682 vbox2 = gtk_vbox_new (FALSE, 0);
1683 gtk_widget_show (vbox2);
1684 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1687 (vbox2, chkbtn_transhdr,
1688 _("Translate header name (such as `From:', `Subject:')"));
1690 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1691 _("Display unread number next to folder name"));
1693 /* ---- Summary ---- */
1695 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1697 vbox2 = gtk_vbox_new (FALSE, 0);
1698 gtk_widget_show (vbox2);
1699 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1700 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1703 (vbox2, chkbtn_swapfrom,
1704 _("Display recipient on `From' column if sender is yourself"));
1706 (vbox2, chkbtn_useaddrbook,
1707 _("Display sender using address book"));
1709 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1711 (vbox2, chkbtn_expand_thread, _("Expand threads"));
1713 (vbox2, chkbtn_bold_unread,
1714 _("Display unread messages with bold font"));
1716 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1718 hbox1 = gtk_hbox_new (FALSE, 8);
1719 gtk_widget_show (hbox1);
1720 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1722 label_datefmt = gtk_label_new (_("Date format"));
1723 gtk_widget_show (label_datefmt);
1724 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1726 entry_datefmt = gtk_entry_new ();
1727 gtk_widget_show (entry_datefmt);
1728 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1730 button_datefmt = gtk_button_new_with_label ("... ");
1732 gtk_widget_show (button_datefmt);
1733 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1734 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1735 GTK_SIGNAL_FUNC (date_format_create), NULL);
1737 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1739 hbox1 = gtk_hbox_new (FALSE, 8);
1740 gtk_widget_show (hbox1);
1741 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1743 button_dispitem = gtk_button_new_with_label
1744 (_(" Set display item of summary... "));
1745 gtk_widget_show (button_dispitem);
1746 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1747 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1748 GTK_SIGNAL_FUNC (prefs_summary_column_open),
1751 display.entry_textfont = entry_textfont;
1752 display.button_textfont = button_textfont;
1754 display.chkbtn_folder_unread = chkbtn_folder_unread;
1755 display.chkbtn_transhdr = chkbtn_transhdr;
1757 display.chkbtn_swapfrom = chkbtn_swapfrom;
1758 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1759 display.chkbtn_expand_thread = chkbtn_expand_thread;
1760 display.chkbtn_bold_unread = chkbtn_bold_unread;
1761 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1762 display.entry_datefmt = entry_datefmt;
1765 static void prefs_message_create(void)
1771 GtkWidget *chkbtn_enablecol;
1772 GtkWidget *button_edit_col;
1773 GtkWidget *chkbtn_mbalnum;
1774 GtkWidget *chkbtn_disphdrpane;
1775 GtkWidget *chkbtn_disphdr;
1776 GtkWidget *button_edit_disphdr;
1777 GtkWidget *hbox_linespc;
1778 GtkWidget *label_linespc;
1779 GtkObject *spinbtn_linespc_adj;
1780 GtkWidget *spinbtn_linespc;
1781 GtkWidget *chkbtn_headspc;
1783 GtkWidget *frame_scr;
1784 GtkWidget *vbox_scr;
1785 GtkWidget *chkbtn_smoothscroll;
1786 GtkWidget *hbox_scr;
1787 GtkWidget *label_scr;
1788 GtkObject *spinbtn_scrollstep_adj;
1789 GtkWidget *spinbtn_scrollstep;
1790 GtkWidget *chkbtn_halfpage;
1792 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1793 gtk_widget_show (vbox1);
1794 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1795 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1797 hbox1 = gtk_hbox_new (FALSE, 8);
1798 gtk_widget_show (hbox1);
1799 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1801 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1802 _("Enable coloration of message"));
1803 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1804 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1807 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1808 gtk_widget_show (button_edit_col);
1809 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1810 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1811 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1813 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1815 vbox2 = gtk_vbox_new (FALSE, 0);
1816 gtk_widget_show (vbox2);
1817 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1820 (vbox2, chkbtn_mbalnum,
1821 _("Display 2-byte alphabet and numeric with 1-byte character"));
1822 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1823 _("Display header pane above message view"));
1825 hbox1 = gtk_hbox_new (FALSE, 8);
1826 gtk_widget_show (hbox1);
1827 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1829 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1830 _("Display short headers on message view"));
1832 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1833 gtk_widget_show (button_edit_disphdr);
1834 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1836 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1837 GTK_SIGNAL_FUNC (prefs_display_header_open),
1840 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1842 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1844 hbox1 = gtk_hbox_new (FALSE, 32);
1845 gtk_widget_show (hbox1);
1846 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1848 hbox_linespc = gtk_hbox_new (FALSE, 8);
1849 gtk_widget_show (hbox1);
1850 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1852 label_linespc = gtk_label_new (_("Line space"));
1853 gtk_widget_show (label_linespc);
1854 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1857 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1858 spinbtn_linespc = gtk_spin_button_new
1859 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1860 gtk_widget_show (spinbtn_linespc);
1861 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1863 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1864 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1866 label_linespc = gtk_label_new (_("pixel(s)"));
1867 gtk_widget_show (label_linespc);
1868 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1871 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1873 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1875 vbox_scr = gtk_vbox_new (FALSE, 0);
1876 gtk_widget_show (vbox_scr);
1877 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1878 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1880 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1882 hbox1 = gtk_hbox_new (FALSE, 32);
1883 gtk_widget_show (hbox1);
1884 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1886 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1888 hbox_scr = gtk_hbox_new (FALSE, 8);
1889 gtk_widget_show (hbox_scr);
1890 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1892 label_scr = gtk_label_new (_("Step"));
1893 gtk_widget_show (label_scr);
1894 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1896 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1897 spinbtn_scrollstep = gtk_spin_button_new
1898 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1899 gtk_widget_show (spinbtn_scrollstep);
1900 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1902 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1903 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1906 label_scr = gtk_label_new (_("pixel(s)"));
1907 gtk_widget_show (label_scr);
1908 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1910 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1912 message.chkbtn_enablecol = chkbtn_enablecol;
1913 message.button_edit_col = button_edit_col;
1914 message.chkbtn_mbalnum = chkbtn_mbalnum;
1915 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1916 message.chkbtn_disphdr = chkbtn_disphdr;
1917 message.spinbtn_linespc = spinbtn_linespc;
1918 message.chkbtn_headspc = chkbtn_headspc;
1920 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1921 message.spinbtn_scrollstep = spinbtn_scrollstep;
1922 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1923 message.chkbtn_halfpage = chkbtn_halfpage;
1927 static void prefs_privacy_create(void)
1932 GtkWidget *checkbtn_default_encrypt;
1933 GtkWidget *checkbtn_ascii_armored;
1934 GtkWidget *checkbtn_default_sign;
1935 GtkWidget *checkbtn_auto_check_signatures;
1936 GtkWidget *checkbtn_gpg_signature_popup;
1937 GtkWidget *checkbtn_passphrase_grab;
1938 GtkWidget *checkbtn_gpg_warning;
1940 GtkWidget *menuitem;
1942 GtkWidget *optmenu_menu;
1944 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1945 gtk_widget_show (vbox1);
1946 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1947 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1949 vbox2 = gtk_vbox_new (FALSE, 0);
1950 gtk_widget_show (vbox2);
1951 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1953 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1954 _("Encrypt message by default"));
1956 PACK_CHECK_BUTTON (vbox2, checkbtn_ascii_armored,
1957 _("Plain ASCII armored"));
1958 gtk_signal_connect(GTK_OBJECT(checkbtn_ascii_armored), "toggled",
1959 prefs_common_ascii_armored_warning, (gpointer)0);
1961 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1962 _("Sign message by default"));
1964 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1965 _("Automatically check signatures"));
1967 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
1968 _("Show signature check result in a popup window"));
1971 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1972 _("Grab input while entering a passphrase"));
1976 (vbox2, checkbtn_gpg_warning,
1977 _("Display warning on startup if GnuPG doesn't work"));
1979 hbox1 = gtk_hbox_new (FALSE, 8);
1980 gtk_widget_show (hbox1);
1981 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1983 /* create default signkey box */
1984 label = gtk_label_new (_("Default Sign Key"));
1985 gtk_widget_show (label);
1986 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1987 optmenu = gtk_option_menu_new ();
1988 gtk_widget_show (optmenu);
1989 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1990 optmenu_menu = gtk_menu_new ();
1992 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1993 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1994 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1995 /* FIXME: disabled because not implemented */
1996 gtk_widget_set_sensitive(optmenu, FALSE);
1998 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1999 privacy.checkbtn_ascii_armored = checkbtn_ascii_armored;
2000 privacy.checkbtn_default_sign = checkbtn_default_sign;
2001 privacy.checkbtn_auto_check_signatures
2002 = checkbtn_auto_check_signatures;
2003 privacy.checkbtn_gpg_signature_popup
2004 = checkbtn_gpg_signature_popup;
2005 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2006 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2007 privacy.optmenu_default_signkey = optmenu;
2011 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
2015 GtkWidget *menuitem;
2018 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2019 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2020 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2021 g_free(*((gchar **)pparam->data));
2022 *((gchar **)pparam->data) = g_strdup(charset);
2026 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
2030 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2032 GtkWidget *menuitem;
2036 g_return_if_fail(optmenu != NULL);
2037 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2039 menu = gtk_option_menu_get_menu(optmenu);
2040 for (cur = GTK_MENU_SHELL(menu)->children;
2041 cur != NULL; cur = cur->next) {
2042 menuitem = GTK_WIDGET(cur->data);
2043 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2044 if (!strcmp(charset, *((gchar **)pparam->data))) {
2045 gtk_option_menu_set_history(optmenu, n);
2051 gtk_option_menu_set_history(optmenu, 0);
2052 prefs_common_charset_set_data_from_optmenu(pparam);
2056 static void prefs_common_ascii_armored_warning(GtkWidget* widget,
2059 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))
2060 && gtk_notebook_get_current_page(GTK_NOTEBOOK(dialog.notebook))) {
2061 alertpanel_message(_("Warning - Privacy/Plain ASCII armored"),
2062 _("Its not recommend to use the old style plain ASCII\n"
2063 "armored mode for encypted messages. It doesn't comply\n"
2064 "with the RFC 3156 - MIME security with OpenPGP."));
2067 #endif /* USE_GPGME */
2069 static void prefs_interface_create(void)
2074 /* GtkWidget *checkbtn_emacs; */
2075 GtkWidget *checkbtn_openunread;
2076 GtkWidget *checkbtn_openinbox;
2077 GtkWidget *checkbtn_immedexec;
2080 GtkWidget *optmenu_recvdialog;
2082 GtkWidget *menuitem;
2084 GtkWidget *frame_addr;
2085 GtkWidget *vbox_addr;
2086 GtkWidget *checkbtn_addaddrbyclick;
2088 GtkWidget *frame_exit;
2089 GtkWidget *vbox_exit;
2090 GtkWidget *checkbtn_confonexit;
2091 GtkWidget *checkbtn_cleanonexit;
2092 GtkWidget *checkbtn_askonclean;
2093 GtkWidget *checkbtn_warnqueued;
2096 GtkWidget *optmenu_nextunreadmsgdialog;
2097 GtkWidget *optmenu_nextunreadmsgdialog_menu;
2098 GtkWidget *nextunreadmsgdialog_menuitem;
2100 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2101 gtk_widget_show (vbox1);
2102 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2103 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2105 vbox2 = gtk_vbox_new (FALSE, 0);
2106 gtk_widget_show (vbox2);
2107 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2109 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2110 _("Emulate the behavior of mouse operation of\n"
2111 "Emacs-based mailer"));
2112 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2113 GTK_JUSTIFY_LEFT); */
2116 (vbox2, checkbtn_openunread,
2117 _("Open first unread message when entering a folder"));
2120 (vbox2, checkbtn_openinbox,
2121 _("Go to inbox after receiving new mail"));
2123 vbox3 = gtk_vbox_new (FALSE, 0);
2124 gtk_widget_show (vbox3);
2125 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2128 (vbox3, checkbtn_immedexec,
2129 _("Execute immediately when moving or deleting messages"));
2131 hbox1 = gtk_hbox_new (FALSE, 0);
2132 gtk_widget_show (hbox1);
2133 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2135 label = gtk_label_new
2136 (_("(Messages will be marked until execution if this is turned off)"));
2137 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2138 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2140 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2142 hbox1 = gtk_hbox_new (FALSE, 8);
2143 gtk_widget_show (hbox1);
2144 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2146 label = gtk_label_new (_("Show receive dialog"));
2147 gtk_widget_show (label);
2148 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2150 optmenu_recvdialog = gtk_option_menu_new ();
2151 gtk_widget_show (optmenu_recvdialog);
2152 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2155 menu = gtk_menu_new ();
2156 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2157 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2158 RECV_DIALOG_ACTIVE);
2159 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2161 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2163 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2165 vbox_addr = gtk_vbox_new (FALSE, 0);
2166 gtk_widget_show (vbox_addr);
2167 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2168 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2171 (vbox_addr, checkbtn_addaddrbyclick,
2172 _("Add address to destination when double-clicked"));
2174 /* Next Unread Message Dialog */
2175 hbox2 = gtk_hbox_new (FALSE, 8);
2176 gtk_widget_show (hbox2);
2177 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
2179 label = gtk_label_new (_("Show no-unread-message dialog"));
2180 gtk_widget_show (label);
2181 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
2183 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2184 gtk_widget_show (optmenu_nextunreadmsgdialog);
2185 gtk_box_pack_start (GTK_BOX (hbox2), optmenu_nextunreadmsgdialog,
2188 optmenu_nextunreadmsgdialog_menu = gtk_menu_new ();
2189 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2190 _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2191 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2192 _("Assume 'Yes'"), NEXTUNREADMSGDIALOG_ASSUME_YES);
2193 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2194 _("Assume 'No'"), NEXTUNREADMSGDIALOG_ASSUME_NO);
2196 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog),
2197 optmenu_nextunreadmsgdialog_menu);
2200 /* Receive Dialog */
2201 /* hbox = gtk_hbox_new (FALSE, 8);
2202 gtk_widget_show (hbox);
2203 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2205 label = gtk_label_new (_("Show receive Dialog"));
2206 gtk_widget_show (label);
2207 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2209 recvdialog_optmenu = gtk_option_menu_new ();
2210 gtk_widget_show (recvdialog_optmenu);
2211 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2213 recvdialog_optmenu_menu = gtk_menu_new ();
2215 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2216 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2217 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2219 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2222 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2224 vbox_exit = gtk_vbox_new (FALSE, 0);
2225 gtk_widget_show (vbox_exit);
2226 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2227 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2229 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2230 _("Confirm on exit"));
2232 hbox1 = gtk_hbox_new (FALSE, 32);
2233 gtk_widget_show (hbox1);
2234 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2236 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2237 _("Empty trash on exit"));
2238 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2239 _("Ask before emptying"));
2240 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2242 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2243 _("Warn if there are queued messages"));
2245 /* interface.checkbtn_emacs = checkbtn_emacs; */
2246 interface.checkbtn_openunread = checkbtn_openunread;
2247 interface.checkbtn_openinbox = checkbtn_openinbox;
2248 interface.checkbtn_immedexec = checkbtn_immedexec;
2249 interface.optmenu_recvdialog = optmenu_recvdialog;
2250 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2251 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2252 interface.checkbtn_confonexit = checkbtn_confonexit;
2253 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2254 interface.checkbtn_askonclean = checkbtn_askonclean;
2255 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2258 static void prefs_other_create(void)
2263 GtkWidget *uri_frame;
2264 GtkWidget *uri_label;
2265 GtkWidget *uri_combo;
2266 GtkWidget *uri_entry;
2268 GtkWidget *print_frame;
2269 GtkWidget *printcmd_label;
2270 GtkWidget *printcmd_entry;
2272 GtkWidget *exteditor_frame;
2273 GtkWidget *exteditor_label;
2274 GtkWidget *exteditor_combo;
2275 GtkWidget *exteditor_entry;
2277 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2278 gtk_widget_show (vbox1);
2279 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2280 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2282 PACK_FRAME(vbox1, uri_frame,
2283 _("External Web browser (%s will be replaced with URI)"));
2285 hbox1 = gtk_hbox_new (FALSE, 8);
2286 gtk_widget_show (hbox1);
2287 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2288 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2290 uri_label = gtk_label_new (_("Command"));
2291 gtk_widget_show(uri_label);
2292 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2294 uri_combo = gtk_combo_new ();
2295 gtk_widget_show (uri_combo);
2296 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2297 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2298 "netscape -remote 'openURL(%s,raise)'",
2300 "gnome-moz-remote --raise --newwin '%s'",
2301 "kterm -e w3m '%s'",
2302 "kterm -e lynx '%s'",
2305 uri_entry = GTK_COMBO (uri_combo)->entry;
2307 PACK_FRAME(vbox1, print_frame,
2308 _("Printing (%s will be replaced with file name)"));
2310 hbox1 = gtk_hbox_new (FALSE, 8);
2311 gtk_widget_show (hbox1);
2312 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2313 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2315 printcmd_label = gtk_label_new (_("Command"));
2316 gtk_widget_show (printcmd_label);
2317 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2319 printcmd_entry = gtk_entry_new ();
2320 gtk_widget_show (printcmd_entry);
2321 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2323 PACK_FRAME(vbox1, exteditor_frame,
2324 _("External editor (%s will be replaced with file name)"));
2326 hbox1 = gtk_hbox_new (FALSE, 8);
2327 gtk_widget_show (hbox1);
2328 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2329 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2331 exteditor_label = gtk_label_new (_("Command"));
2332 gtk_widget_show (exteditor_label);
2333 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2335 exteditor_combo = gtk_combo_new ();
2336 gtk_widget_show (exteditor_combo);
2337 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2338 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2341 "mgedit --no-fork %s",
2347 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2349 other.uri_combo = uri_combo;
2350 other.uri_entry = uri_entry;
2351 other.printcmd_entry = printcmd_entry;
2353 other.exteditor_combo = exteditor_combo;
2354 other.exteditor_entry = exteditor_entry;
2357 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2359 GtkWidget *datefmt_sample = NULL;
2362 g_return_if_fail(widget != NULL);
2363 g_return_if_fail(*widget != NULL);
2364 g_return_if_fail(display.entry_datefmt != NULL);
2366 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2367 (GTK_OBJECT(*widget), "datefmt_sample"));
2368 g_return_if_fail(datefmt_sample != NULL);
2370 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2371 g_free(prefs_common.date_format);
2372 prefs_common.date_format = text;
2373 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2375 gtk_widget_destroy(*widget);
2379 static void date_format_cancel_btn_clicked(GtkButton *button,
2382 g_return_if_fail(widget != NULL);
2383 g_return_if_fail(*widget != NULL);
2385 gtk_widget_destroy(*widget);
2389 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2392 if (event && event->keyval == GDK_Escape)
2393 date_format_cancel_btn_clicked(NULL, widget);
2396 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2397 GdkEventAny *event, GtkWidget **widget)
2399 g_return_val_if_fail(widget != NULL, FALSE);
2400 g_return_val_if_fail(*widget != NULL, FALSE);
2406 static void date_format_entry_on_change(GtkEditable *editable,
2410 struct tm *cal_time;
2414 cur_time = time(NULL);
2415 cal_time = localtime(&cur_time);
2417 text = gtk_editable_get_chars(editable, 0, -1);
2419 strftime(buffer, sizeof buffer, text, cal_time);
2420 gtk_label_set_text(example, buffer);
2423 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2424 gint column, GdkEventButton *event,
2425 GtkWidget *date_format)
2431 GtkWidget *datefmt_sample;
2433 /* only on double click */
2434 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2437 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2438 (GTK_OBJECT(date_format), "datefmt_sample"));
2440 g_return_if_fail(date_format_list != NULL);
2441 g_return_if_fail(date_format != NULL);
2442 g_return_if_fail(datefmt_sample != NULL);
2444 /* get format from clist */
2445 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2447 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2448 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2450 /* insert the format into the text entry */
2451 new_format = g_malloc(strlen(old_format) + 3);
2453 strncpy(new_format, old_format, cur_pos);
2454 new_format[cur_pos] = '\0';
2455 strcat(new_format, format);
2456 strcat(new_format, &old_format[cur_pos]);
2458 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2459 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2464 static GtkWidget *date_format_create(GtkButton *button, void *data)
2466 static GtkWidget *datefmt_win = NULL;
2468 GtkWidget *scrolledwindow1;
2469 GtkWidget *datefmt_clist;
2474 GtkWidget *confirm_area;
2476 GtkWidget *cancel_btn;
2477 GtkWidget *datefmt_entry;
2483 { "%a", _("the full abbreviated weekday name") },
2484 { "%A", _("the full weekday name") },
2485 { "%b", _("the abbreviated month name") },
2486 { "%B", _("the full month name") },
2487 { "%c", _("the preferred date and time for the current locale") },
2488 { "%C", _("the century number (year/100)") },
2489 { "%d", _("the day of the month as a decimal number") },
2490 { "%H", _("the hour as a decimal number using a 24-hour clock") },
2491 { "%I", _("the hour as a decimal number using a 12-hour clock") },
2492 { "%j", _("the day of the year as a decimal number") },
2493 { "%m", _("the month as a decimal number") },
2494 { "%M", _("the minute as a decimal number") },
2495 { "%p", _("either AM or PM") },
2496 { "%S", _("the second as a decimal number") },
2497 { "%w", _("the day of the week as a decimal number") },
2498 { "%x", _("the preferred date for the current locale") },
2499 { "%y", _("the last two digits of a year") },
2500 { "%Y", _("the year as a decimal number") },
2501 { "%Z", _("the time zone or name or abbreviation") }
2506 const gint TIME_FORMAT_ELEMS =
2507 sizeof time_format / sizeof time_format[0];
2509 if (datefmt_win) return datefmt_win;
2511 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2512 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2513 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2514 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2515 gtk_widget_set_usize(datefmt_win, 440, 280);
2517 vbox1 = gtk_vbox_new(FALSE, 10);
2518 gtk_widget_show(vbox1);
2519 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2521 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2522 gtk_scrolled_window_set_policy
2523 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2524 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2525 gtk_widget_show(scrolledwindow1);
2526 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2528 titles[0] = _("Specifier");
2529 titles[1] = _("Description");
2530 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2531 gtk_widget_show(datefmt_clist);
2532 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2533 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2535 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2536 GTK_SELECTION_BROWSE);
2538 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2540 /* phoney casting necessary because of gtk... */
2541 text[0] = (gchar *)time_format[i].fmt;
2542 text[1] = (gchar *)time_format[i].txt;
2543 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2546 table = gtk_table_new(2, 2, FALSE);
2547 gtk_widget_show(table);
2548 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2549 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2550 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2552 label1 = gtk_label_new(_("Date format"));
2553 gtk_widget_show(label1);
2554 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2556 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2557 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2559 datefmt_entry = gtk_entry_new_with_max_length(256);
2560 gtk_widget_show(datefmt_entry);
2561 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2562 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2564 /* we need the "sample" entry box; add it as data so callbacks can
2565 * get the entry box */
2566 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2569 label2 = gtk_label_new(_("Example"));
2570 gtk_widget_show(label2);
2571 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2573 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2574 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2576 label3 = gtk_label_new("");
2577 gtk_widget_show(label3);
2578 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2579 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2580 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2581 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2583 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2584 &cancel_btn, _("Cancel"), NULL, NULL);
2585 gtk_widget_grab_default(ok_btn);
2586 gtk_widget_show(confirm_area);
2588 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2590 /* set the current format */
2591 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2592 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2595 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2596 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2598 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2599 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2601 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2602 GTK_SIGNAL_FUNC(date_format_key_pressed),
2604 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2605 GTK_SIGNAL_FUNC(date_format_on_delete),
2607 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2608 GTK_SIGNAL_FUNC(date_format_entry_on_change),
2611 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2612 GTK_SIGNAL_FUNC(date_format_select_row),
2615 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2616 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2618 gtk_widget_show(datefmt_win);
2619 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2621 gtk_widget_grab_focus(ok_btn);
2626 void prefs_quote_colors_dialog(void)
2628 if (!quote_color_win)
2629 prefs_quote_colors_dialog_create();
2630 gtk_widget_show(quote_color_win);
2631 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2634 gtk_widget_hide(quote_color_win);
2636 textview_update_message_colors();
2637 main_window_reflect_prefs_all();
2640 static void prefs_quote_colors_dialog_create(void)
2645 GtkWidget *quotelevel1_label;
2646 GtkWidget *quotelevel2_label;
2647 GtkWidget *quotelevel3_label;
2648 GtkWidget *uri_label;
2649 GtkWidget *tgt_folder_label;
2652 //GtkWidget *cancel_btn;
2653 GtkWidget *recycle_colors_btn;
2654 GtkWidget *frame_colors;
2656 window = gtk_window_new(GTK_WINDOW_DIALOG);
2657 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2658 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2659 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2660 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2661 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2663 vbox = gtk_vbox_new (FALSE, VSPACING);
2664 gtk_container_add (GTK_CONTAINER (window), vbox);
2665 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2666 PACK_FRAME(vbox, frame_colors, _("Colors"));
2668 table = gtk_table_new (4, 2, FALSE);
2669 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2670 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2671 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2672 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2675 color_buttons.quote_level1_btn = gtk_button_new();
2676 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2677 0, 1, 0, 1, 0, 0, 0, 0);
2678 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2679 gtk_container_set_border_width
2680 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2682 color_buttons.quote_level2_btn = gtk_button_new();
2683 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2684 0, 1, 1, 2, 0, 0, 0, 0);
2685 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2686 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2688 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2689 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2690 0, 1, 2, 3, 0, 0, 0, 0);
2691 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2692 gtk_container_set_border_width
2693 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2695 color_buttons.uri_btn = gtk_button_new_with_label ("");
2696 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2697 0, 1, 3, 4, 0, 0, 0, 0);
2698 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2699 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2701 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2702 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2703 0, 1, 4, 5, 0, 0, 0, 0);
2704 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
2705 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2707 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2708 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2709 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2710 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2711 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2713 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2714 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2715 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2716 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2717 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2719 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2720 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2721 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2722 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2723 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2725 uri_label = gtk_label_new (_("URI link"));
2726 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2727 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2728 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2729 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2731 tgt_folder_label = gtk_label_new (_("Target folder"));
2732 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
2733 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2734 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
2735 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
2737 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2738 _("Recycle quote colors"));
2740 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2741 NULL, NULL, NULL, NULL);
2742 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2744 gtk_widget_grab_default(ok_btn);
2745 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2746 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2747 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2748 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2749 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2750 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2751 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2752 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2755 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2756 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2757 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2758 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2759 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2760 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2761 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2762 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2763 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
2764 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
2765 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2766 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2767 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2768 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2770 /* show message button colors and recycle options */
2771 set_button_bg_color(color_buttons.quote_level1_btn,
2772 prefs_common.quote_level1_col);
2773 set_button_bg_color(color_buttons.quote_level2_btn,
2774 prefs_common.quote_level2_col);
2775 set_button_bg_color(color_buttons.quote_level3_btn,
2776 prefs_common.quote_level3_col);
2777 set_button_bg_color(color_buttons.uri_btn,
2778 prefs_common.uri_col);
2779 set_button_bg_color(color_buttons.tgt_folder_btn,
2780 prefs_common.tgt_folder_col);
2781 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2782 prefs_common.recycle_quote_colors);
2784 gtk_widget_show_all(vbox);
2785 quote_color_win = window;
2788 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2789 GdkEventKey *event, gpointer data)
2791 if (event && event->keyval == GDK_Escape)
2795 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2797 gchar *type = (gchar *)data;
2798 gchar *title = NULL;
2799 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2801 GtkColorSelectionDialog *dialog;
2803 if(g_strcasecmp(type, "LEVEL1") == 0) {
2804 title = _("Pick color for quotation level 1");
2805 rgbvalue = prefs_common.quote_level1_col;
2806 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2807 title = _("Pick color for quotation level 2");
2808 rgbvalue = prefs_common.quote_level2_col;
2809 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2810 title = _("Pick color for quotation level 3");
2811 rgbvalue = prefs_common.quote_level3_col;
2812 } else if(g_strcasecmp(type, "URI") == 0) {
2813 title = _("Pick color for URI");
2814 rgbvalue = prefs_common.uri_col;
2815 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
2816 title = _("Pick color for target folder");
2817 rgbvalue = prefs_common.tgt_folder_col;
2818 } else { /* Should never be called */
2819 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2823 color_dialog = gtk_color_selection_dialog_new(title);
2824 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2825 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2826 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2827 manage_window_set_transient(GTK_WINDOW(color_dialog));
2829 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2830 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2831 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2832 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2833 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2834 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2837 /* preselect the previous color in the color selection dialog */
2838 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2839 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2840 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2841 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2842 gtk_color_selection_set_color
2843 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2845 gtk_widget_show(color_dialog);
2848 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2850 GtkColorSelection *colorsel = (GtkColorSelection *)
2851 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2853 gint red, green, blue, rgbvalue;
2854 gchar *type = (gchar *)data;
2856 gtk_color_selection_get_color(colorsel, color);
2858 red = (gint) (color[0] * 255.0);
2859 green = (gint) (color[1] * 255.0);
2860 blue = (gint) (color[2] * 255.0);
2861 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2864 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2865 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2866 fprintf(stderr, "Color is %x\n", rgbvalue);
2869 if (g_strcasecmp(type, "LEVEL1") == 0) {
2870 prefs_common.quote_level1_col = rgbvalue;
2871 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2872 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2873 prefs_common.quote_level2_col = rgbvalue;
2874 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2875 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2876 prefs_common.quote_level3_col = rgbvalue;
2877 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2878 } else if (g_strcasecmp(type, "URI") == 0) {
2879 prefs_common.uri_col = rgbvalue;
2880 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2881 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
2882 prefs_common.tgt_folder_col = rgbvalue;
2883 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
2884 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
2886 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2888 gtk_widget_destroy(color_dialog);
2891 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2893 gtk_widget_destroy(color_dialog);
2896 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
2900 gtk_widget_destroy(color_dialog);
2903 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2908 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2909 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2910 newstyle->bg[GTK_STATE_NORMAL] = color;
2911 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2912 newstyle->bg[GTK_STATE_ACTIVE] = color;
2914 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2917 static void prefs_enable_message_color_toggled(void)
2921 is_active = gtk_toggle_button_get_active
2922 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2923 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2924 prefs_common.enable_color = is_active;
2927 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2931 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2932 prefs_common.recycle_quote_colors = is_active;
2935 static void prefs_quote_description(void)
2937 if (!quote_desc_win)
2938 prefs_quote_description_create();
2940 gtk_widget_show(quote_desc_win);
2942 gtk_widget_hide(quote_desc_win);
2945 static void prefs_quote_description_create(void)
2953 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2954 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2955 _("Description of symbols"));
2956 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2957 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2958 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2959 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2961 vbox = gtk_vbox_new(FALSE, 8);
2962 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2964 hbox = gtk_hbox_new(FALSE, 4);
2965 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2967 label = gtk_label_new
2971 "%N\n" /* full name */
2972 "%F\n" /* first name */
2973 "%I\n" /* sender's initial */
2974 "%s\n" /* subject line */
2977 "%n\n" /* newsgroups */
2978 "%i\n" /* message id */
2979 "%r\n" /* references */
2990 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2991 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2993 label = gtk_label_new
2994 (_("DESCRIPTION\n\n"
2997 "Full Name of Sender\n"
2998 "First Name of Sender\n"
2999 "Initial of Sender\n"
3007 "Display the information\n"
3008 "If the information x is set, displays expr\n"
3011 "Quoted message body\n"
3012 "Message body without signature\n"
3013 "Quoted message body without signature\n"
3016 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
3017 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
3019 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3020 NULL, NULL, NULL, NULL);
3021 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3023 gtk_widget_grab_default(ok_btn);
3024 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3025 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3027 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
3028 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3030 gtk_widget_show_all(vbox);
3033 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3037 g_return_if_fail(entry != NULL);
3039 if (!font_sel_win) {
3040 font_sel_win = gtk_font_selection_dialog_new
3041 (_("Font selection"));
3042 gtk_window_position(GTK_WINDOW(font_sel_win),
3043 GTK_WIN_POS_CENTER);
3044 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3045 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3048 (GTK_OBJECT(font_sel_win), "key_press_event",
3049 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3051 gtk_signal_connect_object
3052 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3054 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3055 GTK_OBJECT(font_sel_win));
3058 if(font_sel_conn_id) {
3059 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3061 font_sel_conn_id = gtk_signal_connect
3062 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3064 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3066 printf("%i\n", font_sel_conn_id);
3068 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3069 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3071 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3072 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3073 gtk_widget_grab_focus
3074 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3075 gtk_widget_show(font_sel_win);
3078 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3082 if (event && event->keyval == GDK_Escape)
3083 gtk_widget_hide(font_sel_win);
3086 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3090 fontname = gtk_font_selection_dialog_get_font_name
3091 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3094 gtk_entry_set_text(entry, fontname);
3099 gtk_widget_hide(font_sel_win);
3102 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3105 GtkWidget *menuitem;
3108 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3109 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3110 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3111 g_free(*((gchar **)pparam->data));
3112 *((gchar **)pparam->data) = g_strdup(charset);
3115 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3118 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3120 GtkWidget *menuitem;
3124 g_return_if_fail(optmenu != NULL);
3125 g_return_if_fail(*((gchar **)pparam->data) != NULL);
3127 menu = gtk_option_menu_get_menu(optmenu);
3128 for (cur = GTK_MENU_SHELL(menu)->children;
3129 cur != NULL; cur = cur->next) {
3130 menuitem = GTK_WIDGET(cur->data);
3131 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3132 if (!strcmp(charset, *((gchar **)pparam->data))) {
3133 gtk_option_menu_set_history(optmenu, n);
3139 gtk_option_menu_set_history(optmenu, 0);
3140 prefs_common_charset_set_data_from_optmenu(pparam);
3143 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3146 GtkWidget *menuitem;
3148 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3149 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3150 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3151 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3154 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3156 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3157 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3159 GtkWidget *menuitem;
3162 case RECV_DIALOG_ALWAYS:
3163 gtk_option_menu_set_history(optmenu, 0);
3165 case RECV_DIALOG_ACTIVE:
3166 gtk_option_menu_set_history(optmenu, 1);
3168 case RECV_DIALOG_NEVER:
3169 gtk_option_menu_set_history(optmenu, 2);
3174 menu = gtk_option_menu_get_menu(optmenu);
3175 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3176 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3179 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3182 prefs_common_cancel();
3186 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3189 if (event && event->keyval == GDK_Escape)
3190 prefs_common_cancel();
3193 static void prefs_common_ok(void)
3195 prefs_common_apply();
3196 gtk_widget_hide(dialog.window);
3197 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
3198 gtk_widget_hide(quote_desc_win);
3203 static void prefs_common_apply(void)
3205 prefs_set_data_from_dialog(param);
3206 main_window_reflect_prefs_all();
3207 prefs_common_save_config();
3209 inc_autocheck_timer_remove();
3210 inc_autocheck_timer_set();
3213 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3216 GtkWidget *menuitem;
3218 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3219 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3220 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3221 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3224 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3226 NextUnreadMsgDialogShow dialog_show;
3227 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3229 GtkWidget *menuitem;
3231 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3233 switch (dialog_show) {
3234 case NEXTUNREADMSGDIALOG_ALWAYS:
3235 gtk_option_menu_set_history(optmenu, 0);
3237 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3238 gtk_option_menu_set_history(optmenu, 1);
3240 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3241 gtk_option_menu_set_history(optmenu, 2);
3246 menu = gtk_option_menu_get_menu(optmenu);
3247 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3248 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3251 static void prefs_common_cancel(void)
3253 gtk_widget_hide(dialog.window);
3258 static struct _ComposePrefs
3262 GtkWidget *close_btn;
3265 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
3266 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
3267 static void compose_prefs_close(GtkWidget *widget);
3268 static void compose_prefs_fmt_create(void);
3270 static void compose_prefs_fmt_open(void)
3272 if (composeprefs.window == NULL)
3273 compose_prefs_fmt_create();
3274 gtk_widget_show(composeprefs.window);
3278 static void compose_prefs_fmt_create(void)
3281 GtkWidget *close_btn;
3283 GtkWidget *frame_quote;
3284 GtkWidget *vbox_quote;
3286 GtkWidget *checkbtn_quote;
3287 GtkWidget *label_quotemark;
3288 GtkWidget *entry_quotemark;
3289 GtkWidget *scrolledwin_quotefmt;
3290 GtkWidget *text_quotefmt;
3291 GtkWidget *label_quotefmt;
3292 GtkWidget *btn_quotedesc;
3294 GtkWidget *label_fw_quotemark;
3295 GtkWidget *entry_fw_quotemark;
3296 GtkWidget *label_fw_quotefmt;
3297 GtkWidget *text_fw_quotefmt;
3299 window = gtk_window_new(GTK_WINDOW_DIALOG);
3300 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
3301 gtk_window_set_title(GTK_WINDOW(window), _("Compose Preferences"));
3302 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3303 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3304 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3305 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3306 GTK_SIGNAL_FUNC(compose_prefs_delete_event),
3308 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3309 GTK_SIGNAL_FUNC(compose_prefs_key_pressed),
3312 vbox_quote = gtk_vbox_new(FALSE, 8);
3313 gtk_container_add(GTK_CONTAINER(window), vbox_quote);
3315 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
3316 _("Quote message when replying"));
3318 hbox1 = gtk_hbox_new (FALSE, 8);
3319 gtk_widget_show (hbox1);
3320 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3322 label_quotemark = gtk_label_new (_("Quotation mark"));
3323 gtk_widget_show (label_quotemark);
3324 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
3326 entry_quotemark = gtk_entry_new ();
3327 gtk_widget_show (entry_quotemark);
3328 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
3329 gtk_widget_set_usize (entry_quotemark, 64, -1);
3331 hbox1 = gtk_hbox_new (FALSE, 0);
3332 gtk_widget_show (hbox1);
3333 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3335 label_quotefmt = gtk_label_new (_("Quotation format:"));
3336 gtk_widget_show (label_quotefmt);
3337 gtk_box_pack_start (GTK_BOX (hbox1), label_quotefmt, FALSE, FALSE, 0);
3339 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3340 gtk_widget_show (scrolledwin_quotefmt);
3341 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3342 gtk_scrolled_window_set_policy
3343 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3344 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3346 text_quotefmt = gtk_text_new (NULL, NULL);
3347 gtk_widget_show (text_quotefmt);
3348 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
3349 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
3350 gtk_widget_set_usize(text_quotefmt, 400, 60);
3352 hbox1 = gtk_hbox_new (FALSE, 8);
3353 gtk_widget_show (hbox1);
3354 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3356 label_fw_quotemark = gtk_label_new (_("Forward quotation mark"));
3357 gtk_widget_show (label_fw_quotemark);
3358 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotemark, FALSE, FALSE, 0);
3360 entry_fw_quotemark = gtk_entry_new ();
3361 gtk_widget_show (entry_fw_quotemark);
3362 gtk_box_pack_start (GTK_BOX (hbox1), entry_fw_quotemark, FALSE, FALSE, 0);
3363 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
3365 hbox1 = gtk_hbox_new (FALSE, 0);
3366 gtk_widget_show (hbox1);
3367 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3369 label_fw_quotefmt = gtk_label_new (_("Forward format:"));
3370 gtk_widget_show (label_fw_quotefmt);
3371 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotefmt, FALSE, FALSE, 0);
3373 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3374 gtk_widget_show (scrolledwin_quotefmt);
3375 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3376 gtk_scrolled_window_set_policy
3377 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3378 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3380 text_fw_quotefmt = gtk_text_new (NULL, NULL);
3381 gtk_widget_show (text_fw_quotefmt);
3382 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt);
3383 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
3384 gtk_widget_set_usize(text_fw_quotefmt, 400, 60);
3386 hbox1 = gtk_hbox_new (FALSE, 0);
3387 gtk_widget_show (hbox1);
3388 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
3391 gtk_button_new_with_label (_(" Description of symbols "));
3392 gtk_widget_show (btn_quotedesc);
3393 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc,
3396 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
3397 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
3400 gtkut_button_set_create(&hbox1, &close_btn, _("Close"),
3401 NULL, NULL, NULL, NULL);
3402 gtk_box_pack_end(GTK_BOX(vbox_quote), hbox1, FALSE, FALSE, 0);
3403 gtk_widget_grab_default(close_btn);
3405 gtk_signal_connect(GTK_OBJECT(close_btn), "clicked",
3406 GTK_SIGNAL_FUNC(compose_prefs_close), NULL);
3408 gtk_widget_show_all(vbox_quote);
3410 composeprefs.window = window;
3411 composeprefs.close_btn = close_btn;
3413 compose.checkbtn_quote = checkbtn_quote;
3414 compose.entry_quotemark = entry_quotemark;
3415 compose.text_quotefmt = text_quotefmt;
3416 compose.entry_fw_quotemark = entry_fw_quotemark;
3417 compose.text_fw_quotefmt = text_fw_quotefmt;
3420 static void compose_prefs_close(GtkWidget *widget)
3422 gtk_widget_hide(composeprefs.window);
3425 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3427 gtk_widget_hide(composeprefs.window);
3432 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3434 if (event && event->keyval == GDK_Escape) {
3435 gtk_widget_hide(composeprefs.window);
3439 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3442 GtkWidget *menuitem;
3444 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3445 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3446 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3447 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3450 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3452 RecvDialogShow dialog_show;
3453 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3455 GtkWidget *menuitem;
3457 dialog_show = *((RecvDialogShow *)pparam->data);
3459 switch (dialog_show) {
3460 case RECVDIALOG_ALWAYS:
3461 gtk_option_menu_set_history(optmenu, 0);
3463 case RECVDIALOG_WINDOW_ACTIVE:
3464 gtk_option_menu_set_history(optmenu, 1);
3466 case RECVDIALOG_NEVER:
3467 gtk_option_menu_set_history(optmenu, 2);
3472 menu = gtk_option_menu_get_menu(optmenu);
3473 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3474 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));