Blame ui/frob-combo-selector.c

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