2 * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 2005-2016 Colin Leroy and 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/>.
21 #include "claws-features.h"
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"
45 typedef struct _ReceivePage
51 GtkWidget
*checkbtn_incext
;
52 GtkWidget
*entry_incext
;
53 GtkWidget
*checkbtn_autochk
;
54 GtkWidget
*spinbtn_autochk_sec
;
55 GtkWidget
*spinbtn_autochk_min
;
56 GtkWidget
*spinbtn_autochk_hour
;
57 GtkWidget
*checkbtn_chkonstartup
;
58 GtkWidget
*checkbtn_openinbox
;
59 GtkWidget
*checkbtn_scan_after_inc
;
60 GtkWidget
*checkbtn_newmail_auto
;
61 GtkWidget
*checkbtn_newmail_manu
;
62 GtkWidget
*entry_newmail_notify_cmd
;
63 GtkWidget
*hbox_newmail_notify
;
64 GtkWidget
*optmenu_recvdialog
;
65 GtkWidget
*checkbtn_no_recv_err_panel
;
66 GtkWidget
*checkbtn_close_recv_dialog
;
69 ReceivePage
*prefs_receive
;
71 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget
*w
, gpointer data
)
75 toggled
= gtk_toggle_button_get_active
76 (GTK_TOGGLE_BUTTON(prefs_receive
->checkbtn_newmail_manu
)) ||
77 gtk_toggle_button_get_active
78 (GTK_TOGGLE_BUTTON(prefs_receive
->checkbtn_newmail_auto
));
79 gtk_widget_set_sensitive(prefs_receive
->hbox_newmail_notify
, toggled
);
82 static void prefs_receive_itv_spinbutton_value_changed_cb(GtkWidget
*w
, gpointer data
)
84 ReceivePage
*page
= (ReceivePage
*)data
;
85 gint seconds
= gtk_spin_button_get_value_as_int (
86 GTK_SPIN_BUTTON (page
->spinbtn_autochk_sec
));
87 gint minutes
= gtk_spin_button_get_value_as_int (
88 GTK_SPIN_BUTTON (page
->spinbtn_autochk_min
));
89 gint hours
= gtk_spin_button_get_value_as_int (
90 GTK_SPIN_BUTTON(page
->spinbtn_autochk_hour
));
91 if (seconds
< 10 && minutes
== 0 && hours
== 0) {
92 gtk_spin_button_set_value (
93 GTK_SPIN_BUTTON (page
->spinbtn_autochk_sec
), 10.0);
97 static void prefs_receive_create_widget(PrefsPage
*_page
, GtkWindow
*window
,
100 ReceivePage
*prefs_receive
= (ReceivePage
*) _page
;
104 GtkWidget
*checkbtn_incext
;
106 GtkWidget
*label_incext
;
107 GtkWidget
*entry_incext
;
109 GtkWidget
*hbox_autochk
;
110 GtkWidget
*checkbtn_autochk
;
111 GtkAdjustment
*spinbtn_autochk_adj
;
112 GtkWidget
*spinbtn_autochk_sec
;
113 GtkWidget
*spinbtn_autochk_min
;
114 GtkWidget
*spinbtn_autochk_hour
;
115 GtkWidget
*label_autochk2
;
116 GtkWidget
*label_autochk1
;
117 GtkWidget
*label_autochk0
;
118 GtkWidget
*checkbtn_chkonstartup
;
119 GtkWidget
*checkbtn_openinbox
;
120 GtkWidget
*checkbtn_scan_after_inc
;
124 GtkWidget
*hbox_newmail_notify
;
125 GtkWidget
*checkbtn_newmail_auto
;
126 GtkWidget
*checkbtn_newmail_manu
;
127 GtkWidget
*entry_newmail_notify_cmd
;
128 GtkWidget
*label_newmail_notify_cmd
;
129 GtkWidget
*label_newmail_notify_cmd_syntax
;
131 GtkWidget
*label_recvdialog
;
134 GtkWidget
*optmenu_recvdialog
;
135 GtkWidget
*checkbtn_no_recv_err_panel
;
136 GtkWidget
*checkbtn_close_recv_dialog
;
138 vbox1
= gtk_vbox_new (FALSE
, VSPACING
);
139 gtk_widget_show (vbox1
);
140 gtk_container_set_border_width (GTK_CONTAINER (vbox1
), VBOX_BORDER
);
142 /* Use of external incorporation program */
143 vbox2
= gtkut_get_options_frame(vbox1
, &frame
, _("External incorporation program"));
145 PACK_CHECK_BUTTON (vbox2
, checkbtn_incext
,
146 _("Use external program for receiving mail"));
148 hbox
= gtk_hbox_new (FALSE
, 8);
149 gtk_widget_show (hbox
);
150 gtk_box_pack_start (GTK_BOX (vbox2
), hbox
, FALSE
, FALSE
, 0);
151 SET_TOGGLE_SENSITIVITY (checkbtn_incext
, hbox
);
153 label_incext
= gtk_label_new (_("Command"));
154 gtk_widget_show (label_incext
);
155 gtk_box_pack_start (GTK_BOX (hbox
), label_incext
, FALSE
, FALSE
, 0);
157 entry_incext
= gtk_entry_new ();
158 gtk_widget_show (entry_incext
);
159 gtk_box_pack_start (GTK_BOX (hbox
), entry_incext
, TRUE
, TRUE
, 0);
162 vbox2
= gtkut_get_options_frame(vbox1
, &frame
, _("Automatic checking"));
164 hbox_autochk
= gtk_hbox_new (FALSE
, 8);
165 gtk_widget_show (hbox_autochk
);
166 gtk_box_pack_start (GTK_BOX (vbox2
), hbox_autochk
, FALSE
, FALSE
, 0);
168 PACK_CHECK_BUTTON (hbox_autochk
, checkbtn_autochk
,
169 _("Check for new mail every"));
171 spinbtn_autochk_adj
= GTK_ADJUSTMENT(gtk_adjustment_new (5, 0, 99, 1, 10, 0));
172 spinbtn_autochk_hour
= gtk_spin_button_new
173 (GTK_ADJUSTMENT (spinbtn_autochk_adj
), 1, 0);
175 gtk_widget_show (spinbtn_autochk_hour
);
176 gtk_box_pack_start (GTK_BOX (hbox_autochk
), spinbtn_autochk_hour
, FALSE
, FALSE
, 0);
178 label_autochk0
= gtk_label_new (_("hours"));
179 gtk_widget_show (label_autochk0
);
180 gtk_box_pack_start (GTK_BOX (hbox_autochk
), label_autochk0
, FALSE
, FALSE
, 0);
182 spinbtn_autochk_adj
= GTK_ADJUSTMENT(gtk_adjustment_new (5, 0, 59, 1, 10, 0));
183 spinbtn_autochk_min
= gtk_spin_button_new
184 (GTK_ADJUSTMENT (spinbtn_autochk_adj
), 1, 0);
185 gtk_widget_show (spinbtn_autochk_min
);
186 gtk_box_pack_start (GTK_BOX (hbox_autochk
), spinbtn_autochk_min
, FALSE
, FALSE
, 0);
188 label_autochk1
= gtk_label_new (_("minutes"));
189 gtk_widget_show (label_autochk1
);
190 gtk_box_pack_start (GTK_BOX (hbox_autochk
), label_autochk1
, FALSE
, FALSE
, 0);
192 spinbtn_autochk_adj
= GTK_ADJUSTMENT(gtk_adjustment_new (5, 0, 59, 1, 10, 0));
193 spinbtn_autochk_sec
= gtk_spin_button_new
194 (GTK_ADJUSTMENT (spinbtn_autochk_adj
), 1, 0);
195 gtk_widget_show (spinbtn_autochk_sec
);
196 gtk_box_pack_start (GTK_BOX (hbox_autochk
), spinbtn_autochk_sec
, FALSE
, FALSE
, 0);
197 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk_sec
), TRUE
);
198 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk_min
), TRUE
);
199 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk_hour
), TRUE
);
201 label_autochk2
= gtk_label_new (_("seconds"));
202 gtk_widget_show (label_autochk2
);
203 gtk_box_pack_start (GTK_BOX (hbox_autochk
), label_autochk2
, FALSE
, FALSE
, 0);
205 SET_TOGGLE_SENSITIVITY(checkbtn_autochk
, spinbtn_autochk_sec
);
206 SET_TOGGLE_SENSITIVITY(checkbtn_autochk
, spinbtn_autochk_min
);
207 SET_TOGGLE_SENSITIVITY(checkbtn_autochk
, spinbtn_autochk_hour
);
208 SET_TOGGLE_SENSITIVITY(checkbtn_autochk
, label_autochk0
);
209 SET_TOGGLE_SENSITIVITY(checkbtn_autochk
, label_autochk1
);
210 SET_TOGGLE_SENSITIVITY(checkbtn_autochk
, label_autochk2
);
212 PACK_CHECK_BUTTON (vbox2
, checkbtn_chkonstartup
,
213 _("Check for new mail on start-up"));
216 vbox2
= gtkut_get_options_frame(vbox1
, &frame
, _("Dialogs"));
218 label_recvdialog
= gtk_label_new (_("Show receive dialog"));
219 gtk_misc_set_alignment(GTK_MISC(label_recvdialog
), 0, 0.5);
220 gtk_widget_show (label_recvdialog
);
222 optmenu_recvdialog
= gtkut_sc_combobox_create(NULL
, FALSE
);
223 gtk_widget_show (optmenu_recvdialog
);
225 menu
= GTK_LIST_STORE(gtk_combo_box_get_model(
226 GTK_COMBO_BOX(optmenu_recvdialog
)));
227 COMBOBOX_ADD (menu
, _("Always"), RECV_DIALOG_ALWAYS
);
228 COMBOBOX_ADD (menu
, _("Only on manual receiving"), RECV_DIALOG_MANUAL
);
229 COMBOBOX_ADD (menu
, _("Never"), RECV_DIALOG_NEVER
);
231 hbox
= gtk_hbox_new(FALSE
, 20);
232 gtk_widget_show(hbox
);
233 gtk_box_pack_start(GTK_BOX(hbox
), label_recvdialog
, FALSE
, FALSE
, 0);
234 gtk_box_pack_start(GTK_BOX(hbox
), optmenu_recvdialog
, FALSE
, FALSE
, 0);
236 gtk_box_pack_start(GTK_BOX(vbox2
), hbox
, FALSE
, FALSE
, 0);
238 PACK_CHECK_BUTTON (vbox2
, checkbtn_close_recv_dialog
,
239 _("Close receive dialog when finished"));
241 PACK_CHECK_BUTTON (vbox2
, checkbtn_no_recv_err_panel
,
242 _("Don't popup error dialog on receive error"));
244 vbox2
= gtkut_get_options_frame(vbox1
, &frame
,
245 _("After receiving new mail"));
247 PACK_CHECK_BUTTON (vbox2
, checkbtn_openinbox
, _("Go to Inbox"));
248 PACK_CHECK_BUTTON (vbox2
, checkbtn_scan_after_inc
,
249 _("Update all local folders"));
251 vbox3
= gtkut_get_options_frame(vbox2
, &frame
, _("Run command"));
253 hbox
= gtk_hbox_new (TRUE
, 8);
254 gtk_widget_show (hbox
);
255 PACK_CHECK_BUTTON (hbox
, checkbtn_newmail_auto
,
256 _("after automatic check"));
257 PACK_CHECK_BUTTON (hbox
, checkbtn_newmail_manu
,
258 _("after manual check"));
259 gtk_box_pack_start (GTK_BOX(vbox3
), hbox
, FALSE
, FALSE
, 0);
261 hbox_newmail_notify
= gtk_hbox_new (FALSE
, 8);
262 gtk_widget_show (hbox_newmail_notify
);
263 gtk_box_pack_start (GTK_BOX (vbox3
), hbox_newmail_notify
, FALSE
,
266 label_newmail_notify_cmd
= gtk_label_new (_("Command to execute"));
267 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd
),
269 gtk_widget_show (label_newmail_notify_cmd
);
270 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify
),
271 label_newmail_notify_cmd
, FALSE
, FALSE
, 0);
273 entry_newmail_notify_cmd
= gtk_entry_new ();
274 gtk_widget_show (entry_newmail_notify_cmd
);
275 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify
),
276 entry_newmail_notify_cmd
, TRUE
, TRUE
, 0);
278 label_newmail_notify_cmd_syntax
= gtk_label_new (_("Use %d as number of new mails"));
279 gtk_widget_show (label_newmail_notify_cmd_syntax
);
280 gtkut_widget_set_small_font_size (label_newmail_notify_cmd_syntax
);
281 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify
),
282 label_newmail_notify_cmd_syntax
, FALSE
, FALSE
, 0);
284 gtk_widget_set_sensitive(hbox_newmail_notify
,
285 prefs_common
.newmail_notify_auto
||
286 prefs_common
.newmail_notify_manu
);
288 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_newmail_auto
),
289 prefs_common
.newmail_notify_auto
);
290 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_newmail_manu
),
291 prefs_common
.newmail_notify_manu
);
292 gtk_entry_set_text(GTK_ENTRY(entry_newmail_notify_cmd
),
293 prefs_common
.newmail_notify_cmd
);
294 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_autochk
),
295 prefs_common
.autochk_newmail
);
296 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_incext
),
297 prefs_common
.use_extinc
);
298 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_no_recv_err_panel
),
299 prefs_common
.no_recv_err_panel
);
300 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_close_recv_dialog
),
301 prefs_common
.close_recv_dialog
);
302 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_chkonstartup
),
303 prefs_common
.chk_on_startup
);
304 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_openinbox
),
305 prefs_common
.open_inbox_on_inc
);
306 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_scan_after_inc
),
307 prefs_common
.scan_all_after_inc
);
309 gtk_entry_set_text(GTK_ENTRY(entry_incext
),
310 prefs_common
.extinc_cmd
);
311 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn_autochk_hour
),
312 prefs_common
.autochk_itv
/ 3600);
313 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn_autochk_min
),
314 (prefs_common
.autochk_itv
% 3600) / 60);
315 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn_autochk_sec
),
316 (prefs_common
.autochk_itv
% 3600) % 60);
317 combobox_select_by_data(GTK_COMBO_BOX(optmenu_recvdialog
),
318 prefs_common
.recv_dialog_mode
);
320 prefs_receive
->window
= GTK_WIDGET(window
);
321 prefs_receive
->checkbtn_incext
= checkbtn_incext
;
322 prefs_receive
->entry_incext
= entry_incext
;
323 prefs_receive
->checkbtn_autochk
= checkbtn_autochk
;
324 prefs_receive
->spinbtn_autochk_sec
= spinbtn_autochk_sec
;
325 prefs_receive
->spinbtn_autochk_min
= spinbtn_autochk_min
;
326 prefs_receive
->spinbtn_autochk_hour
= spinbtn_autochk_hour
;
327 prefs_receive
->checkbtn_chkonstartup
= checkbtn_chkonstartup
;
328 prefs_receive
->checkbtn_openinbox
= checkbtn_openinbox
;
329 prefs_receive
->checkbtn_scan_after_inc
= checkbtn_scan_after_inc
;
330 prefs_receive
->checkbtn_newmail_auto
= checkbtn_newmail_auto
;
331 prefs_receive
->checkbtn_newmail_manu
= checkbtn_newmail_manu
;
332 prefs_receive
->entry_newmail_notify_cmd
= entry_newmail_notify_cmd
;
333 prefs_receive
->hbox_newmail_notify
= hbox_newmail_notify
;
335 prefs_receive
->optmenu_recvdialog
= optmenu_recvdialog
;
336 prefs_receive
->checkbtn_no_recv_err_panel
= checkbtn_no_recv_err_panel
;
337 prefs_receive
->checkbtn_close_recv_dialog
= checkbtn_close_recv_dialog
;
338 prefs_receive
->page
.widget
= vbox1
;
340 g_signal_connect(G_OBJECT(checkbtn_newmail_auto
), "toggled",
341 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb
),
343 g_signal_connect(G_OBJECT(checkbtn_newmail_manu
), "toggled",
344 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb
),
346 g_signal_connect(G_OBJECT(spinbtn_autochk_hour
), "value-changed",
347 G_CALLBACK(prefs_receive_itv_spinbutton_value_changed_cb
),
348 (gpointer
) prefs_receive
);
349 g_signal_connect(G_OBJECT(spinbtn_autochk_min
), "value-changed",
350 G_CALLBACK(prefs_receive_itv_spinbutton_value_changed_cb
),
351 (gpointer
) prefs_receive
);
352 g_signal_connect(G_OBJECT(spinbtn_autochk_sec
), "value-changed",
353 G_CALLBACK(prefs_receive_itv_spinbutton_value_changed_cb
),
354 (gpointer
) prefs_receive
);
357 static void prefs_receive_save(PrefsPage
*_page
)
359 ReceivePage
*page
= (ReceivePage
*) _page
;
362 prefs_common
.use_extinc
= gtk_toggle_button_get_active(
363 GTK_TOGGLE_BUTTON(page
->checkbtn_incext
));
364 prefs_common
.no_recv_err_panel
= gtk_toggle_button_get_active(
365 GTK_TOGGLE_BUTTON(page
->checkbtn_no_recv_err_panel
));
366 prefs_common
.close_recv_dialog
= gtk_toggle_button_get_active(
367 GTK_TOGGLE_BUTTON(page
->checkbtn_close_recv_dialog
));
368 prefs_common
.chk_on_startup
= gtk_toggle_button_get_active(
369 GTK_TOGGLE_BUTTON(page
->checkbtn_chkonstartup
));
370 prefs_common
.open_inbox_on_inc
= gtk_toggle_button_get_active(
371 GTK_TOGGLE_BUTTON(page
->checkbtn_openinbox
));
372 prefs_common
.scan_all_after_inc
= gtk_toggle_button_get_active(
373 GTK_TOGGLE_BUTTON(page
->checkbtn_scan_after_inc
));
375 prefs_common
.newmail_notify_auto
= gtk_toggle_button_get_active(
376 GTK_TOGGLE_BUTTON(page
->checkbtn_newmail_auto
));
377 prefs_common
.newmail_notify_manu
= gtk_toggle_button_get_active(
378 GTK_TOGGLE_BUTTON(page
->checkbtn_newmail_manu
));
379 prefs_common
.autochk_newmail
= gtk_toggle_button_get_active(
380 GTK_TOGGLE_BUTTON(page
->checkbtn_autochk
));
381 prefs_common
.autochk_itv
=
382 (3600 * gtk_spin_button_get_value_as_int(
383 GTK_SPIN_BUTTON(page
->spinbtn_autochk_hour
)))
384 + (60 * gtk_spin_button_get_value_as_int(
385 GTK_SPIN_BUTTON(page
->spinbtn_autochk_min
)))
386 + gtk_spin_button_get_value_as_int(
387 GTK_SPIN_BUTTON(page
->spinbtn_autochk_sec
));
389 tmp
= gtk_editable_get_chars(GTK_EDITABLE(page
->entry_incext
), 0, -1);
390 g_free(prefs_common
.extinc_cmd
);
391 prefs_common
.extinc_cmd
= tmp
;
393 tmp
= gtk_editable_get_chars(GTK_EDITABLE(page
->entry_newmail_notify_cmd
), 0, -1);
394 g_free(prefs_common
.newmail_notify_cmd
);
395 prefs_common
.newmail_notify_cmd
= tmp
;
396 prefs_common
.recv_dialog_mode
=
397 combobox_get_active_data(GTK_COMBO_BOX(page
->optmenu_recvdialog
));
399 inc_autocheck_timer_remove();
400 inc_autocheck_timer_set();
404 static void prefs_receive_destroy_widget(PrefsPage
*_page
)
408 void prefs_receive_init(void)
411 static gchar
*path
[3];
413 path
[0] = _("Mail Handling");
414 path
[1] = _("Receiving");
417 page
= g_new0(ReceivePage
, 1);
418 page
->page
.path
= path
;
419 page
->page
.create_widget
= prefs_receive_create_widget
;
420 page
->page
.destroy_widget
= prefs_receive_destroy_widget
;
421 page
->page
.save_page
= prefs_receive_save
;
422 page
->page
.weight
= 200.0;
423 prefs_gtk_register_page((PrefsPage
*) page
);
424 prefs_receive
= page
;
427 void prefs_receive_done(void)
429 prefs_gtk_unregister_page((PrefsPage
*) prefs_receive
);
430 g_free(prefs_receive
);