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 (_("Command"));
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;
1040 GtkWidget *label_charset_desc;
1042 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1043 gtk_widget_show (vbox1);
1044 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1045 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1047 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1049 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1050 gtk_widget_show (vbox_extsend);
1051 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1052 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1054 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1055 _("Use external program for sending"));
1057 hbox1 = gtk_hbox_new (FALSE, 8);
1058 gtk_widget_show (hbox1);
1059 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1060 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1062 label_extsend = gtk_label_new (_("Command"));
1063 gtk_widget_show (label_extsend);
1064 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1066 entry_extsend = gtk_entry_new ();
1067 gtk_widget_show (entry_extsend);
1068 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1071 button_extsend = gtk_button_new_with_label ("... ");
1072 gtk_widget_show (button_extsend);
1073 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1076 vbox2 = gtk_vbox_new (FALSE, 0);
1077 gtk_widget_show (vbox2);
1078 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1080 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1081 _("Save sent messages to outbox"));
1082 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1083 _("Queue messages that fail to send"));
1084 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1085 _("Send return receipt on request"));
1087 hbox1 = gtk_hbox_new (FALSE, 8);
1088 gtk_widget_show (hbox1);
1089 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1091 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1092 gtk_widget_show (label_outcharset);
1093 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1095 optmenu = gtk_option_menu_new ();
1096 gtk_widget_show (optmenu);
1097 gtk_box_pack_start (GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1099 optmenu_menu = gtk_menu_new ();
1101 #define SET_MENUITEM(str, charset) \
1103 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1106 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1107 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1109 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1111 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1112 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1113 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1114 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1115 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1116 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1118 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1120 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1122 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1123 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1125 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1127 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1128 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1130 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1131 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1133 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1134 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1136 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1138 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1140 hbox1 = gtk_hbox_new (FALSE, 8);
1141 gtk_widget_show (hbox1);
1142 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1144 label_charset_desc = gtk_label_new
1145 (_("If `Automatic' is selected, the optimal encoding\n"
1146 "for the current locale will be used."));
1147 gtk_widget_show (label_charset_desc);
1148 gtk_box_pack_start (GTK_BOX (hbox1), label_charset_desc,
1150 gtk_label_set_justify(GTK_LABEL (label_charset_desc), GTK_JUSTIFY_LEFT);
1152 send.checkbtn_extsend = checkbtn_extsend;
1153 send.entry_extsend = entry_extsend;
1154 /* send.button_extsend = button_extsend; */
1156 send.checkbtn_savemsg = checkbtn_savemsg;
1157 send.checkbtn_queuemsg = checkbtn_queuemsg;
1158 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1160 send.optmenu_charset = optmenu;
1164 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1169 g_return_if_fail(param);
1170 g_return_if_fail(param->data);
1171 g_return_if_fail(param->widget);
1172 g_return_if_fail(*(param->widget));
1174 dict_name = gtkpspell_get_dictionary_menu_active_item
1175 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1176 str = *((gchar **) param->data);
1179 *((gchar **) param->data) = dict_name;
1182 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1185 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1187 GtkWidget *menuitem;
1191 g_return_if_fail(optmenu != NULL);
1192 g_return_if_fail(pparam->data != NULL);
1194 if (*(gchar **) pparam->data) {
1195 menu = gtk_option_menu_get_menu(optmenu);
1196 for (cur = GTK_MENU_SHELL(menu)->children;
1197 cur != NULL; cur = cur->next) {
1198 menuitem = GTK_WIDGET(cur->data);
1199 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem), "dict_name");
1200 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1201 gtk_option_menu_set_history(optmenu, n);
1208 gtk_option_menu_set_history(optmenu, 0);
1209 prefs_dictionary_set_data_from_optmenu(pparam);
1212 static void prefs_compose_checkbtn_enable_pspell_toggle_cb
1218 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1219 gtk_widget_set_sensitive(compose.entry_pspell_path, toggled);
1220 gtk_widget_set_sensitive(compose.optmenu_dictionary, toggled);
1221 gtk_widget_set_sensitive(compose.btn_pspell_path, toggled);
1224 static void prefs_compose_btn_pspell_path_clicked_cb(GtkWidget *widget,
1227 gchar *file_path, *tmp;
1228 GtkWidget *new_menu;
1230 file_path = filesel_select_file(_("Select dictionaries location"),
1231 prefs_common.pspell_path);
1232 if (file_path == NULL) {
1236 tmp=g_dirname(file_path);
1238 if (prefs_common.pspell_path)
1239 g_free(prefs_common.pspell_path);
1240 prefs_common.pspell_path = g_strdup_printf("%s%s",tmp,G_DIR_SEPARATOR_S);
1242 new_menu = gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path);
1243 gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_dictionary),
1246 gtk_entry_set_text(GTK_ENTRY(compose.entry_pspell_path), prefs_common.pspell_path);
1247 /* select first one */
1248 gtk_option_menu_set_history(GTK_OPTION_MENU(compose.optmenu_dictionary), 0);
1250 prefs_common.dictionary = gtkpspell_get_dictionary_menu_active_item(
1251 gtk_option_menu_get_menu(GTK_OPTION_MENU(compose.optmenu_dictionary)));
1259 static void prefs_compose_create(void)
1266 GtkWidget *frame_quote;
1267 GtkWidget *vbox_quote;
1268 GtkWidget *checkbtn_quote;
1270 GtkWidget *label_quotemark;
1271 GtkWidget *entry_quotemark;
1273 GtkWidget *label_quotefmt;
1274 GtkWidget *btn_quotedesc;
1275 GtkWidget *scrolledwin_quotefmt;
1276 GtkWidget *text_quotefmt;
1281 GtkWidget *btn_quotefmt;
1283 GtkWidget *frame_sig;
1284 GtkWidget *vbox_sig;
1285 GtkWidget *checkbtn_autosig;
1286 GtkWidget *label_sigsep;
1287 GtkWidget *entry_sigsep;
1289 GtkWidget *frame_autosel;
1290 GtkWidget *hbox_autosel;
1291 GtkWidget *vbox_autosel;
1292 GtkWidget *checkbtn_reply_account_autosel;
1293 GtkWidget *checkbtn_forward_account_autosel;
1294 GtkWidget *checkbtn_reedit_account_autosel;
1296 GtkWidget *checkbtn_autoextedit;
1298 GtkWidget *vbox_linewrap;
1303 GtkWidget *label_linewrap;
1304 GtkObject *spinbtn_linewrap_adj;
1305 GtkWidget *spinbtn_linewrap;
1306 GtkWidget *checkbtn_wrapquote;
1307 GtkWidget *checkbtn_wrapatsend;
1309 GtkWidget *checkbtn_forward_as_attachment;
1310 GtkWidget *checkbtn_smart_wrapping;
1311 GtkWidget *checkbtn_block_cursor;
1314 GtkWidget *frame_spell;
1315 GtkWidget *hbox_spell;
1316 GtkWidget *vbox_spell;
1317 GtkWidget *hbox_pspell_path;
1318 GtkWidget *checkbtn_enable_pspell;
1319 GtkWidget *label_pspell_path;
1320 GtkWidget *entry_pspell_path;
1321 GtkWidget *btn_pspell_path;
1322 GtkWidget *hbox_dictionary;
1323 GtkWidget *label_dictionary;
1324 GtkWidget *optmenu_dictionary;
1326 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1327 gtk_widget_show (vbox1);
1328 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1329 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1332 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
1334 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1335 gtk_widget_show (vbox_quote);
1336 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1337 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1339 hbox1 = gtk_hbox_new (FALSE, 32);
1340 gtk_widget_show (hbox1);
1341 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1343 hbox2 = gtk_hbox_new (FALSE, 8);
1344 gtk_widget_show (hbox2);
1345 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1347 label_quotemark = gtk_label_new (_("Quotation mark"));
1348 gtk_widget_show (label_quotemark);
1349 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1351 entry_quotemark = gtk_entry_new ();
1352 gtk_widget_show (entry_quotemark);
1353 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1354 gtk_widget_set_usize (entry_quotemark, 64, -1);
1356 PACK_CHECK_BUTTON (hbox1, checkbtn_quote,
1357 _("Quote message when replying"));
1359 hbox2 = gtk_hbox_new (FALSE, 0);
1360 gtk_widget_show (hbox2);
1361 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1363 label_quotefmt = gtk_label_new (_("Quotation format:"));
1364 gtk_widget_show (label_quotefmt);
1365 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1368 gtk_button_new_with_label (_(" Description of symbols "));
1370 gtk_widget_show (btn_quotedesc);
1371 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1372 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1373 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1376 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1377 gtk_widget_show (scrolledwin_quotefmt);
1378 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1379 gtk_scrolled_window_set_policy
1380 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1381 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1383 text_quotefmt = gtk_text_new (NULL, NULL);
1384 gtk_widget_show (text_quotefmt);
1385 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1386 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1387 gtk_widget_set_usize(text_quotefmt, -1, 60);
1390 hbox1 = gtk_hbox_new (FALSE, 32);
1391 gtk_widget_show (hbox1);
1392 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1394 btn_quotefmt = gtk_button_new_with_label (_(" Quote format "));
1395 gtk_widget_show (btn_quotefmt);
1396 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotefmt, FALSE, FALSE, 0);
1397 gtk_signal_connect(GTK_OBJECT(btn_quotefmt), "clicked",
1398 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), NULL);
1400 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1402 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1403 gtk_widget_show (vbox_sig);
1404 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1405 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1407 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1408 _("Insert signature automatically"));
1410 hbox1 = gtk_hbox_new (FALSE, 8);
1411 gtk_widget_show (hbox1);
1412 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1413 label_sigsep = gtk_label_new (_("Signature separator"));
1414 gtk_widget_show (label_sigsep);
1415 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1417 entry_sigsep = gtk_entry_new ();
1418 gtk_widget_show (entry_sigsep);
1419 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1421 gtk_widget_set_usize (entry_sigsep, 64, -1);
1423 /* Automatic (Smart) Account Selection */
1424 PACK_FRAME(vbox1, frame_autosel, _("Automatic Account Selection"));
1426 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1427 gtk_widget_show (hbox_autosel);
1428 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1429 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1431 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1432 _("when replying"));
1433 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1434 _("when forwarding"));
1435 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1436 _("when re-editing"));
1438 vbox2 = gtk_vbox_new (FALSE, 0);
1439 gtk_widget_show (vbox2);
1440 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1442 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1443 _("Automatically launch the external editor"));
1445 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1448 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1449 gtk_widget_show (vbox_linewrap);
1450 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1452 hbox3 = gtk_hbox_new (FALSE, 8);
1453 gtk_widget_show (hbox3);
1454 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1457 label_linewrap = gtk_label_new (_("Wrap messages at"));
1458 gtk_widget_show (label_linewrap);
1459 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1461 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1462 spinbtn_linewrap = gtk_spin_button_new
1463 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1464 gtk_widget_show (spinbtn_linewrap);
1465 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1466 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1467 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1469 label_linewrap = gtk_label_new (_("characters"));
1470 gtk_widget_show (label_linewrap);
1471 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1473 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1475 hbox4 = gtk_hbox_new (FALSE, 32);
1476 gtk_widget_show (hbox4);
1477 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1479 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1481 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1483 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1484 _("Forward as attachment"));
1486 PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping,
1487 _("Smart wrapping (EXPERIMENTAL)"));
1489 PACK_CHECK_BUTTON (vbox1, checkbtn_block_cursor,
1493 /* spell checker defaults */
1494 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1495 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1496 gtk_widget_show (vbox_spell);
1497 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1498 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1500 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_pspell,
1501 _("Enable spell checker (EXPERIMENTAL)"));
1503 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_pspell), "toggled",
1504 GTK_SIGNAL_FUNC(prefs_compose_checkbtn_enable_pspell_toggle_cb),
1507 hbox_pspell_path = gtk_hbox_new (FALSE, 8);
1508 gtk_widget_show(hbox_pspell_path);
1509 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_pspell_path, TRUE, TRUE, 0);
1511 label_pspell_path = gtk_label_new (_("Dictionaries path"));
1512 gtk_widget_show(label_pspell_path);
1513 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), label_pspell_path, FALSE, FALSE, 0);
1515 entry_pspell_path = gtk_entry_new();
1516 gtk_widget_show(entry_pspell_path);
1517 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), entry_pspell_path, FALSE, FALSE, 0);
1518 gtk_widget_set_usize(entry_pspell_path, 150, -1);
1519 gtk_widget_set_sensitive(entry_pspell_path, prefs_common.enable_pspell);
1521 btn_pspell_path = gtk_button_new_with_label(_("..."));
1522 gtk_widget_show(btn_pspell_path);
1523 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), btn_pspell_path, FALSE, FALSE, 0);
1524 gtk_widget_set_sensitive(btn_pspell_path, prefs_common.enable_pspell);
1526 gtk_signal_connect(GTK_OBJECT(btn_pspell_path), "clicked",
1527 GTK_SIGNAL_FUNC(prefs_compose_btn_pspell_path_clicked_cb),
1530 hbox_dictionary = gtk_hbox_new(FALSE, 8);
1531 gtk_widget_show(hbox_dictionary);
1532 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_dictionary, TRUE, TRUE, 0);
1534 label_dictionary = gtk_label_new(_("Dictionary"));
1535 gtk_widget_show(label_dictionary);
1536 gtk_box_pack_start(GTK_BOX(hbox_dictionary), label_dictionary, FALSE, FALSE, 0);
1538 optmenu_dictionary = gtk_option_menu_new();
1539 gtk_widget_show(optmenu_dictionary);
1540 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1541 gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path));
1542 gtk_box_pack_start(GTK_BOX(hbox_dictionary), optmenu_dictionary, FALSE, FALSE, 0);
1543 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_pspell);
1547 compose.checkbtn_quote = checkbtn_quote;
1548 compose.entry_quotemark = entry_quotemark;
1549 compose.text_quotefmt = text_quotefmt;
1551 compose.checkbtn_autosig = checkbtn_autosig;
1552 compose.entry_sigsep = entry_sigsep;
1554 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1555 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1556 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1557 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1559 compose.spinbtn_linewrap = spinbtn_linewrap;
1560 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1561 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1562 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1564 compose.checkbtn_forward_as_attachment =
1565 checkbtn_forward_as_attachment;
1566 compose.checkbtn_smart_wrapping =
1567 checkbtn_smart_wrapping;
1568 compose.checkbtn_block_cursor =
1569 checkbtn_block_cursor;
1572 compose.checkbtn_enable_pspell = checkbtn_enable_pspell;
1573 compose.entry_pspell_path = entry_pspell_path;
1574 compose.btn_pspell_path = btn_pspell_path;
1575 compose.optmenu_dictionary = optmenu_dictionary;
1579 static void prefs_display_create(void)
1582 GtkWidget *frame_font;
1584 GtkWidget *label_textfont;
1585 GtkWidget *entry_textfont;
1586 GtkWidget *button_textfont;
1587 GtkWidget *chkbtn_folder_unread;
1588 GtkWidget *chkbtn_transhdr;
1589 GtkWidget *frame_summary;
1591 GtkWidget *chkbtn_swapfrom;
1592 GtkWidget *chkbtn_hscrollbar;
1593 GtkWidget *chkbtn_useaddrbook;
1594 GtkWidget *chkbtn_expand_thread;
1595 GtkWidget *chkbtn_bold_unread;
1598 GtkWidget *label_datefmt;
1599 GtkWidget *button_datefmt;
1600 GtkWidget *entry_datefmt;
1601 GtkWidget *button_dispitem;
1602 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
1604 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1605 gtk_widget_show (vbox1);
1606 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1607 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1609 PACK_FRAME(vbox1, frame_font, _("Font"));
1611 table1 = gtk_table_new (4, 3, FALSE);
1613 gtk_widget_show (table1);
1614 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1615 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1616 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1617 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1619 label_textfont = gtk_label_new (_("Text"));
1620 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1621 gtk_widget_show (label_textfont);
1622 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1623 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1625 entry_textfont = gtk_entry_new ();
1626 gtk_widget_show (entry_textfont);
1627 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1628 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1630 button_textfont = gtk_button_new_with_label ("... ");
1632 gtk_widget_show (button_textfont);
1633 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1635 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1636 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1638 tmplabel = gtk_label_new (_("Small"));
1639 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1640 gtk_widget_show (tmplabel);
1641 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1642 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1644 tmpentry = gtk_entry_new ();
1645 gtk_widget_show (tmpentry);
1646 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1647 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1649 tmpbutton = gtk_button_new_with_label (" ... ");
1650 gtk_widget_show (tmpbutton);
1651 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1653 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1654 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1655 display.entry_smallfont = tmpentry;
1657 tmplabel = gtk_label_new (_("Normal"));
1658 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1659 gtk_widget_show (tmplabel);
1660 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1661 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1663 tmpentry = gtk_entry_new ();
1664 gtk_widget_show (tmpentry);
1665 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1666 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1668 tmpbutton = gtk_button_new_with_label (" ... ");
1669 gtk_widget_show (tmpbutton);
1670 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1672 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1673 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1674 display.entry_normalfont = tmpentry;
1676 tmplabel = gtk_label_new (_("Bold"));
1677 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1678 gtk_widget_show (tmplabel);
1679 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1680 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1682 tmpentry = gtk_entry_new ();
1683 gtk_widget_show (tmpentry);
1684 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1685 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1687 tmpbutton = gtk_button_new_with_label (" ... ");
1688 gtk_widget_show (tmpbutton);
1689 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1691 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1692 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1693 display.entry_boldfont = tmpentry;
1695 vbox2 = gtk_vbox_new (FALSE, 0);
1696 gtk_widget_show (vbox2);
1697 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1700 (vbox2, chkbtn_transhdr,
1701 _("Translate header name (such as `From:', `Subject:')"));
1703 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1704 _("Display unread number next to folder name"));
1706 /* ---- Summary ---- */
1708 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1710 vbox2 = gtk_vbox_new (FALSE, 0);
1711 gtk_widget_show (vbox2);
1712 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1713 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1716 (vbox2, chkbtn_swapfrom,
1717 _("Display recipient on `From' column if sender is yourself"));
1719 (vbox2, chkbtn_useaddrbook,
1720 _("Display sender using address book"));
1722 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1724 (vbox2, chkbtn_expand_thread, _("Expand threads"));
1726 (vbox2, chkbtn_bold_unread,
1727 _("Display unread messages with bold font"));
1729 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1731 hbox1 = gtk_hbox_new (FALSE, 8);
1732 gtk_widget_show (hbox1);
1733 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1735 label_datefmt = gtk_label_new (_("Date format"));
1736 gtk_widget_show (label_datefmt);
1737 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1739 entry_datefmt = gtk_entry_new ();
1740 gtk_widget_show (entry_datefmt);
1741 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1743 button_datefmt = gtk_button_new_with_label ("... ");
1745 gtk_widget_show (button_datefmt);
1746 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1747 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1748 GTK_SIGNAL_FUNC (date_format_create), NULL);
1750 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1752 hbox1 = gtk_hbox_new (FALSE, 8);
1753 gtk_widget_show (hbox1);
1754 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1756 button_dispitem = gtk_button_new_with_label
1757 (_(" Set display item of summary... "));
1758 gtk_widget_show (button_dispitem);
1759 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1760 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1761 GTK_SIGNAL_FUNC (prefs_summary_column_open),
1764 display.entry_textfont = entry_textfont;
1765 display.button_textfont = button_textfont;
1767 display.chkbtn_folder_unread = chkbtn_folder_unread;
1768 display.chkbtn_transhdr = chkbtn_transhdr;
1770 display.chkbtn_swapfrom = chkbtn_swapfrom;
1771 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1772 display.chkbtn_expand_thread = chkbtn_expand_thread;
1773 display.chkbtn_bold_unread = chkbtn_bold_unread;
1774 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1775 display.entry_datefmt = entry_datefmt;
1778 static void prefs_message_create(void)
1784 GtkWidget *chkbtn_enablecol;
1785 GtkWidget *button_edit_col;
1786 GtkWidget *chkbtn_mbalnum;
1787 GtkWidget *chkbtn_disphdrpane;
1788 GtkWidget *chkbtn_disphdr;
1789 GtkWidget *button_edit_disphdr;
1790 GtkWidget *hbox_linespc;
1791 GtkWidget *label_linespc;
1792 GtkObject *spinbtn_linespc_adj;
1793 GtkWidget *spinbtn_linespc;
1794 GtkWidget *chkbtn_headspc;
1796 GtkWidget *frame_scr;
1797 GtkWidget *vbox_scr;
1798 GtkWidget *chkbtn_smoothscroll;
1799 GtkWidget *hbox_scr;
1800 GtkWidget *label_scr;
1801 GtkObject *spinbtn_scrollstep_adj;
1802 GtkWidget *spinbtn_scrollstep;
1803 GtkWidget *chkbtn_halfpage;
1805 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1806 gtk_widget_show (vbox1);
1807 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1808 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1810 hbox1 = gtk_hbox_new (FALSE, 8);
1811 gtk_widget_show (hbox1);
1812 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1814 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1815 _("Enable coloration of message"));
1816 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1817 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1820 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1821 gtk_widget_show (button_edit_col);
1822 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1823 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1824 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1826 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1828 vbox2 = gtk_vbox_new (FALSE, 0);
1829 gtk_widget_show (vbox2);
1830 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1833 (vbox2, chkbtn_mbalnum,
1834 _("Display 2-byte alphabet and numeric with 1-byte character"));
1835 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1836 _("Display header pane above message view"));
1838 hbox1 = gtk_hbox_new (FALSE, 8);
1839 gtk_widget_show (hbox1);
1840 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1842 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1843 _("Display short headers on message view"));
1845 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1846 gtk_widget_show (button_edit_disphdr);
1847 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1849 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1850 GTK_SIGNAL_FUNC (prefs_display_header_open),
1853 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1855 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1857 hbox1 = gtk_hbox_new (FALSE, 32);
1858 gtk_widget_show (hbox1);
1859 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1861 hbox_linespc = gtk_hbox_new (FALSE, 8);
1862 gtk_widget_show (hbox1);
1863 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1865 label_linespc = gtk_label_new (_("Line space"));
1866 gtk_widget_show (label_linespc);
1867 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1870 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1871 spinbtn_linespc = gtk_spin_button_new
1872 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1873 gtk_widget_show (spinbtn_linespc);
1874 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1876 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1877 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1879 label_linespc = gtk_label_new (_("pixel(s)"));
1880 gtk_widget_show (label_linespc);
1881 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1884 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1886 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1888 vbox_scr = gtk_vbox_new (FALSE, 0);
1889 gtk_widget_show (vbox_scr);
1890 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1891 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1893 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1895 hbox1 = gtk_hbox_new (FALSE, 32);
1896 gtk_widget_show (hbox1);
1897 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1899 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1901 hbox_scr = gtk_hbox_new (FALSE, 8);
1902 gtk_widget_show (hbox_scr);
1903 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1905 label_scr = gtk_label_new (_("Step"));
1906 gtk_widget_show (label_scr);
1907 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1909 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1910 spinbtn_scrollstep = gtk_spin_button_new
1911 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1912 gtk_widget_show (spinbtn_scrollstep);
1913 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1915 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1916 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1919 label_scr = gtk_label_new (_("pixel(s)"));
1920 gtk_widget_show (label_scr);
1921 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1923 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1925 message.chkbtn_enablecol = chkbtn_enablecol;
1926 message.button_edit_col = button_edit_col;
1927 message.chkbtn_mbalnum = chkbtn_mbalnum;
1928 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1929 message.chkbtn_disphdr = chkbtn_disphdr;
1930 message.spinbtn_linespc = spinbtn_linespc;
1931 message.chkbtn_headspc = chkbtn_headspc;
1933 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1934 message.spinbtn_scrollstep = spinbtn_scrollstep;
1935 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1936 message.chkbtn_halfpage = chkbtn_halfpage;
1940 static void prefs_privacy_create(void)
1945 GtkWidget *checkbtn_default_encrypt;
1946 GtkWidget *checkbtn_ascii_armored;
1947 GtkWidget *checkbtn_default_sign;
1948 GtkWidget *checkbtn_auto_check_signatures;
1949 GtkWidget *checkbtn_gpg_signature_popup;
1950 GtkWidget *checkbtn_passphrase_grab;
1951 GtkWidget *checkbtn_gpg_warning;
1953 GtkWidget *menuitem;
1955 GtkWidget *optmenu_menu;
1957 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1958 gtk_widget_show (vbox1);
1959 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1960 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1962 vbox2 = gtk_vbox_new (FALSE, 0);
1963 gtk_widget_show (vbox2);
1964 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1966 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1967 _("Encrypt message by default"));
1969 PACK_CHECK_BUTTON (vbox2, checkbtn_ascii_armored,
1970 _("Plain ASCII armored"));
1971 gtk_signal_connect(GTK_OBJECT(checkbtn_ascii_armored), "toggled",
1972 prefs_common_ascii_armored_warning, (gpointer)0);
1974 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1975 _("Sign message by default"));
1977 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1978 _("Automatically check signatures"));
1980 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
1981 _("Show signature check result in a popup window"));
1984 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1985 _("Grab input while entering a passphrase"));
1989 (vbox2, checkbtn_gpg_warning,
1990 _("Display warning on startup if GnuPG doesn't work"));
1992 hbox1 = gtk_hbox_new (FALSE, 8);
1993 gtk_widget_show (hbox1);
1994 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1996 /* create default signkey box */
1997 label = gtk_label_new (_("Default Sign Key"));
1998 gtk_widget_show (label);
1999 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2000 optmenu = gtk_option_menu_new ();
2001 gtk_widget_show (optmenu);
2002 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
2003 optmenu_menu = gtk_menu_new ();
2005 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
2006 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
2007 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
2008 /* FIXME: disabled because not implemented */
2009 gtk_widget_set_sensitive(optmenu, FALSE);
2011 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
2012 privacy.checkbtn_ascii_armored = checkbtn_ascii_armored;
2013 privacy.checkbtn_default_sign = checkbtn_default_sign;
2014 privacy.checkbtn_auto_check_signatures
2015 = checkbtn_auto_check_signatures;
2016 privacy.checkbtn_gpg_signature_popup
2017 = checkbtn_gpg_signature_popup;
2018 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2019 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2020 privacy.optmenu_default_signkey = optmenu;
2024 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
2028 GtkWidget *menuitem;
2031 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2032 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2033 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2034 g_free(*((gchar **)pparam->data));
2035 *((gchar **)pparam->data) = g_strdup(charset);
2039 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
2043 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2045 GtkWidget *menuitem;
2049 g_return_if_fail(optmenu != NULL);
2050 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2052 menu = gtk_option_menu_get_menu(optmenu);
2053 for (cur = GTK_MENU_SHELL(menu)->children;
2054 cur != NULL; cur = cur->next) {
2055 menuitem = GTK_WIDGET(cur->data);
2056 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2057 if (!strcmp(charset, *((gchar **)pparam->data))) {
2058 gtk_option_menu_set_history(optmenu, n);
2064 gtk_option_menu_set_history(optmenu, 0);
2065 prefs_common_charset_set_data_from_optmenu(pparam);
2069 static void prefs_common_ascii_armored_warning(GtkWidget* widget,
2072 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))
2073 && gtk_notebook_get_current_page(GTK_NOTEBOOK(dialog.notebook))) {
2074 alertpanel_message(_("Warning - Privacy/Plain ASCII armored"),
2075 _("Its not recommend to use the old style plain ASCII\n"
2076 "armored mode for encypted messages. It doesn't comply\n"
2077 "with the RFC 3156 - MIME security with OpenPGP."));
2080 #endif /* USE_GPGME */
2082 static void prefs_interface_create(void)
2087 /* GtkWidget *checkbtn_emacs; */
2088 GtkWidget *checkbtn_openunread;
2089 GtkWidget *checkbtn_openinbox;
2090 GtkWidget *checkbtn_immedexec;
2093 GtkWidget *optmenu_recvdialog;
2095 GtkWidget *menuitem;
2097 GtkWidget *frame_addr;
2098 GtkWidget *vbox_addr;
2099 GtkWidget *checkbtn_addaddrbyclick;
2101 GtkWidget *frame_exit;
2102 GtkWidget *vbox_exit;
2103 GtkWidget *checkbtn_confonexit;
2104 GtkWidget *checkbtn_cleanonexit;
2105 GtkWidget *checkbtn_askonclean;
2106 GtkWidget *checkbtn_warnqueued;
2109 GtkWidget *optmenu_nextunreadmsgdialog;
2110 GtkWidget *optmenu_nextunreadmsgdialog_menu;
2111 GtkWidget *nextunreadmsgdialog_menuitem;
2113 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2114 gtk_widget_show (vbox1);
2115 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2116 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2118 vbox2 = gtk_vbox_new (FALSE, 0);
2119 gtk_widget_show (vbox2);
2120 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2122 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2123 _("Emulate the behavior of mouse operation of\n"
2124 "Emacs-based mailer"));
2125 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2126 GTK_JUSTIFY_LEFT); */
2129 (vbox2, checkbtn_openunread,
2130 _("Open first unread message when entering a folder"));
2133 (vbox2, checkbtn_openinbox,
2134 _("Go to inbox after receiving new mail"));
2136 vbox3 = gtk_vbox_new (FALSE, 0);
2137 gtk_widget_show (vbox3);
2138 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2141 (vbox3, checkbtn_immedexec,
2142 _("Execute immediately when moving or deleting messages"));
2144 hbox1 = gtk_hbox_new (FALSE, 0);
2145 gtk_widget_show (hbox1);
2146 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2148 label = gtk_label_new
2149 (_("(Messages will be marked until execution\n"
2150 " if this is turned off)"));
2151 gtk_widget_show (label);
2152 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2153 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2155 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2157 hbox1 = gtk_hbox_new (FALSE, 8);
2158 gtk_widget_show (hbox1);
2159 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2161 label = gtk_label_new (_("Show receive dialog"));
2162 gtk_widget_show (label);
2163 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2165 optmenu_recvdialog = gtk_option_menu_new ();
2166 gtk_widget_show (optmenu_recvdialog);
2167 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2170 menu = gtk_menu_new ();
2171 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2172 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2173 RECV_DIALOG_ACTIVE);
2174 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2176 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2178 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2180 vbox_addr = gtk_vbox_new (FALSE, 0);
2181 gtk_widget_show (vbox_addr);
2182 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2183 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2186 (vbox_addr, checkbtn_addaddrbyclick,
2187 _("Add address to destination when double-clicked"));
2189 /* Next Unread Message Dialog */
2190 hbox2 = gtk_hbox_new (FALSE, 8);
2191 gtk_widget_show (hbox2);
2192 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
2194 label = gtk_label_new (_("Show no-unread-message dialog"));
2195 gtk_widget_show (label);
2196 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
2198 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2199 gtk_widget_show (optmenu_nextunreadmsgdialog);
2200 gtk_box_pack_start (GTK_BOX (hbox2), optmenu_nextunreadmsgdialog,
2203 optmenu_nextunreadmsgdialog_menu = gtk_menu_new ();
2204 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2205 _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2206 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2207 _("Assume 'Yes'"), NEXTUNREADMSGDIALOG_ASSUME_YES);
2208 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2209 _("Assume 'No'"), NEXTUNREADMSGDIALOG_ASSUME_NO);
2211 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog),
2212 optmenu_nextunreadmsgdialog_menu);
2215 /* Receive Dialog */
2216 /* hbox = gtk_hbox_new (FALSE, 8);
2217 gtk_widget_show (hbox);
2218 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2220 label = gtk_label_new (_("Show receive Dialog"));
2221 gtk_widget_show (label);
2222 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2224 recvdialog_optmenu = gtk_option_menu_new ();
2225 gtk_widget_show (recvdialog_optmenu);
2226 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2228 recvdialog_optmenu_menu = gtk_menu_new ();
2230 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2231 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2232 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2234 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2237 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2239 vbox_exit = gtk_vbox_new (FALSE, 0);
2240 gtk_widget_show (vbox_exit);
2241 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2242 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2244 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2245 _("Confirm on exit"));
2247 hbox1 = gtk_hbox_new (FALSE, 32);
2248 gtk_widget_show (hbox1);
2249 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2251 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2252 _("Empty trash on exit"));
2253 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2254 _("Ask before emptying"));
2255 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2257 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2258 _("Warn if there are queued messages"));
2260 /* interface.checkbtn_emacs = checkbtn_emacs; */
2261 interface.checkbtn_openunread = checkbtn_openunread;
2262 interface.checkbtn_openinbox = checkbtn_openinbox;
2263 interface.checkbtn_immedexec = checkbtn_immedexec;
2264 interface.optmenu_recvdialog = optmenu_recvdialog;
2265 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2266 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2267 interface.checkbtn_confonexit = checkbtn_confonexit;
2268 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2269 interface.checkbtn_askonclean = checkbtn_askonclean;
2270 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2273 static void prefs_other_create(void)
2278 GtkWidget *uri_frame;
2279 GtkWidget *uri_label;
2280 GtkWidget *uri_combo;
2281 GtkWidget *uri_entry;
2283 GtkWidget *print_frame;
2284 GtkWidget *printcmd_label;
2285 GtkWidget *printcmd_entry;
2287 GtkWidget *exteditor_frame;
2288 GtkWidget *exteditor_label;
2289 GtkWidget *exteditor_combo;
2290 GtkWidget *exteditor_entry;
2292 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2293 gtk_widget_show (vbox1);
2294 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2295 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2297 PACK_FRAME(vbox1, uri_frame,
2298 _("External Web browser (%s will be replaced with URI)"));
2300 hbox1 = gtk_hbox_new (FALSE, 8);
2301 gtk_widget_show (hbox1);
2302 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2303 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2305 uri_label = gtk_label_new (_("Command"));
2306 gtk_widget_show(uri_label);
2307 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2309 uri_combo = gtk_combo_new ();
2310 gtk_widget_show (uri_combo);
2311 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2312 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2313 "netscape -remote 'openURL(%s,raise)'",
2315 "gnome-moz-remote --raise --newwin '%s'",
2316 "kterm -e w3m '%s'",
2317 "kterm -e lynx '%s'",
2320 uri_entry = GTK_COMBO (uri_combo)->entry;
2322 PACK_FRAME(vbox1, print_frame,
2323 _("Printing (%s will be replaced with file name)"));
2325 hbox1 = gtk_hbox_new (FALSE, 8);
2326 gtk_widget_show (hbox1);
2327 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2328 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2330 printcmd_label = gtk_label_new (_("Command"));
2331 gtk_widget_show (printcmd_label);
2332 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2334 printcmd_entry = gtk_entry_new ();
2335 gtk_widget_show (printcmd_entry);
2336 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2338 PACK_FRAME(vbox1, exteditor_frame,
2339 _("External editor (%s will be replaced with file name)"));
2341 hbox1 = gtk_hbox_new (FALSE, 8);
2342 gtk_widget_show (hbox1);
2343 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2344 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2346 exteditor_label = gtk_label_new (_("Command"));
2347 gtk_widget_show (exteditor_label);
2348 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2350 exteditor_combo = gtk_combo_new ();
2351 gtk_widget_show (exteditor_combo);
2352 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2353 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2356 "mgedit --no-fork %s",
2362 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2364 other.uri_combo = uri_combo;
2365 other.uri_entry = uri_entry;
2366 other.printcmd_entry = printcmd_entry;
2368 other.exteditor_combo = exteditor_combo;
2369 other.exteditor_entry = exteditor_entry;
2372 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2374 GtkWidget *datefmt_sample = NULL;
2377 g_return_if_fail(widget != NULL);
2378 g_return_if_fail(*widget != NULL);
2379 g_return_if_fail(display.entry_datefmt != NULL);
2381 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2382 (GTK_OBJECT(*widget), "datefmt_sample"));
2383 g_return_if_fail(datefmt_sample != NULL);
2385 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2386 g_free(prefs_common.date_format);
2387 prefs_common.date_format = text;
2388 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2390 gtk_widget_destroy(*widget);
2394 static void date_format_cancel_btn_clicked(GtkButton *button,
2397 g_return_if_fail(widget != NULL);
2398 g_return_if_fail(*widget != NULL);
2400 gtk_widget_destroy(*widget);
2404 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2407 if (event && event->keyval == GDK_Escape)
2408 date_format_cancel_btn_clicked(NULL, widget);
2411 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2412 GdkEventAny *event, GtkWidget **widget)
2414 g_return_val_if_fail(widget != NULL, FALSE);
2415 g_return_val_if_fail(*widget != NULL, FALSE);
2421 static void date_format_entry_on_change(GtkEditable *editable,
2425 struct tm *cal_time;
2429 cur_time = time(NULL);
2430 cal_time = localtime(&cur_time);
2432 text = gtk_editable_get_chars(editable, 0, -1);
2434 strftime(buffer, sizeof buffer, text, cal_time);
2435 gtk_label_set_text(example, buffer);
2438 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2439 gint column, GdkEventButton *event,
2440 GtkWidget *date_format)
2446 GtkWidget *datefmt_sample;
2448 /* only on double click */
2449 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2452 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2453 (GTK_OBJECT(date_format), "datefmt_sample"));
2455 g_return_if_fail(date_format_list != NULL);
2456 g_return_if_fail(date_format != NULL);
2457 g_return_if_fail(datefmt_sample != NULL);
2459 /* get format from clist */
2460 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2462 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2463 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2465 /* insert the format into the text entry */
2466 new_format = g_malloc(strlen(old_format) + 3);
2468 strncpy(new_format, old_format, cur_pos);
2469 new_format[cur_pos] = '\0';
2470 strcat(new_format, format);
2471 strcat(new_format, &old_format[cur_pos]);
2473 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2474 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2479 static GtkWidget *date_format_create(GtkButton *button, void *data)
2481 static GtkWidget *datefmt_win = NULL;
2483 GtkWidget *scrolledwindow1;
2484 GtkWidget *datefmt_clist;
2489 GtkWidget *confirm_area;
2491 GtkWidget *cancel_btn;
2492 GtkWidget *datefmt_entry;
2498 { "%a", _("the full abbreviated weekday name") },
2499 { "%A", _("the full weekday name") },
2500 { "%b", _("the abbreviated month name") },
2501 { "%B", _("the full month name") },
2502 { "%c", _("the preferred date and time for the current locale") },
2503 { "%C", _("the century number (year/100)") },
2504 { "%d", _("the day of the month as a decimal number") },
2505 { "%H", _("the hour as a decimal number using a 24-hour clock") },
2506 { "%I", _("the hour as a decimal number using a 12-hour clock") },
2507 { "%j", _("the day of the year as a decimal number") },
2508 { "%m", _("the month as a decimal number") },
2509 { "%M", _("the minute as a decimal number") },
2510 { "%p", _("either AM or PM") },
2511 { "%S", _("the second as a decimal number") },
2512 { "%w", _("the day of the week as a decimal number") },
2513 { "%x", _("the preferred date for the current locale") },
2514 { "%y", _("the last two digits of a year") },
2515 { "%Y", _("the year as a decimal number") },
2516 { "%Z", _("the time zone or name or abbreviation") }
2521 const gint TIME_FORMAT_ELEMS =
2522 sizeof time_format / sizeof time_format[0];
2524 if (datefmt_win) return datefmt_win;
2526 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2527 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2528 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2529 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2530 gtk_widget_set_usize(datefmt_win, 440, 280);
2532 vbox1 = gtk_vbox_new(FALSE, 10);
2533 gtk_widget_show(vbox1);
2534 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2536 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2537 gtk_scrolled_window_set_policy
2538 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2539 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2540 gtk_widget_show(scrolledwindow1);
2541 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2543 titles[0] = _("Specifier");
2544 titles[1] = _("Description");
2545 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2546 gtk_widget_show(datefmt_clist);
2547 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2548 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2550 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2551 GTK_SELECTION_BROWSE);
2553 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2555 /* phoney casting necessary because of gtk... */
2556 text[0] = (gchar *)time_format[i].fmt;
2557 text[1] = (gchar *)time_format[i].txt;
2558 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2561 table = gtk_table_new(2, 2, FALSE);
2562 gtk_widget_show(table);
2563 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2564 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2565 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2567 label1 = gtk_label_new(_("Date format"));
2568 gtk_widget_show(label1);
2569 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2571 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2572 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2574 datefmt_entry = gtk_entry_new_with_max_length(256);
2575 gtk_widget_show(datefmt_entry);
2576 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2577 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2579 /* we need the "sample" entry box; add it as data so callbacks can
2580 * get the entry box */
2581 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2584 label2 = gtk_label_new(_("Example"));
2585 gtk_widget_show(label2);
2586 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2588 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2589 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2591 label3 = gtk_label_new("");
2592 gtk_widget_show(label3);
2593 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2594 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2595 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2596 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2598 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2599 &cancel_btn, _("Cancel"), NULL, NULL);
2600 gtk_widget_grab_default(ok_btn);
2601 gtk_widget_show(confirm_area);
2603 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2605 /* set the current format */
2606 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2607 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2610 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2611 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2613 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2614 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2616 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2617 GTK_SIGNAL_FUNC(date_format_key_pressed),
2619 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2620 GTK_SIGNAL_FUNC(date_format_on_delete),
2622 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2623 GTK_SIGNAL_FUNC(date_format_entry_on_change),
2626 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2627 GTK_SIGNAL_FUNC(date_format_select_row),
2630 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2631 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2633 gtk_widget_show(datefmt_win);
2634 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2636 gtk_widget_grab_focus(ok_btn);
2641 void prefs_quote_colors_dialog(void)
2643 if (!quote_color_win)
2644 prefs_quote_colors_dialog_create();
2645 gtk_widget_show(quote_color_win);
2646 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2649 gtk_widget_hide(quote_color_win);
2651 textview_update_message_colors();
2652 main_window_reflect_prefs_all();
2655 static void prefs_quote_colors_dialog_create(void)
2660 GtkWidget *quotelevel1_label;
2661 GtkWidget *quotelevel2_label;
2662 GtkWidget *quotelevel3_label;
2663 GtkWidget *uri_label;
2664 GtkWidget *tgt_folder_label;
2667 //GtkWidget *cancel_btn;
2668 GtkWidget *recycle_colors_btn;
2669 GtkWidget *frame_colors;
2671 window = gtk_window_new(GTK_WINDOW_DIALOG);
2672 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2673 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2674 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2675 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2676 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2678 vbox = gtk_vbox_new (FALSE, VSPACING);
2679 gtk_container_add (GTK_CONTAINER (window), vbox);
2680 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2681 PACK_FRAME(vbox, frame_colors, _("Colors"));
2683 table = gtk_table_new (4, 2, FALSE);
2684 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2685 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2686 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2687 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2690 color_buttons.quote_level1_btn = gtk_button_new();
2691 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2692 0, 1, 0, 1, 0, 0, 0, 0);
2693 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2694 gtk_container_set_border_width
2695 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2697 color_buttons.quote_level2_btn = gtk_button_new();
2698 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2699 0, 1, 1, 2, 0, 0, 0, 0);
2700 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2701 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2703 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2704 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2705 0, 1, 2, 3, 0, 0, 0, 0);
2706 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2707 gtk_container_set_border_width
2708 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2710 color_buttons.uri_btn = gtk_button_new_with_label ("");
2711 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2712 0, 1, 3, 4, 0, 0, 0, 0);
2713 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2714 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2716 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2717 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2718 0, 1, 4, 5, 0, 0, 0, 0);
2719 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
2720 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2722 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2723 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2724 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2725 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2726 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2728 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2729 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2730 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2731 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2732 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2734 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2735 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2736 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2737 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2738 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2740 uri_label = gtk_label_new (_("URI link"));
2741 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2742 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2743 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2744 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2746 tgt_folder_label = gtk_label_new (_("Target folder"));
2747 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
2748 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2749 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
2750 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
2752 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2753 _("Recycle quote colors"));
2755 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2756 NULL, NULL, NULL, NULL);
2757 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2759 gtk_widget_grab_default(ok_btn);
2760 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2761 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2762 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2763 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2764 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2765 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2766 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2767 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2770 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2771 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2772 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2773 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2774 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2775 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2776 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2777 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2778 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
2779 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
2780 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2781 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2782 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2783 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2785 /* show message button colors and recycle options */
2786 set_button_bg_color(color_buttons.quote_level1_btn,
2787 prefs_common.quote_level1_col);
2788 set_button_bg_color(color_buttons.quote_level2_btn,
2789 prefs_common.quote_level2_col);
2790 set_button_bg_color(color_buttons.quote_level3_btn,
2791 prefs_common.quote_level3_col);
2792 set_button_bg_color(color_buttons.uri_btn,
2793 prefs_common.uri_col);
2794 set_button_bg_color(color_buttons.tgt_folder_btn,
2795 prefs_common.tgt_folder_col);
2796 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2797 prefs_common.recycle_quote_colors);
2799 gtk_widget_show_all(vbox);
2800 quote_color_win = window;
2803 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2804 GdkEventKey *event, gpointer data)
2806 if (event && event->keyval == GDK_Escape)
2810 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2812 gchar *type = (gchar *)data;
2813 gchar *title = NULL;
2814 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2816 GtkColorSelectionDialog *dialog;
2818 if(g_strcasecmp(type, "LEVEL1") == 0) {
2819 title = _("Pick color for quotation level 1");
2820 rgbvalue = prefs_common.quote_level1_col;
2821 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2822 title = _("Pick color for quotation level 2");
2823 rgbvalue = prefs_common.quote_level2_col;
2824 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2825 title = _("Pick color for quotation level 3");
2826 rgbvalue = prefs_common.quote_level3_col;
2827 } else if(g_strcasecmp(type, "URI") == 0) {
2828 title = _("Pick color for URI");
2829 rgbvalue = prefs_common.uri_col;
2830 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
2831 title = _("Pick color for target folder");
2832 rgbvalue = prefs_common.tgt_folder_col;
2833 } else { /* Should never be called */
2834 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2838 color_dialog = gtk_color_selection_dialog_new(title);
2839 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2840 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2841 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2842 manage_window_set_transient(GTK_WINDOW(color_dialog));
2844 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2845 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2846 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2847 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2848 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2849 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2852 /* preselect the previous color in the color selection dialog */
2853 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2854 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2855 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2856 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2857 gtk_color_selection_set_color
2858 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2860 gtk_widget_show(color_dialog);
2863 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2865 GtkColorSelection *colorsel = (GtkColorSelection *)
2866 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2868 gint red, green, blue, rgbvalue;
2869 gchar *type = (gchar *)data;
2871 gtk_color_selection_get_color(colorsel, color);
2873 red = (gint) (color[0] * 255.0);
2874 green = (gint) (color[1] * 255.0);
2875 blue = (gint) (color[2] * 255.0);
2876 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2879 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2880 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2881 fprintf(stderr, "Color is %x\n", rgbvalue);
2884 if (g_strcasecmp(type, "LEVEL1") == 0) {
2885 prefs_common.quote_level1_col = rgbvalue;
2886 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2887 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2888 prefs_common.quote_level2_col = rgbvalue;
2889 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2890 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2891 prefs_common.quote_level3_col = rgbvalue;
2892 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2893 } else if (g_strcasecmp(type, "URI") == 0) {
2894 prefs_common.uri_col = rgbvalue;
2895 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2896 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
2897 prefs_common.tgt_folder_col = rgbvalue;
2898 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
2899 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
2901 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2903 gtk_widget_destroy(color_dialog);
2906 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2908 gtk_widget_destroy(color_dialog);
2911 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
2915 gtk_widget_destroy(color_dialog);
2918 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2923 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2924 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2925 newstyle->bg[GTK_STATE_NORMAL] = color;
2926 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2927 newstyle->bg[GTK_STATE_ACTIVE] = color;
2929 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2932 static void prefs_enable_message_color_toggled(void)
2936 is_active = gtk_toggle_button_get_active
2937 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2938 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2939 prefs_common.enable_color = is_active;
2942 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2946 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2947 prefs_common.recycle_quote_colors = is_active;
2950 static void prefs_quote_description(void)
2952 if (!quote_desc_win)
2953 prefs_quote_description_create();
2955 gtk_widget_show(quote_desc_win);
2957 gtk_widget_hide(quote_desc_win);
2960 static void prefs_quote_description_create(void)
2968 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2969 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2970 _("Description of symbols"));
2971 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2972 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2973 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2974 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2976 vbox = gtk_vbox_new(FALSE, 8);
2977 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2979 hbox = gtk_hbox_new(FALSE, 4);
2980 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2982 label = gtk_label_new
2986 "%N\n" /* full name */
2987 "%F\n" /* first name */
2988 "%I\n" /* sender's initial */
2989 "%s\n" /* subject line */
2992 "%n\n" /* newsgroups */
2993 "%i\n" /* message id */
2994 "%r\n" /* references */
3005 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
3006 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
3008 label = gtk_label_new
3009 (_("DESCRIPTION\n\n"
3012 "Full Name of Sender\n"
3013 "First Name of Sender\n"
3014 "Initial of Sender\n"
3022 "Display the information\n"
3023 "If the information x is set, displays expr\n"
3026 "Quoted message body\n"
3027 "Message body without signature\n"
3028 "Quoted message body without signature\n"
3031 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
3032 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
3034 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3035 NULL, NULL, NULL, NULL);
3036 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3038 gtk_widget_grab_default(ok_btn);
3039 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3040 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3042 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
3043 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3045 gtk_widget_show_all(vbox);
3048 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3052 g_return_if_fail(entry != NULL);
3054 if (!font_sel_win) {
3055 font_sel_win = gtk_font_selection_dialog_new
3056 (_("Font selection"));
3057 gtk_window_position(GTK_WINDOW(font_sel_win),
3058 GTK_WIN_POS_CENTER);
3059 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3060 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3063 (GTK_OBJECT(font_sel_win), "key_press_event",
3064 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3066 gtk_signal_connect_object
3067 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3069 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3070 GTK_OBJECT(font_sel_win));
3073 if(font_sel_conn_id) {
3074 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3076 font_sel_conn_id = gtk_signal_connect
3077 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3079 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3081 printf("%i\n", font_sel_conn_id);
3083 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3084 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3086 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3087 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3088 gtk_widget_grab_focus
3089 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3090 gtk_widget_show(font_sel_win);
3093 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3097 if (event && event->keyval == GDK_Escape)
3098 gtk_widget_hide(font_sel_win);
3101 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3105 fontname = gtk_font_selection_dialog_get_font_name
3106 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3109 gtk_entry_set_text(entry, fontname);
3114 gtk_widget_hide(font_sel_win);
3117 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3120 GtkWidget *menuitem;
3123 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3124 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3125 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3126 g_free(*((gchar **)pparam->data));
3127 *((gchar **)pparam->data) = g_strdup(charset);
3130 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3133 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3135 GtkWidget *menuitem;
3139 g_return_if_fail(optmenu != NULL);
3140 g_return_if_fail(*((gchar **)pparam->data) != NULL);
3142 menu = gtk_option_menu_get_menu(optmenu);
3143 for (cur = GTK_MENU_SHELL(menu)->children;
3144 cur != NULL; cur = cur->next) {
3145 menuitem = GTK_WIDGET(cur->data);
3146 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3147 if (!strcmp(charset, *((gchar **)pparam->data))) {
3148 gtk_option_menu_set_history(optmenu, n);
3154 gtk_option_menu_set_history(optmenu, 0);
3155 prefs_common_charset_set_data_from_optmenu(pparam);
3158 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3161 GtkWidget *menuitem;
3163 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3164 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3165 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3166 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3169 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3171 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3172 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3174 GtkWidget *menuitem;
3177 case RECV_DIALOG_ALWAYS:
3178 gtk_option_menu_set_history(optmenu, 0);
3180 case RECV_DIALOG_ACTIVE:
3181 gtk_option_menu_set_history(optmenu, 1);
3183 case RECV_DIALOG_NEVER:
3184 gtk_option_menu_set_history(optmenu, 2);
3189 menu = gtk_option_menu_get_menu(optmenu);
3190 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3191 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3194 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3197 prefs_common_cancel();
3201 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3204 if (event && event->keyval == GDK_Escape)
3205 prefs_common_cancel();
3208 static void prefs_common_ok(void)
3210 prefs_common_apply();
3211 gtk_widget_hide(dialog.window);
3212 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
3213 gtk_widget_hide(quote_desc_win);
3218 static void prefs_common_apply(void)
3220 prefs_set_data_from_dialog(param);
3221 main_window_reflect_prefs_all();
3222 prefs_common_save_config();
3224 inc_autocheck_timer_remove();
3225 inc_autocheck_timer_set();
3228 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3231 GtkWidget *menuitem;
3233 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3234 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3235 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3236 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3239 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3241 NextUnreadMsgDialogShow dialog_show;
3242 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3244 GtkWidget *menuitem;
3246 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3248 switch (dialog_show) {
3249 case NEXTUNREADMSGDIALOG_ALWAYS:
3250 gtk_option_menu_set_history(optmenu, 0);
3252 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3253 gtk_option_menu_set_history(optmenu, 1);
3255 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3256 gtk_option_menu_set_history(optmenu, 2);
3261 menu = gtk_option_menu_get_menu(optmenu);
3262 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3263 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3266 static void prefs_common_cancel(void)
3268 gtk_widget_hide(dialog.window);
3273 static struct _ComposePrefs
3277 GtkWidget *close_btn;
3280 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
3281 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
3282 static void compose_prefs_close(GtkWidget *widget);
3283 static void compose_prefs_fmt_create(void);
3285 static void compose_prefs_fmt_open(void)
3287 if (composeprefs.window == NULL)
3288 compose_prefs_fmt_create();
3289 gtk_widget_show(composeprefs.window);
3293 static void compose_prefs_fmt_create(void)
3296 GtkWidget *close_btn;
3298 GtkWidget *frame_quote;
3299 GtkWidget *vbox_quote;
3301 GtkWidget *checkbtn_quote;
3302 GtkWidget *label_quotemark;
3303 GtkWidget *entry_quotemark;
3304 GtkWidget *scrolledwin_quotefmt;
3305 GtkWidget *text_quotefmt;
3306 GtkWidget *label_quotefmt;
3307 GtkWidget *btn_quotedesc;
3309 GtkWidget *label_fw_quotemark;
3310 GtkWidget *entry_fw_quotemark;
3311 GtkWidget *label_fw_quotefmt;
3312 GtkWidget *text_fw_quotefmt;
3314 window = gtk_window_new(GTK_WINDOW_DIALOG);
3315 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
3316 gtk_window_set_title(GTK_WINDOW(window), _("Compose Preferences"));
3317 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3318 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3319 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3320 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3321 GTK_SIGNAL_FUNC(compose_prefs_delete_event),
3323 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3324 GTK_SIGNAL_FUNC(compose_prefs_key_pressed),
3327 vbox_quote = gtk_vbox_new(FALSE, 8);
3328 gtk_container_add(GTK_CONTAINER(window), vbox_quote);
3330 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
3331 _("Quote message when replying"));
3333 hbox1 = gtk_hbox_new (FALSE, 8);
3334 gtk_widget_show (hbox1);
3335 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3337 label_quotemark = gtk_label_new (_("Quotation mark"));
3338 gtk_widget_show (label_quotemark);
3339 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
3341 entry_quotemark = gtk_entry_new ();
3342 gtk_widget_show (entry_quotemark);
3343 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
3344 gtk_widget_set_usize (entry_quotemark, 64, -1);
3346 hbox1 = gtk_hbox_new (FALSE, 0);
3347 gtk_widget_show (hbox1);
3348 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3350 label_quotefmt = gtk_label_new (_("Quotation format:"));
3351 gtk_widget_show (label_quotefmt);
3352 gtk_box_pack_start (GTK_BOX (hbox1), label_quotefmt, FALSE, FALSE, 0);
3354 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3355 gtk_widget_show (scrolledwin_quotefmt);
3356 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3357 gtk_scrolled_window_set_policy
3358 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3359 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3361 text_quotefmt = gtk_text_new (NULL, NULL);
3362 gtk_widget_show (text_quotefmt);
3363 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
3364 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
3365 gtk_widget_set_usize(text_quotefmt, 400, 60);
3367 hbox1 = gtk_hbox_new (FALSE, 8);
3368 gtk_widget_show (hbox1);
3369 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3371 label_fw_quotemark = gtk_label_new (_("Forward quotation mark"));
3372 gtk_widget_show (label_fw_quotemark);
3373 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotemark, FALSE, FALSE, 0);
3375 entry_fw_quotemark = gtk_entry_new ();
3376 gtk_widget_show (entry_fw_quotemark);
3377 gtk_box_pack_start (GTK_BOX (hbox1), entry_fw_quotemark, FALSE, FALSE, 0);
3378 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
3380 hbox1 = gtk_hbox_new (FALSE, 0);
3381 gtk_widget_show (hbox1);
3382 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3384 label_fw_quotefmt = gtk_label_new (_("Forward format:"));
3385 gtk_widget_show (label_fw_quotefmt);
3386 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotefmt, FALSE, FALSE, 0);
3388 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3389 gtk_widget_show (scrolledwin_quotefmt);
3390 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3391 gtk_scrolled_window_set_policy
3392 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3393 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3395 text_fw_quotefmt = gtk_text_new (NULL, NULL);
3396 gtk_widget_show (text_fw_quotefmt);
3397 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt);
3398 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
3399 gtk_widget_set_usize(text_fw_quotefmt, 400, 60);
3401 hbox1 = gtk_hbox_new (FALSE, 0);
3402 gtk_widget_show (hbox1);
3403 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
3406 gtk_button_new_with_label (_(" Description of symbols "));
3407 gtk_widget_show (btn_quotedesc);
3408 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc,
3411 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
3412 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
3415 gtkut_button_set_create(&hbox1, &close_btn, _("Close"),
3416 NULL, NULL, NULL, NULL);
3417 gtk_box_pack_end(GTK_BOX(vbox_quote), hbox1, FALSE, FALSE, 0);
3418 gtk_widget_grab_default(close_btn);
3420 gtk_signal_connect(GTK_OBJECT(close_btn), "clicked",
3421 GTK_SIGNAL_FUNC(compose_prefs_close), NULL);
3423 gtk_widget_show_all(vbox_quote);
3425 composeprefs.window = window;
3426 composeprefs.close_btn = close_btn;
3428 compose.checkbtn_quote = checkbtn_quote;
3429 compose.entry_quotemark = entry_quotemark;
3430 compose.text_quotefmt = text_quotefmt;
3431 compose.entry_fw_quotemark = entry_fw_quotemark;
3432 compose.text_fw_quotefmt = text_fw_quotefmt;
3435 static void compose_prefs_close(GtkWidget *widget)
3437 gtk_widget_hide(composeprefs.window);
3440 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3442 gtk_widget_hide(composeprefs.window);
3447 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3449 if (event && event->keyval == GDK_Escape) {
3450 gtk_widget_hide(composeprefs.window);
3454 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3457 GtkWidget *menuitem;
3459 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3460 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3461 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3462 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3465 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3467 RecvDialogShow dialog_show;
3468 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3470 GtkWidget *menuitem;
3472 dialog_show = *((RecvDialogShow *)pparam->data);
3474 switch (dialog_show) {
3475 case RECVDIALOG_ALWAYS:
3476 gtk_option_menu_set_history(optmenu, 0);
3478 case RECVDIALOG_WINDOW_ACTIVE:
3479 gtk_option_menu_set_history(optmenu, 1);
3481 case RECVDIALOG_NEVER:
3482 gtk_option_menu_set_history(optmenu, 2);
3487 menu = gtk_option_menu_get_menu(optmenu);
3488 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3489 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));