talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

prefs_send.c (8805B)


      1 /*
      2  * Claws Mail -- a GTK based, lightweight, and fast e-mail client
      3  * Copyright (C) 2005-2019 Colin Leroy & The Claws Mail Team
      4  *
      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.
      9  *
     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.
     14  *
     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/>.
     17  */
     18 
     19 #include "defs.h"
     20 
     21 #include <stdio.h>
     22 #include <stdlib.h>
     23 
     24 #include <glib.h>
     25 #include <glib/gi18n.h>
     26 #include <gtk/gtk.h>
     27 #include <gdk/gdkkeysyms.h>
     28 
     29 #include "prefs_common.h"
     30 #include "prefs_gtk.h"
     31 #include "gtk/menu.h"
     32 
     33 #include "gtk/gtkutils.h"
     34 #include "gtk/prefswindow.h"
     35 #include "gtk/combobox.h"
     36 
     37 #include "manage_window.h"
     38 
     39 typedef struct _SendPage
     40 {
     41 	PrefsPage page;
     42 
     43 	GtkWidget *window;
     44 
     45 	GtkWidget *checkbtn_savemsg;
     46 	GtkWidget *checkbtn_confirm_send_queued_messages;
     47 	GtkWidget *checkbtn_never_send_retrcpt;
     48 	GtkWidget *checkbtn_senddialog;
     49 	GtkWidget *checkbtn_warn_empty_subj;
     50 	GtkWidget *checkbtn_warn_multiple_recipients;
     51 	GtkWidget *spinbtn_warn_multiple_recipients;
     52 	GtkWidget *combobox_encoding_method;
     53 } SendPage;
     54 
     55 typedef struct _combobox_sel_by_data_ctx {
     56 	GtkComboBox *combobox;
     57 	gchar *data;
     58 } ComboboxSelCtx;
     59 
     60 static void checkbtn_warn_multiple_recipients_toggled(GtkToggleButton *button,
     61 		gpointer user_data)
     62 {
     63 	gboolean active = gtk_toggle_button_get_active(button);
     64 	GtkWidget *spin = GTK_WIDGET(user_data);
     65 
     66 	gtk_widget_set_sensitive(spin, active);
     67 }
     68 
     69 static void prefs_send_create_widget(PrefsPage *_page, GtkWindow *window,
     70 			       	  gpointer data)
     71 {
     72 	SendPage *prefs_send = (SendPage *) _page;
     73 	GtkWidget *frame;
     74 	GtkWidget *vbox1, *vbox2, *hbox1;
     75 	GtkWidget *checkbtn_savemsg;
     76 	GtkListStore *optmenu;
     77 	GtkTreeIter iter;
     78 	GtkWidget *combobox_encoding;
     79 	GtkWidget *label_encoding;
     80 	GtkWidget *checkbtn_senddialog;
     81 	GtkWidget *checkbtn_confirm_send_queued_messages;
     82 	GtkWidget *checkbtn_never_send_retrcpt;
     83 	GtkWidget *checkbtn_warn_empty_subj;
     84 	GtkWidget *checkbtn_warn_multiple_recipients;
     85 	GtkWidget *spinbtn_warn_multiple_recipients;
     86 	GtkWidget *table;
     87 
     88 	vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, VSPACING);
     89 	gtk_widget_show (vbox1);
     90 	gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
     91 
     92 	/* messages frame */
     93 	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
     94 	gtk_widget_show (vbox2);
     95 
     96 	PACK_CHECK_BUTTON(vbox2, checkbtn_savemsg,
     97 			_("Save sent messages"));
     98 
     99 	PACK_CHECK_BUTTON(vbox2, checkbtn_never_send_retrcpt,
    100 			_("Never send Return Receipts"));
    101 
    102 	/* encoding table */
    103 	table = gtk_grid_new();
    104 	gtk_widget_show(table);
    105 	gtk_container_add (GTK_CONTAINER (vbox2), table);
    106 	gtk_grid_set_row_spacing(GTK_GRID(table), 4);
    107 	gtk_grid_set_column_spacing(GTK_GRID(table), 8);
    108 
    109 	PACK_FRAME (vbox1, frame, _("Messages"))
    110 	gtk_container_set_border_width(GTK_CONTAINER(vbox2), 8);
    111 	gtk_container_add(GTK_CONTAINER(frame), vbox2);
    112 
    113 	/* interface frame */
    114 	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
    115 	gtk_widget_show (vbox2);
    116 
    117 	PACK_CHECK_BUTTON(vbox2, checkbtn_confirm_send_queued_messages,
    118 			_("Confirm before sending queued messages"));
    119 
    120 	PACK_CHECK_BUTTON(vbox2, checkbtn_senddialog,
    121 			_("Show send dialog"));
    122 
    123 	PACK_CHECK_BUTTON(vbox2, checkbtn_warn_empty_subj,
    124 			_("Warn when Subject is empty"));
    125 
    126 	hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
    127 	gtk_widget_show (hbox1);
    128 
    129 	PACK_CHECK_BUTTON(hbox1, checkbtn_warn_multiple_recipients,
    130 			_("Warn when sending to more recipients than"));
    131 
    132 	spinbtn_warn_multiple_recipients = gtk_spin_button_new_with_range(2, 999, 1);
    133 	gtk_widget_show(spinbtn_warn_multiple_recipients);
    134 	gtk_box_pack_start(GTK_BOX(hbox1), spinbtn_warn_multiple_recipients, FALSE, FALSE, 0);
    135 	g_signal_connect(G_OBJECT(checkbtn_warn_multiple_recipients), "toggled",
    136 			G_CALLBACK(checkbtn_warn_multiple_recipients_toggled),
    137 			spinbtn_warn_multiple_recipients);
    138 
    139 	gtk_box_pack_start(GTK_BOX(vbox2), hbox1, FALSE, FALSE, 0);
    140 
    141 	PACK_FRAME (vbox1, frame, _("Interface"))
    142 	gtk_container_set_border_width(GTK_CONTAINER(vbox2), 8);
    143 	gtk_container_add(GTK_CONTAINER(frame), vbox2);
    144 
    145 	label_encoding = gtk_label_new (_("Transfer encoding"));
    146 	gtk_widget_show (label_encoding);
    147 	gtk_label_set_justify(GTK_LABEL(label_encoding), GTK_JUSTIFY_RIGHT);
    148 	gtk_label_set_xalign(GTK_LABEL(label_encoding), 1.0);
    149 	gtk_grid_attach(GTK_GRID(table), label_encoding, 0, 2, 1, 1);
    150 
    151 	combobox_encoding = gtkut_sc_combobox_create(NULL, FALSE);
    152 	gtk_widget_show (combobox_encoding);
    153 	CLAWS_SET_TIP(combobox_encoding,
    154 			     _("Specify Content-Transfer-Encoding used when"
    155 		   	       " message body contains non-ASCII characters"));
    156 	gtk_grid_attach(GTK_GRID(table), combobox_encoding, 1, 2, 1, 1);
    157 
    158 	optmenu = GTK_LIST_STORE(gtk_combo_box_get_model(
    159 				GTK_COMBO_BOX(combobox_encoding)));
    160 
    161 	COMBOBOX_ADD(optmenu, _("Automatic"),	 CTE_AUTO);
    162 	COMBOBOX_ADD(optmenu, NULL, 0);
    163 	COMBOBOX_ADD(optmenu, "base64",		 CTE_BASE64);
    164 	COMBOBOX_ADD(optmenu, "quoted-printable", CTE_QUOTED_PRINTABLE);
    165 	COMBOBOX_ADD(optmenu, "8bit",		 CTE_8BIT);
    166 
    167 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_savemsg),
    168 		prefs_common.savemsg);
    169 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_confirm_send_queued_messages),
    170 		prefs_common.confirm_send_queued_messages);
    171 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_never_send_retrcpt),
    172 		prefs_common.never_send_retrcpt);
    173 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_senddialog),
    174 		!prefs_common.send_dialog_invisible);
    175 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_warn_empty_subj),
    176 		prefs_common.warn_empty_subj);
    177 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_warn_multiple_recipients), prefs_common.warn_sending_many_recipients_num > 0);
    178 
    179 	if (prefs_common.warn_sending_many_recipients_num > 0)
    180 		gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn_warn_multiple_recipients),
    181 				prefs_common.warn_sending_many_recipients_num);
    182 	else
    183 		gtk_widget_set_sensitive(spinbtn_warn_multiple_recipients, FALSE);
    184 
    185 	combobox_select_by_data(GTK_COMBO_BOX(combobox_encoding),
    186 		prefs_common.encoding_method);
    187 
    188 	prefs_send->window = GTK_WIDGET(window);
    189 
    190 	prefs_send->checkbtn_savemsg = checkbtn_savemsg;
    191 	prefs_send->checkbtn_confirm_send_queued_messages = checkbtn_confirm_send_queued_messages;
    192  	prefs_send->checkbtn_never_send_retrcpt = checkbtn_never_send_retrcpt;
    193 	prefs_send->checkbtn_senddialog = checkbtn_senddialog;
    194 	prefs_send->checkbtn_warn_empty_subj = checkbtn_warn_empty_subj;
    195 	prefs_send->checkbtn_warn_multiple_recipients = checkbtn_warn_multiple_recipients;
    196 	prefs_send->spinbtn_warn_multiple_recipients = spinbtn_warn_multiple_recipients;
    197 	prefs_send->combobox_encoding_method = combobox_encoding;
    198 
    199 	prefs_send->page.widget = vbox1;
    200 }
    201 
    202 static void prefs_send_save(PrefsPage *_page)
    203 {
    204 	SendPage *page = (SendPage *) _page;
    205 
    206 	prefs_common.savemsg = gtk_toggle_button_get_active(
    207 		GTK_TOGGLE_BUTTON(page->checkbtn_savemsg));
    208 	prefs_common.confirm_send_queued_messages = gtk_toggle_button_get_active(
    209 		GTK_TOGGLE_BUTTON(page->checkbtn_confirm_send_queued_messages));
    210 	prefs_common.never_send_retrcpt = gtk_toggle_button_get_active(
    211 		GTK_TOGGLE_BUTTON(page->checkbtn_never_send_retrcpt));
    212 	prefs_common.send_dialog_invisible = !gtk_toggle_button_get_active(
    213 		GTK_TOGGLE_BUTTON(page->checkbtn_senddialog));
    214 	prefs_common.warn_empty_subj = gtk_toggle_button_get_active(
    215 		GTK_TOGGLE_BUTTON(page->checkbtn_warn_empty_subj));
    216 
    217 	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->checkbtn_warn_multiple_recipients)))
    218 		prefs_common.warn_sending_many_recipients_num =
    219 			gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(page->spinbtn_warn_multiple_recipients));
    220 	else
    221 		prefs_common.warn_sending_many_recipients_num = 0;
    222 
    223 	prefs_common.encoding_method = combobox_get_active_data(GTK_COMBO_BOX(page->combobox_encoding_method));
    224 }
    225 
    226 static void prefs_send_destroy_widget(PrefsPage *_page)
    227 {
    228 }
    229 
    230 SendPage *prefs_send;
    231 
    232 void prefs_send_init(void)
    233 {
    234 	SendPage *page;
    235 	static gchar *path[3];
    236 
    237 	path[0] = _("Mail Handling");
    238 	path[1] = _("Sending");
    239 	path[2] = NULL;
    240 
    241 	page = g_new0(SendPage, 1);
    242 	page->page.path = path;
    243 	page->page.create_widget = prefs_send_create_widget;
    244 	page->page.destroy_widget = prefs_send_destroy_widget;
    245 	page->page.save_page = prefs_send_save;
    246 	page->page.weight = 195.0;
    247 	prefs_gtk_register_page((PrefsPage *) page);
    248 	prefs_send = page;
    249 }
    250 
    251 void prefs_send_done(void)
    252 {
    253 	prefs_gtk_unregister_page((PrefsPage *) prefs_send);
    254 	g_free(prefs_send);
    255 }