Add new folder options: enable/disable per-folder signing and
authorwwp <subscript@free.fr>
Fri, 7 Sep 2018 06:05:22 +0000 (08:05 +0200)
committerwwp <subscript@free.fr>
Fri, 7 Sep 2018 06:05:22 +0000 (08:05 +0200)
encrypting (by default: obey to applicable account preference).

src/compose.c
src/folder_item_prefs.c
src/folder_item_prefs.h
src/prefs_folder_item.c

index edc579a..637bb94 100644 (file)
@@ -494,6 +494,7 @@ static void compose_update_privacy_system_menu_item(Compose * compose, gboolean
 static void compose_activate_privacy_system     (Compose *compose, 
                                          PrefsAccount *account,
                                         gboolean warn);
+static void compose_apply_folder_privacy_settings(Compose *compose, FolderItem *folder_item);
 static void compose_toggle_return_receipt_cb(GtkToggleAction *action,
                                         gpointer        data);
 static void compose_toggle_remove_refs_cb(GtkToggleAction *action,
@@ -1005,6 +1006,7 @@ Compose *compose_generic_new(PrefsAccount *account, const gchar *mailto, FolderI
        cm_return_val_if_fail(account != NULL, NULL);
 
        compose = compose_create(account, item, COMPOSE_NEW, FALSE);
+       compose_apply_folder_privacy_settings(compose, item);
 
        /* override from name if mailto asked for it */
        if (mailto_from) {
@@ -1555,6 +1557,7 @@ static Compose *compose_generic_reply(MsgInfo *msginfo,
        cm_return_val_if_fail(account != NULL, NULL);
 
        compose = compose_create(account, msginfo->folder, COMPOSE_REPLY, FALSE);
+       compose_apply_folder_privacy_settings(compose, msginfo->folder);
 
        compose->updating = TRUE;
 
@@ -1740,6 +1743,7 @@ Compose *compose_forward(PrefsAccount *account, MsgInfo *msginfo,
        else
                mode = COMPOSE_FORWARD;
        compose = compose_create(account, msginfo->folder, mode, batch);
+       compose_apply_folder_privacy_settings(compose, msginfo->folder);
 
        compose->updating = TRUE;
        compose->fwdinfo = procmsg_msginfo_get_full_info(msginfo);
@@ -1911,7 +1915,7 @@ Compose *compose_forward(PrefsAccount *account, MsgInfo *msginfo,
 
        hooks_invoke(COMPOSE_CREATED_HOOKLIST, compose);
 
-        return compose;
+       return compose;
 }
 
 #undef INSERT_FW_HEADER
@@ -1955,6 +1959,7 @@ static Compose *compose_forward_multiple(PrefsAccount *account, GSList *msginfo_
        }
 
        compose = compose_create(account, ((MsgInfo *)msginfo_list->data)->folder, COMPOSE_FORWARD, FALSE);
+       compose_apply_folder_privacy_settings(compose, ((MsgInfo *)msginfo_list->data)->folder);
 
        compose->updating = TRUE;
 
@@ -2364,6 +2369,7 @@ Compose *compose_reedit(MsgInfo *msginfo, gboolean batch)
        } else {
                compose_activate_privacy_system(compose, account, FALSE);
        }
+       compose_apply_folder_privacy_settings(compose, msginfo->folder);
 
        compose->targetinfo = procmsg_msginfo_copy(msginfo);
        compose->targetinfo->tags = g_slist_copy(msginfo->tags);
@@ -2490,6 +2496,7 @@ Compose *compose_redirect(PrefsAccount *account, MsgInfo *msginfo,
        cm_return_val_if_fail(account != NULL, NULL);
 
        compose = compose_create(account, msginfo->folder, COMPOSE_REDIRECT, batch);
+       compose_apply_folder_privacy_settings(compose, msginfo->folder);
 
        compose->updating = TRUE;
 
@@ -8310,8 +8317,8 @@ static Compose *compose_create(PrefsAccount *account,
 
        /* Privacy Systems menu */
        compose_update_privacy_systems_menu(compose);
-
        compose_activate_privacy_system(compose, account, TRUE);
+
        toolbar_set_style(compose->toolbar->toolbar, compose->handlebox, prefs_common.toolbar_style);
        if (batch) {
                gtk_widget_realize(window);
@@ -11527,6 +11534,20 @@ static void compose_activate_privacy_system(Compose *compose, PrefsAccount *acco
        compose_update_privacy_system_menu_item(compose, warn);
 }
 
+static void compose_apply_folder_privacy_settings(Compose *compose, FolderItem *folder_item)
+{
+       if (folder_item != NULL) {
+               if (folder_item->prefs->always_sign != SIGN_OR_ENCRYPT_DEFAULT) {
+                       compose_use_signing(compose,
+                               (folder_item->prefs->always_sign == SIGN_OR_ENCRYPT_ALWAYS) ? TRUE : FALSE);
+               }
+               if (folder_item->prefs->always_encrypt != SIGN_OR_ENCRYPT_DEFAULT) {
+                       compose_use_encryption(compose,
+                               (folder_item->prefs->always_encrypt == SIGN_OR_ENCRYPT_ALWAYS) ? TRUE : FALSE);
+               }
+       }
+}
+
 static void compose_toggle_ruler_cb(GtkToggleAction *action, gpointer data)
 {
        Compose *compose = (Compose *)data;
index d65423b..874f18d 100644 (file)
@@ -77,6 +77,10 @@ static PrefParam param[] = {
        {"default_alt_dictionary", NULL, &tmp_prefs.default_alt_dictionary, P_STRING,
         NULL, NULL, NULL},
 #endif  
+       {"always_sign", "0", &tmp_prefs.always_sign, P_ENUM,
+        NULL, NULL, NULL},
+       {"always_encrypt", "0", &tmp_prefs.always_encrypt, P_ENUM,
+        NULL, NULL, NULL},
        {"save_copy_to_folder", NULL, &tmp_prefs.save_copy_to_folder, P_BOOL,
         NULL, NULL, NULL},
        {"folder_color", "", &tmp_prefs.color, P_INT,
@@ -198,6 +202,8 @@ static FolderItemPrefs *folder_item_prefs_clear(FolderItemPrefs *prefs)
        prefs->enable_default_alt_dictionary = FALSE;
        prefs->default_alt_dictionary = NULL;
 #endif
+       prefs->always_sign = SIGN_OR_ENCRYPT_DEFAULT;
+       prefs->always_encrypt = SIGN_OR_ENCRYPT_DEFAULT;
        prefs->save_copy_to_folder = FALSE;
        prefs->color = 0;
 
@@ -305,6 +311,8 @@ void folder_item_prefs_copy_prefs(FolderItem * src, FolderItem * dest)
        tmp_prefs.enable_default_alt_dictionary = src->prefs->enable_default_alt_dictionary;
        tmp_prefs.default_alt_dictionary        = g_strdup(src->prefs->default_alt_dictionary);
 #endif
+       tmp_prefs.always_sign           = src->prefs->always_sign;
+       tmp_prefs.always_encrypt    = src->prefs->always_encrypt;
        tmp_prefs.save_copy_to_folder           = src->prefs->save_copy_to_folder;
        tmp_prefs.color                         = src->prefs->color;
 
@@ -333,5 +341,4 @@ void folder_item_prefs_copy_prefs(FolderItem * src, FolderItem * dest)
        dest->hide_read_threads = src->hide_read_threads;
        dest->sort_key  = src->sort_key;
        dest->sort_type = src->sort_type;
-
 }
index 44e4998..aa649c4 100644 (file)
@@ -31,12 +31,17 @@ typedef enum {
        HTML_PROMOTE_NEVER,
        HTML_PROMOTE_ALWAYS
 } HTMLPromoteType;
+typedef enum {
+       SIGN_OR_ENCRYPT_DEFAULT=0,
+       SIGN_OR_ENCRYPT_NEVER,
+       SIGN_OR_ENCRYPT_ALWAYS
+} SignOrEncryptType;
 
 struct _FolderItemPrefs {
        gchar * directory;
 
-        int enable_processing; /* at start-up */
-        int enable_processing_when_opening;
+       int enable_processing; /* at start-up */
+       int enable_processing_when_opening;
        GSList * processing;
 
        int newmailcheck;
@@ -67,7 +72,8 @@ struct _FolderItemPrefs {
        gchar *default_dictionary;
        gboolean enable_default_alt_dictionary;
        gchar *default_alt_dictionary;
-
+       SignOrEncryptType always_sign;
+       SignOrEncryptType always_encrypt;
        gboolean save_copy_to_folder;
        guint color;
 
index d05802a..aca5b7d 100644 (file)
@@ -134,6 +134,8 @@ struct _FolderItemComposePage
        GtkWidget *combo_default_dictionary;
        GtkWidget *combo_default_alt_dictionary;
 #endif
+       GtkWidget *always_sign;
+       GtkWidget *always_encrypt;
 
        /* apply to sub folders */
        GtkWidget *request_return_receipt_rec_checkbtn;
@@ -148,6 +150,8 @@ struct _FolderItemComposePage
        GtkWidget *default_dictionary_rec_checkbtn;
        GtkWidget *default_alt_dictionary_rec_checkbtn;
 #endif
+       GtkWidget *always_sign_rec_checkbtn;
+       GtkWidget *always_encrypt_rec_checkbtn;
 };
 
 struct _FolderItemTemplatesPage
@@ -664,7 +668,7 @@ static void prefs_folder_item_general_destroy_widget_func(PrefsPage *page_)
 
 /** \brief  Save the prefs in page to folder.
  *
- *  If the folder is not the one  specified in page->item, then only those properties 
+ *  If the folder is not the one specified in page->item, then only those properties 
  *  that have the relevant 'apply to sub folders' button checked are saved
  */
 static void general_save_folder_prefs(FolderItem *folder, FolderItemGeneralPage *page)
@@ -818,6 +822,7 @@ static void prefs_folder_item_compose_create_widget_func(PrefsPage * page_,
        gchar *tr = NULL;
 
        GtkWidget *table;
+       GtkWidget *hbox;
        GtkWidget *label;
        
        GtkWidget *no_save_warning = NULL;
@@ -846,6 +851,10 @@ static void prefs_folder_item_compose_create_widget_func(PrefsPage * page_,
        GtkWidget *default_alt_dictionary_rec_checkbtn = NULL;
        gchar *dictionary;
 #endif
+       GtkWidget *always_sign;
+       GtkListStore *always_sign_menu;
+       GtkWidget *always_encrypt;
+       GtkListStore *always_encrypt_menu;
        GtkWidget *request_return_receipt_rec_checkbtn = NULL;
        GtkWidget *save_copy_to_folder_rec_checkbtn = NULL;
        GtkWidget *default_to_rec_checkbtn = NULL;
@@ -854,6 +863,8 @@ static void prefs_folder_item_compose_create_widget_func(PrefsPage * page_,
        GtkWidget *default_bcc_rec_checkbtn = NULL;
        GtkWidget *default_replyto_rec_checkbtn = NULL;
        GtkWidget *default_account_rec_checkbtn = NULL;
+       GtkWidget *always_sign_rec_checkbtn = NULL;
+       GtkWidget *always_encrypt_rec_checkbtn = NULL;
 
        GList *cur_ac;
        GList *account_list;
@@ -1133,7 +1144,7 @@ static void prefs_folder_item_compose_create_widget_func(PrefsPage * page_,
        
        rowcount++;
 
-       /* Default dictionary */
+       /* Default alternate dictionary */
        checkbtn_enable_default_alt_dictionary = gtk_check_button_new_with_label(_("Default alternate dictionary"));
        gtk_table_attach(GTK_TABLE(table), checkbtn_enable_default_alt_dictionary, 0, 1,
                         rowcount, rowcount + 1, GTK_SHRINK | GTK_FILL, GTK_SHRINK, 0, 0);
@@ -1168,6 +1179,70 @@ static void prefs_folder_item_compose_create_widget_func(PrefsPage * page_,
        rowcount++;
 #endif
 
+       /* PGP sign? */
+       hbox = gtk_hbox_new (FALSE, 2);
+       gtk_widget_show (hbox);
+       gtk_table_attach (GTK_TABLE(table), hbox, 0, 2,
+                       rowcount, rowcount+1, GTK_FILL, GTK_FILL, 0, 0);
+
+       label = gtk_label_new(_("Always sign messages"));
+       gtk_widget_show (label);
+       gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+       always_sign = gtkut_sc_combobox_create (NULL, FALSE);
+       gtk_widget_show (always_sign);
+       gtk_box_pack_start (GTK_BOX(hbox), always_sign, FALSE, FALSE, 0);
+
+       always_sign_menu = GTK_LIST_STORE(gtk_combo_box_get_model(
+                               GTK_COMBO_BOX(always_sign)));
+       COMBOBOX_ADD (always_sign_menu, _("Default"), SIGN_OR_ENCRYPT_DEFAULT);
+       COMBOBOX_ADD (always_sign_menu, _("No"), SIGN_OR_ENCRYPT_NEVER);
+       COMBOBOX_ADD (always_sign_menu, _("Yes"), SIGN_OR_ENCRYPT_ALWAYS);
+
+       combobox_select_by_data(GTK_COMBO_BOX(always_sign),
+                       item->prefs->always_sign);
+
+       CLAWS_SET_TIP(hbox, _("\"Default\" will follow the applicable account preference"));
+
+       always_sign_rec_checkbtn = gtk_check_button_new();
+       gtk_widget_show (always_sign_rec_checkbtn);
+       gtk_table_attach(GTK_TABLE(table), always_sign_rec_checkbtn, 2, 3, 
+                        rowcount, rowcount + 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
+
+       rowcount++;
+
+       /* PGP encrypt? */
+       hbox = gtk_hbox_new (FALSE, 2);
+       gtk_widget_show (hbox);
+       gtk_table_attach (GTK_TABLE(table), hbox, 0, 2,
+                       rowcount, rowcount+1, GTK_FILL, GTK_FILL, 0, 0);
+
+       label = gtk_label_new(_("Always encrypt messages"));
+       gtk_widget_show (label);
+       gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+       always_encrypt = gtkut_sc_combobox_create (NULL, FALSE);
+       gtk_widget_show (always_encrypt);
+       gtk_box_pack_start (GTK_BOX(hbox), always_encrypt, FALSE, FALSE, 0);
+
+       always_encrypt_menu = GTK_LIST_STORE(gtk_combo_box_get_model(
+                               GTK_COMBO_BOX(always_encrypt)));
+       COMBOBOX_ADD (always_encrypt_menu, _("Default"), SIGN_OR_ENCRYPT_DEFAULT);
+       COMBOBOX_ADD (always_encrypt_menu, _("No"), SIGN_OR_ENCRYPT_NEVER);
+       COMBOBOX_ADD (always_encrypt_menu, _("Yes"), SIGN_OR_ENCRYPT_ALWAYS);
+
+       combobox_select_by_data(GTK_COMBO_BOX(always_encrypt),
+                       item->prefs->always_encrypt);
+
+       CLAWS_SET_TIP(hbox, _("\"Default\" will follow the applicable account preference"));
+
+       always_encrypt_rec_checkbtn = gtk_check_button_new();
+       gtk_widget_show (always_encrypt_rec_checkbtn);
+       gtk_table_attach(GTK_TABLE(table), always_encrypt_rec_checkbtn, 2, 3, 
+                        rowcount, rowcount + 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
+
+       rowcount++;
+
        gtk_widget_show_all(table);
 
        page->window = GTK_WIDGET(window);
@@ -1193,6 +1268,8 @@ static void prefs_folder_item_compose_create_widget_func(PrefsPage * page_,
        page->checkbtn_enable_default_alt_dictionary = checkbtn_enable_default_alt_dictionary;
        page->combo_default_alt_dictionary = combo_default_alt_dictionary;
 #endif
+       page->always_sign = always_sign;
+       page->always_encrypt = always_encrypt;
 
        page->request_return_receipt_rec_checkbtn = request_return_receipt_rec_checkbtn;
        page->save_copy_to_folder_rec_checkbtn    = save_copy_to_folder_rec_checkbtn;
@@ -1206,6 +1283,8 @@ static void prefs_folder_item_compose_create_widget_func(PrefsPage * page_,
        page->default_dictionary_rec_checkbtn = default_dictionary_rec_checkbtn;
        page->default_alt_dictionary_rec_checkbtn = default_alt_dictionary_rec_checkbtn;
 #endif
+       page->always_sign_rec_checkbtn = always_sign_rec_checkbtn;
+       page->always_encrypt_rec_checkbtn = always_encrypt_rec_checkbtn;
 
        page->page.widget = table;
 }
@@ -1332,6 +1411,14 @@ static void compose_save_folder_prefs(FolderItem *folder, FolderItemComposePage
                                      GTK_COMBO_BOX(page->combo_default_alt_dictionary)));
        }
 #endif
+       if (all || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->always_sign_rec_checkbtn))) {
+               prefs->always_sign = 
+                               combobox_get_active_data(GTK_COMBO_BOX(page->always_sign));
+       }
+       if (all || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->always_encrypt_rec_checkbtn))) {
+               prefs->always_encrypt = 
+                               combobox_get_active_data(GTK_COMBO_BOX(page->always_encrypt));
+       }
 
        folder_item_prefs_save_config(folder);
 }      
@@ -1361,6 +1448,8 @@ static gboolean compose_save_recurse_func(GNode *node, gpointer data)
              gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->default_dictionary_rec_checkbtn)) ||
              gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->default_alt_dictionary_rec_checkbtn)) ||
 #endif
+             gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->always_sign_rec_checkbtn)) ||
+             gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->always_encrypt_rec_checkbtn)) ||
              gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->default_reply_to_rec_checkbtn))
                        ))
                return TRUE;
@@ -1370,6 +1459,8 @@ static gboolean compose_save_recurse_func(GNode *node, gpointer data)
              || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->default_dictionary_rec_checkbtn))
              || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->default_alt_dictionary_rec_checkbtn))
 #endif
+             || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->always_sign_rec_checkbtn))
+             || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->always_encrypt_rec_checkbtn))
                    ))
                return TRUE;
        else