2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 2005-2013 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 3 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, see <http://www.gnu.org/licenses/>.
22 #include "claws-features.h"
31 #include <glib/gi18n.h>
33 #include <gdk/gdkkeysyms.h>
35 #include "prefs_common.h"
36 #include "prefs_gtk.h"
39 #include "gtk/gtkutils.h"
40 #include "gtk/prefswindow.h"
43 #include "manage_window.h"
46 typedef struct _ReceivePage
52 GtkWidget
*checkbtn_incext
;
53 GtkWidget
*entry_incext
;
54 GtkWidget
*checkbtn_autochk
;
55 GtkWidget
*spinbtn_autochk
;
56 GtkWidget
*checkbtn_chkonstartup
;
57 GtkWidget
*checkbtn_openinbox
;
58 GtkWidget
*checkbtn_scan_after_inc
;
59 GtkWidget
*checkbtn_newmail_auto
;
60 GtkWidget
*checkbtn_newmail_manu
;
61 GtkWidget
*entry_newmail_notify_cmd
;
62 GtkWidget
*hbox_newmail_notify
;
63 GtkWidget
*optmenu_recvdialog
;
64 GtkWidget
*checkbtn_no_recv_err_panel
;
65 GtkWidget
*checkbtn_close_recv_dialog
;
68 ReceivePage
*prefs_receive
;
70 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget
*w
, gpointer data
)
74 toggled
= gtk_toggle_button_get_active
75 (GTK_TOGGLE_BUTTON(prefs_receive
->checkbtn_newmail_manu
)) ||
76 gtk_toggle_button_get_active
77 (GTK_TOGGLE_BUTTON(prefs_receive
->checkbtn_newmail_auto
));
78 gtk_widget_set_sensitive(prefs_receive
->hbox_newmail_notify
, toggled
);
82 static void prefs_receive_create_widget(PrefsPage
*_page
, GtkWindow
*window
,
85 ReceivePage
*prefs_receive
= (ReceivePage
*) _page
;
89 GtkWidget
*checkbtn_incext
;
91 GtkWidget
*label_incext
;
92 GtkWidget
*entry_incext
;
94 GtkWidget
*hbox_autochk
;
95 GtkWidget
*checkbtn_autochk
;
96 GtkAdjustment
*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
;
105 GtkWidget
*hbox_newmail_notify
;
106 GtkWidget
*checkbtn_newmail_auto
;
107 GtkWidget
*checkbtn_newmail_manu
;
108 GtkWidget
*entry_newmail_notify_cmd
;
109 GtkWidget
*label_newmail_notify_cmd
;
111 GtkWidget
*label_recvdialog
;
114 GtkWidget
*optmenu_recvdialog
;
115 GtkWidget
*checkbtn_no_recv_err_panel
;
116 GtkWidget
*checkbtn_close_recv_dialog
;
118 vbox1
= gtk_vbox_new (FALSE
, VSPACING
);
119 gtk_widget_show (vbox1
);
120 gtk_container_set_border_width (GTK_CONTAINER (vbox1
), VBOX_BORDER
);
122 /* Use of external incorporation program */
123 vbox2
= gtkut_get_options_frame(vbox1
, &frame
, _("External incorporation program"));
125 PACK_CHECK_BUTTON (vbox2
, checkbtn_incext
,
126 _("Use external program for receiving mail"));
128 hbox
= gtk_hbox_new (FALSE
, 8);
129 gtk_widget_show (hbox
);
130 gtk_box_pack_start (GTK_BOX (vbox2
), hbox
, FALSE
, FALSE
, 0);
131 SET_TOGGLE_SENSITIVITY (checkbtn_incext
, hbox
);
133 label_incext
= gtk_label_new (_("Command"));
134 gtk_widget_show (label_incext
);
135 gtk_box_pack_start (GTK_BOX (hbox
), label_incext
, FALSE
, FALSE
, 0);
137 entry_incext
= gtk_entry_new ();
138 gtk_widget_show (entry_incext
);
139 gtk_box_pack_start (GTK_BOX (hbox
), entry_incext
, TRUE
, TRUE
, 0);
142 vbox2
= gtkut_get_options_frame(vbox1
, &frame
, _("Automatic checking"));
144 hbox_autochk
= gtk_hbox_new (FALSE
, 8);
145 gtk_widget_show (hbox_autochk
);
146 gtk_box_pack_start (GTK_BOX (vbox2
), hbox_autochk
, FALSE
, FALSE
, 0);
148 PACK_CHECK_BUTTON (hbox_autochk
, checkbtn_autochk
,
149 _("Check for new mail every"));
151 spinbtn_autochk_adj
= GTK_ADJUSTMENT(gtk_adjustment_new (5, 1, 100, 1, 10, 0));
152 spinbtn_autochk
= gtk_spin_button_new
153 (GTK_ADJUSTMENT (spinbtn_autochk_adj
), 1, 0);
154 gtk_widget_show (spinbtn_autochk
);
155 gtk_box_pack_start (GTK_BOX (hbox_autochk
), spinbtn_autochk
, FALSE
, FALSE
, 0);
156 gtk_widget_set_size_request (spinbtn_autochk
, 64, -1);
157 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk
), TRUE
);
159 label_autochk2
= gtk_label_new (_("minute(s)"));
160 gtk_widget_show (label_autochk2
);
161 gtk_box_pack_start (GTK_BOX (hbox_autochk
), label_autochk2
, FALSE
, FALSE
, 0);
163 SET_TOGGLE_SENSITIVITY(checkbtn_autochk
, spinbtn_autochk
);
164 SET_TOGGLE_SENSITIVITY(checkbtn_autochk
, label_autochk2
);
166 PACK_CHECK_BUTTON (vbox2
, checkbtn_chkonstartup
,
167 _("Check for new mail on start-up"));
170 vbox2
= gtkut_get_options_frame(vbox1
, &frame
, _("Dialogs"));
172 label_recvdialog
= gtk_label_new (_("Show receive dialog"));
173 gtk_misc_set_alignment(GTK_MISC(label_recvdialog
), 0, 0.5);
174 gtk_widget_show (label_recvdialog
);
176 optmenu_recvdialog
= gtkut_sc_combobox_create(NULL
, FALSE
);
177 gtk_widget_show (optmenu_recvdialog
);
179 menu
= GTK_LIST_STORE(gtk_combo_box_get_model(
180 GTK_COMBO_BOX(optmenu_recvdialog
)));
181 COMBOBOX_ADD (menu
, _("Always"), RECV_DIALOG_ALWAYS
);
182 COMBOBOX_ADD (menu
, _("Only on manual receiving"), RECV_DIALOG_MANUAL
);
183 COMBOBOX_ADD (menu
, _("Never"), RECV_DIALOG_NEVER
);
185 hbox
= gtk_hbox_new(FALSE
, 20);
186 gtk_widget_show(hbox
);
187 gtk_box_pack_start(GTK_BOX(hbox
), label_recvdialog
, FALSE
, FALSE
, 0);
188 gtk_box_pack_start(GTK_BOX(hbox
), optmenu_recvdialog
, FALSE
, FALSE
, 0);
190 gtk_box_pack_start(GTK_BOX(vbox2
), hbox
, FALSE
, FALSE
, 0);
192 PACK_CHECK_BUTTON (vbox2
, checkbtn_close_recv_dialog
,
193 _("Close receive dialog when finished"));
195 PACK_CHECK_BUTTON (vbox2
, checkbtn_no_recv_err_panel
,
196 _("Don't popup error dialog on receive error"));
198 vbox2
= gtkut_get_options_frame(vbox1
, &frame
,
199 _("After receiving new mail"));
201 PACK_CHECK_BUTTON (vbox2
, checkbtn_openinbox
, _("Go to Inbox"));
202 PACK_CHECK_BUTTON (vbox2
, checkbtn_scan_after_inc
,
203 _("Update all local folders"));
205 vbox3
= gtkut_get_options_frame(vbox2
, &frame
, _("Run command"));
207 hbox
= gtk_hbox_new (TRUE
, 8);
208 gtk_widget_show (hbox
);
209 PACK_CHECK_BUTTON (hbox
, checkbtn_newmail_auto
,
210 _("after automatic check"));
211 PACK_CHECK_BUTTON (hbox
, checkbtn_newmail_manu
,
212 _("after manual check"));
213 gtk_box_pack_start (GTK_BOX(vbox3
), hbox
, FALSE
, FALSE
, 0);
215 hbox_newmail_notify
= gtk_hbox_new (FALSE
, 8);
216 gtk_widget_show (hbox_newmail_notify
);
217 gtk_box_pack_start (GTK_BOX (vbox3
), hbox_newmail_notify
, FALSE
,
220 label_newmail_notify_cmd
= gtk_label_new (_("Command to execute:\n"
221 "(use %d as number of new "
223 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd
),
225 gtk_widget_show (label_newmail_notify_cmd
);
226 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify
),
227 label_newmail_notify_cmd
, FALSE
, FALSE
, 0);
229 entry_newmail_notify_cmd
= gtk_entry_new ();
230 gtk_widget_show (entry_newmail_notify_cmd
);
231 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify
),
232 entry_newmail_notify_cmd
, TRUE
, TRUE
, 0);
234 gtk_widget_set_sensitive(hbox_newmail_notify
,
235 prefs_common
.newmail_notify_auto
||
236 prefs_common
.newmail_notify_manu
);
238 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_newmail_auto
),
239 prefs_common
.newmail_notify_auto
);
240 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_newmail_manu
),
241 prefs_common
.newmail_notify_manu
);
242 gtk_entry_set_text(GTK_ENTRY(entry_newmail_notify_cmd
),
243 prefs_common
.newmail_notify_cmd
);
244 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_autochk
),
245 prefs_common
.autochk_newmail
);
246 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_incext
),
247 prefs_common
.use_extinc
);
248 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_no_recv_err_panel
),
249 prefs_common
.no_recv_err_panel
);
250 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_close_recv_dialog
),
251 prefs_common
.close_recv_dialog
);
252 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_chkonstartup
),
253 prefs_common
.chk_on_startup
);
254 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_openinbox
),
255 prefs_common
.open_inbox_on_inc
);
256 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_scan_after_inc
),
257 prefs_common
.scan_all_after_inc
);
259 gtk_entry_set_text(GTK_ENTRY(entry_incext
),
260 prefs_common
.extinc_cmd
);
261 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn_autochk
),
262 prefs_common
.autochk_itv
);
263 combobox_select_by_data(GTK_COMBO_BOX(optmenu_recvdialog
),
264 prefs_common
.recv_dialog_mode
);
266 prefs_receive
->window
= GTK_WIDGET(window
);
267 prefs_receive
->checkbtn_incext
= checkbtn_incext
;
268 prefs_receive
->entry_incext
= entry_incext
;
269 prefs_receive
->checkbtn_autochk
= checkbtn_autochk
;
270 prefs_receive
->spinbtn_autochk
= spinbtn_autochk
;
271 prefs_receive
->checkbtn_chkonstartup
= checkbtn_chkonstartup
;
272 prefs_receive
->checkbtn_openinbox
= checkbtn_openinbox
;
273 prefs_receive
->checkbtn_scan_after_inc
= checkbtn_scan_after_inc
;
274 prefs_receive
->checkbtn_newmail_auto
= checkbtn_newmail_auto
;
275 prefs_receive
->checkbtn_newmail_manu
= checkbtn_newmail_manu
;
276 prefs_receive
->entry_newmail_notify_cmd
= entry_newmail_notify_cmd
;
277 prefs_receive
->hbox_newmail_notify
= hbox_newmail_notify
;
279 prefs_receive
->optmenu_recvdialog
= optmenu_recvdialog
;
280 prefs_receive
->checkbtn_no_recv_err_panel
= checkbtn_no_recv_err_panel
;
281 prefs_receive
->checkbtn_close_recv_dialog
= checkbtn_close_recv_dialog
;
282 prefs_receive
->page
.widget
= vbox1
;
284 g_signal_connect(G_OBJECT(checkbtn_newmail_auto
), "toggled",
285 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb
),
287 g_signal_connect(G_OBJECT(checkbtn_newmail_manu
), "toggled",
288 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb
),
292 static void prefs_receive_save(PrefsPage
*_page
)
294 ReceivePage
*page
= (ReceivePage
*) _page
;
297 prefs_common
.use_extinc
= gtk_toggle_button_get_active(
298 GTK_TOGGLE_BUTTON(page
->checkbtn_incext
));
299 prefs_common
.no_recv_err_panel
= gtk_toggle_button_get_active(
300 GTK_TOGGLE_BUTTON(page
->checkbtn_no_recv_err_panel
));
301 prefs_common
.close_recv_dialog
= gtk_toggle_button_get_active(
302 GTK_TOGGLE_BUTTON(page
->checkbtn_close_recv_dialog
));
303 prefs_common
.chk_on_startup
= gtk_toggle_button_get_active(
304 GTK_TOGGLE_BUTTON(page
->checkbtn_chkonstartup
));
305 prefs_common
.open_inbox_on_inc
= gtk_toggle_button_get_active(
306 GTK_TOGGLE_BUTTON(page
->checkbtn_openinbox
));
307 prefs_common
.scan_all_after_inc
= gtk_toggle_button_get_active(
308 GTK_TOGGLE_BUTTON(page
->checkbtn_scan_after_inc
));
310 prefs_common
.newmail_notify_auto
= gtk_toggle_button_get_active(
311 GTK_TOGGLE_BUTTON(page
->checkbtn_newmail_auto
));
312 prefs_common
.newmail_notify_manu
= gtk_toggle_button_get_active(
313 GTK_TOGGLE_BUTTON(page
->checkbtn_newmail_manu
));
314 prefs_common
.autochk_newmail
= gtk_toggle_button_get_active(
315 GTK_TOGGLE_BUTTON(page
->checkbtn_autochk
));
316 prefs_common
.autochk_itv
= gtk_spin_button_get_value_as_int(
317 GTK_SPIN_BUTTON(page
->spinbtn_autochk
));
319 tmp
= gtk_editable_get_chars(GTK_EDITABLE(page
->entry_incext
), 0, -1);
320 g_free(prefs_common
.extinc_cmd
);
321 prefs_common
.extinc_cmd
= tmp
;
323 tmp
= gtk_editable_get_chars(GTK_EDITABLE(page
->entry_newmail_notify_cmd
), 0, -1);
324 g_free(prefs_common
.newmail_notify_cmd
);
325 prefs_common
.newmail_notify_cmd
= tmp
;
326 prefs_common
.recv_dialog_mode
=
327 combobox_get_active_data(GTK_COMBO_BOX(page
->optmenu_recvdialog
));
329 inc_autocheck_timer_remove();
330 inc_autocheck_timer_set();
334 static void prefs_receive_destroy_widget(PrefsPage
*_page
)
338 void prefs_receive_init(void)
341 static gchar
*path
[3];
343 path
[0] = _("Mail Handling");
344 path
[1] = _("Receiving");
347 page
= g_new0(ReceivePage
, 1);
348 page
->page
.path
= path
;
349 page
->page
.create_widget
= prefs_receive_create_widget
;
350 page
->page
.destroy_widget
= prefs_receive_destroy_widget
;
351 page
->page
.save_page
= prefs_receive_save
;
352 page
->page
.weight
= 200.0;
353 prefs_gtk_register_page((PrefsPage
*) page
);
354 prefs_receive
= page
;
357 void prefs_receive_done(void)
359 prefs_gtk_unregister_page((PrefsPage
*) prefs_receive
);
360 g_free(prefs_receive
);