aboutsummaryrefslogtreecommitdiffstats
path: root/smime/gui
diff options
context:
space:
mode:
Diffstat (limited to 'smime/gui')
-rw-r--r--smime/gui/ca-trust-dialog.c14
-rw-r--r--smime/gui/ca-trust-dialog.h1
-rw-r--r--smime/gui/certificate-manager.c27
3 files changed, 38 insertions, 4 deletions
diff --git a/smime/gui/ca-trust-dialog.c b/smime/gui/ca-trust-dialog.c
index 2e97653601..b59e189b9e 100644
--- a/smime/gui/ca-trust-dialog.c
+++ b/smime/gui/ca-trust-dialog.c
@@ -99,6 +99,20 @@ ca_trust_dialog_show (ECert *cert, gboolean importing)
}
void
+ca_trust_dialog_set_trust (GtkWidget *widget, gboolean ssl, gboolean email, gboolean objsign)
+{
+ CATrustDialogData *ctd_data;
+
+ ctd_data = g_object_get_data (G_OBJECT (widget), "CATrustDialogData");
+ if (!ctd_data)
+ return;
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ctd_data->ssl_checkbutton), ssl);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ctd_data->email_checkbutton), email);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ctd_data->objsign_checkbutton), objsign);
+}
+
+void
ca_trust_dialog_get_trust (GtkWidget *widget, gboolean *ssl, gboolean *email, gboolean *objsign)
{
CATrustDialogData *ctd_data;
diff --git a/smime/gui/ca-trust-dialog.h b/smime/gui/ca-trust-dialog.h
index e15d98170a..8345da2901 100644
--- a/smime/gui/ca-trust-dialog.h
+++ b/smime/gui/ca-trust-dialog.h
@@ -28,6 +28,7 @@
GtkWidget* ca_trust_dialog_show (ECert *cert, gboolean importing);
+void ca_trust_dialog_set_trust (GtkWidget *widget, gboolean ssl, gboolean email, gboolean objsign);
void ca_trust_dialog_get_trust (GtkWidget *widget, gboolean *ssl, gboolean *email, gboolean *objsign);
#endif /* _CA_TRUST_DIALOG_H_ */
diff --git a/smime/gui/certificate-manager.c b/smime/gui/certificate-manager.c
index a59f8a0d96..f291fffea4 100644
--- a/smime/gui/certificate-manager.c
+++ b/smime/gui/certificate-manager.c
@@ -487,10 +487,29 @@ edit_ca (GtkWidget *widget, CertificateManagerData *cfm)
if (cert) {
GtkWidget *dialog = ca_trust_dialog_show (cert, FALSE);
-
- gtk_dialog_run (GTK_DIALOG (dialog));
-
- /* XXX more stuff here surely */
+ CERTCertificate *icert = e_cert_get_internal_cert (cert);
+
+ ca_trust_dialog_set_trust (dialog,
+ e_cert_trust_has_trusted_ca (icert->trust, TRUE, FALSE, FALSE),
+ e_cert_trust_has_trusted_ca (icert->trust, FALSE, TRUE, FALSE),
+ e_cert_trust_has_trusted_ca (icert->trust, FALSE, FALSE, TRUE));
+
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) {
+ gboolean trust_ssl, trust_email, trust_objsign;
+ CERTCertTrust trust;
+
+ ca_trust_dialog_get_trust (dialog,
+ &trust_ssl, &trust_email, &trust_objsign);
+
+ e_cert_trust_init (&trust);
+ e_cert_trust_set_valid_ca (&trust);
+ e_cert_trust_add_ca_trust (&trust,
+ trust_ssl,
+ trust_email,
+ trust_objsign);
+
+ CERT_ChangeCertTrust (e_cert_db_peek (), icert, &trust);
+ }
gtk_widget_destroy (dialog);
}