2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 2005-2006 Colin Leroy <colin@colino.net> & The Claws Mail Team
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
30 #include <glib/gi18n.h>
32 #include <gdk/gdkkeysyms.h>
34 #include "prefs_common.h"
35 #include "prefs_gtk.h"
38 #include "gtk/gtkutils.h"
39 #include "gtk/prefswindow.h"
42 #include "manage_window.h"
44 typedef struct _ReceivePage
50 GtkWidget
*checkbtn_incext
;
51 GtkWidget
*entry_incext
;
52 GtkWidget
*checkbtn_autochk
;
53 GtkWidget
*spinbtn_autochk
;
54 GtkWidget
*checkbtn_chkonstartup
;
55 GtkWidget
*checkbtn_openinbox
;
56 GtkWidget
*checkbtn_scan_after_inc
;
57 GtkWidget
*checkbtn_newmail_auto
;
58 GtkWidget
*checkbtn_newmail_manu
;
59 GtkWidget
*entry_newmail_notify_cmd
;
60 GtkWidget
*optmenu_recvdialog
;
61 GtkWidget
*checkbtn_no_recv_err_panel
;
62 GtkWidget
*checkbtn_close_recv_dialog
;
63 GtkWidget
*hbox_newmail_notify
;
66 ReceivePage
*prefs_receive
;
68 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget
*w
, gpointer data
)
72 toggled
= gtk_toggle_button_get_active
73 (GTK_TOGGLE_BUTTON(prefs_receive
->checkbtn_newmail_manu
)) ||
74 gtk_toggle_button_get_active
75 (GTK_TOGGLE_BUTTON(prefs_receive
->checkbtn_newmail_auto
));
76 gtk_widget_set_sensitive(prefs_receive
->hbox_newmail_notify
, toggled
);
80 void prefs_receive_create_widget(PrefsPage
*_page
, GtkWindow
*window
,
83 ReceivePage
*prefs_receive
= (ReceivePage
*) _page
;
88 GtkWidget
*checkbtn_incext
;
90 GtkWidget
*label_incext
;
91 GtkWidget
*entry_incext
;
93 GtkWidget
*hbox_autochk
;
94 GtkWidget
*checkbtn_autochk
;
95 GtkWidget
*label_autochk1
;
96 GtkObject
*spinbtn_autochk_adj
;
97 GtkWidget
*spinbtn_autochk
;
98 GtkWidget
*label_autochk2
;
99 GtkWidget
*checkbtn_chkonstartup
;
100 GtkWidget
*checkbtn_openinbox
;
101 GtkWidget
*checkbtn_scan_after_inc
;
104 GtkWidget
*hbox_newmail_notify
;
105 GtkWidget
*checkbtn_newmail_auto
;
106 GtkWidget
*checkbtn_newmail_manu
;
107 GtkWidget
*entry_newmail_notify_cmd
;
108 GtkWidget
*label_newmail_notify_cmd
;
110 GtkWidget
*label_recvdialog
;
113 GtkWidget
*optmenu_recvdialog
;
114 GtkWidget
*checkbtn_no_recv_err_panel
;
115 GtkWidget
*checkbtn_close_recv_dialog
;
117 vbox1
= gtk_vbox_new (FALSE
, VSPACING
);
118 gtk_widget_show (vbox1
);
119 gtk_container_set_border_width (GTK_CONTAINER (vbox1
), VBOX_BORDER
);
121 /* Use of external incorporation program */
122 PACK_FRAME(vbox1
, frame
, _("External incorporation program"));
123 vbox2
= gtk_vbox_new (FALSE
, VSPACING_NARROW
);
124 gtk_widget_show (vbox2
);
125 gtk_container_add(GTK_CONTAINER(frame
), vbox2
);
126 gtk_container_set_border_width(GTK_CONTAINER(vbox2
), 8);
128 PACK_CHECK_BUTTON (vbox2
, checkbtn_incext
,
129 _("Use external program for receiving mail"));
131 hbox
= gtk_hbox_new (FALSE
, 8);
132 gtk_widget_show (hbox
);
133 gtk_box_pack_start (GTK_BOX (vbox2
), hbox
, FALSE
, FALSE
, 0);
134 SET_TOGGLE_SENSITIVITY (checkbtn_incext
, hbox
);
136 label_incext
= gtk_label_new (_("Command"));
137 gtk_widget_show (label_incext
);
138 gtk_box_pack_start (GTK_BOX (hbox
), label_incext
, FALSE
, FALSE
, 0);
140 entry_incext
= gtk_entry_new ();
141 gtk_widget_show (entry_incext
);
142 gtk_box_pack_start (GTK_BOX (hbox
), entry_incext
, TRUE
, TRUE
, 0);
145 PACK_FRAME(vbox1
, frame
, _("Automatic checking"));
146 vbox2
= gtk_vbox_new (FALSE
, VSPACING_NARROW
);
147 gtk_widget_show (vbox2
);
148 gtk_container_add(GTK_CONTAINER(frame
), vbox2
);
149 gtk_container_set_border_width(GTK_CONTAINER(vbox2
), 8);
151 hbox_autochk
= gtk_hbox_new (FALSE
, 8);
152 gtk_widget_show (hbox_autochk
);
153 gtk_box_pack_start (GTK_BOX (vbox2
), hbox_autochk
, FALSE
, FALSE
, 0);
155 PACK_CHECK_BUTTON (hbox_autochk
, checkbtn_autochk
,
156 _("Automatically check for new mail"));
158 label_autochk1
= gtk_label_new (_("every"));
159 gtk_widget_show (label_autochk1
);
160 gtk_box_pack_start (GTK_BOX (hbox_autochk
), label_autochk1
, FALSE
, FALSE
, 0);
162 spinbtn_autochk_adj
= gtk_adjustment_new (5, 1, 100, 1, 10, 10);
163 spinbtn_autochk
= gtk_spin_button_new
164 (GTK_ADJUSTMENT (spinbtn_autochk_adj
), 1, 0);
165 gtk_widget_show (spinbtn_autochk
);
166 gtk_box_pack_start (GTK_BOX (hbox_autochk
), spinbtn_autochk
, FALSE
, FALSE
, 0);
167 gtk_widget_set_size_request (spinbtn_autochk
, 64, -1);
168 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk
), TRUE
);
170 label_autochk2
= gtk_label_new (_("minute(s)"));
171 gtk_widget_show (label_autochk2
);
172 gtk_box_pack_start (GTK_BOX (hbox_autochk
), label_autochk2
, FALSE
, FALSE
, 0);
174 SET_TOGGLE_SENSITIVITY(checkbtn_autochk
, label_autochk1
);
175 SET_TOGGLE_SENSITIVITY(checkbtn_autochk
, spinbtn_autochk
);
176 SET_TOGGLE_SENSITIVITY(checkbtn_autochk
, label_autochk2
);
178 PACK_CHECK_BUTTON (vbox2
, checkbtn_chkonstartup
,
179 _("Check for new mail on startup"));
182 PACK_FRAME(vbox1
, frame
, _("Dialogs"));
183 vbox2
= gtk_vbox_new (FALSE
, VSPACING_NARROW
);
184 gtk_widget_show (vbox2
);
185 gtk_container_add (GTK_CONTAINER (frame
), vbox2
);
186 gtk_container_set_border_width (GTK_CONTAINER (vbox2
), 8);
188 label_recvdialog
= gtk_label_new (_("Show receive dialog"));
189 gtk_misc_set_alignment(GTK_MISC(label_recvdialog
), 0, 0.5);
190 gtk_widget_show (label_recvdialog
);
192 optmenu_recvdialog
= gtk_option_menu_new ();
193 gtk_widget_show (optmenu_recvdialog
);
195 menu
= gtk_menu_new ();
196 MENUITEM_ADD (menu
, menuitem
, _("Always"), RECV_DIALOG_ALWAYS
);
197 MENUITEM_ADD (menu
, menuitem
, _("Only on manual receiving"),
199 MENUITEM_ADD (menu
, menuitem
, _("Never"), RECV_DIALOG_NEVER
);
201 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog
), menu
);
203 hbox
= gtk_hbox_new(FALSE
, 20);
204 gtk_widget_show(hbox
);
205 gtk_box_pack_start(GTK_BOX(hbox
), label_recvdialog
, FALSE
, FALSE
, 0);
206 gtk_box_pack_start(GTK_BOX(hbox
), optmenu_recvdialog
, FALSE
, FALSE
, 0);
208 gtk_box_pack_start(GTK_BOX(vbox2
), hbox
, FALSE
, FALSE
, 0);
210 PACK_CHECK_BUTTON (vbox2
, checkbtn_close_recv_dialog
,
211 _("Close receive dialog when finished"));
213 PACK_CHECK_BUTTON (vbox2
, checkbtn_no_recv_err_panel
,
214 _("Don't popup error dialog on receive error"));
216 PACK_FRAME(vbox1
, frame
, _("After receiving new mail"));
217 vbox2
= gtk_vbox_new (FALSE
, VSPACING_NARROW
);
218 gtk_widget_show (vbox2
);
219 gtk_container_add (GTK_CONTAINER (frame
), vbox2
);
220 gtk_container_set_border_width (GTK_CONTAINER (vbox2
), 8);
222 PACK_CHECK_BUTTON (vbox2
, checkbtn_openinbox
, _("Go to inbox"));
223 PACK_CHECK_BUTTON (vbox2
, checkbtn_scan_after_inc
,
224 _("Update all local folders"));
226 PACK_FRAME(vbox2
, frame
, _("Run command"));
227 vbox3
= gtk_vbox_new (FALSE
, VSPACING_NARROW
);
228 gtk_widget_show (vbox3
);
229 gtk_container_add (GTK_CONTAINER (frame
), vbox3
);
230 gtk_container_set_border_width (GTK_CONTAINER (vbox3
), 4);
232 hbox
= gtk_hbox_new (TRUE
, 8);
233 gtk_widget_show (hbox
);
234 PACK_CHECK_BUTTON (hbox
, checkbtn_newmail_auto
,
235 _("after automatic check"));
236 PACK_CHECK_BUTTON (hbox
, checkbtn_newmail_manu
,
237 _("after manual check"));
238 gtk_box_pack_start (GTK_BOX(vbox3
), hbox
, FALSE
, FALSE
, 0);
240 hbox_newmail_notify
= gtk_hbox_new (FALSE
, 8);
241 gtk_widget_show (hbox_newmail_notify
);
242 gtk_box_pack_start (GTK_BOX (vbox3
), hbox_newmail_notify
, FALSE
,
245 label_newmail_notify_cmd
= gtk_label_new (_("Command to execute:\n"
246 "(use %d as number of new "
248 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd
),
250 gtk_widget_show (label_newmail_notify_cmd
);
251 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify
),
252 label_newmail_notify_cmd
, FALSE
, FALSE
, 0);
254 entry_newmail_notify_cmd
= gtk_entry_new ();
255 gtk_widget_show (entry_newmail_notify_cmd
);
256 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify
),
257 entry_newmail_notify_cmd
, TRUE
, TRUE
, 0);
259 gtk_widget_set_sensitive(hbox_newmail_notify
,
260 prefs_common
.newmail_notify_auto
||
261 prefs_common
.newmail_notify_manu
);
263 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_incext
),
264 prefs_common
.use_extinc
);
265 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_no_recv_err_panel
),
266 prefs_common
.no_recv_err_panel
);
267 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_close_recv_dialog
),
268 prefs_common
.close_recv_dialog
);
269 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_chkonstartup
),
270 prefs_common
.chk_on_startup
);
271 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_openinbox
),
272 prefs_common
.open_inbox_on_inc
);
273 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_scan_after_inc
),
274 prefs_common
.scan_all_after_inc
);
275 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_newmail_auto
),
276 prefs_common
.newmail_notify_auto
);
277 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_newmail_manu
),
278 prefs_common
.newmail_notify_manu
);
279 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_autochk
),
280 prefs_common
.autochk_newmail
);
282 gtk_entry_set_text(GTK_ENTRY(entry_incext
),
283 prefs_common
.extinc_cmd
);
284 gtk_entry_set_text(GTK_ENTRY(entry_newmail_notify_cmd
),
285 prefs_common
.newmail_notify_cmd
);
286 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn_autochk
),
287 prefs_common
.autochk_itv
);
288 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu_recvdialog
),
289 prefs_common
.recv_dialog_mode
);
291 prefs_receive
->window
= GTK_WIDGET(window
);
292 prefs_receive
->checkbtn_incext
= checkbtn_incext
;
293 prefs_receive
->entry_incext
= entry_incext
;
294 prefs_receive
->checkbtn_autochk
= checkbtn_autochk
;
295 prefs_receive
->spinbtn_autochk
= spinbtn_autochk
;
296 prefs_receive
->checkbtn_chkonstartup
= checkbtn_chkonstartup
;
297 prefs_receive
->checkbtn_openinbox
= checkbtn_openinbox
;
298 prefs_receive
->checkbtn_scan_after_inc
= checkbtn_scan_after_inc
;
299 prefs_receive
->checkbtn_newmail_auto
= checkbtn_newmail_auto
;
300 prefs_receive
->checkbtn_newmail_manu
= checkbtn_newmail_manu
;
301 prefs_receive
->entry_newmail_notify_cmd
= entry_newmail_notify_cmd
;
302 prefs_receive
->optmenu_recvdialog
= optmenu_recvdialog
;
303 prefs_receive
->checkbtn_no_recv_err_panel
= checkbtn_no_recv_err_panel
;
304 prefs_receive
->checkbtn_close_recv_dialog
= checkbtn_close_recv_dialog
;
305 prefs_receive
->hbox_newmail_notify
= hbox_newmail_notify
;
306 prefs_receive
->page
.widget
= vbox1
;
308 g_signal_connect(G_OBJECT(checkbtn_newmail_auto
), "toggled",
309 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb
),
311 g_signal_connect(G_OBJECT(checkbtn_newmail_manu
), "toggled",
312 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb
),
317 void prefs_receive_save(PrefsPage
*_page
)
319 ReceivePage
*page
= (ReceivePage
*) _page
;
324 prefs_common
.use_extinc
= gtk_toggle_button_get_active(
325 GTK_TOGGLE_BUTTON(page
->checkbtn_incext
));
326 prefs_common
.no_recv_err_panel
= gtk_toggle_button_get_active(
327 GTK_TOGGLE_BUTTON(page
->checkbtn_no_recv_err_panel
));
328 prefs_common
.close_recv_dialog
= gtk_toggle_button_get_active(
329 GTK_TOGGLE_BUTTON(page
->checkbtn_close_recv_dialog
));
330 prefs_common
.chk_on_startup
= gtk_toggle_button_get_active(
331 GTK_TOGGLE_BUTTON(page
->checkbtn_chkonstartup
));
332 prefs_common
.open_inbox_on_inc
= gtk_toggle_button_get_active(
333 GTK_TOGGLE_BUTTON(page
->checkbtn_openinbox
));
334 prefs_common
.scan_all_after_inc
= gtk_toggle_button_get_active(
335 GTK_TOGGLE_BUTTON(page
->checkbtn_scan_after_inc
));
336 prefs_common
.newmail_notify_auto
= gtk_toggle_button_get_active(
337 GTK_TOGGLE_BUTTON(page
->checkbtn_newmail_auto
));
338 prefs_common
.newmail_notify_manu
= gtk_toggle_button_get_active(
339 GTK_TOGGLE_BUTTON(page
->checkbtn_newmail_manu
));
340 prefs_common
.autochk_newmail
= gtk_toggle_button_get_active(
341 GTK_TOGGLE_BUTTON(page
->checkbtn_autochk
));
342 prefs_common
.autochk_itv
= gtk_spin_button_get_value_as_int(
343 GTK_SPIN_BUTTON(page
->spinbtn_autochk
));
345 tmp
= gtk_editable_get_chars(GTK_EDITABLE(page
->entry_incext
), 0, -1);
346 g_free(prefs_common
.extinc_cmd
);
347 prefs_common
.extinc_cmd
= tmp
;
349 tmp
= gtk_editable_get_chars(GTK_EDITABLE(page
->entry_newmail_notify_cmd
), 0, -1);
350 g_free(prefs_common
.newmail_notify_cmd
);
351 prefs_common
.newmail_notify_cmd
= tmp
;
353 menu
= gtk_option_menu_get_menu(GTK_OPTION_MENU(page
->optmenu_recvdialog
));
354 menuitem
= gtk_menu_get_active(GTK_MENU(menu
));
355 prefs_common
.recv_dialog_mode
= GPOINTER_TO_INT
356 (g_object_get_data(G_OBJECT(menuitem
), MENU_VAL_ID
));
357 inc_autocheck_timer_remove();
358 inc_autocheck_timer_set();
362 static void prefs_receive_destroy_widget(PrefsPage
*_page
)
366 void prefs_receive_init(void)
369 static gchar
*path
[3];
371 path
[0] = _("Mail Handling");
372 path
[1] = _("Receiving");
375 page
= g_new0(ReceivePage
, 1);
376 page
->page
.path
= path
;
377 page
->page
.create_widget
= prefs_receive_create_widget
;
378 page
->page
.destroy_widget
= prefs_receive_destroy_widget
;
379 page
->page
.save_page
= prefs_receive_save
;
380 page
->page
.weight
= 200.0;
381 prefs_gtk_register_page((PrefsPage
*) page
);
382 prefs_receive
= page
;
385 void prefs_receive_done(void)
387 prefs_gtk_unregister_page((PrefsPage
*) prefs_receive
);
388 g_free(prefs_receive
);