static void show_ui_dialog (CryptUIKeyset *keyset) { GtkWidget *dialog; GtkComboBox *combo; GtkTreeView *list; GtkContainer *box; CryptUIKeyStore *combo_store; CryptUIKeyStore *list_store; dialog = gtk_dialog_new_with_buttons ("CryptUI Test", NULL, GTK_DIALOG_MODAL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); box = GTK_CONTAINER (gtk_vbox_new (FALSE, 6)); gtk_container_set_border_width (box, 6); gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), GTK_WIDGET (box)); list_store = cryptui_key_store_new (keyset, TRUE, NULL); list = cryptui_key_list_new (list_store, CRYPTUI_KEY_LIST_CHECKS); gtk_container_add (box, GTK_WIDGET (list)); combo_store = cryptui_key_store_new (keyset, FALSE, "No Key Selected"); combo = cryptui_key_combo_new (combo_store); gtk_container_add (box, GTK_WIDGET (combo)); gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog)); g_object_unref (combo_store); g_object_unref (list_store); }
static gpgme_key_t prompt_signer () { gpgme_error_t gerr = 0; CryptUIKeyset *keyset; CryptUIKeyStore *ckstore; gpgme_key_t key = NULL; gpgme_ctx_t ctx = NULL; gchar *signer; gchar *id; guint count; GList *keys; keyset = cryptui_keyset_new ("openpgp", TRUE); ckstore = cryptui_key_store_new (keyset, TRUE, NULL); cryptui_key_store_set_filter (ckstore, signer_filter, NULL); count = cryptui_key_store_get_count (ckstore); if (count == 0) { cryptui_need_to_get_keys (); return NULL; } else if (count == 1) { keys = cryptui_key_store_get_all_keys (ckstore); signer = (gchar*) keys->data; g_list_free (keys); } else { signer = cryptui_prompt_signer (keyset, _("Choose Signer")); } if (signer) { id = cryptui_keyset_key_raw_keyid (keyset, signer); g_free (signer); gpgme_check_version (NULL); gerr = gpgme_engine_check_version (GPGME_PROTOCOL_OpenPGP); g_return_val_if_fail (gerr == 0, NULL); gerr = gpgme_new (&ctx); g_return_val_if_fail (gerr == 0, NULL); /* Load up the GPGME secret key */ gerr = gpgme_get_key (ctx, id, &key, 1); g_free (id); gpgme_release (ctx); if (gerr != 0) seahorse_util_handle_gpgme (gerr, _("Couldn't load keys")); } g_object_unref (ckstore); g_object_unref (keyset); return key; }