diff options
Diffstat (limited to 'smime/gui')
-rw-r--r-- | smime/gui/ca-trust-dialog.c | 14 | ||||
-rw-r--r-- | smime/gui/ca-trust-dialog.h | 1 | ||||
-rw-r--r-- | smime/gui/certificate-manager.c | 27 |
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); } |