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 }