initial message templates support
[claws.git] / src / prefs_common.c
blob0aa54762737b13ffeb51e936dc1304123367dc88
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 "mainwindow.h"
42 #include "summaryview.h"
43 #include "messageview.h"
44 #include "manage_window.h"
45 #include "inc.h"
46 #include "menu.h"
47 #include "codeconv.h"
48 #include "utils.h"
49 #include "gtkutils.h"
50 #include "alertpanel.h"
51 #include "folder.h"
52 #include "gtkspell.h"
53 #include "filesel.h"
54 #include "folderview.h"
56 PrefsCommon prefs_common;
58 static PrefsDialog dialog;
60 static struct Receive {
61 GtkWidget *checkbtn_incext;
62 GtkWidget *entry_incext;
63 GtkWidget *button_incext;
65 GtkWidget *checkbtn_local;
66 GtkWidget *checkbtn_filter_on_inc;
67 GtkWidget *entry_spool;
69 GtkWidget *checkbtn_autochk;
70 GtkWidget *spinbtn_autochk;
71 GtkObject *spinbtn_autochk_adj;
73 GtkWidget *checkbtn_chkonstartup;
74 GtkWidget *checkbtn_noerrorpanel;
75 GtkWidget *checkbtn_scan_after_inc;
78 GtkWidget *spinbtn_maxarticle;
79 GtkObject *spinbtn_maxarticle_adj;
80 } receive;
82 static struct Send {
83 GtkWidget *checkbtn_sendext;
84 GtkWidget *entry_sendext;
85 GtkWidget *button_sendext;
87 GtkWidget *checkbtn_savemsg;
88 GtkWidget *checkbtn_queuemsg;
90 GtkWidget *optmenu_charset;
92 GtkWidget *checkbtn_returnreceipt;
93 } send;
95 static struct Compose {
96 GtkWidget *checkbtn_quote;
97 GtkWidget *entry_quotemark;
98 GtkWidget *text_quotefmt;
99 GtkWidget *checkbtn_autosig;
100 GtkWidget *entry_sigsep;
102 GtkWidget *checkbtn_reply_account_autosel;
103 GtkWidget *entry_fw_quotemark;
104 GtkWidget *text_fw_quotefmt;
106 GtkWidget *spinbtn_linewrap;
107 GtkObject *spinbtn_linewrap_adj;
108 GtkWidget *checkbtn_wrapquote;
109 GtkWidget *checkbtn_wrapatsend;
111 GtkWidget * checkbtn_forward_as_attachment;
112 GtkWidget * checkbtn_smart_wrapping;
114 /* spelling */
115 GtkWidget *checkbtn_enable_ispell;
116 GtkWidget *entry_ispell_path;
117 GtkWidget *btn_ispell_path;
118 GtkWidget *optmenu_dictionary_path;
119 } compose;
121 static struct Display {
122 GtkWidget *entry_textfont;
123 GtkWidget *button_textfont;
125 GtkWidget *entry_smallfont;
126 GtkWidget *entry_normalfont;
127 GtkWidget *entry_boldfont;
129 GtkWidget *chkbtn_folder_unread;
131 GtkWidget *chkbtn_transhdr;
133 GtkWidget *chkbtn_swapfrom;
134 GtkWidget *chkbtn_hscrollbar;
135 GtkWidget *chkbtn_useaddrbook;
136 GtkWidget *chkbtn_expand_thread;
137 GtkWidget *chkbtn_bold_unread;
139 GtkWidget *entry_datefmt;
140 } display;
142 static struct Message {
143 GtkWidget *chkbtn_enablecol;
144 GtkWidget *button_edit_col;
145 GtkWidget *chkbtn_mbalnum;
146 GtkWidget *chkbtn_disphdrpane;
147 GtkWidget *chkbtn_disphdr;
148 GtkWidget *spinbtn_linespc;
149 GtkObject *spinbtn_linespc_adj;
150 GtkWidget *chkbtn_headspc;
152 GtkWidget *chkbtn_smoothscroll;
153 GtkWidget *spinbtn_scrollstep;
154 GtkObject *spinbtn_scrollstep_adj;
155 GtkWidget *chkbtn_halfpage;
156 } message;
158 #if USE_GPGME
159 static struct Privacy {
160 GtkWidget *checkbtn_default_encrypt;
161 GtkWidget *checkbtn_default_sign;
162 GtkWidget *checkbtn_auto_check_signatures;
163 GtkWidget *checkbtn_gpg_signature_popup;
164 GtkWidget *checkbtn_passphrase_grab;
165 GtkWidget *checkbtn_gpg_warning;
166 GtkWidget *optmenu_default_signkey;
167 } privacy;
168 #endif
170 static struct Interface {
171 /* GtkWidget *checkbtn_emacs; */
172 GtkWidget *checkbtn_openunread;
173 GtkWidget *checkbtn_openinbox;
174 GtkWidget *checkbtn_immedexec;
175 GtkWidget *checkbtn_confonexit;
176 GtkWidget *checkbtn_cleanonexit;
177 GtkWidget *checkbtn_askonclean;
178 GtkWidget *checkbtn_warnqueued;
179 GtkWidget *checkbtn_addaddrbyclick;
180 GtkWidget *optmenu_recvdialog;
181 } interface;
183 static struct Other {
184 GtkWidget *uri_combo;
185 GtkWidget *uri_entry;
186 GtkWidget *printcmd_entry;
187 GtkWidget *exteditor_combo;
188 GtkWidget *exteditor_entry;
189 } other;
191 static struct MessageColorButtons {
192 GtkWidget *quote_level1_btn;
193 GtkWidget *quote_level2_btn;
194 GtkWidget *quote_level3_btn;
195 GtkWidget *uri_btn;
196 GtkWidget *tgt_folder_btn;
197 } color_buttons;
199 static GtkWidget *quote_desc_win;
200 static GtkWidget *font_sel_win;
201 static guint font_sel_conn_id;
202 static GtkWidget *quote_color_win;
203 static GtkWidget *color_dialog;
205 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
206 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
207 #if USE_GPGME
208 static void prefs_common_default_signkey_set_data_from_optmenu
209 (PrefParam *pparam);
210 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
211 #endif
212 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
213 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
215 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param);
216 static void prefs_dictionary_set_optmenu(PrefParam *pparam);
220 parameter name, default value, pointer to the prefs variable, data type,
221 pointer to the widget pointer,
222 pointer to the function for data setting,
223 pointer to the function for widget setting
226 static PrefParam param[] = {
227 /* Receive */
228 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
229 &receive.checkbtn_incext,
230 prefs_set_data_from_toggle, prefs_set_toggle},
231 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
232 &receive.entry_incext,
233 prefs_set_data_from_entry, prefs_set_entry},
235 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
236 &receive.checkbtn_local,
237 prefs_set_data_from_toggle, prefs_set_toggle},
238 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
239 &receive.checkbtn_filter_on_inc,
240 prefs_set_data_from_toggle, prefs_set_toggle},
241 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
242 &receive.entry_spool,
243 prefs_set_data_from_entry, prefs_set_entry},
245 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
246 &receive.checkbtn_autochk,
247 prefs_set_data_from_toggle, prefs_set_toggle},
248 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
249 &receive.spinbtn_autochk,
250 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
251 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
252 &receive.checkbtn_chkonstartup,
253 prefs_set_data_from_toggle, prefs_set_toggle},
254 {"noerrorpanel", "FALSE", &prefs_common.noerrorpanel, P_BOOL,
255 &receive.checkbtn_noerrorpanel,
256 prefs_set_data_from_toggle, prefs_set_toggle},
257 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
258 P_BOOL, &receive.checkbtn_scan_after_inc,
259 prefs_set_data_from_toggle, prefs_set_toggle},
260 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
261 &receive.spinbtn_maxarticle,
262 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
264 /* Send */
265 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
266 &send.checkbtn_sendext,
267 prefs_set_data_from_toggle, prefs_set_toggle},
268 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
269 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
270 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
271 &send.checkbtn_savemsg,
272 prefs_set_data_from_toggle, prefs_set_toggle},
273 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
274 &send.checkbtn_queuemsg,
275 prefs_set_data_from_toggle, prefs_set_toggle},
277 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
278 &send.optmenu_charset,
279 prefs_common_charset_set_data_from_optmenu,
280 prefs_common_charset_set_optmenu},
282 /* Compose */
283 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
284 &compose.checkbtn_quote,
285 prefs_set_data_from_toggle, prefs_set_toggle},
286 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
287 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
288 {"quote_format", "On %d\\n%f wrote:\\n\\n%Q",
290 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
291 prefs_set_data_from_text, prefs_set_text},
292 {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
293 &compose.entry_fw_quotemark, prefs_set_data_from_entry, prefs_set_entry},
294 {"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",
295 &prefs_common.fw_quotefmt, P_STRING, &compose.text_fw_quotefmt,
296 prefs_set_data_from_text, prefs_set_text},
298 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
299 &compose.checkbtn_autosig,
300 prefs_set_data_from_toggle, prefs_set_toggle},
301 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
302 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
304 {"reply_account_autoselect", "TRUE",
305 &prefs_common.reply_account_autosel, P_BOOL,
306 &compose.checkbtn_reply_account_autosel,
307 prefs_set_data_from_toggle, prefs_set_toggle},
309 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
310 &compose.spinbtn_linewrap,
311 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
312 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
313 &compose.checkbtn_wrapquote,
314 prefs_set_data_from_toggle, prefs_set_toggle},
315 {"linewrap_before_sending", "FALSE",
316 &prefs_common.linewrap_at_send, P_BOOL,
317 &compose.checkbtn_wrapatsend,
318 prefs_set_data_from_toggle, prefs_set_toggle},
319 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
320 P_BOOL, &compose.checkbtn_forward_as_attachment,
321 prefs_set_data_from_toggle, prefs_set_toggle},
322 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
323 P_BOOL, &compose.checkbtn_smart_wrapping,
324 prefs_set_data_from_toggle, prefs_set_toggle},
325 {"enable_ispell", "TRUE", &prefs_common.enable_ispell,
326 P_BOOL, &compose.checkbtn_enable_ispell,
327 prefs_set_data_from_toggle, prefs_set_toggle},
328 {"ispell_path", ISPELL_PATH, &prefs_common.ispell_path,
329 P_STRING, &compose.entry_ispell_path,
330 prefs_set_data_from_entry, prefs_set_entry},
331 {"dictionary_path", "", &prefs_common.dictionary_path,
332 P_STRING, &compose.optmenu_dictionary_path,
333 prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
335 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
336 NULL, NULL, NULL},
338 /* Display */
339 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
340 NULL, NULL, NULL},
341 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
342 &prefs_common.textfont, P_STRING,
343 &display.entry_textfont,
344 prefs_set_data_from_entry, prefs_set_entry},
345 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
346 &prefs_common.smallfont, P_STRING,
347 &display.entry_smallfont,
348 prefs_set_data_from_entry, prefs_set_entry},
349 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
350 &prefs_common.boldfont, P_STRING,
351 &display.entry_boldfont,
352 prefs_set_data_from_entry, prefs_set_entry},
353 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
354 &prefs_common.normalfont, P_STRING,
355 &display.entry_normalfont,
356 prefs_set_data_from_entry, prefs_set_entry},
359 {"display_folder_unread_num", "TRUE",
360 &prefs_common.display_folder_unread, P_BOOL,
361 &display.chkbtn_folder_unread,
362 prefs_set_data_from_toggle, prefs_set_toggle},
364 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
365 &display.chkbtn_transhdr,
366 prefs_set_data_from_toggle, prefs_set_toggle},
368 /* Display: Summary View */
369 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
370 &display.chkbtn_swapfrom,
371 prefs_set_data_from_toggle, prefs_set_toggle},
372 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
373 &display.chkbtn_hscrollbar,
374 prefs_set_data_from_toggle, prefs_set_toggle},
375 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
376 &display.chkbtn_useaddrbook,
377 prefs_set_data_from_toggle, prefs_set_toggle},
378 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
379 P_STRING, &display.entry_datefmt,
380 prefs_set_data_from_entry, prefs_set_entry},
381 {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
382 &display.chkbtn_expand_thread,
383 prefs_set_data_from_toggle, prefs_set_toggle},
384 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
385 &display.chkbtn_bold_unread,
386 prefs_set_data_from_toggle, prefs_set_toggle},
388 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
389 NULL, NULL, NULL},
391 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
392 NULL, NULL, NULL},
393 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
394 NULL, NULL, NULL},
396 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
397 NULL, NULL, NULL},
398 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
399 NULL, NULL, NULL},
400 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
401 NULL, NULL, NULL},
402 {"show_number", "FALSE", &prefs_common.show_number, P_BOOL,
403 NULL, NULL, NULL},
404 {"show_score", "TRUE", &prefs_common.show_score, P_BOOL,
405 NULL, NULL, NULL},
406 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
407 NULL, NULL, NULL},
408 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
409 NULL, NULL, NULL},
410 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
411 NULL, NULL, NULL},
412 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
413 NULL, NULL, NULL},
415 /* Widget size */
416 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
417 NULL, NULL, NULL},
418 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
419 NULL, NULL, NULL},
420 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
421 NULL, NULL, NULL},
422 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
423 NULL, NULL, NULL},
424 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
425 NULL, NULL, NULL},
426 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
427 NULL, NULL, NULL},
428 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
429 NULL, NULL, NULL},
430 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
431 NULL, NULL, NULL},
432 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
433 NULL, NULL, NULL},
434 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
435 NULL, NULL, NULL},
436 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
437 NULL, NULL, NULL},
438 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
439 NULL, NULL, NULL},
440 {"summary_col_score", "40", &prefs_common.summary_col_score,
441 P_INT, NULL, NULL, NULL},
442 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
443 NULL, NULL, NULL},
444 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
445 NULL, NULL, NULL},
446 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
447 NULL, NULL, NULL},
448 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
449 P_INT, NULL, NULL, NULL},
450 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
451 NULL, NULL, NULL},
452 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
453 NULL, NULL, NULL},
454 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
455 NULL, NULL, NULL},
456 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
457 NULL, NULL, NULL},
458 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
459 NULL, NULL, NULL},
460 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
461 NULL, NULL, NULL},
462 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
463 NULL, NULL, NULL},
464 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
465 NULL, NULL, NULL},
466 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
467 NULL, NULL, NULL},
468 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
469 NULL, NULL, NULL},
470 {"compose_width", "600", &prefs_common.compose_width, P_INT,
471 NULL, NULL, NULL},
472 {"compose_height", "560", &prefs_common.compose_height, P_INT,
473 NULL, NULL, NULL},
475 /* Message */
476 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
477 &message.chkbtn_enablecol,
478 prefs_set_data_from_toggle, prefs_set_toggle},
480 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
481 NULL, NULL, NULL},
482 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
483 NULL, NULL, NULL},
484 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
485 NULL, NULL, NULL},
486 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
487 NULL, NULL, NULL},
488 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
489 NULL, NULL, NULL},
490 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
491 NULL, NULL, NULL},
492 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
493 P_BOOL, NULL, NULL, NULL},
495 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
496 &message.chkbtn_mbalnum,
497 prefs_set_data_from_toggle, prefs_set_toggle},
498 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
499 P_BOOL, &message.chkbtn_disphdrpane,
500 prefs_set_data_from_toggle, prefs_set_toggle},
501 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
502 &message.chkbtn_disphdr,
503 prefs_set_data_from_toggle, prefs_set_toggle},
504 {"line_space", "2", &prefs_common.line_space, P_INT,
505 &message.spinbtn_linespc,
506 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
507 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
508 &message.chkbtn_headspc,
509 prefs_set_data_from_toggle, prefs_set_toggle},
511 {"enable_smooth_scroll", "FALSE",
512 &prefs_common.enable_smooth_scroll, P_BOOL,
513 &message.chkbtn_smoothscroll,
514 prefs_set_data_from_toggle, prefs_set_toggle},
515 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
516 &message.spinbtn_scrollstep,
517 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
518 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
519 &message.chkbtn_halfpage,
520 prefs_set_data_from_toggle, prefs_set_toggle},
522 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
523 NULL, NULL, NULL},
525 /* MIME viewer */
526 {"mime_image_viewer", "display '%s'",
527 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
528 {"mime_audio_player", "play '%s'",
529 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
531 #if USE_GPGME
532 /* Privacy */
533 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
534 &privacy.checkbtn_default_encrypt,
535 prefs_set_data_from_toggle, prefs_set_toggle},
536 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
537 &privacy.checkbtn_default_sign,
538 prefs_set_data_from_toggle, prefs_set_toggle},
539 {"auto_check_signatures", "TRUE",
540 &prefs_common.auto_check_signatures, P_BOOL,
541 &privacy.checkbtn_auto_check_signatures,
542 prefs_set_data_from_toggle, prefs_set_toggle},
543 {"gpg_signature_popup", "FALSE",
544 &prefs_common.gpg_signature_popup, P_BOOL,
545 &privacy.checkbtn_gpg_signature_popup,
546 prefs_set_data_from_toggle, prefs_set_toggle},
547 #ifndef __MINGW32__
548 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
549 &privacy.checkbtn_passphrase_grab,
550 prefs_set_data_from_toggle, prefs_set_toggle},
551 #endif /* __MINGW32__ */
552 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
553 &privacy.checkbtn_gpg_warning,
554 prefs_set_data_from_toggle, prefs_set_toggle},
555 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
556 &privacy.optmenu_default_signkey,
557 prefs_common_default_signkey_set_data_from_optmenu,
558 prefs_common_default_signkey_set_optmenu},
559 #endif /* USE_GPGME */
561 /* Interface */
562 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
563 NULL, NULL, NULL},
564 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
565 NULL, NULL, NULL},
567 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
568 NULL, NULL, NULL}, */
570 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
571 P_BOOL, &interface.checkbtn_openunread,
572 prefs_set_data_from_toggle, prefs_set_toggle},
573 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
574 P_BOOL, &interface.checkbtn_openinbox,
575 prefs_set_data_from_toggle, prefs_set_toggle},
576 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
577 &interface.checkbtn_immedexec,
578 prefs_set_data_from_toggle, prefs_set_toggle},
579 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
580 &interface.optmenu_recvdialog,
581 prefs_common_recv_dialog_set_data_from_optmenu,
582 prefs_common_recv_dialog_set_optmenu},
584 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
585 P_BOOL, &interface.checkbtn_addaddrbyclick,
586 prefs_set_data_from_toggle, prefs_set_toggle},
587 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
588 &interface.checkbtn_confonexit,
589 prefs_set_data_from_toggle, prefs_set_toggle},
590 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
591 &send.checkbtn_returnreceipt,
592 prefs_set_data_from_toggle, prefs_set_toggle},
593 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
594 &interface.checkbtn_cleanonexit,
595 prefs_set_data_from_toggle, prefs_set_toggle},
596 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
597 &interface.checkbtn_askonclean,
598 prefs_set_data_from_toggle, prefs_set_toggle},
599 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
600 P_BOOL, &interface.checkbtn_warnqueued,
601 prefs_set_data_from_toggle, prefs_set_toggle},
603 /* Other */
604 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
605 &prefs_common.uri_cmd, P_STRING,
606 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
607 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
608 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
609 {"ext_editor_command", "gedit %s",
610 &prefs_common.ext_editor_cmd, P_STRING,
611 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
613 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
614 NULL, NULL, NULL},
615 {"important_score", "1", &prefs_common.important_score, P_INT,
616 NULL, NULL, NULL},
618 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
621 #define VSPACING 12
622 #define VSPACING_NARROW 3
624 #define VBOX_BORDER 16
625 #define DEFAULT_ENTRY_WIDTH 80
626 #define PREFSBUFSIZE 1024
628 /* widget creating functions */
629 static void prefs_common_create (void);
630 static void prefs_receive_create (void);
631 static void prefs_send_create (void);
632 static void prefs_compose_create (void);
633 static void prefs_display_create (void);
634 static void prefs_message_create (void);
635 #if USE_GPGME
636 static void prefs_privacy_create (void);
637 #endif
638 static void prefs_interface_create (void);
639 static void prefs_other_create (void);
641 static void date_format_ok_btn_clicked (GtkButton *button,
642 GtkWidget **widget);
643 static void date_format_cancel_btn_clicked (GtkButton *button,
644 GtkWidget **widget);
645 static void date_format_key_pressed (GtkWidget *keywidget,
646 GdkEventKey *event,
647 GtkWidget **widget);
648 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
649 GdkEventAny *event,
650 GtkWidget **widget);
651 static void date_format_entry_on_change (GtkEditable *editable,
652 GtkLabel *example);
653 static void date_format_select_row (GtkWidget *date_format_list,
654 gint row,
655 gint column,
656 GdkEventButton *event,
657 GtkWidget *date_format);
658 static GtkWidget *date_format_create (GtkButton *button,
659 void *data);
661 static void prefs_quote_description (void);
662 static void prefs_quote_description_create (void);
663 static void prefs_quote_colors_dialog (void);
664 static void prefs_quote_colors_dialog_create (void);
665 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
666 GdkEventKey *event,
667 gpointer data);
668 static void quote_color_set_dialog (GtkWidget *widget,
669 gpointer data);
670 static void quote_colors_set_dialog_ok (GtkWidget *widget,
671 gpointer data);
672 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
673 gpointer data);
674 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
675 GdkEventKey *event,
676 gpointer data);
677 static void set_button_bg_color (GtkWidget *widget,
678 gint color);
679 static void prefs_enable_message_color_toggled (void);
680 static void prefs_recycle_colors_toggled (GtkWidget *widget);
682 /* functions for setting items of SummaryView */
683 static void prefs_summary_display_item_dialog_create
684 (gboolean *cancelled);
685 static void display_item_ok (GtkWidget *widget,
686 gboolean *cancelled);
687 static void display_item_cancel (GtkWidget *widget,
688 gboolean *cancelled);
689 static gint display_item_delete_event (GtkWidget *widget,
690 GdkEventAny *event,
691 gboolean *cancelled);
692 static void display_item_key_pressed (GtkWidget *widget,
693 GdkEventKey *event,
694 gboolean *cancelled);
696 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
698 static void prefs_font_selection_key_pressed (GtkWidget *widget,
699 GdkEventKey *event,
700 gpointer data);
701 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
703 static gint prefs_common_deleted (GtkWidget *widget,
704 GdkEventAny *event,
705 gpointer data);
706 static void prefs_common_key_pressed (GtkWidget *widget,
707 GdkEventKey *event,
708 gpointer data);
709 static void prefs_common_ok (void);
710 static void prefs_common_apply (void);
711 static void prefs_common_cancel (void);
713 static void compose_prefs_fmt_open(void);
714 static void compose_prefs_fmt_create(void);
716 void prefs_common_read_config(void)
718 prefs_read_config(param, "Common", COMMON_RC);
721 void prefs_common_save_config(void)
723 prefs_save_config(param, "Common", COMMON_RC);
726 void prefs_common_open(void)
728 if (prefs_rc_is_readonly(COMMON_RC))
729 return;
731 inc_autocheck_timer_remove();
733 if (!dialog.window) {
734 prefs_common_create();
737 manage_window_set_transient(GTK_WINDOW(dialog.window));
738 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
739 gtk_widget_grab_focus(dialog.ok_btn);
741 prefs_set_dialog(param);
743 gtk_widget_show(dialog.window);
746 static void prefs_common_create(void)
748 gint page = 0;
750 debug_print(_("Creating common preferences window...\n"));
752 prefs_dialog_create(&dialog);
753 gtk_window_set_title (GTK_WINDOW(dialog.window),
754 _("Common Preferences"));
755 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
756 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
757 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
758 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
759 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
760 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
761 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
762 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
763 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
764 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
765 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
766 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
767 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
768 GTK_SIGNAL_FUNC(prefs_common_cancel),
769 GTK_OBJECT(dialog.window));
771 /* create all widgets on notebook */
772 prefs_receive_create();
773 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
774 prefs_send_create();
775 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
776 prefs_compose_create();
777 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
778 prefs_display_create();
779 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
780 prefs_message_create();
781 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
782 #if USE_GPGME
783 prefs_privacy_create();
784 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
785 #endif
786 prefs_interface_create();
787 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
788 prefs_other_create();
789 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
791 compose_prefs_fmt_create();
793 gtk_widget_show_all(dialog.window);
796 static void prefs_receive_create(void)
798 GtkWidget *vbox1;
799 GtkWidget *vbox2;
800 GtkWidget *frame_incext;
801 GtkWidget *checkbtn_incext;
802 GtkWidget *hbox;
803 GtkWidget *label_incext;
804 GtkWidget *entry_incext;
805 GtkWidget *button_incext;
807 GtkWidget *frame_spool;
808 GtkWidget *checkbtn_local;
809 GtkWidget *checkbtn_filter_on_inc;
810 GtkWidget *label_spool;
811 GtkWidget *entry_spool;
813 GtkWidget *hbox_autochk;
814 GtkWidget *checkbtn_autochk;
815 GtkWidget *label_autochk1;
816 GtkObject *spinbtn_autochk_adj;
817 GtkWidget *spinbtn_autochk;
818 GtkWidget *label_autochk2;
819 GtkWidget *checkbtn_chkonstartup;
820 GtkWidget *checkbtn_noerrorpanel;
821 GtkWidget *checkbtn_scan_after_inc;
824 GtkWidget *frame_news;
825 GtkWidget *label_maxarticle;
826 GtkWidget *spinbtn_maxarticle;
827 GtkObject *spinbtn_maxarticle_adj;
829 vbox1 = gtk_vbox_new (FALSE, VSPACING);
830 gtk_widget_show (vbox1);
831 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
832 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
834 PACK_FRAME(vbox1, frame_incext, _("External program"));
836 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
837 gtk_widget_show (vbox2);
838 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
839 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
841 /* Use of external incorporation program */
842 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
843 _("Use external program for incorporation"));
845 hbox = gtk_hbox_new (FALSE, 8);
846 gtk_widget_show (hbox);
847 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
848 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
850 label_incext = gtk_label_new (_("Program path"));
851 gtk_widget_show (label_incext);
852 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
854 entry_incext = gtk_entry_new ();
855 gtk_widget_show (entry_incext);
856 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
858 button_incext = gtk_button_new_with_label ("... ");
860 gtk_widget_show (button_incext);
861 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
863 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
865 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
866 gtk_widget_show (vbox2);
867 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
868 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
870 hbox = gtk_hbox_new (FALSE, 32);
871 gtk_widget_show (hbox);
872 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
874 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
875 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
876 _("Filter on incorporation"));
877 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
879 hbox = gtk_hbox_new (FALSE, 8);
880 gtk_widget_show (hbox);
881 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
882 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
884 label_spool = gtk_label_new (_("Spool directory"));
885 gtk_widget_show (label_spool);
886 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
888 entry_spool = gtk_entry_new ();
889 gtk_widget_show (entry_spool);
890 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
892 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
893 gtk_widget_show (vbox2);
894 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
896 /* Auto-checking */
897 hbox_autochk = gtk_hbox_new (FALSE, 8);
898 gtk_widget_show (hbox_autochk);
899 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
901 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
902 _("Auto-check new mail"));
904 label_autochk1 = gtk_label_new (_("each"));
905 gtk_widget_show (label_autochk1);
906 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
908 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
909 spinbtn_autochk = gtk_spin_button_new
910 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
911 gtk_widget_show (spinbtn_autochk);
912 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
913 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
914 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
916 label_autochk2 = gtk_label_new (_("minute(s)"));
917 gtk_widget_show (label_autochk2);
918 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
920 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
921 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
922 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
924 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
925 _("Check new mail on startup"));
927 PACK_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel,
928 _("No error popup on receive error"));
929 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
930 _("Update all local folders after incorporation"));
933 PACK_FRAME(vbox1, frame_news, _("News"));
935 hbox = gtk_hbox_new (FALSE, 8);
936 gtk_widget_show (hbox);
937 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
938 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
940 label_maxarticle = gtk_label_new
941 (_("Maximum article number to download\n"
942 "(unlimited if 0 is specified)"));
943 gtk_widget_show (label_maxarticle);
944 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
945 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
947 spinbtn_maxarticle_adj =
948 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
949 spinbtn_maxarticle = gtk_spin_button_new
950 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
951 gtk_widget_show (spinbtn_maxarticle);
952 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
953 FALSE, FALSE, 0);
954 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
955 gtk_spin_button_set_numeric
956 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
958 receive.checkbtn_incext = checkbtn_incext;
959 receive.entry_incext = entry_incext;
960 receive.button_incext = button_incext;
962 receive.checkbtn_local = checkbtn_local;
963 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
964 receive.entry_spool = entry_spool;
966 receive.checkbtn_autochk = checkbtn_autochk;
967 receive.spinbtn_autochk = spinbtn_autochk;
968 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
970 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
971 receive.checkbtn_noerrorpanel = checkbtn_noerrorpanel;
972 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
975 receive.spinbtn_maxarticle = spinbtn_maxarticle;
976 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
979 static void prefs_send_create(void)
981 GtkWidget *vbox1;
982 GtkWidget *vbox2;
983 GtkWidget *frame_sendext;
984 GtkWidget *vbox_sendext;
985 GtkWidget *checkbtn_sendext;
986 GtkWidget *hbox1;
987 GtkWidget *label_sendext;
988 GtkWidget *entry_sendext;
989 GtkWidget *button_sendext;
990 GtkWidget *checkbtn_savemsg;
991 GtkWidget *checkbtn_queuemsg;
992 GtkWidget *label_outcharset;
993 GtkWidget *optmenu;
994 GtkWidget *optmenu_menu;
995 GtkWidget *menuitem;
996 GtkWidget *checkbtn_returnreceipt;
998 vbox1 = gtk_vbox_new (FALSE, VSPACING);
999 gtk_widget_show (vbox1);
1000 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1001 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1003 PACK_FRAME(vbox1, frame_sendext, _("External program"));
1005 gtk_widget_set_sensitive(frame_sendext, FALSE);
1007 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
1008 gtk_widget_show (vbox_sendext);
1009 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
1010 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
1012 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
1013 _("Use external program for sending"));
1015 hbox1 = gtk_hbox_new (FALSE, 8);
1016 gtk_widget_show (hbox1);
1017 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
1018 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
1020 label_sendext = gtk_label_new (_("Program path"));
1021 gtk_widget_show (label_sendext);
1022 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
1024 entry_sendext = gtk_entry_new ();
1025 gtk_widget_show (entry_sendext);
1026 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
1028 button_sendext = gtk_button_new_with_label ("... ");
1029 gtk_widget_show (button_sendext);
1030 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
1032 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1033 gtk_widget_show (vbox2);
1034 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1036 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1037 _("Save sent messages to outbox"));
1038 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1039 _("Queue messages that fail to send"));
1040 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1041 _("Send return receipt on request"));
1043 hbox1 = gtk_hbox_new (FALSE, 8);
1044 gtk_widget_show (hbox1);
1045 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1047 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1048 gtk_widget_show (label_outcharset);
1049 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1051 optmenu = gtk_option_menu_new ();
1052 gtk_widget_show (optmenu);
1053 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1055 optmenu_menu = gtk_menu_new ();
1057 #define SET_MENUITEM(str, charset) \
1059 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1062 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1063 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1064 #if HAVE_LIBJCONV
1065 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1066 #endif
1067 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1068 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1069 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1070 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1071 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1072 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1073 #if HAVE_LIBJCONV
1074 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1075 #endif
1076 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1077 #if HAVE_LIBJCONV
1078 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1079 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1080 #endif
1081 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1082 #if 0
1083 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1084 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1085 #endif /* 0 */
1086 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1087 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1088 #if 0
1089 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1090 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1091 #endif /* 0 */
1092 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1094 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1096 send.checkbtn_sendext = checkbtn_sendext;
1097 send.entry_sendext = entry_sendext;
1098 send.button_sendext = button_sendext;
1100 send.checkbtn_savemsg = checkbtn_savemsg;
1101 send.checkbtn_queuemsg = checkbtn_queuemsg;
1102 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1104 send.optmenu_charset = optmenu;
1107 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1109 gchar *str;
1110 gchar *dict_path;
1112 g_return_if_fail(param);
1113 g_return_if_fail(param->data);
1114 g_return_if_fail(param->widget);
1115 g_return_if_fail(*(param->widget));
1117 dict_path = gtkspell_get_dictionary_menu_active_item
1118 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1119 str = *((gchar **) param->data);
1120 if (str)
1121 g_free(str);
1122 *((gchar **) param->data) = dict_path;
1125 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1127 GList *cur;
1128 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1129 GtkWidget *menu;
1130 GtkWidget *menuitem;
1131 gchar *dict_path;
1132 gint n = 0;
1134 g_return_if_fail(optmenu != NULL);
1135 g_return_if_fail(pparam->data != NULL);
1137 if (*(gchar **) pparam->data) {
1138 menu = gtk_option_menu_get_menu(optmenu);
1139 for (cur = GTK_MENU_SHELL(menu)->children;
1140 cur != NULL; cur = cur->next) {
1141 menuitem = GTK_WIDGET(cur->data);
1142 dict_path = gtk_object_get_data(GTK_OBJECT(menuitem), "full_path");
1143 if (!strcmp(dict_path, *((gchar **)pparam->data))) {
1144 gtk_option_menu_set_history(optmenu, n);
1145 return;
1147 n++;
1151 gtk_option_menu_set_history(optmenu, 0);
1152 prefs_dictionary_set_data_from_optmenu(pparam);
1155 static void prefs_compose_checkbtn_enable_ispell_toggle_cb
1156 (GtkWidget *widget,
1157 gpointer data)
1159 gboolean toggled;
1161 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1162 gtk_widget_set_sensitive(compose.entry_ispell_path, toggled);
1163 gtk_widget_set_sensitive(compose.optmenu_dictionary_path, toggled);
1164 gtk_widget_set_sensitive(compose.btn_ispell_path, toggled);
1167 static void prefs_compose_btn_ispell_path_clicked_cb(GtkWidget *widget,
1168 gpointer data)
1170 gchar *file_path;
1171 GtkWidget *new_menu;
1173 file_path = filesel_select_file(_("Select spelling checker location"),
1174 prefs_common.ispell_path);
1175 if (file_path == NULL) {
1176 /* don't change */
1178 else {
1179 if (prefs_common.ispell_path)
1180 g_free(prefs_common.ispell_path);
1181 prefs_common.ispell_path = file_path;
1183 new_menu = gtkspell_dictionary_option_menu_new(file_path);
1184 gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_dictionary_path),
1185 new_menu);
1187 gtk_entry_set_text(GTK_ENTRY(compose.entry_ispell_path), file_path);
1188 /* select first one */
1189 gtk_option_menu_set_history(GTK_OPTION_MENU(compose.optmenu_dictionary_path), 0);
1191 prefs_common.dictionary_path = gtkspell_get_dictionary_menu_active_item(
1192 gtk_option_menu_get_menu(GTK_OPTION_MENU(compose.optmenu_dictionary_path)));
1197 static void prefs_compose_create(void)
1199 GtkWidget *vbox1;
1202 GtkWidget *frame_quote;
1203 GtkWidget *vbox_quote;
1204 GtkWidget *checkbtn_quote;
1205 GtkWidget *hbox1;
1206 GtkWidget *label_quotemark;
1207 GtkWidget *entry_quotemark;
1208 GtkWidget *hbox2;
1209 GtkWidget *label_quotefmt;
1210 GtkWidget *btn_quotedesc;
1211 GtkWidget *scrolledwin_quotefmt;
1212 GtkWidget *text_quotefmt;
1215 GtkWidget *hbox1;
1216 GtkWidget *hbox2;
1217 GtkWidget *btn_quotefmt;
1219 GtkWidget *frame_sig;
1220 GtkWidget *vbox_sig;
1221 GtkWidget *checkbtn_autosig;
1222 GtkWidget *label_sigsep;
1223 GtkWidget *entry_sigsep;
1225 GtkWidget *checkbtn_reply_account_autosel;
1226 GtkWidget *vbox_linewrap;
1228 GtkWidget *hbox3;
1229 GtkWidget *hbox4;
1230 GtkWidget *label_linewrap;
1231 GtkObject *spinbtn_linewrap_adj;
1232 GtkWidget *spinbtn_linewrap;
1233 GtkWidget *checkbtn_wrapquote;
1234 GtkWidget *checkbtn_wrapatsend;
1236 GtkWidget *checkbtn_forward_as_attachment;
1237 GtkWidget *checkbtn_smart_wrapping;
1239 GtkWidget *frame_spell;
1240 GtkWidget *hbox_spell;
1241 GtkWidget *vbox_spell;
1242 GtkWidget *hbox_ispell_path;
1243 GtkWidget *checkbtn_enable_ispell;
1244 GtkWidget *label_ispell_path;
1245 GtkWidget *entry_ispell_path;
1246 GtkWidget *btn_ispell_path;
1247 GtkWidget *hbox_dictionary_path;
1248 GtkWidget *label_dictionary_path;
1249 GtkWidget *optmenu_dictionary_path;
1251 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1252 gtk_widget_show (vbox1);
1253 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1254 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1257 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
1259 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1260 gtk_widget_show (vbox_quote);
1261 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1262 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1264 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
1265 _("Quote message when replying"));
1267 hbox1 = gtk_hbox_new (FALSE, 8);
1268 gtk_widget_show (hbox1);
1269 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
1271 label_quotemark = gtk_label_new (_("Quotation mark"));
1272 gtk_widget_show (label_quotemark);
1273 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
1275 entry_quotemark = gtk_entry_new ();
1276 gtk_widget_show (entry_quotemark);
1277 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
1278 gtk_widget_set_usize (entry_quotemark, 64, -1);
1280 hbox2 = gtk_hbox_new (FALSE, 0);
1281 gtk_widget_show (hbox2);
1282 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1284 label_quotefmt = gtk_label_new (_("Quotation format:"));
1285 gtk_widget_show (label_quotefmt);
1286 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1288 btn_quotedesc =
1289 gtk_button_new_with_label (_(" Description of symbols "));
1291 gtk_widget_show (btn_quotedesc);
1292 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1293 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1294 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1297 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1298 gtk_widget_show (scrolledwin_quotefmt);
1299 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1300 gtk_scrolled_window_set_policy
1301 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1302 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1304 text_quotefmt = gtk_text_new (NULL, NULL);
1305 gtk_widget_show (text_quotefmt);
1306 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1307 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1308 gtk_widget_set_usize(text_quotefmt, -1, 60);
1311 hbox1 = gtk_hbox_new (FALSE, 32);
1312 gtk_widget_show (hbox1);
1313 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1315 btn_quotefmt = gtk_button_new_with_label (_(" Quote format "));
1316 gtk_widget_show (btn_quotefmt);
1317 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotefmt, FALSE, FALSE, 0);
1318 gtk_signal_connect(GTK_OBJECT(btn_quotefmt), "clicked",
1319 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), NULL);
1321 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1323 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1324 gtk_widget_show (vbox_sig);
1325 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1326 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1328 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1329 _("Insert signature automatically"));
1331 hbox1 = gtk_hbox_new (FALSE, 8);
1332 gtk_widget_show (hbox1);
1333 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1334 label_sigsep = gtk_label_new (_("Signature separator"));
1335 gtk_widget_show (label_sigsep);
1336 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1338 entry_sigsep = gtk_entry_new ();
1339 gtk_widget_show (entry_sigsep);
1340 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1342 gtk_widget_set_usize (entry_sigsep, 64, -1);
1344 /* line-wrapping */
1345 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1346 gtk_widget_show (vbox_linewrap);
1347 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1349 hbox3 = gtk_hbox_new (FALSE, 8);
1350 gtk_widget_show (hbox3);
1351 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1354 label_linewrap = gtk_label_new (_("Wrap messages at"));
1355 gtk_widget_show (label_linewrap);
1356 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1358 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1359 spinbtn_linewrap = gtk_spin_button_new
1360 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1361 gtk_widget_show (spinbtn_linewrap);
1362 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1363 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1364 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1366 label_linewrap = gtk_label_new (_("characters"));
1367 gtk_widget_show (label_linewrap);
1368 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1370 hbox4 = gtk_hbox_new (FALSE, 32);
1371 gtk_widget_show (hbox4);
1372 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1374 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1375 PACK_CHECK_BUTTON
1376 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1378 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1379 _("Forward as attachment"));
1381 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_account_autosel,
1382 _("Automatically select account for mail replies"));
1384 PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping,
1385 _("Smart wrapping (EXPERIMENTAL)"));
1387 /* spell checker defaults */
1388 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1389 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1390 gtk_widget_show (vbox_spell);
1391 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1392 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1394 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_ispell,
1395 _("Enable spell checker"));
1397 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_ispell), "toggled",
1398 GTK_SIGNAL_FUNC(prefs_compose_checkbtn_enable_ispell_toggle_cb),
1399 NULL);
1401 hbox_ispell_path = gtk_hbox_new (FALSE, 8);
1402 gtk_widget_show(hbox_ispell_path);
1403 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_ispell_path, TRUE, TRUE, 0);
1405 label_ispell_path = gtk_label_new (_("Ispelll path"));
1406 gtk_widget_show(label_ispell_path);
1407 gtk_box_pack_start(GTK_BOX(hbox_ispell_path), label_ispell_path, FALSE, FALSE, 0);
1409 entry_ispell_path = gtk_entry_new();
1410 gtk_widget_show(entry_ispell_path);
1411 gtk_box_pack_start(GTK_BOX(hbox_ispell_path), entry_ispell_path, FALSE, FALSE, 0);
1412 gtk_widget_set_usize(entry_ispell_path, 150, -1);
1413 gtk_widget_set_sensitive(entry_ispell_path, prefs_common.enable_ispell);
1415 btn_ispell_path = gtk_button_new_with_label(_("..."));
1416 gtk_widget_show(btn_ispell_path);
1417 gtk_box_pack_start(GTK_BOX(hbox_ispell_path), btn_ispell_path, FALSE, FALSE, 0);
1418 gtk_widget_set_sensitive(btn_ispell_path, prefs_common.enable_ispell);
1420 gtk_signal_connect(GTK_OBJECT(btn_ispell_path), "clicked",
1421 GTK_SIGNAL_FUNC(prefs_compose_btn_ispell_path_clicked_cb),
1422 NULL);
1424 hbox_dictionary_path = gtk_hbox_new(FALSE, 8);
1425 gtk_widget_show(hbox_dictionary_path);
1426 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_dictionary_path, TRUE, TRUE, 0);
1428 label_dictionary_path = gtk_label_new(_("Dictionaries"));
1429 gtk_widget_show(label_dictionary_path);
1430 gtk_box_pack_start(GTK_BOX(hbox_dictionary_path), label_dictionary_path, FALSE, FALSE, 0);
1432 optmenu_dictionary_path = gtk_option_menu_new();
1433 gtk_widget_show(optmenu_dictionary_path);
1434 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary_path),
1435 gtkspell_dictionary_option_menu_new(prefs_common.ispell_path));
1436 gtk_box_pack_start(GTK_BOX(hbox_dictionary_path), optmenu_dictionary_path, FALSE, FALSE, 0);
1437 gtk_widget_set_sensitive(optmenu_dictionary_path, prefs_common.enable_ispell);
1440 compose.checkbtn_quote = checkbtn_quote;
1441 compose.entry_quotemark = entry_quotemark;
1442 compose.text_quotefmt = text_quotefmt;
1444 compose.checkbtn_autosig = checkbtn_autosig;
1445 compose.entry_sigsep = entry_sigsep;
1447 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1449 compose.spinbtn_linewrap = spinbtn_linewrap;
1450 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1451 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1452 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1454 compose.checkbtn_forward_as_attachment =
1455 checkbtn_forward_as_attachment;
1456 compose.checkbtn_smart_wrapping =
1457 checkbtn_smart_wrapping;
1459 compose.checkbtn_enable_ispell = checkbtn_enable_ispell;
1460 compose.entry_ispell_path = entry_ispell_path;
1461 compose.btn_ispell_path = btn_ispell_path;
1462 compose.optmenu_dictionary_path = optmenu_dictionary_path;
1465 static void prefs_display_create(void)
1467 GtkWidget *vbox1;
1468 GtkWidget *frame_font;
1469 GtkWidget *table1;
1470 GtkWidget *label_textfont;
1471 GtkWidget *entry_textfont;
1472 GtkWidget *button_textfont;
1473 GtkWidget *chkbtn_folder_unread;
1474 GtkWidget *chkbtn_transhdr;
1475 GtkWidget *frame_summary;
1476 GtkWidget *vbox2;
1477 GtkWidget *chkbtn_swapfrom;
1478 GtkWidget *chkbtn_hscrollbar;
1479 GtkWidget *chkbtn_useaddrbook;
1480 GtkWidget *chkbtn_expand_thread;
1481 GtkWidget *chkbtn_bold_unread;
1482 GtkWidget *hbox1;
1483 GtkWidget *label_datefmt;
1484 GtkWidget *button_datefmt;
1485 GtkWidget *entry_datefmt;
1486 GtkWidget *vbox3;
1487 GtkWidget *button_dispitem;
1488 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
1490 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1491 gtk_widget_show (vbox1);
1492 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1493 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1495 PACK_FRAME(vbox1, frame_font, _("Font"));
1497 table1 = gtk_table_new (4, 3, FALSE);
1499 gtk_widget_show (table1);
1500 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1501 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1502 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1503 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1505 label_textfont = gtk_label_new (_("Text"));
1506 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1507 gtk_widget_show (label_textfont);
1508 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1509 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1511 entry_textfont = gtk_entry_new ();
1512 gtk_widget_show (entry_textfont);
1513 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1514 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1516 button_textfont = gtk_button_new_with_label ("... ");
1518 gtk_widget_show (button_textfont);
1519 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1520 0, 0, 0, 0);
1521 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1522 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1524 tmplabel = gtk_label_new (_("Small"));
1525 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1526 gtk_widget_show (tmplabel);
1527 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1528 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1530 tmpentry = gtk_entry_new ();
1531 gtk_widget_show (tmpentry);
1532 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1533 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1535 tmpbutton = gtk_button_new_with_label (" ... ");
1536 gtk_widget_show (tmpbutton);
1537 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1538 0, 0, 0, 0);
1539 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1540 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1541 display.entry_smallfont = tmpentry;
1543 tmplabel = gtk_label_new (_("Normal"));
1544 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1545 gtk_widget_show (tmplabel);
1546 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1547 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1549 tmpentry = gtk_entry_new ();
1550 gtk_widget_show (tmpentry);
1551 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1552 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1554 tmpbutton = gtk_button_new_with_label (" ... ");
1555 gtk_widget_show (tmpbutton);
1556 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1557 0, 0, 0, 0);
1558 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1559 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1560 display.entry_normalfont = tmpentry;
1562 tmplabel = gtk_label_new (_("Bold"));
1563 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1564 gtk_widget_show (tmplabel);
1565 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1566 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1568 tmpentry = gtk_entry_new ();
1569 gtk_widget_show (tmpentry);
1570 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1571 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1573 tmpbutton = gtk_button_new_with_label (" ... ");
1574 gtk_widget_show (tmpbutton);
1575 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1576 0, 0, 0, 0);
1577 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1578 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1579 display.entry_boldfont = tmpentry;
1581 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1582 gtk_widget_show (vbox2);
1583 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1585 PACK_CHECK_BUTTON
1586 (vbox2, chkbtn_transhdr,
1587 _("Translate header name (such as `From:', `Subject:')"));
1589 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1590 _("Display unread number next to folder name"));
1592 /* ---- Summary ---- */
1594 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1596 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1597 gtk_widget_show (vbox2);
1598 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1599 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1601 PACK_CHECK_BUTTON
1602 (vbox2, chkbtn_swapfrom,
1603 _("Display recipient on `From' column if sender is yourself"));
1604 PACK_CHECK_BUTTON
1605 (vbox2, chkbtn_useaddrbook,
1606 _("Display sender using address book"));
1607 PACK_CHECK_BUTTON
1608 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1609 PACK_CHECK_BUTTON
1610 (vbox2, chkbtn_expand_thread, _("Expand threads"));
1611 PACK_CHECK_BUTTON
1612 (vbox2, chkbtn_bold_unread,
1613 _("Display unread messages with bold font"));
1615 hbox1 = gtk_hbox_new (FALSE, 8);
1616 gtk_widget_show (hbox1);
1617 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1619 label_datefmt = gtk_label_new (_("Date format"));
1620 gtk_widget_show (label_datefmt);
1621 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1623 entry_datefmt = gtk_entry_new ();
1624 gtk_widget_show (entry_datefmt);
1625 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1627 button_datefmt = gtk_button_new_with_label ("... ");
1629 gtk_widget_show (button_datefmt);
1630 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1631 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1632 GTK_SIGNAL_FUNC (date_format_create), NULL);
1634 /* spacer */
1635 vbox3 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1636 gtk_widget_show (vbox3);
1637 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, TRUE, 0);
1639 hbox1 = gtk_hbox_new (FALSE, 8);
1640 gtk_widget_show (hbox1);
1641 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1643 button_dispitem = gtk_button_new_with_label
1644 (_(" Set display item of summary... "));
1645 gtk_widget_show (button_dispitem);
1646 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1647 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1648 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1649 NULL);
1651 display.entry_textfont = entry_textfont;
1652 display.button_textfont = button_textfont;
1654 display.chkbtn_folder_unread = chkbtn_folder_unread;
1655 display.chkbtn_transhdr = chkbtn_transhdr;
1657 display.chkbtn_swapfrom = chkbtn_swapfrom;
1658 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1659 display.chkbtn_expand_thread = chkbtn_expand_thread;
1660 display.chkbtn_bold_unread = chkbtn_bold_unread;
1661 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1662 display.entry_datefmt = entry_datefmt;
1665 static void prefs_message_create(void)
1667 GtkWidget *vbox1;
1668 GtkWidget *vbox2;
1669 GtkWidget *hbox1;
1670 GtkWidget *chkbtn_enablecol;
1671 GtkWidget *button_edit_col;
1672 GtkWidget *chkbtn_mbalnum;
1673 GtkWidget *chkbtn_disphdrpane;
1674 GtkWidget *chkbtn_disphdr;
1675 GtkWidget *button_edit_disphdr;
1676 GtkWidget *hbox_linespc;
1677 GtkWidget *label_linespc;
1678 GtkObject *spinbtn_linespc_adj;
1679 GtkWidget *spinbtn_linespc;
1680 GtkWidget *chkbtn_headspc;
1682 GtkWidget *frame_scr;
1683 GtkWidget *vbox_scr;
1684 GtkWidget *chkbtn_smoothscroll;
1685 GtkWidget *hbox_scr;
1686 GtkWidget *label_scr;
1687 GtkObject *spinbtn_scrollstep_adj;
1688 GtkWidget *spinbtn_scrollstep;
1689 GtkWidget *chkbtn_halfpage;
1691 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1692 gtk_widget_show (vbox1);
1693 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1694 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1696 hbox1 = gtk_hbox_new (FALSE, 8);
1697 gtk_widget_show (hbox1);
1698 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1700 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1701 _("Enable coloration of message"));
1702 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1703 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1704 NULL);
1706 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1707 gtk_widget_show (button_edit_col);
1708 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1709 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1710 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1712 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1714 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1715 gtk_widget_show (vbox2);
1716 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1718 PACK_CHECK_BUTTON
1719 (vbox2, chkbtn_mbalnum,
1720 _("Display 2-byte alphabet and numeric with 1-byte character"));
1721 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1722 _("Display header pane above message view"));
1724 hbox1 = gtk_hbox_new (FALSE, 8);
1725 gtk_widget_show (hbox1);
1726 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1728 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1729 _("Display short headers on message view"));
1731 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1732 gtk_widget_show (button_edit_disphdr);
1733 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1734 FALSE, TRUE, 0);
1735 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1736 GTK_SIGNAL_FUNC (prefs_display_header_open),
1737 NULL);
1739 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1741 hbox1 = gtk_hbox_new (FALSE, 32);
1742 gtk_widget_show (hbox1);
1743 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1745 hbox_linespc = gtk_hbox_new (FALSE, 8);
1746 gtk_widget_show (hbox1);
1747 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1749 label_linespc = gtk_label_new (_("Line space"));
1750 gtk_widget_show (label_linespc);
1751 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1752 FALSE, FALSE, 0);
1754 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1755 spinbtn_linespc = gtk_spin_button_new
1756 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1757 gtk_widget_show (spinbtn_linespc);
1758 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1759 FALSE, FALSE, 0);
1760 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1761 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1763 label_linespc = gtk_label_new (_("pixel(s)"));
1764 gtk_widget_show (label_linespc);
1765 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1766 FALSE, FALSE, 0);
1768 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1770 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1772 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1773 gtk_widget_show (vbox_scr);
1774 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1775 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1777 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1779 hbox1 = gtk_hbox_new (FALSE, 32);
1780 gtk_widget_show (hbox1);
1781 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1783 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1785 hbox_scr = gtk_hbox_new (FALSE, 8);
1786 gtk_widget_show (hbox_scr);
1787 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1789 label_scr = gtk_label_new (_("Step"));
1790 gtk_widget_show (label_scr);
1791 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1793 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1794 spinbtn_scrollstep = gtk_spin_button_new
1795 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1796 gtk_widget_show (spinbtn_scrollstep);
1797 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1798 FALSE, FALSE, 0);
1799 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1800 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1801 TRUE);
1803 label_scr = gtk_label_new (_("pixel(s)"));
1804 gtk_widget_show (label_scr);
1805 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1807 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1809 message.chkbtn_enablecol = chkbtn_enablecol;
1810 message.button_edit_col = button_edit_col;
1811 message.chkbtn_mbalnum = chkbtn_mbalnum;
1812 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1813 message.chkbtn_disphdr = chkbtn_disphdr;
1814 message.spinbtn_linespc = spinbtn_linespc;
1815 message.chkbtn_headspc = chkbtn_headspc;
1817 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1818 message.spinbtn_scrollstep = spinbtn_scrollstep;
1819 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1820 message.chkbtn_halfpage = chkbtn_halfpage;
1823 #if USE_GPGME
1824 static void prefs_privacy_create(void)
1826 GtkWidget *vbox1;
1827 GtkWidget *vbox2;
1828 GtkWidget *hbox1;
1829 GtkWidget *checkbtn_default_encrypt;
1830 GtkWidget *checkbtn_default_sign;
1831 GtkWidget *checkbtn_auto_check_signatures;
1832 GtkWidget *checkbtn_gpg_signature_popup;
1833 GtkWidget *checkbtn_passphrase_grab;
1834 GtkWidget *checkbtn_gpg_warning;
1835 GtkWidget *label;
1836 GtkWidget *menuitem;
1837 GtkWidget *optmenu;
1838 GtkWidget *optmenu_menu;
1840 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1841 gtk_widget_show (vbox1);
1842 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1843 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1845 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1846 gtk_widget_show (vbox2);
1847 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1849 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1850 _("Encrypt message by default"));
1852 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1853 _("Sign message by default"));
1855 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1856 _("Automatically check signatures"));
1858 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
1859 _("Show signature check result in a popup window"));
1861 #ifndef __MINGW32__
1862 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1863 _("Grab input while entering a passphrase"));
1864 #endif
1866 PACK_CHECK_BUTTON
1867 (vbox2, checkbtn_gpg_warning,
1868 _("Display warning on startup if GnuPG doesn't work"));
1870 hbox1 = gtk_hbox_new (FALSE, 8);
1871 gtk_widget_show (hbox1);
1872 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1874 /* create default signkey box */
1875 label = gtk_label_new (_("Default Sign Key"));
1876 gtk_widget_show (label);
1877 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1878 optmenu = gtk_option_menu_new ();
1879 gtk_widget_show (optmenu);
1880 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1881 optmenu_menu = gtk_menu_new ();
1883 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1884 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1885 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1886 /* FIXME: disabled because not implemented */
1887 gtk_widget_set_sensitive(optmenu, FALSE);
1889 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1890 privacy.checkbtn_default_sign = checkbtn_default_sign;
1891 privacy.checkbtn_auto_check_signatures
1892 = checkbtn_auto_check_signatures;
1893 privacy.checkbtn_gpg_signature_popup
1894 = checkbtn_gpg_signature_popup;
1895 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1896 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
1897 privacy.optmenu_default_signkey = optmenu;
1900 static void
1901 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1903 #if 0
1904 GtkWidget *menu;
1905 GtkWidget *menuitem;
1906 gchar *charset;
1908 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1909 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1910 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1911 g_free(*((gchar **)pparam->data));
1912 *((gchar **)pparam->data) = g_strdup(charset);
1913 #endif
1916 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1918 #if 0
1919 GList *cur;
1920 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1921 GtkWidget *menu;
1922 GtkWidget *menuitem;
1923 gchar *charset;
1924 gint n = 0;
1926 g_return_if_fail(optmenu != NULL);
1927 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1929 menu = gtk_option_menu_get_menu(optmenu);
1930 for (cur = GTK_MENU_SHELL(menu)->children;
1931 cur != NULL; cur = cur->next) {
1932 menuitem = GTK_WIDGET(cur->data);
1933 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1934 if (!strcmp(charset, *((gchar **)pparam->data))) {
1935 gtk_option_menu_set_history(optmenu, n);
1936 return;
1938 n++;
1941 gtk_option_menu_set_history(optmenu, 0);
1942 prefs_common_charset_set_data_from_optmenu(pparam);
1943 #endif
1945 #endif /* USE_GPGME */
1947 static void prefs_interface_create(void)
1949 GtkWidget *vbox1;
1950 GtkWidget *vbox2;
1951 GtkWidget *vbox3;
1952 /* GtkWidget *checkbtn_emacs; */
1953 GtkWidget *checkbtn_openunread;
1954 GtkWidget *checkbtn_openinbox;
1955 GtkWidget *checkbtn_immedexec;
1956 GtkWidget *hbox1;
1957 GtkWidget *label;
1958 GtkWidget *optmenu_recvdialog;
1959 GtkWidget *menu;
1960 GtkWidget *menuitem;
1962 GtkWidget *frame_addr;
1963 GtkWidget *vbox_addr;
1964 GtkWidget *checkbtn_addaddrbyclick;
1966 GtkWidget *frame_exit;
1967 GtkWidget *vbox_exit;
1968 GtkWidget *checkbtn_confonexit;
1969 GtkWidget *checkbtn_cleanonexit;
1970 GtkWidget *checkbtn_askonclean;
1971 GtkWidget *checkbtn_warnqueued;
1973 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1974 gtk_widget_show (vbox1);
1975 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1976 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1978 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1979 gtk_widget_show (vbox2);
1980 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1982 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1983 _("Emulate the behavior of mouse operation of\n"
1984 "Emacs-based mailer"));
1985 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1986 GTK_JUSTIFY_LEFT); */
1988 PACK_CHECK_BUTTON
1989 (vbox2, checkbtn_openunread,
1990 _("Open first unread message when entering a folder"));
1992 PACK_CHECK_BUTTON
1993 (vbox2, checkbtn_openinbox,
1994 _("Go to inbox after receiving new mail"));
1996 vbox3 = gtk_vbox_new (FALSE, 0);
1997 gtk_widget_show (vbox3);
1998 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2000 PACK_CHECK_BUTTON
2001 (vbox3, checkbtn_immedexec,
2002 _("Execute immediately when moving or deleting messages"));
2004 hbox1 = gtk_hbox_new (FALSE, 0);
2005 gtk_widget_show (hbox1);
2006 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2008 label = gtk_label_new
2009 (_("(Messages will be just marked till execution\n"
2010 " if this is turned off)"));
2011 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2012 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2014 hbox1 = gtk_hbox_new (FALSE, 8);
2015 gtk_widget_show (hbox1);
2016 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2018 label = gtk_label_new (_("Show receive dialog"));
2019 gtk_widget_show (label);
2020 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2022 optmenu_recvdialog = gtk_option_menu_new ();
2023 gtk_widget_show (optmenu_recvdialog);
2024 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2025 FALSE, FALSE, 0);
2027 menu = gtk_menu_new ();
2028 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2029 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2030 RECV_DIALOG_ACTIVE);
2031 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2033 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2035 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2037 vbox_addr = gtk_vbox_new (FALSE, VSPACING_NARROW);
2038 gtk_widget_show (vbox_addr);
2039 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2040 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2042 PACK_CHECK_BUTTON
2043 (vbox_addr, checkbtn_addaddrbyclick,
2044 _("Add address to destination when double-clicked"));
2046 /* Receive Dialog */
2047 /* hbox = gtk_hbox_new (FALSE, 8);
2048 gtk_widget_show (hbox);
2049 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2051 label = gtk_label_new (_("Show receive Dialog"));
2052 gtk_widget_show (label);
2053 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2055 recvdialog_optmenu = gtk_option_menu_new ();
2056 gtk_widget_show (recvdialog_optmenu);
2057 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2059 recvdialog_optmenu_menu = gtk_menu_new ();
2061 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2062 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2063 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2065 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2067 /* On Exit */
2068 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2070 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
2071 gtk_widget_show (vbox_exit);
2072 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2073 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2075 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2076 _("Confirm on exit"));
2078 hbox1 = gtk_hbox_new (FALSE, 32);
2079 gtk_widget_show (hbox1);
2080 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2082 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2083 _("Empty trash on exit"));
2084 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2085 _("Ask before emptying"));
2086 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2088 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2089 _("Warn if there are queued messages"));
2091 /* interface.checkbtn_emacs = checkbtn_emacs; */
2092 interface.checkbtn_openunread = checkbtn_openunread;
2093 interface.checkbtn_openinbox = checkbtn_openinbox;
2094 interface.checkbtn_immedexec = checkbtn_immedexec;
2095 interface.optmenu_recvdialog = recvdialog_optmenu;
2096 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2097 interface.checkbtn_confonexit = checkbtn_confonexit;
2098 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2099 interface.checkbtn_askonclean = checkbtn_askonclean;
2100 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2103 static void prefs_other_create(void)
2105 GtkWidget *vbox1;
2106 GtkWidget *hbox1;
2108 GtkWidget *uri_frame;
2109 GtkWidget *uri_label;
2110 GtkWidget *uri_combo;
2111 GtkWidget *uri_entry;
2113 GtkWidget *print_frame;
2114 GtkWidget *printcmd_label;
2115 GtkWidget *printcmd_entry;
2117 GtkWidget *exteditor_frame;
2118 GtkWidget *exteditor_label;
2119 GtkWidget *exteditor_combo;
2120 GtkWidget *exteditor_entry;
2122 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2123 gtk_widget_show (vbox1);
2124 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2125 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2127 PACK_FRAME(vbox1, uri_frame,
2128 _("External Web browser (%s will be replaced with URI)"));
2130 hbox1 = gtk_hbox_new (FALSE, 8);
2131 gtk_widget_show (hbox1);
2132 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2133 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2135 uri_label = gtk_label_new (_("Command"));
2136 gtk_widget_show(uri_label);
2137 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2139 uri_combo = gtk_combo_new ();
2140 gtk_widget_show (uri_combo);
2141 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2142 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2143 "netscape -remote 'openURL(%s,raise)'",
2144 "netscape '%s'",
2145 "gnome-moz-remote --raise --newwin '%s'",
2146 "kterm -e w3m '%s'",
2147 "kterm -e lynx '%s'",
2148 NULL);
2150 uri_entry = GTK_COMBO (uri_combo)->entry;
2152 PACK_FRAME(vbox1, print_frame,
2153 _("Printing (%s will be replaced with file name)"));
2155 hbox1 = gtk_hbox_new (FALSE, 8);
2156 gtk_widget_show (hbox1);
2157 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2158 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2160 printcmd_label = gtk_label_new (_("Command"));
2161 gtk_widget_show (printcmd_label);
2162 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2164 printcmd_entry = gtk_entry_new ();
2165 gtk_widget_show (printcmd_entry);
2166 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2168 PACK_FRAME(vbox1, exteditor_frame,
2169 _("External editor (%s will be replaced with file name)"));
2171 hbox1 = gtk_hbox_new (FALSE, 8);
2172 gtk_widget_show (hbox1);
2173 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2174 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2176 exteditor_label = gtk_label_new (_("Command"));
2177 gtk_widget_show (exteditor_label);
2178 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2180 exteditor_combo = gtk_combo_new ();
2181 gtk_widget_show (exteditor_combo);
2182 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2183 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2184 "gedit %s",
2185 "mgedit --no-fork %s",
2186 "emacs %s",
2187 "xemacs %s",
2188 "kterm -e jed %s",
2189 "kterm -e vi %s",
2190 NULL);
2191 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2193 other.uri_combo = uri_combo;
2194 other.uri_entry = uri_entry;
2195 other.printcmd_entry = printcmd_entry;
2197 other.exteditor_combo = exteditor_combo;
2198 other.exteditor_entry = exteditor_entry;
2201 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2203 GtkWidget *datefmt_sample = NULL;
2204 gchar *text;
2206 g_return_if_fail(widget != NULL);
2207 g_return_if_fail(*widget != NULL);
2208 g_return_if_fail(display.entry_datefmt != NULL);
2210 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2211 (GTK_OBJECT(*widget), "datefmt_sample"));
2212 g_return_if_fail(datefmt_sample != NULL);
2214 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2215 g_free(prefs_common.date_format);
2216 prefs_common.date_format = text;
2217 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2219 gtk_widget_destroy(*widget);
2220 *widget = NULL;
2223 static void date_format_cancel_btn_clicked(GtkButton *button,
2224 GtkWidget **widget)
2226 g_return_if_fail(widget != NULL);
2227 g_return_if_fail(*widget != NULL);
2229 gtk_widget_destroy(*widget);
2230 *widget = NULL;
2233 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2234 GtkWidget **widget)
2236 if (event && event->keyval == GDK_Escape)
2237 date_format_cancel_btn_clicked(NULL, widget);
2240 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2241 GdkEventAny *event, GtkWidget **widget)
2243 g_return_val_if_fail(widget != NULL, FALSE);
2244 g_return_val_if_fail(*widget != NULL, FALSE);
2246 *widget = NULL;
2247 return FALSE;
2250 static void date_format_entry_on_change(GtkEditable *editable,
2251 GtkLabel *example)
2253 time_t cur_time;
2254 struct tm *cal_time;
2255 gchar buffer[100];
2256 gchar *text;
2258 cur_time = time(NULL);
2259 cal_time = localtime(&cur_time);
2260 buffer[0] = 0;
2261 text = gtk_editable_get_chars(editable, 0, -1);
2262 if (text)
2263 strftime(buffer, sizeof buffer, text, cal_time);
2264 gtk_label_set_text(example, buffer);
2267 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2268 gint column, GdkEventButton *event,
2269 GtkWidget *date_format)
2271 gint cur_pos;
2272 gchar *format;
2273 gchar *old_format;
2274 gchar *new_format;
2275 GtkWidget *datefmt_sample;
2277 /* only on double click */
2278 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2281 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2282 (GTK_OBJECT(date_format), "datefmt_sample"));
2284 g_return_if_fail(date_format_list != NULL);
2285 g_return_if_fail(date_format != NULL);
2286 g_return_if_fail(datefmt_sample != NULL);
2288 /* get format from clist */
2289 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2291 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2292 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2294 /* insert the format into the text entry */
2295 new_format = g_malloc(strlen(old_format) + 3);
2297 strncpy(new_format, old_format, cur_pos);
2298 new_format[cur_pos] = '\0';
2299 strcat(new_format, format);
2300 strcat(new_format, &old_format[cur_pos]);
2302 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2303 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2305 g_free(new_format);
2308 static GtkWidget *date_format_create(GtkButton *button, void *data)
2310 static GtkWidget *datefmt_win = NULL;
2311 GtkWidget *vbox1;
2312 GtkWidget *scrolledwindow1;
2313 GtkWidget *datefmt_clist;
2314 GtkWidget *table;
2315 GtkWidget *label1;
2316 GtkWidget *label2;
2317 GtkWidget *label3;
2318 GtkWidget *confirm_area;
2319 GtkWidget *ok_btn;
2320 GtkWidget *cancel_btn;
2321 GtkWidget *datefmt_entry;
2323 const struct {
2324 gchar *fmt;
2325 gchar *txt;
2326 } time_format[] = {
2327 { "%a", _("the full abbreviated weekday name") },
2328 { "%A", _("the full weekday name") },
2329 { "%b", _("the abbreviated month name") },
2330 { "%B", _("the full month name") },
2331 { "%c", _("the preferred date and time for the current locale") },
2332 { "%C", _("the century number (year/100)") },
2333 { "%d", _("the day of the month as a decimal number") },
2334 { "%H", _("the hour as a decimal number using a 24-hour clock") },
2335 { "%I", _("the hour as a decimal number using a 12-hour clock") },
2336 { "%j", _("the day of the year as a decimal number") },
2337 { "%m", _("the month as a decimal number") },
2338 { "%M", _("the minute as a decimal number") },
2339 { "%p", _("either AM or PM") },
2340 { "%S", _("the second as a decimal number") },
2341 { "%w", _("the day of the week as a decimal number") },
2342 { "%x", _("the preferred date for the current locale") },
2343 { "%y", _("the last two digits of a year") },
2344 { "%Y", _("the year as a decimal number") },
2345 { "%Z", _("the time zone or name or abbreviation") }
2348 gchar *titles[2];
2349 gint i;
2350 const gint TIME_FORMAT_ELEMS =
2351 sizeof time_format / sizeof time_format[0];
2353 if (datefmt_win) return datefmt_win;
2355 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2356 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2357 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2358 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2359 gtk_widget_set_usize(datefmt_win, 440, 280);
2361 vbox1 = gtk_vbox_new(FALSE, 10);
2362 gtk_widget_show(vbox1);
2363 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2365 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2366 gtk_scrolled_window_set_policy
2367 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2368 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2369 gtk_widget_show(scrolledwindow1);
2370 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2372 titles[0] = _("Specifier");
2373 titles[1] = _("Description");
2374 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2375 gtk_widget_show(datefmt_clist);
2376 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2377 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2379 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2380 GTK_SELECTION_BROWSE);
2382 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2383 gchar *text[2];
2384 /* phoney casting necessary because of gtk... */
2385 text[0] = (gchar *)time_format[i].fmt;
2386 text[1] = (gchar *)time_format[i].txt;
2387 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2390 table = gtk_table_new(2, 2, FALSE);
2391 gtk_widget_show(table);
2392 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2393 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2394 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2396 label1 = gtk_label_new(_("Date format"));
2397 gtk_widget_show(label1);
2398 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2399 GTK_FILL, 0, 0, 0);
2400 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2401 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2403 datefmt_entry = gtk_entry_new_with_max_length(256);
2404 gtk_widget_show(datefmt_entry);
2405 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2406 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2408 /* we need the "sample" entry box; add it as data so callbacks can
2409 * get the entry box */
2410 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2411 datefmt_entry);
2413 label2 = gtk_label_new(_("Example"));
2414 gtk_widget_show(label2);
2415 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2416 GTK_FILL, 0, 0, 0);
2417 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2418 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2420 label3 = gtk_label_new("");
2421 gtk_widget_show(label3);
2422 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2423 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2424 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2425 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2427 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2428 &cancel_btn, _("Cancel"), NULL, NULL);
2429 gtk_widget_grab_default(ok_btn);
2430 gtk_widget_show(confirm_area);
2432 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2434 /* set the current format */
2435 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2436 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2437 GTK_LABEL(label3));
2439 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2440 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2441 &datefmt_win);
2442 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2443 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2444 &datefmt_win);
2445 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2446 GTK_SIGNAL_FUNC(date_format_key_pressed),
2447 &datefmt_win);
2448 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2449 GTK_SIGNAL_FUNC(date_format_on_delete),
2450 &datefmt_win);
2451 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2452 GTK_SIGNAL_FUNC(date_format_entry_on_change),
2453 label3);
2455 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2456 GTK_SIGNAL_FUNC(date_format_select_row),
2457 datefmt_win);
2459 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2460 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2462 gtk_widget_show(datefmt_win);
2463 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2465 gtk_widget_grab_focus(ok_btn);
2467 return datefmt_win;
2470 void prefs_quote_colors_dialog(void)
2472 if (!quote_color_win)
2473 prefs_quote_colors_dialog_create();
2474 gtk_widget_show(quote_color_win);
2475 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2477 gtk_main();
2478 gtk_widget_hide(quote_color_win);
2480 textview_update_message_colors();
2481 main_window_reflect_prefs_all();
2484 static void prefs_quote_colors_dialog_create(void)
2486 GtkWidget *window;
2487 GtkWidget *vbox;
2488 GtkWidget *table;
2489 GtkWidget *quotelevel1_label;
2490 GtkWidget *quotelevel2_label;
2491 GtkWidget *quotelevel3_label;
2492 GtkWidget *uri_label;
2493 GtkWidget *tgt_folder_label;
2494 GtkWidget *hbbox;
2495 GtkWidget *ok_btn;
2496 //GtkWidget *cancel_btn;
2497 GtkWidget *recycle_colors_btn;
2498 GtkWidget *frame_colors;
2500 window = gtk_window_new(GTK_WINDOW_DIALOG);
2501 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2502 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2503 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2504 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2505 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2507 vbox = gtk_vbox_new (FALSE, VSPACING);
2508 gtk_container_add (GTK_CONTAINER (window), vbox);
2509 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2510 PACK_FRAME(vbox, frame_colors, _("Colors"));
2512 table = gtk_table_new (4, 2, FALSE);
2513 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2514 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2515 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2516 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2519 color_buttons.quote_level1_btn = gtk_button_new();
2520 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2521 0, 1, 0, 1, 0, 0, 0, 0);
2522 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2523 gtk_container_set_border_width
2524 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2526 color_buttons.quote_level2_btn = gtk_button_new();
2527 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2528 0, 1, 1, 2, 0, 0, 0, 0);
2529 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2530 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2532 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2533 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2534 0, 1, 2, 3, 0, 0, 0, 0);
2535 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2536 gtk_container_set_border_width
2537 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2539 color_buttons.uri_btn = gtk_button_new_with_label ("");
2540 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2541 0, 1, 3, 4, 0, 0, 0, 0);
2542 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2543 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2545 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2546 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2547 0, 1, 4, 5, 0, 0, 0, 0);
2548 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
2549 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2551 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2552 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2553 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2554 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2555 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2557 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2558 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2559 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2560 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2561 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2563 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2564 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2565 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2566 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2567 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2569 uri_label = gtk_label_new (_("URI link"));
2570 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2571 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2572 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2573 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2575 tgt_folder_label = gtk_label_new (_("Target folder"));
2576 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
2577 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2578 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
2579 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
2581 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2582 _("Recycle quote colors"));
2584 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2585 NULL, NULL, NULL, NULL);
2586 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2588 gtk_widget_grab_default(ok_btn);
2589 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2590 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2591 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2592 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2593 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2594 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2595 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2596 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2597 NULL);
2599 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2600 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2601 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2602 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2603 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2604 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2605 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2606 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2607 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
2608 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
2609 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2610 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2611 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2612 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2614 /* show message button colors and recycle options */
2615 set_button_bg_color(color_buttons.quote_level1_btn,
2616 prefs_common.quote_level1_col);
2617 set_button_bg_color(color_buttons.quote_level2_btn,
2618 prefs_common.quote_level2_col);
2619 set_button_bg_color(color_buttons.quote_level3_btn,
2620 prefs_common.quote_level3_col);
2621 set_button_bg_color(color_buttons.uri_btn,
2622 prefs_common.uri_col);
2623 set_button_bg_color(color_buttons.tgt_folder_btn,
2624 prefs_common.tgt_folder_col);
2625 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2626 prefs_common.recycle_quote_colors);
2628 gtk_widget_show_all(vbox);
2629 quote_color_win = window;
2632 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2633 GdkEventKey *event, gpointer data)
2635 if (event && event->keyval == GDK_Escape)
2636 gtk_main_quit();
2639 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2641 gchar *type = (gchar *)data;
2642 gchar *title = NULL;
2643 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2644 gint rgbvalue = 0;
2645 GtkColorSelectionDialog *dialog;
2647 if(g_strcasecmp(type, "LEVEL1") == 0) {
2648 title = _("Pick color for quotation level 1");
2649 rgbvalue = prefs_common.quote_level1_col;
2650 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2651 title = _("Pick color for quotation level 2");
2652 rgbvalue = prefs_common.quote_level2_col;
2653 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2654 title = _("Pick color for quotation level 3");
2655 rgbvalue = prefs_common.quote_level3_col;
2656 } else if(g_strcasecmp(type, "URI") == 0) {
2657 title = _("Pick color for URI");
2658 rgbvalue = prefs_common.uri_col;
2659 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
2660 title = _("Pick color for target folder");
2661 rgbvalue = prefs_common.tgt_folder_col;
2662 } else { /* Should never be called */
2663 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2664 return;
2667 color_dialog = gtk_color_selection_dialog_new(title);
2668 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2669 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2670 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2671 manage_window_set_transient(GTK_WINDOW(color_dialog));
2673 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2674 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2675 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2676 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2677 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2678 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2679 data);
2681 /* preselect the previous color in the color selection dialog */
2682 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2683 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2684 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2685 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2686 gtk_color_selection_set_color
2687 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2689 gtk_widget_show(color_dialog);
2692 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2694 GtkColorSelection *colorsel = (GtkColorSelection *)
2695 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2696 gdouble color[4];
2697 gint red, green, blue, rgbvalue;
2698 gchar *type = (gchar *)data;
2700 gtk_color_selection_get_color(colorsel, color);
2702 red = (gint) (color[0] * 255.0);
2703 green = (gint) (color[1] * 255.0);
2704 blue = (gint) (color[2] * 255.0);
2705 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2707 #if 0
2708 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2709 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2710 fprintf(stderr, "Color is %x\n", rgbvalue);
2711 #endif
2713 if (g_strcasecmp(type, "LEVEL1") == 0) {
2714 prefs_common.quote_level1_col = rgbvalue;
2715 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2716 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2717 prefs_common.quote_level2_col = rgbvalue;
2718 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2719 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2720 prefs_common.quote_level3_col = rgbvalue;
2721 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2722 } else if (g_strcasecmp(type, "URI") == 0) {
2723 prefs_common.uri_col = rgbvalue;
2724 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2725 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
2726 prefs_common.tgt_folder_col = rgbvalue;
2727 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
2728 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
2729 } else
2730 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2732 gtk_widget_destroy(color_dialog);
2735 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2737 gtk_widget_destroy(color_dialog);
2740 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
2741 GdkEventKey *event,
2742 gpointer data)
2744 gtk_widget_destroy(color_dialog);
2747 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2749 GtkStyle *newstyle;
2750 GdkColor color;
2752 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2753 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2754 newstyle->bg[GTK_STATE_NORMAL] = color;
2755 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2756 newstyle->bg[GTK_STATE_ACTIVE] = color;
2758 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2761 static void prefs_enable_message_color_toggled(void)
2763 gboolean is_active;
2765 is_active = gtk_toggle_button_get_active
2766 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2767 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2768 prefs_common.enable_color = is_active;
2771 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2773 gboolean is_active;
2775 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2776 prefs_common.recycle_quote_colors = is_active;
2779 static void prefs_quote_description(void)
2781 if (!quote_desc_win)
2782 prefs_quote_description_create();
2784 gtk_widget_show(quote_desc_win);
2785 gtk_main();
2786 gtk_widget_hide(quote_desc_win);
2789 static void prefs_quote_description_create(void)
2791 GtkWidget *vbox;
2792 GtkWidget *hbox;
2793 GtkWidget *hbbox;
2794 GtkWidget *label;
2795 GtkWidget *ok_btn;
2797 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2798 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2799 _("Description of symbols"));
2800 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2801 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2802 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2803 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2805 vbox = gtk_vbox_new(FALSE, 8);
2806 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2808 hbox = gtk_hbox_new(FALSE, 4);
2809 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2811 label = gtk_label_new
2812 ("SYMBOL\n\n"
2813 "%d\n" /* date */
2814 "%f\n" /* from */
2815 "%N\n" /* full name */
2816 "%F\n" /* first name */
2817 "%I\n" /* sender's initial */
2818 "%s\n" /* subject line */
2819 "%t\n" /* to */
2820 "%c\n" /* cc */
2821 "%n\n" /* newsgroups */
2822 "%i\n" /* message id */
2823 "%r\n" /* references */
2824 "\n"
2825 "%x\n"
2826 "?x(expr)\n"
2827 "\n"
2828 "%M\n"
2829 "%Q\n"
2830 "%m\n"
2831 "%q\n"
2832 "%%");
2834 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2835 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2837 label = gtk_label_new
2838 (_("DESCRIPTION\n\n"
2839 "Date\n"
2840 "From\n"
2841 "Full Name of Sender\n"
2842 "First Name of Sender\n"
2843 "Initial of Sender\n"
2844 "Subject\n"
2845 "To\n"
2846 "Cc\n"
2847 "Newsgroups\n"
2848 "Message-ID\n"
2849 "References\n"
2850 "\n"
2851 "Display the information\n"
2852 "If the information x is set, displays expr\n"
2853 "\n"
2854 "Message body\n"
2855 "Quoted message body\n"
2856 "Message body without signature\n"
2857 "Quoted message body without signature\n"
2858 "%"));
2860 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2861 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2863 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2864 NULL, NULL, NULL, NULL);
2865 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2867 gtk_widget_grab_default(ok_btn);
2868 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2869 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2871 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2872 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2874 gtk_widget_show_all(vbox);
2877 /* functions for setting items of SummaryView */
2879 static struct _SummaryDisplayItem
2881 GtkWidget *window;
2883 GtkWidget *chkbtn[N_SUMMARY_COLS];
2885 GtkWidget *ok_btn;
2886 GtkWidget *cancel_btn;
2887 } summarydispitem;
2889 #define SET_ACTIVE(column, var) \
2890 gtk_toggle_button_set_active \
2891 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2892 prefs_common.var)
2893 #define GET_ACTIVE(column, var) \
2894 prefs_common.var = gtk_toggle_button_get_active \
2895 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2897 void prefs_summary_display_item_set(void)
2899 static gboolean cancelled;
2901 if (!summarydispitem.window)
2902 prefs_summary_display_item_dialog_create(&cancelled);
2903 gtk_widget_grab_focus(summarydispitem.ok_btn);
2904 gtk_widget_show(summarydispitem.window);
2905 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2907 SET_ACTIVE(S_COL_MARK, show_mark);
2908 SET_ACTIVE(S_COL_UNREAD, show_unread);
2909 SET_ACTIVE(S_COL_MIME, show_mime);
2910 SET_ACTIVE(S_COL_NUMBER, show_number);
2911 SET_ACTIVE(S_COL_SCORE, show_score);
2912 SET_ACTIVE(S_COL_SIZE, show_size);
2913 SET_ACTIVE(S_COL_DATE, show_date);
2914 SET_ACTIVE(S_COL_FROM, show_from);
2915 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2917 gtk_main();
2918 gtk_widget_hide(summarydispitem.window);
2920 if (cancelled != TRUE) {
2921 GET_ACTIVE(S_COL_MARK, show_mark);
2922 GET_ACTIVE(S_COL_UNREAD, show_unread);
2923 GET_ACTIVE(S_COL_MIME, show_mime);
2924 GET_ACTIVE(S_COL_NUMBER, show_number);
2925 GET_ACTIVE(S_COL_SCORE, show_score);
2926 GET_ACTIVE(S_COL_SIZE, show_size);
2927 GET_ACTIVE(S_COL_DATE, show_date);
2928 GET_ACTIVE(S_COL_FROM, show_from);
2929 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2931 main_window_reflect_prefs_all();
2935 #define SET_CHECK_BUTTON(column, label) \
2937 summarydispitem.chkbtn[column] = \
2938 gtk_check_button_new_with_label(label); \
2939 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2940 summarydispitem.chkbtn[column], \
2941 FALSE, FALSE, 0); \
2944 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2946 GtkWidget *window;
2947 GtkWidget *vbox;
2948 GtkWidget *chkbtn_vbox;
2949 GtkWidget *hbbox;
2950 GtkWidget *ok_btn;
2951 GtkWidget *cancel_btn;
2953 window = gtk_window_new(GTK_WINDOW_DIALOG);
2954 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2955 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2956 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2957 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2958 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2959 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2960 GTK_SIGNAL_FUNC(display_item_delete_event),
2961 cancelled);
2962 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2963 GTK_SIGNAL_FUNC(display_item_key_pressed),
2964 cancelled);
2966 vbox = gtk_vbox_new(FALSE, 8);
2967 gtk_container_add(GTK_CONTAINER(window), vbox);
2969 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2970 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2972 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2973 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2974 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2975 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2976 SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
2977 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2978 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2979 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2980 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2982 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2983 &cancel_btn, _("Cancel"), NULL, NULL);
2984 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2985 gtk_widget_grab_default(ok_btn);
2987 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2988 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2989 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2990 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2992 gtk_widget_show_all(vbox);
2994 summarydispitem.window = window;
2995 summarydispitem.ok_btn = ok_btn;
2996 summarydispitem.cancel_btn = cancel_btn;
2999 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
3001 *cancelled = FALSE;
3002 gtk_main_quit();
3005 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
3007 *cancelled = TRUE;
3008 gtk_main_quit();
3011 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
3012 gboolean *cancelled)
3014 *cancelled = TRUE;
3015 gtk_main_quit();
3017 return TRUE;
3020 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
3021 gboolean *cancelled)
3023 if (event && event->keyval == GDK_Escape) {
3024 *cancelled = TRUE;
3025 gtk_main_quit();
3029 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3031 gchar *font_name;
3033 g_return_if_fail(entry != NULL);
3035 if (!font_sel_win) {
3036 font_sel_win = gtk_font_selection_dialog_new
3037 (_("Font selection"));
3038 gtk_window_position(GTK_WINDOW(font_sel_win),
3039 GTK_WIN_POS_CENTER);
3040 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3041 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3042 NULL);
3043 gtk_signal_connect
3044 (GTK_OBJECT(font_sel_win), "key_press_event",
3045 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3046 NULL);
3047 gtk_signal_connect_object
3048 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3049 "clicked",
3050 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3051 GTK_OBJECT(font_sel_win));
3054 if(font_sel_conn_id) {
3055 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3057 font_sel_conn_id = gtk_signal_connect
3058 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3059 "clicked",
3060 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3061 entry);
3062 printf("%i\n", font_sel_conn_id);
3064 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3065 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3066 g_free(font_name);
3067 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3068 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3069 gtk_widget_grab_focus
3070 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3071 gtk_widget_show(font_sel_win);
3074 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3075 GdkEventKey *event,
3076 gpointer data)
3078 if (event && event->keyval == GDK_Escape)
3079 gtk_widget_hide(font_sel_win);
3082 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3084 gchar *fontname;
3086 fontname = gtk_font_selection_dialog_get_font_name
3087 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3089 if (fontname) {
3090 gtk_entry_set_text(entry, fontname);
3092 g_free(fontname);
3095 gtk_widget_hide(font_sel_win);
3098 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3100 GtkWidget *menu;
3101 GtkWidget *menuitem;
3102 gchar *charset;
3104 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3105 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3106 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3107 g_free(*((gchar **)pparam->data));
3108 *((gchar **)pparam->data) = g_strdup(charset);
3111 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3113 GList *cur;
3114 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3115 GtkWidget *menu;
3116 GtkWidget *menuitem;
3117 gchar *charset;
3118 gint n = 0;
3120 g_return_if_fail(optmenu != NULL);
3121 g_return_if_fail(*((gchar **)pparam->data) != NULL);
3123 menu = gtk_option_menu_get_menu(optmenu);
3124 for (cur = GTK_MENU_SHELL(menu)->children;
3125 cur != NULL; cur = cur->next) {
3126 menuitem = GTK_WIDGET(cur->data);
3127 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3128 if (!strcmp(charset, *((gchar **)pparam->data))) {
3129 gtk_option_menu_set_history(optmenu, n);
3130 return;
3132 n++;
3135 gtk_option_menu_set_history(optmenu, 0);
3136 prefs_common_charset_set_data_from_optmenu(pparam);
3139 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3141 GtkWidget *menu;
3142 GtkWidget *menuitem;
3144 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3145 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3146 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3147 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3150 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3152 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3153 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3154 GtkWidget *menu;
3155 GtkWidget *menuitem;
3157 switch (mode) {
3158 case RECV_DIALOG_ALWAYS:
3159 gtk_option_menu_set_history(optmenu, 0);
3160 break;
3161 case RECV_DIALOG_ACTIVE:
3162 gtk_option_menu_set_history(optmenu, 1);
3163 break;
3164 case RECV_DIALOG_NEVER:
3165 gtk_option_menu_set_history(optmenu, 2);
3166 break;
3167 default:
3170 menu = gtk_option_menu_get_menu(optmenu);
3171 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3172 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3175 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3176 gpointer data)
3178 prefs_common_cancel();
3179 return TRUE;
3182 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3183 gpointer data)
3185 if (event && event->keyval == GDK_Escape)
3186 prefs_common_cancel();
3189 static void prefs_common_ok(void)
3191 prefs_common_apply();
3192 gtk_widget_hide(dialog.window);
3193 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
3194 gtk_widget_hide(quote_desc_win);
3196 inc_autocheck_timer_set();
3199 static void prefs_common_apply(void)
3201 prefs_set_data_from_dialog(param);
3202 main_window_reflect_prefs_all();
3203 prefs_common_save_config();
3206 static void prefs_common_cancel(void)
3208 gtk_widget_hide(dialog.window);
3209 inc_autocheck_timer_set();
3213 static struct _ComposePrefs
3215 GtkWidget *window;
3217 GtkWidget *close_btn;
3218 } composeprefs;
3220 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
3221 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
3222 static void compose_prefs_close(GtkWidget *widget);
3223 static void compose_prefs_fmt_create(void);
3225 static void compose_prefs_fmt_open(void)
3227 if (composeprefs.window == NULL)
3228 compose_prefs_fmt_create();
3229 gtk_widget_show(composeprefs.window);
3233 static void compose_prefs_fmt_create(void)
3235 GtkWidget *window;
3236 GtkWidget *close_btn;
3238 GtkWidget *frame_quote;
3239 GtkWidget *vbox_quote;
3240 GtkWidget *hbox1;
3241 GtkWidget *checkbtn_quote;
3242 GtkWidget *label_quotemark;
3243 GtkWidget *entry_quotemark;
3244 GtkWidget *scrolledwin_quotefmt;
3245 GtkWidget *text_quotefmt;
3246 GtkWidget *label_quotefmt;
3247 GtkWidget *btn_quotedesc;
3249 GtkWidget *label_fw_quotemark;
3250 GtkWidget *entry_fw_quotemark;
3251 GtkWidget *label_fw_quotefmt;
3252 GtkWidget *text_fw_quotefmt;
3254 window = gtk_window_new(GTK_WINDOW_DIALOG);
3255 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
3256 gtk_window_set_title(GTK_WINDOW(window), _("Compose Preferences"));
3257 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3258 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3259 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3260 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3261 GTK_SIGNAL_FUNC(compose_prefs_delete_event),
3262 NULL);
3263 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3264 GTK_SIGNAL_FUNC(compose_prefs_key_pressed),
3265 NULL);
3267 vbox_quote = gtk_vbox_new(FALSE, 8);
3268 gtk_container_add(GTK_CONTAINER(window), vbox_quote);
3270 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
3271 _("Quote message when replying"));
3273 hbox1 = gtk_hbox_new (FALSE, 8);
3274 gtk_widget_show (hbox1);
3275 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3277 label_quotemark = gtk_label_new (_("Quotation mark"));
3278 gtk_widget_show (label_quotemark);
3279 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
3281 entry_quotemark = gtk_entry_new ();
3282 gtk_widget_show (entry_quotemark);
3283 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
3284 gtk_widget_set_usize (entry_quotemark, 64, -1);
3286 hbox1 = gtk_hbox_new (FALSE, 0);
3287 gtk_widget_show (hbox1);
3288 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3290 label_quotefmt = gtk_label_new (_("Quotation format:"));
3291 gtk_widget_show (label_quotefmt);
3292 gtk_box_pack_start (GTK_BOX (hbox1), label_quotefmt, FALSE, FALSE, 0);
3294 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3295 gtk_widget_show (scrolledwin_quotefmt);
3296 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3297 gtk_scrolled_window_set_policy
3298 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3299 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3301 text_quotefmt = gtk_text_new (NULL, NULL);
3302 gtk_widget_show (text_quotefmt);
3303 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
3304 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
3305 gtk_widget_set_usize(text_quotefmt, 400, 60);
3307 hbox1 = gtk_hbox_new (FALSE, 8);
3308 gtk_widget_show (hbox1);
3309 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3311 label_fw_quotemark = gtk_label_new (_("Forward quotation mark"));
3312 gtk_widget_show (label_fw_quotemark);
3313 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotemark, FALSE, FALSE, 0);
3315 entry_fw_quotemark = gtk_entry_new ();
3316 gtk_widget_show (entry_fw_quotemark);
3317 gtk_box_pack_start (GTK_BOX (hbox1), entry_fw_quotemark, FALSE, FALSE, 0);
3318 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
3320 hbox1 = gtk_hbox_new (FALSE, 0);
3321 gtk_widget_show (hbox1);
3322 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3324 label_fw_quotefmt = gtk_label_new (_("Forward format:"));
3325 gtk_widget_show (label_fw_quotefmt);
3326 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotefmt, FALSE, FALSE, 0);
3328 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3329 gtk_widget_show (scrolledwin_quotefmt);
3330 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3331 gtk_scrolled_window_set_policy
3332 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3333 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3335 text_fw_quotefmt = gtk_text_new (NULL, NULL);
3336 gtk_widget_show (text_fw_quotefmt);
3337 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt);
3338 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
3339 gtk_widget_set_usize(text_fw_quotefmt, 400, 60);
3341 hbox1 = gtk_hbox_new (FALSE, 0);
3342 gtk_widget_show (hbox1);
3343 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
3345 btn_quotedesc =
3346 gtk_button_new_with_label (_(" Description of symbols "));
3347 gtk_widget_show (btn_quotedesc);
3348 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc,
3349 FALSE, FALSE, 0);
3351 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
3352 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
3355 gtkut_button_set_create(&hbox1, &close_btn, _("Close"),
3356 NULL, NULL, NULL, NULL);
3357 gtk_box_pack_end(GTK_BOX(vbox_quote), hbox1, FALSE, FALSE, 0);
3358 gtk_widget_grab_default(close_btn);
3360 gtk_signal_connect(GTK_OBJECT(close_btn), "clicked",
3361 GTK_SIGNAL_FUNC(compose_prefs_close), NULL);
3363 gtk_widget_show_all(vbox_quote);
3365 composeprefs.window = window;
3366 composeprefs.close_btn = close_btn;
3368 compose.checkbtn_quote = checkbtn_quote;
3369 compose.entry_quotemark = entry_quotemark;
3370 compose.text_quotefmt = text_quotefmt;
3371 compose.entry_fw_quotemark = entry_fw_quotemark;
3372 compose.text_fw_quotefmt = text_fw_quotefmt;
3375 static void compose_prefs_close(GtkWidget *widget)
3377 gtk_widget_hide(composeprefs.window);
3380 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3382 gtk_widget_hide(composeprefs.window);
3384 return TRUE;
3387 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3389 if (event && event->keyval == GDK_Escape) {
3390 gtk_widget_hide(composeprefs.window);
3394 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3396 GtkWidget *menu;
3397 GtkWidget *menuitem;
3399 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3400 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3401 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3402 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3403 } */
3405 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3407 RecvDialogShow dialog_show;
3408 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3409 GtkWidget *menu;
3410 GtkWidget *menuitem;
3412 dialog_show = *((RecvDialogShow *)pparam->data);
3414 switch (dialog_show) {
3415 case RECVDIALOG_ALWAYS:
3416 gtk_option_menu_set_history(optmenu, 0);
3417 break;
3418 case RECVDIALOG_WINDOW_ACTIVE:
3419 gtk_option_menu_set_history(optmenu, 1);
3420 break;
3421 case RECVDIALOG_NEVER:
3422 gtk_option_menu_set_history(optmenu, 2);
3423 break;
3424 default:
3427 menu = gtk_option_menu_get_menu(optmenu);
3428 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3429 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3430 } */