diff -r d7f8a016cb22 -r 681ca041d42b pidgin/gtkcertmgr.c --- a/pidgin/gtkcertmgr.c Fri Dec 23 02:13:20 2011 +0000 +++ b/pidgin/gtkcertmgr.c Fri Dec 23 03:59:39 2011 +0000 @@ -40,6 +40,12 @@ #include "gtkcertmgr.h" +#ifdef ENABLE_GCR +#define GCR_API_SUBJECT_TO_CHANGE +#include +#include +#endif + /***************************************************************************** * X.509 tls_peers management interface * *****************************************************************************/ @@ -310,6 +316,13 @@ GtkTreeModel *model; gchar *id; PurpleCertificate *crt; +#ifdef ENABLE_GCR + GByteArray *der; + GcrCertificate *gcrt; + char *title; + GtkWidget *dialog; + GcrCertificateBasicsWidget *cert_widget; +#endif /* See if things are selected */ if (!gtk_tree_selection_get_selected(select, &model, &iter)) { @@ -325,11 +338,38 @@ crt = purple_certificate_pool_retrieve(tpm_dat->tls_peers, id); g_return_if_fail(crt); +#ifdef ENABLE_GCR + der = purple_certificate_get_der_data(crt); + g_return_if_fail(der); + + gcrt = gcr_simple_certificate_new(der->data, der->len); + g_return_if_fail(gcrt); + + /* Fire the notification */ + title = g_strdup_printf(_("Certificate Information for %s"), id); + dialog = gtk_dialog_new_with_buttons(title, + NULL, + 0, + GTK_STOCK_OK, + GTK_RESPONSE_ACCEPT, + NULL); + cert_widget = gcr_certificate_basics_widget_new(gcrt); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + GTK_WIDGET(cert_widget), TRUE, TRUE, 0); + g_signal_connect_swapped(dialog, "response", + G_CALLBACK(gtk_widget_destroy), + dialog); + gtk_widget_show_all(dialog); + + g_byte_array_free(der, TRUE); + g_object_unref(G_OBJECT(gcrt)); +#else /* Fire the notification */ purple_certificate_display_x509(crt); g_free(id); purple_certificate_destroy(crt); +#endif } static void