#include "config.h" #include "gcr/gcr.h" #include #include #include #include static void on_parser_parsed (GcrParser *parser, gpointer user_data) { GcrSimpleCollection *collection = user_data; GcrRenderer *renderer; renderer = gcr_renderer_create (gcr_parser_get_parsed_label (parser), gcr_parser_get_parsed_attributes (parser)); if (renderer) { gcr_simple_collection_add (collection, G_OBJECT (renderer)); g_object_unref (renderer); } } static void add_to_selector (GcrParser *parser, const gchar *path) { GError *err = NULL; guchar *data; gsize n_data; GBytes *bytes; if (!g_file_get_contents (path, (gchar**)&data, &n_data, NULL)) g_error ("couldn't read file: %s", path); bytes = g_bytes_new_take (data, n_data); if (!gcr_parser_parse_bytes (parser, bytes, &err)) g_error ("couldn't parse data: %s", err->message); g_bytes_unref (bytes); } int main (int argc, char *argv[]) { GcrCollection *collection; GcrComboSelector *selector; GtkDialog *dialog; GcrParser *parser; GObject *selected; int i; gtk_init (&argc, &argv); dialog = GTK_DIALOG (gtk_dialog_new ()); g_object_ref_sink (dialog); collection = gcr_simple_collection_new (); selector = gcr_combo_selector_new (collection); gtk_widget_show (GTK_WIDGET (selector)); gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (dialog)), GTK_WIDGET (selector)); gtk_window_set_default_size (GTK_WINDOW (dialog), 550, 400); gtk_container_set_border_width (GTK_CONTAINER (dialog), 20); parser = gcr_parser_new (); g_signal_connect (parser, "parsed", G_CALLBACK (on_parser_parsed), collection); if (argc == 1) { add_to_selector (parser, SRCDIR "/ui/fixtures/ca-certificates.crt"); } else { for (i = 1; i < argc; ++i) add_to_selector (parser, argv[i]); } g_object_unref (parser); g_object_unref (collection); gtk_dialog_run (dialog); selected = gcr_combo_selector_get_selected (selector); if (selected == NULL) { g_print ("nothing selected\n"); } else { gchar *label; g_object_get (selected, "label", &label, NULL); g_print ("selected: %s\n", label); } gtk_widget_destroy (GTK_WIDGET (dialog)); g_object_unref (dialog); return 0; }