diff pidgin/gtkcertmgr.c @ 19053:95a8469cd1e3

- tls_peers certmgr now responds to certificate-stored, certificate-deleted signals
author William Ehlhardt <williamehlhardt@gmail.com>
date Fri, 27 Jul 2007 08:34:40 +0000
parents 78f185af7952
children ffeb39523eb6
line wrap: on
line diff
--- a/pidgin/gtkcertmgr.c	Fri Jul 27 08:24:25 2007 +0000
+++ b/pidgin/gtkcertmgr.c	Fri Jul 27 08:34:40 2007 +0000
@@ -50,6 +50,7 @@
 	GtkWidget *exportbutton;
 	GtkWidget *infobutton;
 	GtkWidget *deletebutton;
+	PurpleCertificatePool *tls_peers;
 } tls_peers_mgmt_data;
 
 tls_peers_mgmt_data *tpm_dat = NULL;
@@ -68,6 +69,7 @@
 	purple_debug_info("certmgr",
 			  "tls peers self-destructs\n");
 
+	purple_signals_disconnect_by_handle(tpm_dat);
 	g_free(tpm_dat); tpm_dat = NULL;
 }
 
@@ -103,6 +105,14 @@
 	purple_certificate_pool_destroy_idlist(idlist);
 }
 
+static void
+tls_peers_mgmt_mod_cb(PurpleCertificatePool *pool, const gchar *id, gpointer data)
+{
+	g_assert (pool == tpm_dat->tls_peers);
+
+	tls_peers_mgmt_repopulate_list();
+}
+
 static GtkWidget *
 tls_peers_mgmt_build(void)
 {
@@ -204,6 +214,18 @@
 	gtk_widget_set_sensitive(infobutton, FALSE);
 	gtk_widget_set_sensitive(deletebutton, FALSE);
 
+	/* Bind us to the tls_peers pool */
+	tpm_dat->tls_peers = purple_certificate_find_pool("x509", "tls_peers");
+	
+	/**** libpurple signals ****/
+	/* Respond to certificate add/remove by just reloading everything */
+	purple_signal_connect(tpm_dat->tls_peers, "certificate-stored",
+			      tpm_dat, PURPLE_CALLBACK(tls_peers_mgmt_mod_cb),
+			      NULL);
+	purple_signal_connect(tpm_dat->tls_peers, "certificate-deleted",
+			      tpm_dat, PURPLE_CALLBACK(tls_peers_mgmt_mod_cb),
+			      NULL);
+	
 	return mgmt_widget;
 }