diff options
Diffstat (limited to 'smime/gui/certificate-manager.c')
-rw-r--r-- | smime/gui/certificate-manager.c | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/smime/gui/certificate-manager.c b/smime/gui/certificate-manager.c index 1f1bbb9f13..eb3a08bf84 100644 --- a/smime/gui/certificate-manager.c +++ b/smime/gui/certificate-manager.c @@ -131,7 +131,6 @@ static void import_your (GtkWidget *widget, CertificateManagerData *cfm) { GtkWidget *filesel; - const char *filename; GtkFileFilter* filter; @@ -145,6 +144,7 @@ import_your (GtkWidget *widget, CertificateManagerData *cfm) filter = gtk_file_filter_new(); gtk_file_filter_set_name (filter, _("All PKCS12 files")); + gtk_file_filter_add_mime_type (filter, "application/x-x509-user-cert"); gtk_file_filter_add_mime_type (filter, "application/x-pkcs12"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (filesel), filter); @@ -154,7 +154,10 @@ import_your (GtkWidget *widget, CertificateManagerData *cfm) gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (filesel), filter); if (GTK_RESPONSE_OK == gtk_dialog_run (GTK_DIALOG (filesel))) { - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filesel)); + char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filesel)); + + /* destroy dialog to get rid of it in the GUI */ + gtk_widget_destroy (filesel); if (e_cert_db_import_pkcs12_file (e_cert_db_peek (), filename, NULL /* XXX */)) { @@ -164,9 +167,10 @@ import_your (GtkWidget *widget, CertificateManagerData *cfm) load_certs (cfm, E_CERT_USER, add_user_cert); gtk_tree_view_expand_all (GTK_TREE_VIEW (cfm->yourcerts_treeview)); } - } - gtk_widget_destroy (filesel); + g_free (filename); + } else + gtk_widget_destroy (filesel); } static void @@ -374,7 +378,6 @@ static void import_contact (GtkWidget *widget, CertificateManagerData *cfm) { GtkWidget *filesel; - const char *filename; GtkFileFilter *filter; @@ -389,6 +392,7 @@ import_contact (GtkWidget *widget, CertificateManagerData *cfm) filter = gtk_file_filter_new(); gtk_file_filter_set_name (filter, _("All email certificate files")); gtk_file_filter_add_mime_type (filter, "application/x-x509-email-cert"); + gtk_file_filter_add_mime_type (filter, "application/x-x509-ca-cert"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (filesel), filter); filter = gtk_file_filter_new (); @@ -397,7 +401,10 @@ import_contact (GtkWidget *widget, CertificateManagerData *cfm) gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (filesel), filter); if (GTK_RESPONSE_OK == gtk_dialog_run (GTK_DIALOG (filesel))) { - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filesel)); + char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filesel)); + + /* destroy dialog to get rid of it in the GUI */ + gtk_widget_destroy (filesel); if (e_cert_db_import_certs_from_file (e_cert_db_peek (), filename, @@ -410,9 +417,10 @@ import_contact (GtkWidget *widget, CertificateManagerData *cfm) load_certs (cfm, E_CERT_CONTACT, add_contact_cert); gtk_tree_view_expand_all (GTK_TREE_VIEW (cfm->contactcerts_treeview)); } - } - gtk_widget_destroy (filesel); + g_free (filename); + } else + gtk_widget_destroy (filesel); } static void @@ -598,7 +606,6 @@ static void import_ca (GtkWidget *widget, CertificateManagerData *cfm) { GtkWidget *filesel; - const char *filename; GtkFileFilter *filter; @@ -621,7 +628,10 @@ import_ca (GtkWidget *widget, CertificateManagerData *cfm) gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (filesel), filter); if (GTK_RESPONSE_OK == gtk_dialog_run (GTK_DIALOG (filesel))) { - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filesel)); + char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filesel)); + + /* destroy dialog to get rid of it in the GUI */ + gtk_widget_destroy (filesel); if (e_cert_db_import_certs_from_file (e_cert_db_peek (), filename, @@ -633,9 +643,10 @@ import_ca (GtkWidget *widget, CertificateManagerData *cfm) unload_certs (cfm, E_CERT_CA); load_certs (cfm, E_CERT_CA, add_ca_cert); } - } - gtk_widget_destroy (filesel); + g_free (filename); + } else + gtk_widget_destroy (filesel); } static void @@ -953,7 +964,10 @@ load_certs (CertificateManagerData *cfm, !CERT_LIST_END(node, certList); node = CERT_LIST_NEXT(node)) { ECert *cert = e_cert_new ((CERTCertificate*)node->cert); - if (e_cert_get_cert_type(cert) == type) { + ECertType ct = e_cert_get_cert_type (cert); + + /* show everything else in a contact tab */ + if (ct == type || (type == E_CERT_CONTACT && ct != E_CERT_CA && ct != E_CERT_USER)) { add_cert (cfm, cert); } } |