/** * client: ignored * id: ignored * entry: used for validation only * sctx: The context to work with * * Refreshes the sources generated from the keyservers * **/ static void refresh_keyservers (GConfClient *client, guint id, GConfEntry *entry, SeahorseContext *sctx) { #ifdef WITH_KEYSERVER #ifdef WITH_PGP SeahorseServerSource *ssrc; GSList *keyservers, *l; GHashTable *check; const gchar *uri; if (!sctx->pv->auto_sources) return; if (entry && !g_str_equal (KEYSERVER_KEY, gconf_entry_get_key (entry))) return; /* Make a light copy of the auto_source table */ check = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_foreach (sctx->pv->auto_sources, (GHFunc)auto_source_to_hash, check); /* Load and strip names from keyserver list */ keyservers = seahorse_servers_get_uris (); for (l = keyservers; l; l = g_slist_next (l)) { uri = (const gchar*)(l->data); /* If we don't have a keysource then add it */ if (!g_hash_table_lookup (sctx->pv->auto_sources, uri)) { ssrc = seahorse_server_source_new (uri); if (ssrc != NULL) { seahorse_context_take_source (sctx, SEAHORSE_SOURCE (ssrc)); g_hash_table_replace (sctx->pv->auto_sources, g_strdup (uri), ssrc); } } /* Mark this one as present */ g_hash_table_remove (check, uri); } /* Now remove any extras */ g_hash_table_foreach (check, (GHFunc)auto_source_remove, sctx); g_hash_table_destroy (check); seahorse_util_string_slist_free (keyservers); #endif /* WITH_PGP */ #endif /* WITH_KEYSERVER */ }
/* Perform keyserver page initialization */ static void setup_keyservers (SeahorseWidget *swidget) { GtkTreeView *treeview; SeahorseKeyserverControl *skc; GtkTreeModel *model; GtkTreeSelection *selection; GtkWidget *widget; gchar **keyservers; keyservers = seahorse_servers_get_uris (); populate_keyservers (swidget, keyservers); g_strfreev (keyservers); treeview = GTK_TREE_VIEW (seahorse_widget_get_widget (swidget, "keyservers")); model = gtk_tree_view_get_model (treeview); g_signal_connect (model, "row-changed", G_CALLBACK (keyserver_row_changed), swidget); g_signal_connect (model, "row-deleted", G_CALLBACK (keyserver_row_deleted), swidget); selection = gtk_tree_view_get_selection (treeview); gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); g_signal_connect (selection, "changed", G_CALLBACK (keyserver_sel_changed), swidget); gtk_builder_connect_signals (swidget->gtkbuilder, swidget); g_signal_connect_object (seahorse_application_pgp_settings (NULL), "changed::keyserver", G_CALLBACK (on_settings_keyserver_changed), swidget, 0); widget = seahorse_widget_get_widget (swidget, "keyserver-publish"); g_return_if_fail (widget != NULL); skc = seahorse_keyserver_control_new ("server-publish-to", _("None: Don’t publish keys")); gtk_container_add (GTK_CONTAINER (widget), GTK_WIDGET (skc)); gtk_widget_show_all (widget); widget = seahorse_widget_get_widget (swidget, "keyserver-publish-to-label"); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), GTK_WIDGET (skc)); widget = seahorse_widget_get_widget (swidget, "auto_retrieve"); g_return_if_fail (widget != NULL); g_settings_bind (seahorse_application_settings (NULL), "server-auto-retrieve", widget, "active", G_SETTINGS_BIND_DEFAULT); widget = seahorse_widget_get_widget (swidget, "auto_sync"); g_return_if_fail (widget != NULL); g_settings_bind (seahorse_application_settings (NULL), "server-auto-publish", widget, "active", G_SETTINGS_BIND_DEFAULT); }