sync with sylpheed 0.6.4 release
[claws.git] / src / prefs_common.c
blob431cf9b5945a1863f3da4ca95e14fb2124a1b56f
1 /*
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.
20 #ifdef HAVE_CONFIG_H
21 # include "config.h"
22 #endif
24 #include "defs.h"
26 #include <glib.h>
27 #include <gtk/gtk.h>
28 #include <gdk/gdkkeysyms.h>
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <string.h>
32 #include <unistd.h>
33 #include <sys/types.h>
34 #include <sys/stat.h>
36 #include "intl.h"
37 #include "main.h"
38 #include "prefs.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"
46 #include "inc.h"
47 #include "menu.h"
48 #include "codeconv.h"
49 #include "utils.h"
50 #include "gtkutils.h"
51 #include "alertpanel.h"
52 #include "folder.h"
53 #include "filesel.h"
54 #include "folderview.h"
56 #if USE_PSPELL
57 #include "gtkspell.h"
58 #endif
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;
84 } receive;
86 static struct Send {
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;
97 } send;
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;
123 /* spelling */
124 #if USE_PSPELL
125 GtkWidget *checkbtn_enable_pspell;
126 GtkWidget *entry_pspell_path;
127 GtkWidget *btn_pspell_path;
128 GtkWidget *optmenu_dictionary;
129 #endif
131 } compose;
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;
152 } display;
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;
168 } message;
170 #if USE_GPGME
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;
180 } privacy;
181 #endif
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;
195 } interface;
197 static struct Other {
198 GtkWidget *uri_combo;
199 GtkWidget *uri_entry;
200 GtkWidget *printcmd_entry;
201 GtkWidget *exteditor_combo;
202 GtkWidget *exteditor_entry;
203 } other;
205 static struct MessageColorButtons {
206 GtkWidget *quote_level1_btn;
207 GtkWidget *quote_level2_btn;
208 GtkWidget *quote_level3_btn;
209 GtkWidget *uri_btn;
210 GtkWidget *tgt_folder_btn;
211 } color_buttons;
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);
221 #if USE_GPGME
222 static void prefs_common_default_signkey_set_data_from_optmenu
223 (PrefParam *pparam);
224 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
225 static void prefs_common_ascii_armored_warning(GtkWidget* widget,
226 gpointer unused);
227 #endif
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);
233 #if USE_PSPELL
234 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param);
235 static void prefs_dictionary_set_optmenu(PrefParam *pparam);
236 #endif
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[] = {
247 /* Receive */
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},
284 /* Send */
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},
303 /* Compose */
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},
360 #if USE_PSPELL
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 },
370 #endif
371 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
372 NULL, NULL, NULL},
374 /* Display */
375 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
376 NULL, NULL, NULL},
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,
425 NULL, NULL, NULL},
427 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
428 NULL, NULL, NULL},
429 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
430 NULL, NULL, NULL},
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},
489 /* Widget size */
490 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
491 NULL, NULL, NULL},
492 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
493 NULL, NULL, NULL},
494 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
495 NULL, NULL, NULL},
496 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
497 NULL, NULL, NULL},
498 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
499 NULL, NULL, NULL},
500 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
501 NULL, NULL, NULL},
503 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
504 NULL, NULL, NULL},
505 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
506 NULL, NULL, NULL},
508 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
509 NULL, NULL, NULL},
510 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
511 NULL, NULL, NULL},
512 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
513 NULL, NULL, NULL},
514 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
515 NULL, NULL, NULL},
516 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
517 NULL, NULL, NULL},
518 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
519 NULL, NULL, NULL},
520 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
521 NULL, NULL, NULL},
522 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
523 NULL, NULL, NULL},
524 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
525 NULL, NULL, NULL},
526 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
527 NULL, NULL, NULL},
528 {"compose_width", "600", &prefs_common.compose_width, P_INT,
529 NULL, NULL, NULL},
530 {"compose_height", "560", &prefs_common.compose_height, P_INT,
531 NULL, NULL, NULL},
533 /* Message */
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,
539 NULL, NULL, NULL},
540 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
541 NULL, NULL, NULL},
542 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
543 NULL, NULL, NULL},
544 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
545 NULL, NULL, NULL},
546 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
547 NULL, NULL, NULL},
548 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
549 NULL, NULL, NULL},
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,
581 NULL, NULL, NULL},
583 /* MIME viewer */
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},
589 #if USE_GPGME
590 /* Privacy */
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},
608 #ifndef __MINGW32__
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 */
622 /* Interface */
623 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
624 NULL, NULL, NULL},
625 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
626 NULL, NULL, NULL},
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},
668 /* Other */
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,
679 NULL, NULL, NULL},
680 {"important_score", "1", &prefs_common.important_score, P_INT,
681 NULL, NULL, NULL},
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);
693 #if USE_GPGME
694 static void prefs_privacy_create (void);
695 #endif
696 static void prefs_interface_create (void);
697 static void prefs_other_create (void);
699 static void date_format_ok_btn_clicked (GtkButton *button,
700 GtkWidget **widget);
701 static void date_format_cancel_btn_clicked (GtkButton *button,
702 GtkWidget **widget);
703 static void date_format_key_pressed (GtkWidget *keywidget,
704 GdkEventKey *event,
705 GtkWidget **widget);
706 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
707 GdkEventAny *event,
708 GtkWidget **widget);
709 static void date_format_entry_on_change (GtkEditable *editable,
710 GtkLabel *example);
711 static void date_format_select_row (GtkWidget *date_format_list,
712 gint row,
713 gint column,
714 GdkEventButton *event,
715 GtkWidget *date_format);
716 static GtkWidget *date_format_create (GtkButton *button,
717 void *data);
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,
724 GdkEventKey *event,
725 gpointer data);
726 static void quote_color_set_dialog (GtkWidget *widget,
727 gpointer data);
728 static void quote_colors_set_dialog_ok (GtkWidget *widget,
729 gpointer data);
730 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
731 gpointer data);
732 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
733 GdkEventKey *event,
734 gpointer data);
735 static void set_button_bg_color (GtkWidget *widget,
736 gint color);
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,
743 GdkEventKey *event,
744 gpointer data);
745 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
747 static gint prefs_common_deleted (GtkWidget *widget,
748 GdkEventAny *event,
749 gpointer data);
750 static void prefs_common_key_pressed (GtkWidget *widget,
751 GdkEventKey *event,
752 gpointer data);
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))
773 return;
775 inc_lock();
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)
792 gint page = 0;
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++);
818 prefs_send_create();
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++);
826 #if USE_GPGME
827 prefs_privacy_create();
828 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
829 #endif
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)
842 GtkWidget *vbox1;
843 GtkWidget *vbox2;
844 GtkWidget *frame_incext;
845 GtkWidget *checkbtn_incext;
846 GtkWidget *hbox;
847 GtkWidget *label_incext;
848 GtkWidget *entry_incext;
849 /* GtkWidget *button_incext; */
851 GtkWidget *frame_spool;
852 GtkWidget *checkbtn_local;
853 GtkWidget *checkbtn_filter_on_inc;
854 GtkWidget *label_spool;
855 GtkWidget *entry_spool;
857 GtkWidget *hbox_autochk;
858 GtkWidget *checkbtn_autochk;
859 GtkWidget *label_autochk1;
860 GtkObject *spinbtn_autochk_adj;
861 GtkWidget *spinbtn_autochk;
862 GtkWidget *label_autochk2;
863 GtkWidget *checkbtn_chkonstartup;
864 GtkWidget *checkbtn_noerrorpanel;
865 GtkWidget *checkbtn_scan_after_inc;
868 GtkWidget *frame_news;
869 GtkWidget *label_maxarticle;
870 GtkWidget *spinbtn_maxarticle;
871 GtkObject *spinbtn_maxarticle_adj;
873 vbox1 = gtk_vbox_new (FALSE, VSPACING);
874 gtk_widget_show (vbox1);
875 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
876 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
878 PACK_FRAME(vbox1, frame_incext, _("External program"));
880 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
881 gtk_widget_show (vbox2);
882 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
883 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
885 /* Use of external incorporation program */
886 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
887 _("Use external program for incorporation"));
889 hbox = gtk_hbox_new (FALSE, 8);
890 gtk_widget_show (hbox);
891 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
892 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
894 label_incext = gtk_label_new (_("Program path"));
895 gtk_widget_show (label_incext);
896 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
898 entry_incext = gtk_entry_new ();
899 gtk_widget_show (entry_incext);
900 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
901 #if 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);
905 #endif
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);
939 /* Auto-checking */
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 article number 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,
996 FALSE, FALSE, 0);
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)
1024 GtkWidget *vbox1;
1025 GtkWidget *vbox2;
1026 GtkWidget *frame_extsend;
1027 GtkWidget *vbox_extsend;
1028 GtkWidget *checkbtn_extsend;
1029 GtkWidget *hbox1;
1030 GtkWidget *label_extsend;
1031 GtkWidget *entry_extsend;
1032 /* GtkWidget *button_extsend; */
1033 GtkWidget *checkbtn_savemsg;
1034 GtkWidget *checkbtn_queuemsg;
1035 GtkWidget *label_outcharset;
1036 GtkWidget *optmenu;
1037 GtkWidget *optmenu_menu;
1038 GtkWidget *menuitem;
1039 GtkWidget *checkbtn_returnreceipt;
1041 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1042 gtk_widget_show (vbox1);
1043 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1044 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1046 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1048 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1049 gtk_widget_show (vbox_extsend);
1050 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1051 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1053 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1054 _("Use external program for sending"));
1056 hbox1 = gtk_hbox_new (FALSE, 8);
1057 gtk_widget_show (hbox1);
1058 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1059 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1061 label_extsend = gtk_label_new (_("Program path"));
1062 gtk_widget_show (label_extsend);
1063 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1065 entry_extsend = gtk_entry_new ();
1066 gtk_widget_show (entry_extsend);
1067 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1069 #if 0
1070 button_extsend = gtk_button_new_with_label ("... ");
1071 gtk_widget_show (button_extsend);
1072 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1073 #endif
1075 vbox2 = gtk_vbox_new (FALSE, 0);
1076 gtk_widget_show (vbox2);
1077 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1079 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1080 _("Save sent messages to outbox"));
1081 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1082 _("Queue messages that fail to send"));
1083 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1084 _("Send return receipt on request"));
1086 hbox1 = gtk_hbox_new (FALSE, 8);
1087 gtk_widget_show (hbox1);
1088 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1090 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1091 gtk_widget_show (label_outcharset);
1092 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1094 optmenu = gtk_option_menu_new ();
1095 gtk_widget_show (optmenu);
1096 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1098 optmenu_menu = gtk_menu_new ();
1100 #define SET_MENUITEM(str, charset) \
1102 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1105 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1106 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1107 #if HAVE_LIBJCONV
1108 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1109 #endif
1110 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1111 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1112 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1113 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1114 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1115 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1116 #if HAVE_LIBJCONV
1117 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1118 #endif
1119 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1120 #if HAVE_LIBJCONV
1121 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1122 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1123 #endif
1124 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1125 #if 0
1126 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1127 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1128 #endif /* 0 */
1129 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1130 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1131 #if 0
1132 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1133 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1134 #endif /* 0 */
1135 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1137 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1139 send.checkbtn_extsend = checkbtn_extsend;
1140 send.entry_extsend = entry_extsend;
1141 /* send.button_extsend = button_extsend; */
1143 send.checkbtn_savemsg = checkbtn_savemsg;
1144 send.checkbtn_queuemsg = checkbtn_queuemsg;
1145 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1147 send.optmenu_charset = optmenu;
1150 #if USE_PSPELL
1151 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1153 gchar *str;
1154 gchar *dict_name;
1156 g_return_if_fail(param);
1157 g_return_if_fail(param->data);
1158 g_return_if_fail(param->widget);
1159 g_return_if_fail(*(param->widget));
1161 dict_name = gtkpspell_get_dictionary_menu_active_item
1162 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1163 str = *((gchar **) param->data);
1164 if (str)
1165 g_free(str);
1166 *((gchar **) param->data) = dict_name;
1169 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1171 GList *cur;
1172 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1173 GtkWidget *menu;
1174 GtkWidget *menuitem;
1175 gchar *dict_name;
1176 gint n = 0;
1178 g_return_if_fail(optmenu != NULL);
1179 g_return_if_fail(pparam->data != NULL);
1181 if (*(gchar **) pparam->data) {
1182 menu = gtk_option_menu_get_menu(optmenu);
1183 for (cur = GTK_MENU_SHELL(menu)->children;
1184 cur != NULL; cur = cur->next) {
1185 menuitem = GTK_WIDGET(cur->data);
1186 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem), "dict_name");
1187 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1188 gtk_option_menu_set_history(optmenu, n);
1189 return;
1191 n++;
1195 gtk_option_menu_set_history(optmenu, 0);
1196 prefs_dictionary_set_data_from_optmenu(pparam);
1199 static void prefs_compose_checkbtn_enable_pspell_toggle_cb
1200 (GtkWidget *widget,
1201 gpointer data)
1203 gboolean toggled;
1205 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1206 gtk_widget_set_sensitive(compose.entry_pspell_path, toggled);
1207 gtk_widget_set_sensitive(compose.optmenu_dictionary, toggled);
1208 gtk_widget_set_sensitive(compose.btn_pspell_path, toggled);
1211 static void prefs_compose_btn_pspell_path_clicked_cb(GtkWidget *widget,
1212 gpointer data)
1214 gchar *file_path, *tmp;
1215 GtkWidget *new_menu;
1217 file_path = filesel_select_file(_("Select dictionaries location"),
1218 prefs_common.pspell_path);
1219 if (file_path == NULL) {
1220 /* don't change */
1222 else {
1223 tmp=g_dirname(file_path);
1225 if (prefs_common.pspell_path)
1226 g_free(prefs_common.pspell_path);
1227 prefs_common.pspell_path = g_strdup_printf("%s%s",tmp,G_DIR_SEPARATOR_S);
1229 new_menu = gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path);
1230 gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_dictionary),
1231 new_menu);
1233 gtk_entry_set_text(GTK_ENTRY(compose.entry_pspell_path), prefs_common.pspell_path);
1234 /* select first one */
1235 gtk_option_menu_set_history(GTK_OPTION_MENU(compose.optmenu_dictionary), 0);
1237 prefs_common.dictionary = gtkpspell_get_dictionary_menu_active_item(
1238 gtk_option_menu_get_menu(GTK_OPTION_MENU(compose.optmenu_dictionary)));
1239 g_free(tmp);
1244 #endif
1246 static void prefs_compose_create(void)
1248 GtkWidget *vbox1;
1249 GtkWidget *vbox2;
1250 GtkWidget *vbox3;
1253 GtkWidget *frame_quote;
1254 GtkWidget *vbox_quote;
1255 GtkWidget *checkbtn_quote;
1256 GtkWidget *hbox1;
1257 GtkWidget *label_quotemark;
1258 GtkWidget *entry_quotemark;
1259 GtkWidget *hbox2;
1260 GtkWidget *label_quotefmt;
1261 GtkWidget *btn_quotedesc;
1262 GtkWidget *scrolledwin_quotefmt;
1263 GtkWidget *text_quotefmt;
1266 GtkWidget *hbox1;
1267 GtkWidget *hbox2;
1268 GtkWidget *btn_quotefmt;
1270 GtkWidget *frame_sig;
1271 GtkWidget *vbox_sig;
1272 GtkWidget *checkbtn_autosig;
1273 GtkWidget *label_sigsep;
1274 GtkWidget *entry_sigsep;
1276 GtkWidget *frame_autosel;
1277 GtkWidget *hbox_autosel;
1278 GtkWidget *vbox_autosel;
1279 GtkWidget *checkbtn_reply_account_autosel;
1280 GtkWidget *checkbtn_forward_account_autosel;
1281 GtkWidget *checkbtn_reedit_account_autosel;
1283 GtkWidget *checkbtn_autoextedit;
1285 GtkWidget *vbox_linewrap;
1287 GtkWidget *hbox3;
1288 GtkWidget *hbox4;
1289 GtkWidget *hbox5;
1290 GtkWidget *label_linewrap;
1291 GtkObject *spinbtn_linewrap_adj;
1292 GtkWidget *spinbtn_linewrap;
1293 GtkWidget *checkbtn_wrapquote;
1294 GtkWidget *checkbtn_wrapatsend;
1296 GtkWidget *checkbtn_forward_as_attachment;
1297 GtkWidget *checkbtn_smart_wrapping;
1298 GtkWidget *checkbtn_block_cursor;
1300 #if USE_PSPELL
1301 GtkWidget *frame_spell;
1302 GtkWidget *hbox_spell;
1303 GtkWidget *vbox_spell;
1304 GtkWidget *hbox_pspell_path;
1305 GtkWidget *checkbtn_enable_pspell;
1306 GtkWidget *label_pspell_path;
1307 GtkWidget *entry_pspell_path;
1308 GtkWidget *btn_pspell_path;
1309 GtkWidget *hbox_dictionary;
1310 GtkWidget *label_dictionary;
1311 GtkWidget *optmenu_dictionary;
1312 #endif
1313 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1314 gtk_widget_show (vbox1);
1315 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1316 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1319 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
1321 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1322 gtk_widget_show (vbox_quote);
1323 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1324 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1326 hbox1 = gtk_hbox_new (FALSE, 32);
1327 gtk_widget_show (hbox1);
1328 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1330 hbox2 = gtk_hbox_new (FALSE, 8);
1331 gtk_widget_show (hbox2);
1332 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1334 label_quotemark = gtk_label_new (_("Quotation mark"));
1335 gtk_widget_show (label_quotemark);
1336 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1338 entry_quotemark = gtk_entry_new ();
1339 gtk_widget_show (entry_quotemark);
1340 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1341 gtk_widget_set_usize (entry_quotemark, 64, -1);
1343 PACK_CHECK_BUTTON (hbox1, checkbtn_quote,
1344 _("Quote message when replying"));
1346 hbox2 = gtk_hbox_new (FALSE, 0);
1347 gtk_widget_show (hbox2);
1348 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1350 label_quotefmt = gtk_label_new (_("Quotation format:"));
1351 gtk_widget_show (label_quotefmt);
1352 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1354 btn_quotedesc =
1355 gtk_button_new_with_label (_(" Description of symbols "));
1357 gtk_widget_show (btn_quotedesc);
1358 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1359 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1360 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1363 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1364 gtk_widget_show (scrolledwin_quotefmt);
1365 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1366 gtk_scrolled_window_set_policy
1367 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1368 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1370 text_quotefmt = gtk_text_new (NULL, NULL);
1371 gtk_widget_show (text_quotefmt);
1372 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1373 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1374 gtk_widget_set_usize(text_quotefmt, -1, 60);
1377 hbox1 = gtk_hbox_new (FALSE, 32);
1378 gtk_widget_show (hbox1);
1379 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1381 btn_quotefmt = gtk_button_new_with_label (_(" Quote format "));
1382 gtk_widget_show (btn_quotefmt);
1383 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotefmt, FALSE, FALSE, 0);
1384 gtk_signal_connect(GTK_OBJECT(btn_quotefmt), "clicked",
1385 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), NULL);
1387 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1389 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1390 gtk_widget_show (vbox_sig);
1391 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1392 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1394 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1395 _("Insert signature automatically"));
1397 hbox1 = gtk_hbox_new (FALSE, 8);
1398 gtk_widget_show (hbox1);
1399 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1400 label_sigsep = gtk_label_new (_("Signature separator"));
1401 gtk_widget_show (label_sigsep);
1402 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1404 entry_sigsep = gtk_entry_new ();
1405 gtk_widget_show (entry_sigsep);
1406 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1408 gtk_widget_set_usize (entry_sigsep, 64, -1);
1410 /* Automatic (Smart) Account Selection */
1411 PACK_FRAME(vbox1, frame_autosel, _("Automatic Account Selection"));
1413 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1414 gtk_widget_show (hbox_autosel);
1415 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1416 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1418 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1419 _("when replying"));
1420 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1421 _("when forwarding"));
1422 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1423 _("when re-editing"));
1425 vbox2 = gtk_vbox_new (FALSE, 0);
1426 gtk_widget_show (vbox2);
1427 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1429 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1430 _("Automatically launch the external editor"));
1432 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1434 /* line-wrapping */
1435 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1436 gtk_widget_show (vbox_linewrap);
1437 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1439 hbox3 = gtk_hbox_new (FALSE, 8);
1440 gtk_widget_show (hbox3);
1441 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1444 label_linewrap = gtk_label_new (_("Wrap messages at"));
1445 gtk_widget_show (label_linewrap);
1446 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1448 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1449 spinbtn_linewrap = gtk_spin_button_new
1450 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1451 gtk_widget_show (spinbtn_linewrap);
1452 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1453 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1454 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1456 label_linewrap = gtk_label_new (_("characters"));
1457 gtk_widget_show (label_linewrap);
1458 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1460 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1462 hbox4 = gtk_hbox_new (FALSE, 32);
1463 gtk_widget_show (hbox4);
1464 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1466 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1467 PACK_CHECK_BUTTON
1468 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1470 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1471 _("Forward as attachment"));
1473 PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping,
1474 _("Smart wrapping (EXPERIMENTAL)"));
1476 PACK_CHECK_BUTTON (vbox1, checkbtn_block_cursor,
1477 _("Block cursor"));
1479 #if USE_PSPELL
1480 /* spell checker defaults */
1481 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1482 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1483 gtk_widget_show (vbox_spell);
1484 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1485 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1487 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_pspell,
1488 _("Enable spell checker (EXPERIMENTAL)"));
1490 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_pspell), "toggled",
1491 GTK_SIGNAL_FUNC(prefs_compose_checkbtn_enable_pspell_toggle_cb),
1492 NULL);
1494 hbox_pspell_path = gtk_hbox_new (FALSE, 8);
1495 gtk_widget_show(hbox_pspell_path);
1496 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_pspell_path, TRUE, TRUE, 0);
1498 label_pspell_path = gtk_label_new (_("Dictionaries path"));
1499 gtk_widget_show(label_pspell_path);
1500 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), label_pspell_path, FALSE, FALSE, 0);
1502 entry_pspell_path = gtk_entry_new();
1503 gtk_widget_show(entry_pspell_path);
1504 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), entry_pspell_path, FALSE, FALSE, 0);
1505 gtk_widget_set_usize(entry_pspell_path, 150, -1);
1506 gtk_widget_set_sensitive(entry_pspell_path, prefs_common.enable_pspell);
1508 btn_pspell_path = gtk_button_new_with_label(_("..."));
1509 gtk_widget_show(btn_pspell_path);
1510 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), btn_pspell_path, FALSE, FALSE, 0);
1511 gtk_widget_set_sensitive(btn_pspell_path, prefs_common.enable_pspell);
1513 gtk_signal_connect(GTK_OBJECT(btn_pspell_path), "clicked",
1514 GTK_SIGNAL_FUNC(prefs_compose_btn_pspell_path_clicked_cb),
1515 NULL);
1517 hbox_dictionary = gtk_hbox_new(FALSE, 8);
1518 gtk_widget_show(hbox_dictionary);
1519 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_dictionary, TRUE, TRUE, 0);
1521 label_dictionary = gtk_label_new(_("Dictionary"));
1522 gtk_widget_show(label_dictionary);
1523 gtk_box_pack_start(GTK_BOX(hbox_dictionary), label_dictionary, FALSE, FALSE, 0);
1525 optmenu_dictionary = gtk_option_menu_new();
1526 gtk_widget_show(optmenu_dictionary);
1527 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1528 gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path));
1529 gtk_box_pack_start(GTK_BOX(hbox_dictionary), optmenu_dictionary, FALSE, FALSE, 0);
1530 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_pspell);
1531 #endif
1534 compose.checkbtn_quote = checkbtn_quote;
1535 compose.entry_quotemark = entry_quotemark;
1536 compose.text_quotefmt = text_quotefmt;
1538 compose.checkbtn_autosig = checkbtn_autosig;
1539 compose.entry_sigsep = entry_sigsep;
1541 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1542 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1543 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1544 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1546 compose.spinbtn_linewrap = spinbtn_linewrap;
1547 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1548 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1549 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1551 compose.checkbtn_forward_as_attachment =
1552 checkbtn_forward_as_attachment;
1553 compose.checkbtn_smart_wrapping =
1554 checkbtn_smart_wrapping;
1555 compose.checkbtn_block_cursor =
1556 checkbtn_block_cursor;
1558 #if USE_PSPELL
1559 compose.checkbtn_enable_pspell = checkbtn_enable_pspell;
1560 compose.entry_pspell_path = entry_pspell_path;
1561 compose.btn_pspell_path = btn_pspell_path;
1562 compose.optmenu_dictionary = optmenu_dictionary;
1563 #endif
1566 static void prefs_display_create(void)
1568 GtkWidget *vbox1;
1569 GtkWidget *frame_font;
1570 GtkWidget *table1;
1571 GtkWidget *label_textfont;
1572 GtkWidget *entry_textfont;
1573 GtkWidget *button_textfont;
1574 GtkWidget *chkbtn_folder_unread;
1575 GtkWidget *chkbtn_transhdr;
1576 GtkWidget *frame_summary;
1577 GtkWidget *vbox2;
1578 GtkWidget *chkbtn_swapfrom;
1579 GtkWidget *chkbtn_hscrollbar;
1580 GtkWidget *chkbtn_useaddrbook;
1581 GtkWidget *chkbtn_expand_thread;
1582 GtkWidget *chkbtn_bold_unread;
1583 GtkWidget *vbox3;
1584 GtkWidget *hbox1;
1585 GtkWidget *label_datefmt;
1586 GtkWidget *button_datefmt;
1587 GtkWidget *entry_datefmt;
1588 GtkWidget *button_dispitem;
1589 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
1591 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1592 gtk_widget_show (vbox1);
1593 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1594 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1596 PACK_FRAME(vbox1, frame_font, _("Font"));
1598 table1 = gtk_table_new (4, 3, FALSE);
1600 gtk_widget_show (table1);
1601 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1602 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1603 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1604 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1606 label_textfont = gtk_label_new (_("Text"));
1607 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1608 gtk_widget_show (label_textfont);
1609 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1610 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1612 entry_textfont = gtk_entry_new ();
1613 gtk_widget_show (entry_textfont);
1614 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1615 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1617 button_textfont = gtk_button_new_with_label ("... ");
1619 gtk_widget_show (button_textfont);
1620 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1621 0, 0, 0, 0);
1622 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1623 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1625 tmplabel = gtk_label_new (_("Small"));
1626 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1627 gtk_widget_show (tmplabel);
1628 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1629 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1631 tmpentry = gtk_entry_new ();
1632 gtk_widget_show (tmpentry);
1633 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1634 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1636 tmpbutton = gtk_button_new_with_label (" ... ");
1637 gtk_widget_show (tmpbutton);
1638 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1639 0, 0, 0, 0);
1640 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1641 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1642 display.entry_smallfont = tmpentry;
1644 tmplabel = gtk_label_new (_("Normal"));
1645 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1646 gtk_widget_show (tmplabel);
1647 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1648 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1650 tmpentry = gtk_entry_new ();
1651 gtk_widget_show (tmpentry);
1652 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1653 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1655 tmpbutton = gtk_button_new_with_label (" ... ");
1656 gtk_widget_show (tmpbutton);
1657 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1658 0, 0, 0, 0);
1659 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1660 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1661 display.entry_normalfont = tmpentry;
1663 tmplabel = gtk_label_new (_("Bold"));
1664 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1665 gtk_widget_show (tmplabel);
1666 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1667 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1669 tmpentry = gtk_entry_new ();
1670 gtk_widget_show (tmpentry);
1671 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1672 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1674 tmpbutton = gtk_button_new_with_label (" ... ");
1675 gtk_widget_show (tmpbutton);
1676 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1677 0, 0, 0, 0);
1678 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1679 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1680 display.entry_boldfont = tmpentry;
1682 vbox2 = gtk_vbox_new (FALSE, 0);
1683 gtk_widget_show (vbox2);
1684 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1686 PACK_CHECK_BUTTON
1687 (vbox2, chkbtn_transhdr,
1688 _("Translate header name (such as `From:', `Subject:')"));
1690 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1691 _("Display unread number next to folder name"));
1693 /* ---- Summary ---- */
1695 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1697 vbox2 = gtk_vbox_new (FALSE, 0);
1698 gtk_widget_show (vbox2);
1699 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1700 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1702 PACK_CHECK_BUTTON
1703 (vbox2, chkbtn_swapfrom,
1704 _("Display recipient on `From' column if sender is yourself"));
1705 PACK_CHECK_BUTTON
1706 (vbox2, chkbtn_useaddrbook,
1707 _("Display sender using address book"));
1708 PACK_CHECK_BUTTON
1709 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1710 PACK_CHECK_BUTTON
1711 (vbox2, chkbtn_expand_thread, _("Expand threads"));
1712 PACK_CHECK_BUTTON
1713 (vbox2, chkbtn_bold_unread,
1714 _("Display unread messages with bold font"));
1716 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1718 hbox1 = gtk_hbox_new (FALSE, 8);
1719 gtk_widget_show (hbox1);
1720 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1722 label_datefmt = gtk_label_new (_("Date format"));
1723 gtk_widget_show (label_datefmt);
1724 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1726 entry_datefmt = gtk_entry_new ();
1727 gtk_widget_show (entry_datefmt);
1728 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1730 button_datefmt = gtk_button_new_with_label ("... ");
1732 gtk_widget_show (button_datefmt);
1733 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1734 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1735 GTK_SIGNAL_FUNC (date_format_create), NULL);
1737 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1739 hbox1 = gtk_hbox_new (FALSE, 8);
1740 gtk_widget_show (hbox1);
1741 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1743 button_dispitem = gtk_button_new_with_label
1744 (_(" Set display item of summary... "));
1745 gtk_widget_show (button_dispitem);
1746 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1747 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1748 GTK_SIGNAL_FUNC (prefs_summary_column_open),
1749 NULL);
1751 display.entry_textfont = entry_textfont;
1752 display.button_textfont = button_textfont;
1754 display.chkbtn_folder_unread = chkbtn_folder_unread;
1755 display.chkbtn_transhdr = chkbtn_transhdr;
1757 display.chkbtn_swapfrom = chkbtn_swapfrom;
1758 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1759 display.chkbtn_expand_thread = chkbtn_expand_thread;
1760 display.chkbtn_bold_unread = chkbtn_bold_unread;
1761 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1762 display.entry_datefmt = entry_datefmt;
1765 static void prefs_message_create(void)
1767 GtkWidget *vbox1;
1768 GtkWidget *vbox2;
1769 GtkWidget *vbox3;
1770 GtkWidget *hbox1;
1771 GtkWidget *chkbtn_enablecol;
1772 GtkWidget *button_edit_col;
1773 GtkWidget *chkbtn_mbalnum;
1774 GtkWidget *chkbtn_disphdrpane;
1775 GtkWidget *chkbtn_disphdr;
1776 GtkWidget *button_edit_disphdr;
1777 GtkWidget *hbox_linespc;
1778 GtkWidget *label_linespc;
1779 GtkObject *spinbtn_linespc_adj;
1780 GtkWidget *spinbtn_linespc;
1781 GtkWidget *chkbtn_headspc;
1783 GtkWidget *frame_scr;
1784 GtkWidget *vbox_scr;
1785 GtkWidget *chkbtn_smoothscroll;
1786 GtkWidget *hbox_scr;
1787 GtkWidget *label_scr;
1788 GtkObject *spinbtn_scrollstep_adj;
1789 GtkWidget *spinbtn_scrollstep;
1790 GtkWidget *chkbtn_halfpage;
1792 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1793 gtk_widget_show (vbox1);
1794 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1795 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1797 hbox1 = gtk_hbox_new (FALSE, 8);
1798 gtk_widget_show (hbox1);
1799 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1801 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1802 _("Enable coloration of message"));
1803 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1804 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1805 NULL);
1807 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1808 gtk_widget_show (button_edit_col);
1809 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1810 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1811 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1813 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1815 vbox2 = gtk_vbox_new (FALSE, 0);
1816 gtk_widget_show (vbox2);
1817 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1819 PACK_CHECK_BUTTON
1820 (vbox2, chkbtn_mbalnum,
1821 _("Display 2-byte alphabet and numeric with 1-byte character"));
1822 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1823 _("Display header pane above message view"));
1825 hbox1 = gtk_hbox_new (FALSE, 8);
1826 gtk_widget_show (hbox1);
1827 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1829 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1830 _("Display short headers on message view"));
1832 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1833 gtk_widget_show (button_edit_disphdr);
1834 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1835 FALSE, TRUE, 0);
1836 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1837 GTK_SIGNAL_FUNC (prefs_display_header_open),
1838 NULL);
1840 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1842 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1844 hbox1 = gtk_hbox_new (FALSE, 32);
1845 gtk_widget_show (hbox1);
1846 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1848 hbox_linespc = gtk_hbox_new (FALSE, 8);
1849 gtk_widget_show (hbox1);
1850 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1852 label_linespc = gtk_label_new (_("Line space"));
1853 gtk_widget_show (label_linespc);
1854 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1855 FALSE, FALSE, 0);
1857 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1858 spinbtn_linespc = gtk_spin_button_new
1859 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1860 gtk_widget_show (spinbtn_linespc);
1861 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1862 FALSE, FALSE, 0);
1863 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1864 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1866 label_linespc = gtk_label_new (_("pixel(s)"));
1867 gtk_widget_show (label_linespc);
1868 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1869 FALSE, FALSE, 0);
1871 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1873 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1875 vbox_scr = gtk_vbox_new (FALSE, 0);
1876 gtk_widget_show (vbox_scr);
1877 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1878 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1880 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1882 hbox1 = gtk_hbox_new (FALSE, 32);
1883 gtk_widget_show (hbox1);
1884 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1886 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1888 hbox_scr = gtk_hbox_new (FALSE, 8);
1889 gtk_widget_show (hbox_scr);
1890 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1892 label_scr = gtk_label_new (_("Step"));
1893 gtk_widget_show (label_scr);
1894 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1896 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1897 spinbtn_scrollstep = gtk_spin_button_new
1898 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1899 gtk_widget_show (spinbtn_scrollstep);
1900 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1901 FALSE, FALSE, 0);
1902 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1903 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1904 TRUE);
1906 label_scr = gtk_label_new (_("pixel(s)"));
1907 gtk_widget_show (label_scr);
1908 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1910 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1912 message.chkbtn_enablecol = chkbtn_enablecol;
1913 message.button_edit_col = button_edit_col;
1914 message.chkbtn_mbalnum = chkbtn_mbalnum;
1915 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1916 message.chkbtn_disphdr = chkbtn_disphdr;
1917 message.spinbtn_linespc = spinbtn_linespc;
1918 message.chkbtn_headspc = chkbtn_headspc;
1920 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1921 message.spinbtn_scrollstep = spinbtn_scrollstep;
1922 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1923 message.chkbtn_halfpage = chkbtn_halfpage;
1926 #if USE_GPGME
1927 static void prefs_privacy_create(void)
1929 GtkWidget *vbox1;
1930 GtkWidget *vbox2;
1931 GtkWidget *hbox1;
1932 GtkWidget *checkbtn_default_encrypt;
1933 GtkWidget *checkbtn_ascii_armored;
1934 GtkWidget *checkbtn_default_sign;
1935 GtkWidget *checkbtn_auto_check_signatures;
1936 GtkWidget *checkbtn_gpg_signature_popup;
1937 GtkWidget *checkbtn_passphrase_grab;
1938 GtkWidget *checkbtn_gpg_warning;
1939 GtkWidget *label;
1940 GtkWidget *menuitem;
1941 GtkWidget *optmenu;
1942 GtkWidget *optmenu_menu;
1944 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1945 gtk_widget_show (vbox1);
1946 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1947 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1949 vbox2 = gtk_vbox_new (FALSE, 0);
1950 gtk_widget_show (vbox2);
1951 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1953 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1954 _("Encrypt message by default"));
1956 PACK_CHECK_BUTTON (vbox2, checkbtn_ascii_armored,
1957 _("Plain ASCII armored"));
1958 gtk_signal_connect(GTK_OBJECT(checkbtn_ascii_armored), "toggled",
1959 prefs_common_ascii_armored_warning, (gpointer)0);
1961 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1962 _("Sign message by default"));
1964 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1965 _("Automatically check signatures"));
1967 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
1968 _("Show signature check result in a popup window"));
1970 #ifndef __MINGW32__
1971 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1972 _("Grab input while entering a passphrase"));
1973 #endif
1975 PACK_CHECK_BUTTON
1976 (vbox2, checkbtn_gpg_warning,
1977 _("Display warning on startup if GnuPG doesn't work"));
1979 hbox1 = gtk_hbox_new (FALSE, 8);
1980 gtk_widget_show (hbox1);
1981 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1983 /* create default signkey box */
1984 label = gtk_label_new (_("Default Sign Key"));
1985 gtk_widget_show (label);
1986 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1987 optmenu = gtk_option_menu_new ();
1988 gtk_widget_show (optmenu);
1989 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1990 optmenu_menu = gtk_menu_new ();
1992 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1993 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1994 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1995 /* FIXME: disabled because not implemented */
1996 gtk_widget_set_sensitive(optmenu, FALSE);
1998 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1999 privacy.checkbtn_ascii_armored = checkbtn_ascii_armored;
2000 privacy.checkbtn_default_sign = checkbtn_default_sign;
2001 privacy.checkbtn_auto_check_signatures
2002 = checkbtn_auto_check_signatures;
2003 privacy.checkbtn_gpg_signature_popup
2004 = checkbtn_gpg_signature_popup;
2005 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2006 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2007 privacy.optmenu_default_signkey = optmenu;
2010 static void
2011 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
2013 #if 0
2014 GtkWidget *menu;
2015 GtkWidget *menuitem;
2016 gchar *charset;
2018 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2019 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2020 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2021 g_free(*((gchar **)pparam->data));
2022 *((gchar **)pparam->data) = g_strdup(charset);
2023 #endif
2026 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
2028 #if 0
2029 GList *cur;
2030 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2031 GtkWidget *menu;
2032 GtkWidget *menuitem;
2033 gchar *charset;
2034 gint n = 0;
2036 g_return_if_fail(optmenu != NULL);
2037 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2039 menu = gtk_option_menu_get_menu(optmenu);
2040 for (cur = GTK_MENU_SHELL(menu)->children;
2041 cur != NULL; cur = cur->next) {
2042 menuitem = GTK_WIDGET(cur->data);
2043 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2044 if (!strcmp(charset, *((gchar **)pparam->data))) {
2045 gtk_option_menu_set_history(optmenu, n);
2046 return;
2048 n++;
2051 gtk_option_menu_set_history(optmenu, 0);
2052 prefs_common_charset_set_data_from_optmenu(pparam);
2053 #endif
2056 static void prefs_common_ascii_armored_warning(GtkWidget* widget,
2057 gpointer unused)
2059 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))
2060 && gtk_notebook_get_current_page(GTK_NOTEBOOK(dialog.notebook))) {
2061 alertpanel_message("Warning - Privacy/Plain ASCII armored",
2062 "Its not recommend to use the old style plain ASCII\n"
2063 "armored mode for encypted messages. It doesn't comply\n"
2064 "with the RFC 3156 - MIME security with OpenPGP.");
2067 #endif /* USE_GPGME */
2069 static void prefs_interface_create(void)
2071 GtkWidget *vbox1;
2072 GtkWidget *vbox2;
2073 GtkWidget *vbox3;
2074 /* GtkWidget *checkbtn_emacs; */
2075 GtkWidget *checkbtn_openunread;
2076 GtkWidget *checkbtn_openinbox;
2077 GtkWidget *checkbtn_immedexec;
2078 GtkWidget *hbox1;
2079 GtkWidget *label;
2080 GtkWidget *optmenu_recvdialog;
2081 GtkWidget *menu;
2082 GtkWidget *menuitem;
2084 GtkWidget *frame_addr;
2085 GtkWidget *vbox_addr;
2086 GtkWidget *checkbtn_addaddrbyclick;
2088 GtkWidget *frame_exit;
2089 GtkWidget *vbox_exit;
2090 GtkWidget *checkbtn_confonexit;
2091 GtkWidget *checkbtn_cleanonexit;
2092 GtkWidget *checkbtn_askonclean;
2093 GtkWidget *checkbtn_warnqueued;
2095 GtkWidget *hbox2;
2096 GtkWidget *optmenu_nextunreadmsgdialog;
2097 GtkWidget *optmenu_nextunreadmsgdialog_menu;
2098 GtkWidget *nextunreadmsgdialog_menuitem;
2100 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2101 gtk_widget_show (vbox1);
2102 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2103 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2105 vbox2 = gtk_vbox_new (FALSE, 0);
2106 gtk_widget_show (vbox2);
2107 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2109 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2110 _("Emulate the behavior of mouse operation of\n"
2111 "Emacs-based mailer"));
2112 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2113 GTK_JUSTIFY_LEFT); */
2115 PACK_CHECK_BUTTON
2116 (vbox2, checkbtn_openunread,
2117 _("Open first unread message when entering a folder"));
2119 PACK_CHECK_BUTTON
2120 (vbox2, checkbtn_openinbox,
2121 _("Go to inbox after receiving new mail"));
2123 vbox3 = gtk_vbox_new (FALSE, 0);
2124 gtk_widget_show (vbox3);
2125 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2127 PACK_CHECK_BUTTON
2128 (vbox3, checkbtn_immedexec,
2129 _("Execute immediately when moving or deleting messages"));
2131 hbox1 = gtk_hbox_new (FALSE, 0);
2132 gtk_widget_show (hbox1);
2133 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2135 label = gtk_label_new
2136 (_("(Messages will be just marked till execution\n"
2137 " if this is turned off)"));
2138 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2139 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2141 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2143 hbox1 = gtk_hbox_new (FALSE, 8);
2144 gtk_widget_show (hbox1);
2145 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2147 label = gtk_label_new (_("Show receive dialog"));
2148 gtk_widget_show (label);
2149 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2151 optmenu_recvdialog = gtk_option_menu_new ();
2152 gtk_widget_show (optmenu_recvdialog);
2153 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2154 FALSE, FALSE, 0);
2156 menu = gtk_menu_new ();
2157 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2158 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2159 RECV_DIALOG_ACTIVE);
2160 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2162 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2164 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2166 vbox_addr = gtk_vbox_new (FALSE, 0);
2167 gtk_widget_show (vbox_addr);
2168 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2169 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2171 PACK_CHECK_BUTTON
2172 (vbox_addr, checkbtn_addaddrbyclick,
2173 _("Add address to destination when double-clicked"));
2175 /* Next Unread Message Dialog */
2176 hbox2 = gtk_hbox_new (FALSE, 8);
2177 gtk_widget_show (hbox2);
2178 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
2180 label = gtk_label_new (_("Show no-unread-message dialog"));
2181 gtk_widget_show (label);
2182 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
2184 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2185 gtk_widget_show (optmenu_nextunreadmsgdialog);
2186 gtk_box_pack_start (GTK_BOX (hbox2), optmenu_nextunreadmsgdialog,
2187 FALSE, FALSE, 0);
2189 optmenu_nextunreadmsgdialog_menu = gtk_menu_new ();
2190 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2191 _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2192 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2193 _("Assume 'Yes'"), NEXTUNREADMSGDIALOG_ASSUME_YES);
2194 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2195 _("Assume 'No'"), NEXTUNREADMSGDIALOG_ASSUME_NO);
2197 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog),
2198 optmenu_nextunreadmsgdialog_menu);
2201 /* Receive Dialog */
2202 /* hbox = gtk_hbox_new (FALSE, 8);
2203 gtk_widget_show (hbox);
2204 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2206 label = gtk_label_new (_("Show receive Dialog"));
2207 gtk_widget_show (label);
2208 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2210 recvdialog_optmenu = gtk_option_menu_new ();
2211 gtk_widget_show (recvdialog_optmenu);
2212 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2214 recvdialog_optmenu_menu = gtk_menu_new ();
2216 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2217 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2218 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2220 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2222 /* On Exit */
2223 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2225 vbox_exit = gtk_vbox_new (FALSE, 0);
2226 gtk_widget_show (vbox_exit);
2227 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2228 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2230 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2231 _("Confirm on exit"));
2233 hbox1 = gtk_hbox_new (FALSE, 32);
2234 gtk_widget_show (hbox1);
2235 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2237 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2238 _("Empty trash on exit"));
2239 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2240 _("Ask before emptying"));
2241 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2243 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2244 _("Warn if there are queued messages"));
2246 /* interface.checkbtn_emacs = checkbtn_emacs; */
2247 interface.checkbtn_openunread = checkbtn_openunread;
2248 interface.checkbtn_openinbox = checkbtn_openinbox;
2249 interface.checkbtn_immedexec = checkbtn_immedexec;
2250 interface.optmenu_recvdialog = optmenu_recvdialog;
2251 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2252 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2253 interface.checkbtn_confonexit = checkbtn_confonexit;
2254 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2255 interface.checkbtn_askonclean = checkbtn_askonclean;
2256 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2259 static void prefs_other_create(void)
2261 GtkWidget *vbox1;
2262 GtkWidget *hbox1;
2264 GtkWidget *uri_frame;
2265 GtkWidget *uri_label;
2266 GtkWidget *uri_combo;
2267 GtkWidget *uri_entry;
2269 GtkWidget *print_frame;
2270 GtkWidget *printcmd_label;
2271 GtkWidget *printcmd_entry;
2273 GtkWidget *exteditor_frame;
2274 GtkWidget *exteditor_label;
2275 GtkWidget *exteditor_combo;
2276 GtkWidget *exteditor_entry;
2278 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2279 gtk_widget_show (vbox1);
2280 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2281 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2283 PACK_FRAME(vbox1, uri_frame,
2284 _("External Web browser (%s will be replaced with URI)"));
2286 hbox1 = gtk_hbox_new (FALSE, 8);
2287 gtk_widget_show (hbox1);
2288 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2289 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2291 uri_label = gtk_label_new (_("Command"));
2292 gtk_widget_show(uri_label);
2293 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2295 uri_combo = gtk_combo_new ();
2296 gtk_widget_show (uri_combo);
2297 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2298 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2299 "netscape -remote 'openURL(%s,raise)'",
2300 "netscape '%s'",
2301 "gnome-moz-remote --raise --newwin '%s'",
2302 "kterm -e w3m '%s'",
2303 "kterm -e lynx '%s'",
2304 NULL);
2306 uri_entry = GTK_COMBO (uri_combo)->entry;
2308 PACK_FRAME(vbox1, print_frame,
2309 _("Printing (%s will be replaced with file name)"));
2311 hbox1 = gtk_hbox_new (FALSE, 8);
2312 gtk_widget_show (hbox1);
2313 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2314 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2316 printcmd_label = gtk_label_new (_("Command"));
2317 gtk_widget_show (printcmd_label);
2318 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2320 printcmd_entry = gtk_entry_new ();
2321 gtk_widget_show (printcmd_entry);
2322 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2324 PACK_FRAME(vbox1, exteditor_frame,
2325 _("External editor (%s will be replaced with file name)"));
2327 hbox1 = gtk_hbox_new (FALSE, 8);
2328 gtk_widget_show (hbox1);
2329 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2330 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2332 exteditor_label = gtk_label_new (_("Command"));
2333 gtk_widget_show (exteditor_label);
2334 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2336 exteditor_combo = gtk_combo_new ();
2337 gtk_widget_show (exteditor_combo);
2338 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2339 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2340 "gedit %s",
2341 "kedit %s",
2342 "mgedit --no-fork %s",
2343 "emacs %s",
2344 "xemacs %s",
2345 "kterm -e jed %s",
2346 "kterm -e vi %s",
2347 NULL);
2348 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2350 other.uri_combo = uri_combo;
2351 other.uri_entry = uri_entry;
2352 other.printcmd_entry = printcmd_entry;
2354 other.exteditor_combo = exteditor_combo;
2355 other.exteditor_entry = exteditor_entry;
2358 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2360 GtkWidget *datefmt_sample = NULL;
2361 gchar *text;
2363 g_return_if_fail(widget != NULL);
2364 g_return_if_fail(*widget != NULL);
2365 g_return_if_fail(display.entry_datefmt != NULL);
2367 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2368 (GTK_OBJECT(*widget), "datefmt_sample"));
2369 g_return_if_fail(datefmt_sample != NULL);
2371 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2372 g_free(prefs_common.date_format);
2373 prefs_common.date_format = text;
2374 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2376 gtk_widget_destroy(*widget);
2377 *widget = NULL;
2380 static void date_format_cancel_btn_clicked(GtkButton *button,
2381 GtkWidget **widget)
2383 g_return_if_fail(widget != NULL);
2384 g_return_if_fail(*widget != NULL);
2386 gtk_widget_destroy(*widget);
2387 *widget = NULL;
2390 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2391 GtkWidget **widget)
2393 if (event && event->keyval == GDK_Escape)
2394 date_format_cancel_btn_clicked(NULL, widget);
2397 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2398 GdkEventAny *event, GtkWidget **widget)
2400 g_return_val_if_fail(widget != NULL, FALSE);
2401 g_return_val_if_fail(*widget != NULL, FALSE);
2403 *widget = NULL;
2404 return FALSE;
2407 static void date_format_entry_on_change(GtkEditable *editable,
2408 GtkLabel *example)
2410 time_t cur_time;
2411 struct tm *cal_time;
2412 gchar buffer[100];
2413 gchar *text;
2415 cur_time = time(NULL);
2416 cal_time = localtime(&cur_time);
2417 buffer[0] = 0;
2418 text = gtk_editable_get_chars(editable, 0, -1);
2419 if (text)
2420 strftime(buffer, sizeof buffer, text, cal_time);
2421 gtk_label_set_text(example, buffer);
2424 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2425 gint column, GdkEventButton *event,
2426 GtkWidget *date_format)
2428 gint cur_pos;
2429 gchar *format;
2430 gchar *old_format;
2431 gchar *new_format;
2432 GtkWidget *datefmt_sample;
2434 /* only on double click */
2435 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2438 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2439 (GTK_OBJECT(date_format), "datefmt_sample"));
2441 g_return_if_fail(date_format_list != NULL);
2442 g_return_if_fail(date_format != NULL);
2443 g_return_if_fail(datefmt_sample != NULL);
2445 /* get format from clist */
2446 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2448 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2449 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2451 /* insert the format into the text entry */
2452 new_format = g_malloc(strlen(old_format) + 3);
2454 strncpy(new_format, old_format, cur_pos);
2455 new_format[cur_pos] = '\0';
2456 strcat(new_format, format);
2457 strcat(new_format, &old_format[cur_pos]);
2459 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2460 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2462 g_free(new_format);
2465 static GtkWidget *date_format_create(GtkButton *button, void *data)
2467 static GtkWidget *datefmt_win = NULL;
2468 GtkWidget *vbox1;
2469 GtkWidget *scrolledwindow1;
2470 GtkWidget *datefmt_clist;
2471 GtkWidget *table;
2472 GtkWidget *label1;
2473 GtkWidget *label2;
2474 GtkWidget *label3;
2475 GtkWidget *confirm_area;
2476 GtkWidget *ok_btn;
2477 GtkWidget *cancel_btn;
2478 GtkWidget *datefmt_entry;
2480 const struct {
2481 gchar *fmt;
2482 gchar *txt;
2483 } time_format[] = {
2484 { "%a", _("the full abbreviated weekday name") },
2485 { "%A", _("the full weekday name") },
2486 { "%b", _("the abbreviated month name") },
2487 { "%B", _("the full month name") },
2488 { "%c", _("the preferred date and time for the current locale") },
2489 { "%C", _("the century number (year/100)") },
2490 { "%d", _("the day of the month as a decimal number") },
2491 { "%H", _("the hour as a decimal number using a 24-hour clock") },
2492 { "%I", _("the hour as a decimal number using a 12-hour clock") },
2493 { "%j", _("the day of the year as a decimal number") },
2494 { "%m", _("the month as a decimal number") },
2495 { "%M", _("the minute as a decimal number") },
2496 { "%p", _("either AM or PM") },
2497 { "%S", _("the second as a decimal number") },
2498 { "%w", _("the day of the week as a decimal number") },
2499 { "%x", _("the preferred date for the current locale") },
2500 { "%y", _("the last two digits of a year") },
2501 { "%Y", _("the year as a decimal number") },
2502 { "%Z", _("the time zone or name or abbreviation") }
2505 gchar *titles[2];
2506 gint i;
2507 const gint TIME_FORMAT_ELEMS =
2508 sizeof time_format / sizeof time_format[0];
2510 if (datefmt_win) return datefmt_win;
2512 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2513 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2514 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2515 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2516 gtk_widget_set_usize(datefmt_win, 440, 280);
2518 vbox1 = gtk_vbox_new(FALSE, 10);
2519 gtk_widget_show(vbox1);
2520 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2522 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2523 gtk_scrolled_window_set_policy
2524 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2525 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2526 gtk_widget_show(scrolledwindow1);
2527 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2529 titles[0] = _("Specifier");
2530 titles[1] = _("Description");
2531 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2532 gtk_widget_show(datefmt_clist);
2533 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2534 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2536 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2537 GTK_SELECTION_BROWSE);
2539 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2540 gchar *text[2];
2541 /* phoney casting necessary because of gtk... */
2542 text[0] = (gchar *)time_format[i].fmt;
2543 text[1] = (gchar *)time_format[i].txt;
2544 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2547 table = gtk_table_new(2, 2, FALSE);
2548 gtk_widget_show(table);
2549 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2550 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2551 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2553 label1 = gtk_label_new(_("Date format"));
2554 gtk_widget_show(label1);
2555 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2556 GTK_FILL, 0, 0, 0);
2557 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2558 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2560 datefmt_entry = gtk_entry_new_with_max_length(256);
2561 gtk_widget_show(datefmt_entry);
2562 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2563 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2565 /* we need the "sample" entry box; add it as data so callbacks can
2566 * get the entry box */
2567 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2568 datefmt_entry);
2570 label2 = gtk_label_new(_("Example"));
2571 gtk_widget_show(label2);
2572 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2573 GTK_FILL, 0, 0, 0);
2574 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2575 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2577 label3 = gtk_label_new("");
2578 gtk_widget_show(label3);
2579 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2580 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2581 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2582 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2584 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2585 &cancel_btn, _("Cancel"), NULL, NULL);
2586 gtk_widget_grab_default(ok_btn);
2587 gtk_widget_show(confirm_area);
2589 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2591 /* set the current format */
2592 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2593 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2594 GTK_LABEL(label3));
2596 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2597 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2598 &datefmt_win);
2599 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2600 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2601 &datefmt_win);
2602 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2603 GTK_SIGNAL_FUNC(date_format_key_pressed),
2604 &datefmt_win);
2605 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2606 GTK_SIGNAL_FUNC(date_format_on_delete),
2607 &datefmt_win);
2608 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2609 GTK_SIGNAL_FUNC(date_format_entry_on_change),
2610 label3);
2612 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2613 GTK_SIGNAL_FUNC(date_format_select_row),
2614 datefmt_win);
2616 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2617 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2619 gtk_widget_show(datefmt_win);
2620 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2622 gtk_widget_grab_focus(ok_btn);
2624 return datefmt_win;
2627 void prefs_quote_colors_dialog(void)
2629 if (!quote_color_win)
2630 prefs_quote_colors_dialog_create();
2631 gtk_widget_show(quote_color_win);
2632 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2634 gtk_main();
2635 gtk_widget_hide(quote_color_win);
2637 textview_update_message_colors();
2638 main_window_reflect_prefs_all();
2641 static void prefs_quote_colors_dialog_create(void)
2643 GtkWidget *window;
2644 GtkWidget *vbox;
2645 GtkWidget *table;
2646 GtkWidget *quotelevel1_label;
2647 GtkWidget *quotelevel2_label;
2648 GtkWidget *quotelevel3_label;
2649 GtkWidget *uri_label;
2650 GtkWidget *tgt_folder_label;
2651 GtkWidget *hbbox;
2652 GtkWidget *ok_btn;
2653 //GtkWidget *cancel_btn;
2654 GtkWidget *recycle_colors_btn;
2655 GtkWidget *frame_colors;
2657 window = gtk_window_new(GTK_WINDOW_DIALOG);
2658 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2659 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2660 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2661 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2662 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2664 vbox = gtk_vbox_new (FALSE, VSPACING);
2665 gtk_container_add (GTK_CONTAINER (window), vbox);
2666 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2667 PACK_FRAME(vbox, frame_colors, _("Colors"));
2669 table = gtk_table_new (4, 2, FALSE);
2670 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2671 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2672 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2673 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2676 color_buttons.quote_level1_btn = gtk_button_new();
2677 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2678 0, 1, 0, 1, 0, 0, 0, 0);
2679 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2680 gtk_container_set_border_width
2681 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2683 color_buttons.quote_level2_btn = gtk_button_new();
2684 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2685 0, 1, 1, 2, 0, 0, 0, 0);
2686 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2687 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2689 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2690 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2691 0, 1, 2, 3, 0, 0, 0, 0);
2692 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2693 gtk_container_set_border_width
2694 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2696 color_buttons.uri_btn = gtk_button_new_with_label ("");
2697 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2698 0, 1, 3, 4, 0, 0, 0, 0);
2699 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2700 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2702 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2703 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2704 0, 1, 4, 5, 0, 0, 0, 0);
2705 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
2706 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2708 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2709 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2710 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2711 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2712 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2714 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2715 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2716 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2717 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2718 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2720 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2721 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2722 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2723 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2724 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2726 uri_label = gtk_label_new (_("URI link"));
2727 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2728 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2729 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2730 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2732 tgt_folder_label = gtk_label_new (_("Target folder"));
2733 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
2734 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2735 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
2736 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
2738 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2739 _("Recycle quote colors"));
2741 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2742 NULL, NULL, NULL, NULL);
2743 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2745 gtk_widget_grab_default(ok_btn);
2746 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2747 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2748 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2749 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2750 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2751 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2752 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2753 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2754 NULL);
2756 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2757 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2758 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2759 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2760 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2761 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2762 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2763 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2764 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
2765 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
2766 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2767 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2768 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2769 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2771 /* show message button colors and recycle options */
2772 set_button_bg_color(color_buttons.quote_level1_btn,
2773 prefs_common.quote_level1_col);
2774 set_button_bg_color(color_buttons.quote_level2_btn,
2775 prefs_common.quote_level2_col);
2776 set_button_bg_color(color_buttons.quote_level3_btn,
2777 prefs_common.quote_level3_col);
2778 set_button_bg_color(color_buttons.uri_btn,
2779 prefs_common.uri_col);
2780 set_button_bg_color(color_buttons.tgt_folder_btn,
2781 prefs_common.tgt_folder_col);
2782 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2783 prefs_common.recycle_quote_colors);
2785 gtk_widget_show_all(vbox);
2786 quote_color_win = window;
2789 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2790 GdkEventKey *event, gpointer data)
2792 if (event && event->keyval == GDK_Escape)
2793 gtk_main_quit();
2796 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2798 gchar *type = (gchar *)data;
2799 gchar *title = NULL;
2800 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2801 gint rgbvalue = 0;
2802 GtkColorSelectionDialog *dialog;
2804 if(g_strcasecmp(type, "LEVEL1") == 0) {
2805 title = _("Pick color for quotation level 1");
2806 rgbvalue = prefs_common.quote_level1_col;
2807 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2808 title = _("Pick color for quotation level 2");
2809 rgbvalue = prefs_common.quote_level2_col;
2810 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2811 title = _("Pick color for quotation level 3");
2812 rgbvalue = prefs_common.quote_level3_col;
2813 } else if(g_strcasecmp(type, "URI") == 0) {
2814 title = _("Pick color for URI");
2815 rgbvalue = prefs_common.uri_col;
2816 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
2817 title = _("Pick color for target folder");
2818 rgbvalue = prefs_common.tgt_folder_col;
2819 } else { /* Should never be called */
2820 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2821 return;
2824 color_dialog = gtk_color_selection_dialog_new(title);
2825 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2826 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2827 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2828 manage_window_set_transient(GTK_WINDOW(color_dialog));
2830 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2831 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2832 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2833 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2834 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2835 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2836 data);
2838 /* preselect the previous color in the color selection dialog */
2839 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2840 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2841 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2842 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2843 gtk_color_selection_set_color
2844 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2846 gtk_widget_show(color_dialog);
2849 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2851 GtkColorSelection *colorsel = (GtkColorSelection *)
2852 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2853 gdouble color[4];
2854 gint red, green, blue, rgbvalue;
2855 gchar *type = (gchar *)data;
2857 gtk_color_selection_get_color(colorsel, color);
2859 red = (gint) (color[0] * 255.0);
2860 green = (gint) (color[1] * 255.0);
2861 blue = (gint) (color[2] * 255.0);
2862 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2864 #if 0
2865 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2866 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2867 fprintf(stderr, "Color is %x\n", rgbvalue);
2868 #endif
2870 if (g_strcasecmp(type, "LEVEL1") == 0) {
2871 prefs_common.quote_level1_col = rgbvalue;
2872 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2873 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2874 prefs_common.quote_level2_col = rgbvalue;
2875 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2876 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2877 prefs_common.quote_level3_col = rgbvalue;
2878 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2879 } else if (g_strcasecmp(type, "URI") == 0) {
2880 prefs_common.uri_col = rgbvalue;
2881 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2882 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
2883 prefs_common.tgt_folder_col = rgbvalue;
2884 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
2885 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
2886 } else
2887 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2889 gtk_widget_destroy(color_dialog);
2892 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2894 gtk_widget_destroy(color_dialog);
2897 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
2898 GdkEventKey *event,
2899 gpointer data)
2901 gtk_widget_destroy(color_dialog);
2904 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2906 GtkStyle *newstyle;
2907 GdkColor color;
2909 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2910 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2911 newstyle->bg[GTK_STATE_NORMAL] = color;
2912 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2913 newstyle->bg[GTK_STATE_ACTIVE] = color;
2915 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2918 static void prefs_enable_message_color_toggled(void)
2920 gboolean is_active;
2922 is_active = gtk_toggle_button_get_active
2923 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2924 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2925 prefs_common.enable_color = is_active;
2928 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2930 gboolean is_active;
2932 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2933 prefs_common.recycle_quote_colors = is_active;
2936 static void prefs_quote_description(void)
2938 if (!quote_desc_win)
2939 prefs_quote_description_create();
2941 gtk_widget_show(quote_desc_win);
2942 gtk_main();
2943 gtk_widget_hide(quote_desc_win);
2946 static void prefs_quote_description_create(void)
2948 GtkWidget *vbox;
2949 GtkWidget *hbox;
2950 GtkWidget *hbbox;
2951 GtkWidget *label;
2952 GtkWidget *ok_btn;
2954 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2955 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2956 _("Description of symbols"));
2957 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2958 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2959 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2960 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2962 vbox = gtk_vbox_new(FALSE, 8);
2963 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2965 hbox = gtk_hbox_new(FALSE, 4);
2966 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2968 label = gtk_label_new
2969 ("SYMBOL\n\n"
2970 "%d\n" /* date */
2971 "%f\n" /* from */
2972 "%N\n" /* full name */
2973 "%F\n" /* first name */
2974 "%I\n" /* sender's initial */
2975 "%s\n" /* subject line */
2976 "%t\n" /* to */
2977 "%c\n" /* cc */
2978 "%n\n" /* newsgroups */
2979 "%i\n" /* message id */
2980 "%r\n" /* references */
2981 "\n"
2982 "%x\n"
2983 "?x(expr)\n"
2984 "\n"
2985 "%M\n"
2986 "%Q\n"
2987 "%m\n"
2988 "%q\n"
2989 "%%");
2991 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2992 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2994 label = gtk_label_new
2995 (_("DESCRIPTION\n\n"
2996 "Date\n"
2997 "From\n"
2998 "Full Name of Sender\n"
2999 "First Name of Sender\n"
3000 "Initial of Sender\n"
3001 "Subject\n"
3002 "To\n"
3003 "Cc\n"
3004 "Newsgroups\n"
3005 "Message-ID\n"
3006 "References\n"
3007 "\n"
3008 "Display the information\n"
3009 "If the information x is set, displays expr\n"
3010 "\n"
3011 "Message body\n"
3012 "Quoted message body\n"
3013 "Message body without signature\n"
3014 "Quoted message body without signature\n"
3015 "%"));
3017 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
3018 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
3020 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3021 NULL, NULL, NULL, NULL);
3022 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3024 gtk_widget_grab_default(ok_btn);
3025 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3026 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3028 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
3029 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3031 gtk_widget_show_all(vbox);
3034 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3036 gchar *font_name;
3038 g_return_if_fail(entry != NULL);
3040 if (!font_sel_win) {
3041 font_sel_win = gtk_font_selection_dialog_new
3042 (_("Font selection"));
3043 gtk_window_position(GTK_WINDOW(font_sel_win),
3044 GTK_WIN_POS_CENTER);
3045 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3046 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3047 NULL);
3048 gtk_signal_connect
3049 (GTK_OBJECT(font_sel_win), "key_press_event",
3050 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3051 NULL);
3052 gtk_signal_connect_object
3053 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3054 "clicked",
3055 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3056 GTK_OBJECT(font_sel_win));
3059 if(font_sel_conn_id) {
3060 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3062 font_sel_conn_id = gtk_signal_connect
3063 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3064 "clicked",
3065 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3066 entry);
3067 printf("%i\n", font_sel_conn_id);
3069 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3070 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3071 g_free(font_name);
3072 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3073 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3074 gtk_widget_grab_focus
3075 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3076 gtk_widget_show(font_sel_win);
3079 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3080 GdkEventKey *event,
3081 gpointer data)
3083 if (event && event->keyval == GDK_Escape)
3084 gtk_widget_hide(font_sel_win);
3087 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3089 gchar *fontname;
3091 fontname = gtk_font_selection_dialog_get_font_name
3092 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3094 if (fontname) {
3095 gtk_entry_set_text(entry, fontname);
3097 g_free(fontname);
3100 gtk_widget_hide(font_sel_win);
3103 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3105 GtkWidget *menu;
3106 GtkWidget *menuitem;
3107 gchar *charset;
3109 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3110 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3111 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3112 g_free(*((gchar **)pparam->data));
3113 *((gchar **)pparam->data) = g_strdup(charset);
3116 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3118 GList *cur;
3119 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3120 GtkWidget *menu;
3121 GtkWidget *menuitem;
3122 gchar *charset;
3123 gint n = 0;
3125 g_return_if_fail(optmenu != NULL);
3126 g_return_if_fail(*((gchar **)pparam->data) != NULL);
3128 menu = gtk_option_menu_get_menu(optmenu);
3129 for (cur = GTK_MENU_SHELL(menu)->children;
3130 cur != NULL; cur = cur->next) {
3131 menuitem = GTK_WIDGET(cur->data);
3132 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3133 if (!strcmp(charset, *((gchar **)pparam->data))) {
3134 gtk_option_menu_set_history(optmenu, n);
3135 return;
3137 n++;
3140 gtk_option_menu_set_history(optmenu, 0);
3141 prefs_common_charset_set_data_from_optmenu(pparam);
3144 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3146 GtkWidget *menu;
3147 GtkWidget *menuitem;
3149 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3150 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3151 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3152 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3155 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3157 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3158 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3159 GtkWidget *menu;
3160 GtkWidget *menuitem;
3162 switch (mode) {
3163 case RECV_DIALOG_ALWAYS:
3164 gtk_option_menu_set_history(optmenu, 0);
3165 break;
3166 case RECV_DIALOG_ACTIVE:
3167 gtk_option_menu_set_history(optmenu, 1);
3168 break;
3169 case RECV_DIALOG_NEVER:
3170 gtk_option_menu_set_history(optmenu, 2);
3171 break;
3172 default:
3175 menu = gtk_option_menu_get_menu(optmenu);
3176 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3177 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3180 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3181 gpointer data)
3183 prefs_common_cancel();
3184 return TRUE;
3187 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3188 gpointer data)
3190 if (event && event->keyval == GDK_Escape)
3191 prefs_common_cancel();
3194 static void prefs_common_ok(void)
3196 prefs_common_apply();
3197 gtk_widget_hide(dialog.window);
3198 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
3199 gtk_widget_hide(quote_desc_win);
3201 inc_unlock();
3204 static void prefs_common_apply(void)
3206 prefs_set_data_from_dialog(param);
3207 main_window_reflect_prefs_all();
3208 prefs_common_save_config();
3210 inc_autocheck_timer_remove();
3211 inc_autocheck_timer_set();
3214 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3216 GtkWidget *menu;
3217 GtkWidget *menuitem;
3219 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3220 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3221 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3222 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3225 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3227 NextUnreadMsgDialogShow dialog_show;
3228 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3229 GtkWidget *menu;
3230 GtkWidget *menuitem;
3232 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3234 switch (dialog_show) {
3235 case NEXTUNREADMSGDIALOG_ALWAYS:
3236 gtk_option_menu_set_history(optmenu, 0);
3237 break;
3238 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3239 gtk_option_menu_set_history(optmenu, 1);
3240 break;
3241 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3242 gtk_option_menu_set_history(optmenu, 2);
3243 break;
3244 default:
3247 menu = gtk_option_menu_get_menu(optmenu);
3248 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3249 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3252 static void prefs_common_cancel(void)
3254 gtk_widget_hide(dialog.window);
3255 inc_unlock();
3259 static struct _ComposePrefs
3261 GtkWidget *window;
3263 GtkWidget *close_btn;
3264 } composeprefs;
3266 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
3267 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
3268 static void compose_prefs_close(GtkWidget *widget);
3269 static void compose_prefs_fmt_create(void);
3271 static void compose_prefs_fmt_open(void)
3273 if (composeprefs.window == NULL)
3274 compose_prefs_fmt_create();
3275 gtk_widget_show(composeprefs.window);
3279 static void compose_prefs_fmt_create(void)
3281 GtkWidget *window;
3282 GtkWidget *close_btn;
3284 GtkWidget *frame_quote;
3285 GtkWidget *vbox_quote;
3286 GtkWidget *hbox1;
3287 GtkWidget *checkbtn_quote;
3288 GtkWidget *label_quotemark;
3289 GtkWidget *entry_quotemark;
3290 GtkWidget *scrolledwin_quotefmt;
3291 GtkWidget *text_quotefmt;
3292 GtkWidget *label_quotefmt;
3293 GtkWidget *btn_quotedesc;
3295 GtkWidget *label_fw_quotemark;
3296 GtkWidget *entry_fw_quotemark;
3297 GtkWidget *label_fw_quotefmt;
3298 GtkWidget *text_fw_quotefmt;
3300 window = gtk_window_new(GTK_WINDOW_DIALOG);
3301 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
3302 gtk_window_set_title(GTK_WINDOW(window), _("Compose Preferences"));
3303 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3304 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3305 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3306 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3307 GTK_SIGNAL_FUNC(compose_prefs_delete_event),
3308 NULL);
3309 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3310 GTK_SIGNAL_FUNC(compose_prefs_key_pressed),
3311 NULL);
3313 vbox_quote = gtk_vbox_new(FALSE, 8);
3314 gtk_container_add(GTK_CONTAINER(window), vbox_quote);
3316 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
3317 _("Quote message when replying"));
3319 hbox1 = gtk_hbox_new (FALSE, 8);
3320 gtk_widget_show (hbox1);
3321 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3323 label_quotemark = gtk_label_new (_("Quotation mark"));
3324 gtk_widget_show (label_quotemark);
3325 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
3327 entry_quotemark = gtk_entry_new ();
3328 gtk_widget_show (entry_quotemark);
3329 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
3330 gtk_widget_set_usize (entry_quotemark, 64, -1);
3332 hbox1 = gtk_hbox_new (FALSE, 0);
3333 gtk_widget_show (hbox1);
3334 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3336 label_quotefmt = gtk_label_new (_("Quotation format:"));
3337 gtk_widget_show (label_quotefmt);
3338 gtk_box_pack_start (GTK_BOX (hbox1), label_quotefmt, FALSE, FALSE, 0);
3340 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3341 gtk_widget_show (scrolledwin_quotefmt);
3342 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3343 gtk_scrolled_window_set_policy
3344 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3345 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3347 text_quotefmt = gtk_text_new (NULL, NULL);
3348 gtk_widget_show (text_quotefmt);
3349 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
3350 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
3351 gtk_widget_set_usize(text_quotefmt, 400, 60);
3353 hbox1 = gtk_hbox_new (FALSE, 8);
3354 gtk_widget_show (hbox1);
3355 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3357 label_fw_quotemark = gtk_label_new (_("Forward quotation mark"));
3358 gtk_widget_show (label_fw_quotemark);
3359 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotemark, FALSE, FALSE, 0);
3361 entry_fw_quotemark = gtk_entry_new ();
3362 gtk_widget_show (entry_fw_quotemark);
3363 gtk_box_pack_start (GTK_BOX (hbox1), entry_fw_quotemark, FALSE, FALSE, 0);
3364 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
3366 hbox1 = gtk_hbox_new (FALSE, 0);
3367 gtk_widget_show (hbox1);
3368 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3370 label_fw_quotefmt = gtk_label_new (_("Forward format:"));
3371 gtk_widget_show (label_fw_quotefmt);
3372 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotefmt, FALSE, FALSE, 0);
3374 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3375 gtk_widget_show (scrolledwin_quotefmt);
3376 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3377 gtk_scrolled_window_set_policy
3378 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3379 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3381 text_fw_quotefmt = gtk_text_new (NULL, NULL);
3382 gtk_widget_show (text_fw_quotefmt);
3383 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt);
3384 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
3385 gtk_widget_set_usize(text_fw_quotefmt, 400, 60);
3387 hbox1 = gtk_hbox_new (FALSE, 0);
3388 gtk_widget_show (hbox1);
3389 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
3391 btn_quotedesc =
3392 gtk_button_new_with_label (_(" Description of symbols "));
3393 gtk_widget_show (btn_quotedesc);
3394 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc,
3395 FALSE, FALSE, 0);
3397 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
3398 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
3401 gtkut_button_set_create(&hbox1, &close_btn, _("Close"),
3402 NULL, NULL, NULL, NULL);
3403 gtk_box_pack_end(GTK_BOX(vbox_quote), hbox1, FALSE, FALSE, 0);
3404 gtk_widget_grab_default(close_btn);
3406 gtk_signal_connect(GTK_OBJECT(close_btn), "clicked",
3407 GTK_SIGNAL_FUNC(compose_prefs_close), NULL);
3409 gtk_widget_show_all(vbox_quote);
3411 composeprefs.window = window;
3412 composeprefs.close_btn = close_btn;
3414 compose.checkbtn_quote = checkbtn_quote;
3415 compose.entry_quotemark = entry_quotemark;
3416 compose.text_quotefmt = text_quotefmt;
3417 compose.entry_fw_quotemark = entry_fw_quotemark;
3418 compose.text_fw_quotefmt = text_fw_quotefmt;
3421 static void compose_prefs_close(GtkWidget *widget)
3423 gtk_widget_hide(composeprefs.window);
3426 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3428 gtk_widget_hide(composeprefs.window);
3430 return TRUE;
3433 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3435 if (event && event->keyval == GDK_Escape) {
3436 gtk_widget_hide(composeprefs.window);
3440 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3442 GtkWidget *menu;
3443 GtkWidget *menuitem;
3445 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3446 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3447 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3448 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3449 } */
3451 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3453 RecvDialogShow dialog_show;
3454 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3455 GtkWidget *menu;
3456 GtkWidget *menuitem;
3458 dialog_show = *((RecvDialogShow *)pparam->data);
3460 switch (dialog_show) {
3461 case RECVDIALOG_ALWAYS:
3462 gtk_option_menu_set_history(optmenu, 0);
3463 break;
3464 case RECVDIALOG_WINDOW_ACTIVE:
3465 gtk_option_menu_set_history(optmenu, 1);
3466 break;
3467 case RECVDIALOG_NEVER:
3468 gtk_option_menu_set_history(optmenu, 2);
3469 break;
3470 default:
3473 menu = gtk_option_menu_get_menu(optmenu);
3474 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3475 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3476 } */