run vala
authorSam Hartman <hartmans@painless-security.com>
Tue, 21 Jun 2011 20:37:54 +0000 (16:37 -0400)
committerSam Hartman <hartmans@painless-security.com>
Tue, 21 Jun 2011 20:37:54 +0000 (16:37 -0400)
src/moonshot-add-dialog.c [new file with mode: 0644]
src/moonshot-custom-vbox.c [new file with mode: 0644]
src/moonshot-dbus-server.c [new file with mode: 0644]
src/moonshot-id.c [new file with mode: 0644]
src/moonshot-idcard-widget.c [new file with mode: 0644]
src/moonshot-identities-manager.c [new file with mode: 0644]
src/moonshot-identity-request.c [new file with mode: 0644]
src/moonshot-password-dialog.c [new file with mode: 0644]
src/moonshot-utils.c [new file with mode: 0644]
src/moonshot-window.c [new file with mode: 0644]
src_moonshot_vala.stamp [new file with mode: 0644]

diff --git a/src/moonshot-add-dialog.c b/src/moonshot-add-dialog.c
new file mode 100644 (file)
index 0000000..a02632b
--- /dev/null
@@ -0,0 +1,233 @@
+/* moonshot-add-dialog.c generated by valac 0.10.4, the Vala compiler
+ * generated from moonshot-add-dialog.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n-lib.h>
+#include <float.h>
+#include <math.h>
+#include <atk/atk.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define TYPE_ADD_IDENTITY_DIALOG (add_identity_dialog_get_type ())
+#define ADD_IDENTITY_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ADD_IDENTITY_DIALOG, AddIdentityDialog))
+#define ADD_IDENTITY_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ADD_IDENTITY_DIALOG, AddIdentityDialogClass))
+#define IS_ADD_IDENTITY_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ADD_IDENTITY_DIALOG))
+#define IS_ADD_IDENTITY_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ADD_IDENTITY_DIALOG))
+#define ADD_IDENTITY_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ADD_IDENTITY_DIALOG, AddIdentityDialogClass))
+
+typedef struct _AddIdentityDialog AddIdentityDialog;
+typedef struct _AddIdentityDialogClass AddIdentityDialogClass;
+typedef struct _AddIdentityDialogPrivate AddIdentityDialogPrivate;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+struct _AddIdentityDialog {
+       GtkDialog parent_instance;
+       AddIdentityDialogPrivate * priv;
+};
+
+struct _AddIdentityDialogClass {
+       GtkDialogClass parent_class;
+};
+
+struct _AddIdentityDialogPrivate {
+       GtkEntry* issuer_entry;
+       GtkEntry* username_entry;
+       GtkEntry* password_entry;
+};
+
+
+static gpointer add_identity_dialog_parent_class = NULL;
+
+GType add_identity_dialog_get_type (void) G_GNUC_CONST;
+#define ADD_IDENTITY_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_ADD_IDENTITY_DIALOG, AddIdentityDialogPrivate))
+enum  {
+       ADD_IDENTITY_DIALOG_DUMMY_PROPERTY,
+       ADD_IDENTITY_DIALOG_ISSUER,
+       ADD_IDENTITY_DIALOG_USERNAME,
+       ADD_IDENTITY_DIALOG_PASSWORD
+};
+AddIdentityDialog* add_identity_dialog_new (void);
+AddIdentityDialog* add_identity_dialog_construct (GType object_type);
+static void add_identity_dialog_set_atk_relation (AddIdentityDialog* self, GtkWidget* widget, GtkWidget* target_widget, AtkRelationType relationship);
+const char* add_identity_dialog_get_issuer (AddIdentityDialog* self);
+const char* add_identity_dialog_get_username (AddIdentityDialog* self);
+const char* add_identity_dialog_get_password (AddIdentityDialog* self);
+static void add_identity_dialog_finalize (GObject* obj);
+static void add_identity_dialog_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
+
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+AddIdentityDialog* add_identity_dialog_construct (GType object_type) {
+       AddIdentityDialog * self;
+       GtkWidget* content_area;
+       GtkLabel* issuer_label;
+       GtkEntry* _tmp0_;
+       GtkLabel* username_label;
+       GtkEntry* _tmp1_;
+       GtkLabel* password_label;
+       GtkEntry* _tmp2_;
+       GtkCheckButton* remember_checkbutton;
+       GtkTable* table;
+       GtkVBox* vbox;
+       self = g_object_newv (object_type, 0, NULL);
+       gtk_window_set_title ((GtkWindow*) self, _ ("Add ID Card"));
+       gtk_window_set_modal ((GtkWindow*) self, TRUE);
+       gtk_dialog_add_buttons ((GtkDialog*) self, _ ("Add ID Card"), GTK_RESPONSE_OK, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
+       content_area = _g_object_ref0 (gtk_dialog_get_content_area ((GtkDialog*) self));
+       gtk_box_set_spacing (GTK_BOX (content_area), 12);
+       issuer_label = g_object_ref_sink ((GtkLabel*) gtk_label_new (_ ("Issuer:")));
+       gtk_misc_set_alignment ((GtkMisc*) issuer_label, (float) 1, (float) 0.5);
+       self->priv->issuer_entry = (_tmp0_ = g_object_ref_sink ((GtkEntry*) gtk_entry_new ()), _g_object_unref0 (self->priv->issuer_entry), _tmp0_);
+       username_label = g_object_ref_sink ((GtkLabel*) gtk_label_new (_ ("Username:")));
+       gtk_misc_set_alignment ((GtkMisc*) username_label, (float) 1, (float) 0.5);
+       self->priv->username_entry = (_tmp1_ = g_object_ref_sink ((GtkEntry*) gtk_entry_new ()), _g_object_unref0 (self->priv->username_entry), _tmp1_);
+       password_label = g_object_ref_sink ((GtkLabel*) gtk_label_new (_ ("Password:")));
+       gtk_misc_set_alignment ((GtkMisc*) password_label, (float) 1, (float) 0.5);
+       self->priv->password_entry = (_tmp2_ = g_object_ref_sink ((GtkEntry*) gtk_entry_new ()), _g_object_unref0 (self->priv->password_entry), _tmp2_);
+       gtk_entry_set_invisible_char (self->priv->password_entry, (gunichar) '*');
+       gtk_entry_set_visibility (self->priv->password_entry, FALSE);
+       remember_checkbutton = g_object_ref_sink ((GtkCheckButton*) gtk_check_button_new_with_label (_ ("Remember password")));
+       add_identity_dialog_set_atk_relation (self, (GtkWidget*) issuer_label, (GtkWidget*) self->priv->issuer_entry, ATK_RELATION_LABEL_FOR);
+       add_identity_dialog_set_atk_relation (self, (GtkWidget*) username_label, (GtkWidget*) self->priv->username_entry, ATK_RELATION_LABEL_FOR);
+       add_identity_dialog_set_atk_relation (self, (GtkWidget*) self->priv->password_entry, (GtkWidget*) self->priv->password_entry, ATK_RELATION_LABEL_FOR);
+       table = g_object_ref_sink ((GtkTable*) gtk_table_new ((guint) 4, (guint) 4, FALSE));
+       gtk_table_set_col_spacings (table, (guint) 10);
+       gtk_table_set_row_spacings (table, (guint) 10);
+       gtk_table_attach_defaults (table, (GtkWidget*) issuer_label, (guint) 0, (guint) 1, (guint) 0, (guint) 1);
+       gtk_table_attach_defaults (table, (GtkWidget*) self->priv->issuer_entry, (guint) 1, (guint) 2, (guint) 0, (guint) 1);
+       gtk_table_attach_defaults (table, (GtkWidget*) username_label, (guint) 0, (guint) 1, (guint) 1, (guint) 2);
+       gtk_table_attach_defaults (table, (GtkWidget*) self->priv->username_entry, (guint) 1, (guint) 2, (guint) 1, (guint) 2);
+       gtk_table_attach_defaults (table, (GtkWidget*) password_label, (guint) 0, (guint) 1, (guint) 2, (guint) 3);
+       gtk_table_attach_defaults (table, (GtkWidget*) self->priv->password_entry, (guint) 1, (guint) 2, (guint) 2, (guint) 3);
+       gtk_table_attach_defaults (table, (GtkWidget*) remember_checkbutton, (guint) 1, (guint) 2, (guint) 3, (guint) 4);
+       vbox = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 0));
+       gtk_container_set_border_width ((GtkContainer*) vbox, (guint) 6);
+       gtk_box_pack_start ((GtkBox*) vbox, (GtkWidget*) table, FALSE, FALSE, (guint) 0);
+       gtk_container_add (GTK_CONTAINER (content_area), (GtkWidget*) vbox);
+       gtk_container_set_border_width ((GtkContainer*) self, (guint) 6);
+       gtk_window_set_resizable ((GtkWindow*) self, FALSE);
+       gtk_widget_show_all ((GtkWidget*) self);
+       _g_object_unref0 (vbox);
+       _g_object_unref0 (table);
+       _g_object_unref0 (remember_checkbutton);
+       _g_object_unref0 (password_label);
+       _g_object_unref0 (username_label);
+       _g_object_unref0 (issuer_label);
+       _g_object_unref0 (content_area);
+       return self;
+}
+
+
+AddIdentityDialog* add_identity_dialog_new (void) {
+       return add_identity_dialog_construct (TYPE_ADD_IDENTITY_DIALOG);
+}
+
+
+static void add_identity_dialog_set_atk_relation (AddIdentityDialog* self, GtkWidget* widget, GtkWidget* target_widget, AtkRelationType relationship) {
+       AtkObject* atk_widget;
+       AtkObject* atk_target_widget;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (widget != NULL);
+       g_return_if_fail (target_widget != NULL);
+       atk_widget = _g_object_ref0 (gtk_widget_get_accessible (widget));
+       atk_target_widget = _g_object_ref0 (gtk_widget_get_accessible (target_widget));
+       atk_object_add_relationship (atk_widget, relationship, atk_target_widget);
+       _g_object_unref0 (atk_target_widget);
+       _g_object_unref0 (atk_widget);
+}
+
+
+const char* add_identity_dialog_get_issuer (AddIdentityDialog* self) {
+       const char* result;
+       g_return_val_if_fail (self != NULL, NULL);
+       result = gtk_entry_get_text (self->priv->issuer_entry);
+       return result;
+}
+
+
+const char* add_identity_dialog_get_username (AddIdentityDialog* self) {
+       const char* result;
+       g_return_val_if_fail (self != NULL, NULL);
+       result = gtk_entry_get_text (self->priv->username_entry);
+       return result;
+}
+
+
+const char* add_identity_dialog_get_password (AddIdentityDialog* self) {
+       const char* result;
+       g_return_val_if_fail (self != NULL, NULL);
+       result = gtk_entry_get_text (self->priv->password_entry);
+       return result;
+}
+
+
+static void add_identity_dialog_class_init (AddIdentityDialogClass * klass) {
+       add_identity_dialog_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (AddIdentityDialogPrivate));
+       G_OBJECT_CLASS (klass)->get_property = add_identity_dialog_get_property;
+       G_OBJECT_CLASS (klass)->finalize = add_identity_dialog_finalize;
+       g_object_class_install_property (G_OBJECT_CLASS (klass), ADD_IDENTITY_DIALOG_ISSUER, g_param_spec_string ("issuer", "issuer", "issuer", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
+       g_object_class_install_property (G_OBJECT_CLASS (klass), ADD_IDENTITY_DIALOG_USERNAME, g_param_spec_string ("username", "username", "username", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
+       g_object_class_install_property (G_OBJECT_CLASS (klass), ADD_IDENTITY_DIALOG_PASSWORD, g_param_spec_string ("password", "password", "password", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
+}
+
+
+static void add_identity_dialog_instance_init (AddIdentityDialog * self) {
+       self->priv = ADD_IDENTITY_DIALOG_GET_PRIVATE (self);
+}
+
+
+static void add_identity_dialog_finalize (GObject* obj) {
+       AddIdentityDialog * self;
+       self = ADD_IDENTITY_DIALOG (obj);
+       _g_object_unref0 (self->priv->issuer_entry);
+       _g_object_unref0 (self->priv->username_entry);
+       _g_object_unref0 (self->priv->password_entry);
+       G_OBJECT_CLASS (add_identity_dialog_parent_class)->finalize (obj);
+}
+
+
+GType add_identity_dialog_get_type (void) {
+       static volatile gsize add_identity_dialog_type_id__volatile = 0;
+       if (g_once_init_enter (&add_identity_dialog_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (AddIdentityDialogClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) add_identity_dialog_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (AddIdentityDialog), 0, (GInstanceInitFunc) add_identity_dialog_instance_init, NULL };
+               GType add_identity_dialog_type_id;
+               add_identity_dialog_type_id = g_type_register_static (GTK_TYPE_DIALOG, "AddIdentityDialog", &g_define_type_info, 0);
+               g_once_init_leave (&add_identity_dialog_type_id__volatile, add_identity_dialog_type_id);
+       }
+       return add_identity_dialog_type_id__volatile;
+}
+
+
+static void add_identity_dialog_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
+       AddIdentityDialog * self;
+       self = ADD_IDENTITY_DIALOG (object);
+       switch (property_id) {
+               case ADD_IDENTITY_DIALOG_ISSUER:
+               g_value_set_string (value, add_identity_dialog_get_issuer (self));
+               break;
+               case ADD_IDENTITY_DIALOG_USERNAME:
+               g_value_set_string (value, add_identity_dialog_get_username (self));
+               break;
+               case ADD_IDENTITY_DIALOG_PASSWORD:
+               g_value_set_string (value, add_identity_dialog_get_password (self));
+               break;
+               default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+               break;
+       }
+}
+
+
+
+
diff --git a/src/moonshot-custom-vbox.c b/src/moonshot-custom-vbox.c
new file mode 100644 (file)
index 0000000..850ad0e
--- /dev/null
@@ -0,0 +1,208 @@
+/* moonshot-custom-vbox.c generated by valac 0.10.4, the Vala compiler
+ * generated from moonshot-custom-vbox.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+
+
+#define TYPE_CUSTOM_VBOX (custom_vbox_get_type ())
+#define CUSTOM_VBOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CUSTOM_VBOX, CustomVBox))
+#define CUSTOM_VBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CUSTOM_VBOX, CustomVBoxClass))
+#define IS_CUSTOM_VBOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CUSTOM_VBOX))
+#define IS_CUSTOM_VBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CUSTOM_VBOX))
+#define CUSTOM_VBOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CUSTOM_VBOX, CustomVBoxClass))
+
+typedef struct _CustomVBox CustomVBox;
+typedef struct _CustomVBoxClass CustomVBoxClass;
+typedef struct _CustomVBoxPrivate CustomVBoxPrivate;
+
+#define TYPE_ID_CARD_WIDGET (id_card_widget_get_type ())
+#define ID_CARD_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ID_CARD_WIDGET, IdCardWidget))
+#define ID_CARD_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ID_CARD_WIDGET, IdCardWidgetClass))
+#define IS_ID_CARD_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ID_CARD_WIDGET))
+#define IS_ID_CARD_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ID_CARD_WIDGET))
+#define ID_CARD_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ID_CARD_WIDGET, IdCardWidgetClass))
+
+typedef struct _IdCardWidget IdCardWidget;
+typedef struct _IdCardWidgetClass IdCardWidgetClass;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_list_free0(var) ((var == NULL) ? NULL : (var = (g_list_free (var), NULL)))
+
+struct _CustomVBox {
+       GtkVBox parent_instance;
+       CustomVBoxPrivate * priv;
+};
+
+struct _CustomVBoxClass {
+       GtkVBoxClass parent_class;
+};
+
+struct _CustomVBoxPrivate {
+       IdCardWidget* _current_idcard;
+};
+
+
+static gpointer custom_vbox_parent_class = NULL;
+
+GType custom_vbox_get_type (void) G_GNUC_CONST;
+GType id_card_widget_get_type (void) G_GNUC_CONST;
+#define CUSTOM_VBOX_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_CUSTOM_VBOX, CustomVBoxPrivate))
+enum  {
+       CUSTOM_VBOX_DUMMY_PROPERTY,
+       CUSTOM_VBOX_CURRENT_IDCARD
+};
+CustomVBox* custom_vbox_new (gboolean homogeneous, gint spacing);
+CustomVBox* custom_vbox_construct (GType object_type, gboolean homogeneous, gint spacing);
+void custom_vbox_receive_expanded_event (CustomVBox* self, IdCardWidget* id_card_widget);
+void id_card_widget_collapse (IdCardWidget* self);
+void custom_vbox_add_id_card_widget (CustomVBox* self, IdCardWidget* id_card_widget);
+void custom_vbox_remove_id_card_widget (CustomVBox* self, IdCardWidget* id_card_widget);
+IdCardWidget* custom_vbox_get_current_idcard (CustomVBox* self);
+void custom_vbox_set_current_idcard (CustomVBox* self, IdCardWidget* value);
+static void custom_vbox_finalize (GObject* obj);
+static void custom_vbox_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
+static void custom_vbox_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
+
+
+
+CustomVBox* custom_vbox_construct (GType object_type, gboolean homogeneous, gint spacing) {
+       CustomVBox * self;
+       self = g_object_newv (object_type, 0, NULL);
+       gtk_box_set_homogeneous ((GtkBox*) self, homogeneous);
+       gtk_box_set_spacing ((GtkBox*) self, spacing);
+       return self;
+}
+
+
+CustomVBox* custom_vbox_new (gboolean homogeneous, gint spacing) {
+       return custom_vbox_construct (TYPE_CUSTOM_VBOX, homogeneous, spacing);
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+void custom_vbox_receive_expanded_event (CustomVBox* self, IdCardWidget* id_card_widget) {
+       GList* list;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (id_card_widget != NULL);
+       list = gtk_container_get_children ((GtkContainer*) self);
+       {
+               GList* id_card_collection;
+               GList* id_card_it;
+               id_card_collection = list;
+               for (id_card_it = id_card_collection; id_card_it != NULL; id_card_it = id_card_it->next) {
+                       GtkWidget* id_card;
+                       id_card = _g_object_ref0 ((GtkWidget*) id_card_it->data);
+                       {
+                               if (id_card != GTK_WIDGET (id_card_widget)) {
+                                       id_card_widget_collapse (ID_CARD_WIDGET (id_card));
+                               }
+                               _g_object_unref0 (id_card);
+                       }
+               }
+       }
+       _g_list_free0 (list);
+}
+
+
+void custom_vbox_add_id_card_widget (CustomVBox* self, IdCardWidget* id_card_widget) {
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (id_card_widget != NULL);
+       gtk_box_pack_start ((GtkBox*) self, (GtkWidget*) id_card_widget, FALSE, FALSE, 0);
+}
+
+
+void custom_vbox_remove_id_card_widget (CustomVBox* self, IdCardWidget* id_card_widget) {
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (id_card_widget != NULL);
+       gtk_container_remove ((GtkContainer*) self, (GtkWidget*) id_card_widget);
+}
+
+
+IdCardWidget* custom_vbox_get_current_idcard (CustomVBox* self) {
+       IdCardWidget* result;
+       g_return_val_if_fail (self != NULL, NULL);
+       result = self->priv->_current_idcard;
+       return result;
+}
+
+
+void custom_vbox_set_current_idcard (CustomVBox* self, IdCardWidget* value) {
+       IdCardWidget* _tmp0_;
+       g_return_if_fail (self != NULL);
+       self->priv->_current_idcard = (_tmp0_ = _g_object_ref0 (value), _g_object_unref0 (self->priv->_current_idcard), _tmp0_);
+       g_object_notify ((GObject *) self, "current-idcard");
+}
+
+
+static void custom_vbox_class_init (CustomVBoxClass * klass) {
+       custom_vbox_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (CustomVBoxPrivate));
+       G_OBJECT_CLASS (klass)->get_property = custom_vbox_get_property;
+       G_OBJECT_CLASS (klass)->set_property = custom_vbox_set_property;
+       G_OBJECT_CLASS (klass)->finalize = custom_vbox_finalize;
+       g_object_class_install_property (G_OBJECT_CLASS (klass), CUSTOM_VBOX_CURRENT_IDCARD, g_param_spec_object ("current-idcard", "current-idcard", "current-idcard", TYPE_ID_CARD_WIDGET, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
+}
+
+
+static void custom_vbox_instance_init (CustomVBox * self) {
+       self->priv = CUSTOM_VBOX_GET_PRIVATE (self);
+       self->priv->_current_idcard = NULL;
+}
+
+
+static void custom_vbox_finalize (GObject* obj) {
+       CustomVBox * self;
+       self = CUSTOM_VBOX (obj);
+       _g_object_unref0 (self->priv->_current_idcard);
+       G_OBJECT_CLASS (custom_vbox_parent_class)->finalize (obj);
+}
+
+
+GType custom_vbox_get_type (void) {
+       static volatile gsize custom_vbox_type_id__volatile = 0;
+       if (g_once_init_enter (&custom_vbox_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (CustomVBoxClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) custom_vbox_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (CustomVBox), 0, (GInstanceInitFunc) custom_vbox_instance_init, NULL };
+               GType custom_vbox_type_id;
+               custom_vbox_type_id = g_type_register_static (GTK_TYPE_VBOX, "CustomVBox", &g_define_type_info, 0);
+               g_once_init_leave (&custom_vbox_type_id__volatile, custom_vbox_type_id);
+       }
+       return custom_vbox_type_id__volatile;
+}
+
+
+static void custom_vbox_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
+       CustomVBox * self;
+       self = CUSTOM_VBOX (object);
+       switch (property_id) {
+               case CUSTOM_VBOX_CURRENT_IDCARD:
+               g_value_set_object (value, custom_vbox_get_current_idcard (self));
+               break;
+               default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+               break;
+       }
+}
+
+
+static void custom_vbox_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
+       CustomVBox * self;
+       self = CUSTOM_VBOX (object);
+       switch (property_id) {
+               case CUSTOM_VBOX_CURRENT_IDCARD:
+               custom_vbox_set_current_idcard (self, g_value_get_object (value));
+               break;
+               default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+               break;
+       }
+}
+
+
+
+
diff --git a/src/moonshot-dbus-server.c b/src/moonshot-dbus-server.c
new file mode 100644 (file)
index 0000000..d78c8bd
--- /dev/null
@@ -0,0 +1,596 @@
+/* moonshot-dbus-server.c generated by valac 0.10.4, the Vala compiler
+ * generated from moonshot-dbus-server.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <gio/gio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
+
+
+#define TYPE_MOONSHOT_SERVER (moonshot_server_get_type ())
+#define MOONSHOT_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MOONSHOT_SERVER, MoonshotServer))
+#define MOONSHOT_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MOONSHOT_SERVER, MoonshotServerClass))
+#define IS_MOONSHOT_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MOONSHOT_SERVER))
+#define IS_MOONSHOT_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MOONSHOT_SERVER))
+#define MOONSHOT_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MOONSHOT_SERVER, MoonshotServerClass))
+
+typedef struct _MoonshotServer MoonshotServer;
+typedef struct _MoonshotServerClass MoonshotServerClass;
+typedef struct _MoonshotServerPrivate MoonshotServerPrivate;
+
+#define TYPE_MAIN_WINDOW (main_window_get_type ())
+#define MAIN_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MAIN_WINDOW, MainWindow))
+#define MAIN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MAIN_WINDOW, MainWindowClass))
+#define IS_MAIN_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MAIN_WINDOW))
+#define IS_MAIN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MAIN_WINDOW))
+#define MAIN_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MAIN_WINDOW, MainWindowClass))
+
+typedef struct _MainWindow MainWindow;
+typedef struct _MainWindowClass MainWindowClass;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+#define TYPE_IDENTITY_REQUEST (identity_request_get_type ())
+#define IDENTITY_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_IDENTITY_REQUEST, IdentityRequest))
+#define IDENTITY_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_IDENTITY_REQUEST, IdentityRequestClass))
+#define IS_IDENTITY_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_IDENTITY_REQUEST))
+#define IS_IDENTITY_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_IDENTITY_REQUEST))
+#define IDENTITY_REQUEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_IDENTITY_REQUEST, IdentityRequestClass))
+
+typedef struct _IdentityRequest IdentityRequest;
+typedef struct _IdentityRequestClass IdentityRequestClass;
+typedef struct _IdentityRequestPrivate IdentityRequestPrivate;
+
+#define TYPE_ID_CARD (id_card_get_type ())
+#define ID_CARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ID_CARD, IdCard))
+#define ID_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ID_CARD, IdCardClass))
+#define IS_ID_CARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ID_CARD))
+#define IS_ID_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ID_CARD))
+#define ID_CARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ID_CARD, IdCardClass))
+
+typedef struct _IdCard IdCard;
+typedef struct _IdCardClass IdCardClass;
+typedef struct _Block2Data Block2Data;
+typedef struct _MoonshotServerGetIdentityData MoonshotServerGetIdentityData;
+typedef struct _DBusObjectVTable _DBusObjectVTable;
+
+struct _MoonshotServer {
+       GObject parent_instance;
+       MoonshotServerPrivate * priv;
+};
+
+struct _MoonshotServerClass {
+       GObjectClass parent_class;
+};
+
+struct _MoonshotServerPrivate {
+       MainWindow* main_window;
+};
+
+typedef void (*ReturnIdentityCallback) (IdentityRequest* request, void* user_data);
+struct _IdentityRequest {
+       GObject parent_instance;
+       IdentityRequestPrivate * priv;
+       IdCard* id_card;
+       gboolean complete;
+};
+
+struct _IdentityRequestClass {
+       GObjectClass parent_class;
+};
+
+struct _Block2Data {
+       int _ref_count_;
+       MoonshotServer * self;
+       gpointer _async_data_;
+};
+
+struct _MoonshotServerGetIdentityData {
+       int _state_;
+       GAsyncResult* _res_;
+       GSimpleAsyncResult* _async_result;
+       MoonshotServer* self;
+       char* nai;
+       char* password;
+       char* service;
+       char* nai_out;
+       char* password_out;
+       char* certificate_out;
+       gboolean result;
+       gboolean has_service;
+       IdentityRequest* request;
+       char* _tmp0_;
+       char* _tmp1_;
+       char* _tmp2_;
+       IdCard* id_card;
+       gint _tmp3_;
+       char** id_card_service_collection;
+       int id_card_service_collection_length1;
+       int id_card_service_it;
+       char* id_card_service;
+       char* _tmp4_;
+       char* _tmp5_;
+       char* _tmp6_;
+       Block2Data* _data2_;
+};
+
+struct _DBusObjectVTable {
+       void (*register_object) (DBusConnection*, const char*, void*);
+};
+
+
+static gpointer moonshot_server_parent_class = NULL;
+
+GType moonshot_server_get_type (void) G_GNUC_CONST;
+GType main_window_get_type (void) G_GNUC_CONST;
+#define MOONSHOT_SERVER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_MOONSHOT_SERVER, MoonshotServerPrivate))
+enum  {
+       MOONSHOT_SERVER_DUMMY_PROPERTY
+};
+MoonshotServer* moonshot_server_new (GtkWindow* window);
+MoonshotServer* moonshot_server_construct (GType object_type, GtkWindow* window);
+static void moonshot_server_get_identity_data_free (gpointer _data);
+static void moonshot_server_get_identity_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_);
+void moonshot_server_get_identity (MoonshotServer* self, const char* nai, const char* password, const char* service, GAsyncReadyCallback _callback_, gpointer _user_data_);
+gboolean moonshot_server_get_identity_finish (MoonshotServer* self, GAsyncResult* _res_, char** nai_out, char** password_out, char** certificate_out);
+static gboolean moonshot_server_get_identity_co (MoonshotServerGetIdentityData* data);
+IdentityRequest* identity_request_new (MainWindow* main_window, const char* nai, const char* password, const char* certificate);
+IdentityRequest* identity_request_construct (GType object_type, MainWindow* main_window, const char* nai, const char* password, const char* certificate);
+GType identity_request_get_type (void) G_GNUC_CONST;
+void identity_request_set_callback (IdentityRequest* self, ReturnIdentityCallback cb, void* cb_target, GDestroyNotify cb_target_destroy_notify);
+static void _lambda1_ (IdentityRequest* IdentityRequest, Block2Data* _data2_);
+static void __lambda1__return_identity_callback (IdentityRequest* request, gpointer self);
+gboolean identity_request_execute (IdentityRequest* self);
+GType id_card_get_type (void) G_GNUC_CONST;
+char** id_card_get_services (IdCard* self, int* result_length1);
+const char* id_card_get_nai (IdCard* self);
+const char* id_card_get_password (IdCard* self);
+static Block2Data* block2_data_ref (Block2Data* _data2_);
+static void block2_data_unref (Block2Data* _data2_);
+static void _vala_dbus_register_object (DBusConnection* connection, const char* path, void* object);
+static void _vala_dbus_unregister_object (gpointer connection, GObject* object);
+void moonshot_server_dbus_register_object (DBusConnection* connection, const char* path, void* object);
+void _moonshot_server_dbus_unregister (DBusConnection* connection, void* _user_data_);
+DBusHandlerResult moonshot_server_dbus_message (DBusConnection* connection, DBusMessage* message, void* object);
+static DBusHandlerResult _dbus_moonshot_server_introspect (MoonshotServer* self, DBusConnection* connection, DBusMessage* message);
+static DBusHandlerResult _dbus_moonshot_server_property_get_all (MoonshotServer* self, DBusConnection* connection, DBusMessage* message);
+static DBusHandlerResult _dbus_moonshot_server_get_identity (MoonshotServer* self, DBusConnection* connection, DBusMessage* message);
+static void _dbus_moonshot_server_get_identity_ready (GObject * source_object, GAsyncResult * _res_, gpointer * _user_data_);
+static void moonshot_server_finalize (GObject* obj);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+static const DBusObjectPathVTable _moonshot_server_dbus_path_vtable = {_moonshot_server_dbus_unregister, moonshot_server_dbus_message};
+static const _DBusObjectVTable _moonshot_server_dbus_vtable = {moonshot_server_dbus_register_object};
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+MoonshotServer* moonshot_server_construct (GType object_type, GtkWindow* window) {
+       MoonshotServer * self = NULL;
+       MainWindow* _tmp0_;
+       g_return_val_if_fail (window != NULL, NULL);
+       self = (MoonshotServer*) g_object_new (object_type, NULL);
+       self->priv->main_window = (_tmp0_ = _g_object_ref0 (MAIN_WINDOW (window)), _g_object_unref0 (self->priv->main_window), _tmp0_);
+       return self;
+}
+
+
+MoonshotServer* moonshot_server_new (GtkWindow* window) {
+       return moonshot_server_construct (TYPE_MOONSHOT_SERVER, window);
+}
+
+
+static void moonshot_server_get_identity_data_free (gpointer _data) {
+       MoonshotServerGetIdentityData* data;
+       data = _data;
+       _g_free0 (data->nai);
+       _g_free0 (data->password);
+       _g_free0 (data->service);
+       g_object_unref (data->self);
+       g_slice_free (MoonshotServerGetIdentityData, data);
+}
+
+
+void moonshot_server_get_identity (MoonshotServer* self, const char* nai, const char* password, const char* service, GAsyncReadyCallback _callback_, gpointer _user_data_) {
+       MoonshotServerGetIdentityData* _data_;
+       _data_ = g_slice_new0 (MoonshotServerGetIdentityData);
+       _data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, moonshot_server_get_identity);
+       g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, moonshot_server_get_identity_data_free);
+       _data_->self = g_object_ref (self);
+       _data_->nai = g_strdup (nai);
+       _data_->password = g_strdup (password);
+       _data_->service = g_strdup (service);
+       moonshot_server_get_identity_co (_data_);
+}
+
+
+gboolean moonshot_server_get_identity_finish (MoonshotServer* self, GAsyncResult* _res_, char** nai_out, char** password_out, char** certificate_out) {
+       gboolean result;
+       MoonshotServerGetIdentityData* _data_;
+       _data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
+       *nai_out = _data_->nai_out;
+       _data_->nai_out = NULL;
+       *password_out = _data_->password_out;
+       _data_->password_out = NULL;
+       *certificate_out = _data_->certificate_out;
+       _data_->certificate_out = NULL;
+       result = _data_->result;
+       return result;
+}
+
+
+static void moonshot_server_get_identity_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_) {
+       MoonshotServerGetIdentityData* data;
+       data = _user_data_;
+       data->_res_ = _res_;
+       moonshot_server_get_identity_co (data);
+}
+
+
+/**
+     * This is the function used by the GSS mechanism to get the NAI,
+     * password and certificate of the ID card for the specificated service.
+     *
+     * The function will block until the user choose the ID card.
+     *
+     * @param nai NAI of the ID Card (optional)
+     * @param password Password of the ID Card (optional)
+     * @param service Service application request an ID Card for
+     * @param nai_out NAI stored in the ID Card
+     * @param password_out Password stored in the ID Card
+     * @param certificate Certificate stored in th ID Card
+     *
+     * @return true if the user choose a correct ID card for that service,
+     *         false otherwise.
+     */
+static void _lambda1_ (IdentityRequest* IdentityRequest, Block2Data* _data2_) {
+       MoonshotServer * self;
+       self = _data2_->self;
+       g_return_if_fail (IdentityRequest != NULL);
+       moonshot_server_get_identity_co (_data2_->_async_data_);
+}
+
+
+static void __lambda1__return_identity_callback (IdentityRequest* request, gpointer self) {
+       _lambda1_ (request, self);
+}
+
+
+static Block2Data* block2_data_ref (Block2Data* _data2_) {
+       g_atomic_int_inc (&_data2_->_ref_count_);
+       return _data2_;
+}
+
+
+static void block2_data_unref (Block2Data* _data2_) {
+       if (g_atomic_int_dec_and_test (&_data2_->_ref_count_)) {
+               _g_object_unref0 (_data2_->self);
+               g_slice_free (Block2Data, _data2_);
+       }
+}
+
+
+static gboolean moonshot_server_get_identity_co (MoonshotServerGetIdentityData* data) {
+       switch (data->_state_) {
+               case 0:
+               goto _state_0;
+               default:
+               g_assert_not_reached ();
+               case 1:
+               goto _state_1;
+       }
+       _state_0:
+       data->_data2_ = g_slice_new0 (Block2Data);
+       data->_data2_->_ref_count_ = 1;
+       data->_data2_->self = g_object_ref (data->self);
+       data->_data2_->_async_data_ = data;
+       data->has_service = FALSE;
+       data->request = identity_request_new (data->self->priv->main_window, data->nai, data->password, data->service);
+       identity_request_set_callback (data->request, __lambda1__return_identity_callback, block2_data_ref (data->_data2_), block2_data_unref);
+       identity_request_execute (data->request);
+       data->_state_ = 1;
+       return FALSE;
+       _state_1:
+       ;
+       data->nai_out = (data->_tmp0_ = g_strdup (""), _g_free0 (data->nai_out), data->_tmp0_);
+       data->password_out = (data->_tmp1_ = g_strdup (""), _g_free0 (data->password_out), data->_tmp1_);
+       data->certificate_out = (data->_tmp2_ = g_strdup (""), _g_free0 (data->certificate_out), data->_tmp2_);
+       data->id_card = _g_object_ref0 (data->request->id_card);
+       if (data->id_card != NULL) {
+               {
+                       data->id_card_service_collection = id_card_get_services (data->id_card, &data->_tmp3_);
+                       data->id_card_service_collection_length1 = data->_tmp3_;
+                       for (data->id_card_service_it = 0; data->id_card_service_it < data->_tmp3_; data->id_card_service_it = data->id_card_service_it + 1) {
+                               data->id_card_service = g_strdup (data->id_card_service_collection[data->id_card_service_it]);
+                               {
+                                       if (_vala_strcmp0 (data->id_card_service, data->service) == 0) {
+                                               data->has_service = TRUE;
+                                       }
+                                       _g_free0 (data->id_card_service);
+                               }
+                       }
+               }
+               if (data->has_service) {
+                       data->nai_out = (data->_tmp4_ = g_strdup (id_card_get_nai (data->id_card)), _g_free0 (data->nai_out), data->_tmp4_);
+                       data->password_out = (data->_tmp5_ = g_strdup (id_card_get_password (data->id_card)), _g_free0 (data->password_out), data->_tmp5_);
+                       data->certificate_out = (data->_tmp6_ = g_strdup ("certificate"), _g_free0 (data->certificate_out), data->_tmp6_);
+                       data->result = TRUE;
+                       _g_object_unref0 (data->id_card);
+                       _g_object_unref0 (data->request);
+                       block2_data_unref (data->_data2_);
+                       {
+                               if (data->_state_ == 0) {
+                                       g_simple_async_result_complete_in_idle (data->_async_result);
+                               } else {
+                                       g_simple_async_result_complete (data->_async_result);
+                               }
+                               g_object_unref (data->_async_result);
+                               return FALSE;
+                       }
+               }
+       }
+       data->result = FALSE;
+       _g_object_unref0 (data->id_card);
+       _g_object_unref0 (data->request);
+       block2_data_unref (data->_data2_);
+       {
+               if (data->_state_ == 0) {
+                       g_simple_async_result_complete_in_idle (data->_async_result);
+               } else {
+                       g_simple_async_result_complete (data->_async_result);
+               }
+               g_object_unref (data->_async_result);
+               return FALSE;
+       }
+       _g_object_unref0 (data->id_card);
+       _g_object_unref0 (data->request);
+       block2_data_unref (data->_data2_);
+       {
+               if (data->_state_ == 0) {
+                       g_simple_async_result_complete_in_idle (data->_async_result);
+               } else {
+                       g_simple_async_result_complete (data->_async_result);
+               }
+               g_object_unref (data->_async_result);
+               return FALSE;
+       }
+}
+
+
+static void _vala_dbus_register_object (DBusConnection* connection, const char* path, void* object) {
+       const _DBusObjectVTable * vtable;
+       vtable = g_type_get_qdata (G_TYPE_FROM_INSTANCE (object), g_quark_from_static_string ("DBusObjectVTable"));
+       if (vtable) {
+               vtable->register_object (connection, path, object);
+       } else {
+               g_warning ("Object does not implement any D-Bus interface");
+       }
+}
+
+
+static void _vala_dbus_unregister_object (gpointer connection, GObject* object) {
+       char* path;
+       path = g_object_steal_data ((GObject*) object, "dbus_object_path");
+       dbus_connection_unregister_object_path (connection, path);
+       g_free (path);
+}
+
+
+void _moonshot_server_dbus_unregister (DBusConnection* connection, void* _user_data_) {
+}
+
+
+static DBusHandlerResult _dbus_moonshot_server_introspect (MoonshotServer* self, DBusConnection* connection, DBusMessage* message) {
+       DBusMessage* reply;
+       DBusMessageIter iter;
+       GString* xml_data;
+       char** children;
+       int i;
+       reply = dbus_message_new_method_return (message);
+       dbus_message_iter_init_append (reply, &iter);
+       xml_data = g_string_new ("<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\" \"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n");
+       g_string_append (xml_data, "<node>\n<interface name=\"org.freedesktop.DBus.Introspectable\">\n  <method name=\"Introspect\">\n    <arg name=\"data\" direction=\"out\" type=\"s\"/>\n  </method>\n</interface>\n<interface name=\"org.freedesktop.DBus.Properties\">\n  <method name=\"Get\">\n    <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n    <arg name=\"propname\" direction=\"in\" type=\"s\"/>\n    <arg name=\"value\" direction=\"out\" type=\"v\"/>\n  </method>\n  <method name=\"Set\">\n    <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n    <arg name=\"propname\" direction=\"in\" type=\"s\"/>\n    <arg name=\"value\" direction=\"in\" type=\"v\"/>\n  </method>\n  <method name=\"GetAll\">\n    <arg name=\"interface\" direction=\"in\" type=\"s\"/>\n    <arg name=\"props\" direction=\"out\" type=\"a{sv}\"/>\n  </method>\n</interface>\n<interface name=\"org.janet.Moonshot\">\n  <method name=\"GetIdentity\">\n    <arg name=\"nai\" type=\"s\" direction=\"in\"/>\n    <arg name=\"password\" type=\"s\" direction=\"in\"/>\n    <arg name=\"service\" type=\"s\" direction=\"in\"/>\n    <arg name=\"nai_out\" type=\"s\" direction=\"out\"/>\n    <arg name=\"password_out\" type=\"s\" direction=\"out\"/>\n    <arg name=\"certificate_out\" type=\"s\" direction=\"out\"/>\n    <arg name=\"result\" type=\"b\" direction=\"out\"/>\n  </method>\n</interface>\n");
+       dbus_connection_list_registered (connection, g_object_get_data ((GObject *) self, "dbus_object_path"), &children);
+       for (i = 0; children[i]; i++) {
+               g_string_append_printf (xml_data, "<node name=\"%s\"/>\n", children[i]);
+       }
+       dbus_free_string_array (children);
+       g_string_append (xml_data, "</node>\n");
+       dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &xml_data->str);
+       g_string_free (xml_data, TRUE);
+       if (reply) {
+               dbus_connection_send (connection, reply, NULL);
+               dbus_message_unref (reply);
+               return DBUS_HANDLER_RESULT_HANDLED;
+       } else {
+               return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+       }
+}
+
+
+static DBusHandlerResult _dbus_moonshot_server_property_get_all (MoonshotServer* self, DBusConnection* connection, DBusMessage* message) {
+       DBusMessage* reply;
+       DBusMessageIter iter, reply_iter, subiter;
+       char* interface_name;
+       const char* _tmp0_;
+       if (strcmp (dbus_message_get_signature (message), "s")) {
+               return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+       }
+       dbus_message_iter_init (message, &iter);
+       reply = dbus_message_new_method_return (message);
+       dbus_message_iter_init_append (reply, &reply_iter);
+       dbus_message_iter_get_basic (&iter, &_tmp0_);
+       dbus_message_iter_next (&iter);
+       interface_name = g_strdup (_tmp0_);
+       if (strcmp (interface_name, "org.janet.Moonshot") == 0) {
+               dbus_message_iter_open_container (&reply_iter, DBUS_TYPE_ARRAY, "{sv}", &subiter);
+               dbus_message_iter_close_container (&reply_iter, &subiter);
+       } else {
+               dbus_message_unref (reply);
+               reply = NULL;
+       }
+       g_free (interface_name);
+       if (reply) {
+               dbus_connection_send (connection, reply, NULL);
+               dbus_message_unref (reply);
+               return DBUS_HANDLER_RESULT_HANDLED;
+       } else {
+               return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+       }
+}
+
+
+static DBusHandlerResult _dbus_moonshot_server_get_identity (MoonshotServer* self, DBusConnection* connection, DBusMessage* message) {
+       DBusMessageIter iter;
+       char* nai = NULL;
+       const char* _tmp1_;
+       char* password = NULL;
+       const char* _tmp2_;
+       char* service = NULL;
+       const char* _tmp3_;
+       gpointer * _user_data_;
+       if (strcmp (dbus_message_get_signature (message), "sss")) {
+               return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+       }
+       dbus_message_iter_init (message, &iter);
+       dbus_message_iter_get_basic (&iter, &_tmp1_);
+       dbus_message_iter_next (&iter);
+       nai = g_strdup (_tmp1_);
+       dbus_message_iter_get_basic (&iter, &_tmp2_);
+       dbus_message_iter_next (&iter);
+       password = g_strdup (_tmp2_);
+       dbus_message_iter_get_basic (&iter, &_tmp3_);
+       dbus_message_iter_next (&iter);
+       service = g_strdup (_tmp3_);
+       _user_data_ = g_new0 (gpointer, 2);
+       _user_data_[0] = dbus_connection_ref (connection);
+       _user_data_[1] = dbus_message_ref (message);
+       moonshot_server_get_identity (self, nai, password, service, (GAsyncReadyCallback) _dbus_moonshot_server_get_identity_ready, _user_data_);
+       _g_free0 (nai);
+       _g_free0 (password);
+       _g_free0 (service);
+       return DBUS_HANDLER_RESULT_HANDLED;
+}
+
+
+static void _dbus_moonshot_server_get_identity_ready (GObject * source_object, GAsyncResult * _res_, gpointer * _user_data_) {
+       DBusConnection * connection;
+       DBusMessage * message;
+       DBusMessageIter iter;
+       GError* error;
+       char* nai_out = NULL;
+       char* password_out = NULL;
+       char* certificate_out = NULL;
+       gboolean result;
+       DBusMessage* reply;
+       const char* _tmp4_;
+       const char* _tmp5_;
+       const char* _tmp6_;
+       dbus_bool_t _tmp7_;
+       connection = _user_data_[0];
+       message = _user_data_[1];
+       error = NULL;
+       result = moonshot_server_get_identity_finish ((MoonshotServer*) source_object, _res_, &nai_out, &password_out, &certificate_out);
+       reply = dbus_message_new_method_return (message);
+       dbus_message_iter_init_append (reply, &iter);
+       _tmp4_ = nai_out;
+       dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &_tmp4_);
+       _g_free0 (nai_out);
+       _tmp5_ = password_out;
+       dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &_tmp5_);
+       _g_free0 (password_out);
+       _tmp6_ = certificate_out;
+       dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &_tmp6_);
+       _g_free0 (certificate_out);
+       _tmp7_ = result;
+       dbus_message_iter_append_basic (&iter, DBUS_TYPE_BOOLEAN, &_tmp7_);
+       dbus_connection_send (connection, reply, NULL);
+       dbus_message_unref (reply);
+       dbus_connection_unref (connection);
+       dbus_message_unref (message);
+       g_free (_user_data_);
+}
+
+
+DBusHandlerResult moonshot_server_dbus_message (DBusConnection* connection, DBusMessage* message, void* object) {
+       DBusHandlerResult result;
+       result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+       if (dbus_message_is_method_call (message, "org.freedesktop.DBus.Introspectable", "Introspect")) {
+               result = _dbus_moonshot_server_introspect (object, connection, message);
+       } else if (dbus_message_is_method_call (message, "org.freedesktop.DBus.Properties", "GetAll")) {
+               result = _dbus_moonshot_server_property_get_all (object, connection, message);
+       } else if (dbus_message_is_method_call (message, "org.janet.Moonshot", "GetIdentity")) {
+               result = _dbus_moonshot_server_get_identity (object, connection, message);
+       }
+       if (result == DBUS_HANDLER_RESULT_HANDLED) {
+               return result;
+       } else {
+               return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+       }
+}
+
+
+void moonshot_server_dbus_register_object (DBusConnection* connection, const char* path, void* object) {
+       if (!g_object_get_data (object, "dbus_object_path")) {
+               g_object_set_data (object, "dbus_object_path", g_strdup (path));
+               dbus_connection_register_object_path (connection, path, &_moonshot_server_dbus_path_vtable, object);
+               g_object_weak_ref (object, _vala_dbus_unregister_object, connection);
+       }
+}
+
+
+static void moonshot_server_class_init (MoonshotServerClass * klass) {
+       moonshot_server_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (MoonshotServerPrivate));
+       G_OBJECT_CLASS (klass)->finalize = moonshot_server_finalize;
+       g_type_set_qdata (TYPE_MOONSHOT_SERVER, g_quark_from_static_string ("DBusObjectVTable"), (void*) (&_moonshot_server_dbus_vtable));
+}
+
+
+static void moonshot_server_instance_init (MoonshotServer * self) {
+       self->priv = MOONSHOT_SERVER_GET_PRIVATE (self);
+}
+
+
+static void moonshot_server_finalize (GObject* obj) {
+       MoonshotServer * self;
+       self = MOONSHOT_SERVER (obj);
+       _g_object_unref0 (self->priv->main_window);
+       G_OBJECT_CLASS (moonshot_server_parent_class)->finalize (obj);
+}
+
+
+GType moonshot_server_get_type (void) {
+       static volatile gsize moonshot_server_type_id__volatile = 0;
+       if (g_once_init_enter (&moonshot_server_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (MoonshotServerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) moonshot_server_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (MoonshotServer), 0, (GInstanceInitFunc) moonshot_server_instance_init, NULL };
+               GType moonshot_server_type_id;
+               moonshot_server_type_id = g_type_register_static (G_TYPE_OBJECT, "MoonshotServer", &g_define_type_info, 0);
+               g_once_init_leave (&moonshot_server_type_id__volatile, moonshot_server_type_id);
+       }
+       return moonshot_server_type_id__volatile;
+}
+
+
+static int _vala_strcmp0 (const char * str1, const char * str2) {
+       if (str1 == NULL) {
+               return -(str1 != str2);
+       }
+       if (str2 == NULL) {
+               return str1 != str2;
+       }
+       return strcmp (str1, str2);
+}
+
+
+
+
diff --git a/src/moonshot-id.c b/src/moonshot-id.c
new file mode 100644 (file)
index 0000000..8c8d23a
--- /dev/null
@@ -0,0 +1,339 @@
+/* moonshot-id.c generated by valac 0.10.4, the Vala compiler
+ * generated from moonshot-id.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gdk-pixbuf/gdk-pixdata.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define TYPE_ID_CARD (id_card_get_type ())
+#define ID_CARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ID_CARD, IdCard))
+#define ID_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ID_CARD, IdCardClass))
+#define IS_ID_CARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ID_CARD))
+#define IS_ID_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ID_CARD))
+#define ID_CARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ID_CARD, IdCardClass))
+
+typedef struct _IdCard IdCard;
+typedef struct _IdCardClass IdCardClass;
+typedef struct _IdCardPrivate IdCardPrivate;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+struct _IdCard {
+       GObject parent_instance;
+       IdCardPrivate * priv;
+};
+
+struct _IdCardClass {
+       GObjectClass parent_class;
+};
+
+struct _IdCardPrivate {
+       GdkPixbuf* _pixbuf;
+       char* _issuer;
+       char* _username;
+       char* _password;
+       char** _services;
+       gint _services_length1;
+       gint __services_size_;
+       char* _nai;
+};
+
+
+static gpointer id_card_parent_class = NULL;
+
+GType id_card_get_type (void) G_GNUC_CONST;
+#define ID_CARD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_ID_CARD, IdCardPrivate))
+enum  {
+       ID_CARD_DUMMY_PROPERTY,
+       ID_CARD_PIXBUF,
+       ID_CARD_ISSUER,
+       ID_CARD_USERNAME,
+       ID_CARD_PASSWORD,
+       ID_CARD_SERVICES,
+       ID_CARD_NAI
+};
+IdCard* id_card_new (void);
+IdCard* id_card_construct (GType object_type);
+GdkPixbuf* id_card_get_pixbuf (IdCard* self);
+void id_card_set_pixbuf (IdCard* self, GdkPixbuf* value);
+const char* id_card_get_issuer (IdCard* self);
+void id_card_set_issuer (IdCard* self, const char* value);
+const char* id_card_get_username (IdCard* self);
+void id_card_set_username (IdCard* self, const char* value);
+const char* id_card_get_password (IdCard* self);
+void id_card_set_password (IdCard* self, const char* value);
+char** id_card_get_services (IdCard* self, int* result_length1);
+void id_card_set_services (IdCard* self, char** value, int value_length1);
+static char** _vala_array_dup1 (char** self, int length);
+const char* id_card_get_nai (IdCard* self);
+void id_card_set_nai (IdCard* self, const char* value);
+static void id_card_finalize (GObject* obj);
+static void id_card_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
+static void id_card_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
+
+
+
+IdCard* id_card_construct (GType object_type) {
+       IdCard * self = NULL;
+       self = (IdCard*) g_object_new (object_type, NULL);
+       return self;
+}
+
+
+IdCard* id_card_new (void) {
+       return id_card_construct (TYPE_ID_CARD);
+}
+
+
+GdkPixbuf* id_card_get_pixbuf (IdCard* self) {
+       GdkPixbuf* result;
+       g_return_val_if_fail (self != NULL, NULL);
+       result = self->priv->_pixbuf;
+       return result;
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+void id_card_set_pixbuf (IdCard* self, GdkPixbuf* value) {
+       GdkPixbuf* _tmp0_;
+       g_return_if_fail (self != NULL);
+       self->priv->_pixbuf = (_tmp0_ = _g_object_ref0 (value), _g_object_unref0 (self->priv->_pixbuf), _tmp0_);
+       g_object_notify ((GObject *) self, "pixbuf");
+}
+
+
+const char* id_card_get_issuer (IdCard* self) {
+       const char* result;
+       g_return_val_if_fail (self != NULL, NULL);
+       result = self->priv->_issuer;
+       return result;
+}
+
+
+void id_card_set_issuer (IdCard* self, const char* value) {
+       char* _tmp0_;
+       g_return_if_fail (self != NULL);
+       self->priv->_issuer = (_tmp0_ = g_strdup (value), _g_free0 (self->priv->_issuer), _tmp0_);
+       g_object_notify ((GObject *) self, "issuer");
+}
+
+
+const char* id_card_get_username (IdCard* self) {
+       const char* result;
+       g_return_val_if_fail (self != NULL, NULL);
+       result = self->priv->_username;
+       return result;
+}
+
+
+void id_card_set_username (IdCard* self, const char* value) {
+       char* _tmp0_;
+       g_return_if_fail (self != NULL);
+       self->priv->_username = (_tmp0_ = g_strdup (value), _g_free0 (self->priv->_username), _tmp0_);
+       g_object_notify ((GObject *) self, "username");
+}
+
+
+const char* id_card_get_password (IdCard* self) {
+       const char* result;
+       g_return_val_if_fail (self != NULL, NULL);
+       result = self->priv->_password;
+       return result;
+}
+
+
+void id_card_set_password (IdCard* self, const char* value) {
+       char* _tmp0_;
+       g_return_if_fail (self != NULL);
+       self->priv->_password = (_tmp0_ = g_strdup (value), _g_free0 (self->priv->_password), _tmp0_);
+       g_object_notify ((GObject *) self, "password");
+}
+
+
+char** id_card_get_services (IdCard* self, int* result_length1) {
+       char** result;
+       char** _tmp0_;
+       g_return_val_if_fail (self != NULL, NULL);
+       result = (_tmp0_ = self->priv->_services, *result_length1 = self->priv->_services_length1, _tmp0_);
+       return result;
+}
+
+
+static char** _vala_array_dup1 (char** self, int length) {
+       char** result;
+       int i;
+       result = g_new0 (char*, length + 1);
+       for (i = 0; i < length; i++) {
+               result[i] = g_strdup (self[i]);
+       }
+       return result;
+}
+
+
+void id_card_set_services (IdCard* self, char** value, int value_length1) {
+       char** _tmp0_;
+       char** _tmp1_;
+       g_return_if_fail (self != NULL);
+       self->priv->_services = (_tmp1_ = (_tmp0_ = value, (_tmp0_ == NULL) ? ((gpointer) _tmp0_) : _vala_array_dup1 (_tmp0_, value_length1)), self->priv->_services = (_vala_array_free (self->priv->_services, self->priv->_services_length1, (GDestroyNotify) g_free), NULL), self->priv->_services_length1 = value_length1, self->priv->__services_size_ = self->priv->_services_length1, _tmp1_);
+       g_object_notify ((GObject *) self, "services");
+}
+
+
+const char* id_card_get_nai (IdCard* self) {
+       const char* result;
+       g_return_val_if_fail (self != NULL, NULL);
+       result = self->priv->_nai;
+       return result;
+}
+
+
+void id_card_set_nai (IdCard* self, const char* value) {
+       char* _tmp0_;
+       g_return_if_fail (self != NULL);
+       self->priv->_nai = (_tmp0_ = g_strdup (value), _g_free0 (self->priv->_nai), _tmp0_);
+       g_object_notify ((GObject *) self, "nai");
+}
+
+
+static void id_card_class_init (IdCardClass * klass) {
+       id_card_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (IdCardPrivate));
+       G_OBJECT_CLASS (klass)->get_property = id_card_get_property;
+       G_OBJECT_CLASS (klass)->set_property = id_card_set_property;
+       G_OBJECT_CLASS (klass)->finalize = id_card_finalize;
+       g_object_class_install_property (G_OBJECT_CLASS (klass), ID_CARD_PIXBUF, g_param_spec_object ("pixbuf", "pixbuf", "pixbuf", GDK_TYPE_PIXBUF, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
+       g_object_class_install_property (G_OBJECT_CLASS (klass), ID_CARD_ISSUER, g_param_spec_string ("issuer", "issuer", "issuer", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
+       g_object_class_install_property (G_OBJECT_CLASS (klass), ID_CARD_USERNAME, g_param_spec_string ("username", "username", "username", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
+       g_object_class_install_property (G_OBJECT_CLASS (klass), ID_CARD_PASSWORD, g_param_spec_string ("password", "password", "password", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
+       g_object_class_install_property (G_OBJECT_CLASS (klass), ID_CARD_SERVICES, g_param_spec_boxed ("services", "services", "services", G_TYPE_STRV, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
+       g_object_class_install_property (G_OBJECT_CLASS (klass), ID_CARD_NAI, g_param_spec_string ("nai", "nai", "nai", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
+}
+
+
+static void id_card_instance_init (IdCard * self) {
+       self->priv = ID_CARD_GET_PRIVATE (self);
+       self->priv->_pixbuf = NULL;
+       self->priv->_issuer = NULL;
+       self->priv->_username = NULL;
+       self->priv->_password = NULL;
+       self->priv->_services = NULL;
+       self->priv->_nai = NULL;
+}
+
+
+static void id_card_finalize (GObject* obj) {
+       IdCard * self;
+       self = ID_CARD (obj);
+       _g_object_unref0 (self->priv->_pixbuf);
+       _g_free0 (self->priv->_issuer);
+       _g_free0 (self->priv->_username);
+       _g_free0 (self->priv->_password);
+       self->priv->_services = (_vala_array_free (self->priv->_services, self->priv->_services_length1, (GDestroyNotify) g_free), NULL);
+       _g_free0 (self->priv->_nai);
+       G_OBJECT_CLASS (id_card_parent_class)->finalize (obj);
+}
+
+
+GType id_card_get_type (void) {
+       static volatile gsize id_card_type_id__volatile = 0;
+       if (g_once_init_enter (&id_card_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (IdCardClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) id_card_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (IdCard), 0, (GInstanceInitFunc) id_card_instance_init, NULL };
+               GType id_card_type_id;
+               id_card_type_id = g_type_register_static (G_TYPE_OBJECT, "IdCard", &g_define_type_info, 0);
+               g_once_init_leave (&id_card_type_id__volatile, id_card_type_id);
+       }
+       return id_card_type_id__volatile;
+}
+
+
+static void id_card_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
+       IdCard * self;
+       int length;
+       self = ID_CARD (object);
+       switch (property_id) {
+               case ID_CARD_PIXBUF:
+               g_value_set_object (value, id_card_get_pixbuf (self));
+               break;
+               case ID_CARD_ISSUER:
+               g_value_set_string (value, id_card_get_issuer (self));
+               break;
+               case ID_CARD_USERNAME:
+               g_value_set_string (value, id_card_get_username (self));
+               break;
+               case ID_CARD_PASSWORD:
+               g_value_set_string (value, id_card_get_password (self));
+               break;
+               case ID_CARD_SERVICES:
+               g_value_set_boxed (value, id_card_get_services (self, &length));
+               break;
+               case ID_CARD_NAI:
+               g_value_set_string (value, id_card_get_nai (self));
+               break;
+               default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+               break;
+       }
+}
+
+
+static void id_card_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
+       IdCard * self;
+       gpointer boxed;
+       self = ID_CARD (object);
+       switch (property_id) {
+               case ID_CARD_PIXBUF:
+               id_card_set_pixbuf (self, g_value_get_object (value));
+               break;
+               case ID_CARD_ISSUER:
+               id_card_set_issuer (self, g_value_get_string (value));
+               break;
+               case ID_CARD_USERNAME:
+               id_card_set_username (self, g_value_get_string (value));
+               break;
+               case ID_CARD_PASSWORD:
+               id_card_set_password (self, g_value_get_string (value));
+               break;
+               case ID_CARD_SERVICES:
+               boxed = g_value_get_boxed (value);
+               id_card_set_services (self, boxed, g_strv_length (boxed));
+               break;
+               case ID_CARD_NAI:
+               id_card_set_nai (self, g_value_get_string (value));
+               break;
+               default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+               break;
+       }
+}
+
+
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+       if ((array != NULL) && (destroy_func != NULL)) {
+               int i;
+               for (i = 0; i < array_length; i = i + 1) {
+                       if (((gpointer*) array)[i] != NULL) {
+                               destroy_func (((gpointer*) array)[i]);
+                       }
+               }
+       }
+}
+
+
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+       _vala_array_destroy (array, array_length, destroy_func);
+       g_free (array);
+}
+
+
+
+
diff --git a/src/moonshot-idcard-widget.c b/src/moonshot-idcard-widget.c
new file mode 100644 (file)
index 0000000..423dfea
--- /dev/null
@@ -0,0 +1,454 @@
+/* moonshot-idcard-widget.c generated by valac 0.10.4, the Vala compiler
+ * generated from moonshot-idcard-widget.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <string.h>
+#include <gdk/gdk.h>
+#include <stdlib.h>
+#include <gdk-pixbuf/gdk-pixdata.h>
+#include <float.h>
+#include <math.h>
+#include <glib/gi18n-lib.h>
+#include <atk/atk.h>
+
+
+#define TYPE_ID_CARD_WIDGET (id_card_widget_get_type ())
+#define ID_CARD_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ID_CARD_WIDGET, IdCardWidget))
+#define ID_CARD_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ID_CARD_WIDGET, IdCardWidgetClass))
+#define IS_ID_CARD_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ID_CARD_WIDGET))
+#define IS_ID_CARD_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ID_CARD_WIDGET))
+#define ID_CARD_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ID_CARD_WIDGET, IdCardWidgetClass))
+
+typedef struct _IdCardWidget IdCardWidget;
+typedef struct _IdCardWidgetClass IdCardWidgetClass;
+typedef struct _IdCardWidgetPrivate IdCardWidgetPrivate;
+
+#define TYPE_ID_CARD (id_card_get_type ())
+#define ID_CARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ID_CARD, IdCard))
+#define ID_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ID_CARD, IdCardClass))
+#define IS_ID_CARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ID_CARD))
+#define IS_ID_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ID_CARD))
+#define ID_CARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ID_CARD, IdCardClass))
+
+typedef struct _IdCard IdCard;
+typedef struct _IdCardClass IdCardClass;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+struct _IdCardWidget {
+       GtkBox parent_instance;
+       IdCardWidgetPrivate * priv;
+};
+
+struct _IdCardWidgetClass {
+       GtkBoxClass parent_class;
+};
+
+struct _IdCardWidgetPrivate {
+       IdCard* _id_card;
+       GtkVBox* main_vbox;
+       GtkTable* table;
+       GtkButton* _delete_button;
+       GtkButton* _details_button;
+       GtkButton* _send_button;
+       GtkHButtonBox* hbutton_box;
+       GtkEventBox* event_box;
+};
+
+
+static gpointer id_card_widget_parent_class = NULL;
+
+GType id_card_widget_get_type (void) G_GNUC_CONST;
+GType id_card_get_type (void) G_GNUC_CONST;
+#define ID_CARD_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_ID_CARD_WIDGET, IdCardWidgetPrivate))
+enum  {
+       ID_CARD_WIDGET_DUMMY_PROPERTY,
+       ID_CARD_WIDGET_ID_CARD,
+       ID_CARD_WIDGET_DELETE_BUTTON,
+       ID_CARD_WIDGET_DETAILS_BUTTON,
+       ID_CARD_WIDGET_SEND_BUTTON
+};
+void id_card_widget_collapse (IdCardWidget* self);
+static void id_card_widget_set_idcard_color (IdCardWidget* self);
+static gboolean id_card_widget_button_press_cb (IdCardWidget* self);
+static void id_card_widget_delete_button_cb (IdCardWidget* self);
+static void id_card_widget_details_button_cb (IdCardWidget* self);
+static void id_card_widget_send_button_cb (IdCardWidget* self);
+IdCardWidget* id_card_widget_new (IdCard* id_card);
+IdCardWidget* id_card_widget_construct (GType object_type, IdCard* id_card);
+void id_card_widget_set_id_card (IdCardWidget* self, IdCard* value);
+GdkPixbuf* id_card_get_pixbuf (IdCard* self);
+IdCard* id_card_widget_get_id_card (IdCardWidget* self);
+const char* id_card_get_issuer (IdCard* self);
+char** id_card_get_services (IdCard* self, int* result_length1);
+static void id_card_widget_set_delete_button (IdCardWidget* self, GtkButton* value);
+static void id_card_widget_set_details_button (IdCardWidget* self, GtkButton* value);
+static void id_card_widget_set_send_button (IdCardWidget* self, GtkButton* value);
+static void id_card_widget_set_atk_name_description (IdCardWidget* self, GtkWidget* widget, const char* name, const char* description);
+GtkButton* id_card_widget_get_delete_button (IdCardWidget* self);
+GtkButton* id_card_widget_get_details_button (IdCardWidget* self);
+GtkButton* id_card_widget_get_send_button (IdCardWidget* self);
+static void _id_card_widget_delete_button_cb_gtk_button_clicked (GtkButton* _sender, gpointer self);
+static void _id_card_widget_details_button_cb_gtk_button_clicked (GtkButton* _sender, gpointer self);
+static void _id_card_widget_send_button_cb_gtk_button_clicked (GtkButton* _sender, gpointer self);
+static gboolean _id_card_widget_button_press_cb_gtk_widget_button_press_event (GtkWidget* _sender, GdkEventButton* event, gpointer self);
+static void id_card_widget_finalize (GObject* obj);
+static void id_card_widget_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
+static void id_card_widget_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
+
+
+
+void id_card_widget_collapse (IdCardWidget* self) {
+       g_return_if_fail (self != NULL);
+       gtk_widget_set_visible ((GtkWidget*) self->priv->hbutton_box, FALSE);
+       id_card_widget_set_idcard_color (self);
+}
+
+
+static gboolean id_card_widget_button_press_cb (IdCardWidget* self) {
+       gboolean result = FALSE;
+       g_return_val_if_fail (self != NULL, FALSE);
+       gtk_widget_set_visible ((GtkWidget*) self->priv->hbutton_box, !gtk_widget_get_visible ((GtkWidget*) self->priv->hbutton_box));
+       id_card_widget_set_idcard_color (self);
+       if (gtk_widget_get_visible ((GtkWidget*) self->priv->hbutton_box) == TRUE) {
+               g_signal_emit_by_name (self, "expanded");
+       }
+       result = FALSE;
+       return result;
+}
+
+
+static void id_card_widget_delete_button_cb (IdCardWidget* self) {
+       g_return_if_fail (self != NULL);
+       g_signal_emit_by_name (self, "remove-id");
+}
+
+
+static void id_card_widget_details_button_cb (IdCardWidget* self) {
+       g_return_if_fail (self != NULL);
+       g_signal_emit_by_name (self, "details-id");
+}
+
+
+static void id_card_widget_send_button_cb (IdCardWidget* self) {
+       g_return_if_fail (self != NULL);
+       g_signal_emit_by_name (self, "send-id");
+}
+
+
+static void id_card_widget_set_idcard_color (IdCardWidget* self) {
+       GdkColor color = {0};
+       GtkStateType state;
+       g_return_if_fail (self != NULL);
+       memset (&color, 0, sizeof (GdkColor));
+       if (gtk_widget_get_visible ((GtkWidget*) self->priv->hbutton_box) == FALSE) {
+               color.red = (guint16) 65535;
+               color.green = (guint16) 65535;
+               color.blue = (guint16) 65535;
+       } else {
+               color.red = (guint16) 33333;
+               color.green = (guint16) 33333;
+               color.blue = (guint16) 60000;
+       }
+       state = gtk_widget_get_state ((GtkWidget*) self);
+       gtk_widget_modify_bg ((GtkWidget*) self->priv->event_box, state, &color);
+}
+
+
+static void _id_card_widget_delete_button_cb_gtk_button_clicked (GtkButton* _sender, gpointer self) {
+       id_card_widget_delete_button_cb (self);
+}
+
+
+static void _id_card_widget_details_button_cb_gtk_button_clicked (GtkButton* _sender, gpointer self) {
+       id_card_widget_details_button_cb (self);
+}
+
+
+static void _id_card_widget_send_button_cb_gtk_button_clicked (GtkButton* _sender, gpointer self) {
+       id_card_widget_send_button_cb (self);
+}
+
+
+static gboolean _id_card_widget_button_press_cb_gtk_widget_button_press_event (GtkWidget* _sender, GdkEventButton* event, gpointer self) {
+       gboolean result;
+       result = id_card_widget_button_press_cb (self);
+       return result;
+}
+
+
+IdCardWidget* id_card_widget_construct (GType object_type, IdCard* id_card) {
+       IdCardWidget * self;
+       char* services_text;
+       GtkImage* image;
+       char* issuer;
+       char* _tmp3_;
+       char* _tmp4_;
+       char* text;
+       GtkLabel* id_data_label;
+       GtkTable* _tmp5_;
+       GtkButton* _tmp6_;
+       GtkButton* _tmp7_;
+       GtkButton* _tmp8_;
+       GtkHButtonBox* _tmp9_;
+       GtkVBox* _tmp10_;
+       GtkEventBox* _tmp11_;
+       g_return_val_if_fail (id_card != NULL, NULL);
+       self = g_object_newv (object_type, 0, NULL);
+       services_text = g_strdup ("");
+       id_card_widget_set_id_card (self, id_card);
+       image = g_object_ref_sink ((GtkImage*) gtk_image_new_from_pixbuf (id_card_get_pixbuf (id_card)));
+       issuer = g_markup_printf_escaped ("<b>%s</b>", id_card_get_issuer (self->priv->_id_card));
+       {
+               gint _tmp0_;
+               char** service_collection;
+               int service_collection_length1;
+               int service_it;
+               service_collection = id_card_get_services (id_card, &_tmp0_);
+               service_collection_length1 = _tmp0_;
+               for (service_it = 0; service_it < _tmp0_; service_it = service_it + 1) {
+                       char* service;
+                       service = g_strdup (service_collection[service_it]);
+                       {
+                               char* _tmp1_;
+                               char* _tmp2_;
+                               services_text = (_tmp2_ = g_strconcat (services_text, _tmp1_ = g_markup_printf_escaped ("<i>%s, </i>", service), NULL), _g_free0 (services_text), _tmp2_);
+                               _g_free0 (_tmp1_);
+                               _g_free0 (service);
+                       }
+               }
+       }
+       text = (_tmp4_ = g_strconcat (_tmp3_ = g_strconcat (issuer, "\n", NULL), services_text, NULL), _g_free0 (_tmp3_), _tmp4_);
+       id_data_label = g_object_ref_sink ((GtkLabel*) gtk_label_new (NULL));
+       gtk_label_set_markup (id_data_label, text);
+       gtk_misc_set_alignment ((GtkMisc*) id_data_label, (float) 0, (float) 0.5);
+       self->priv->table = (_tmp5_ = g_object_ref_sink ((GtkTable*) gtk_table_new ((guint) 1, (guint) 2, FALSE)), _g_object_unref0 (self->priv->table), _tmp5_);
+       gtk_table_attach_defaults (self->priv->table, (GtkWidget*) image, (guint) 0, (guint) 1, (guint) 0, (guint) 1);
+       gtk_table_attach_defaults (self->priv->table, (GtkWidget*) id_data_label, (guint) 1, (guint) 2, (guint) 0, (guint) 1);
+       id_card_widget_set_delete_button (self, _tmp6_ = g_object_ref_sink ((GtkButton*) gtk_button_new_with_label (_ ("Delete"))));
+       _g_object_unref0 (_tmp6_);
+       id_card_widget_set_details_button (self, _tmp7_ = g_object_ref_sink ((GtkButton*) gtk_button_new_with_label (_ ("View details"))));
+       _g_object_unref0 (_tmp7_);
+       id_card_widget_set_send_button (self, _tmp8_ = g_object_ref_sink ((GtkButton*) gtk_button_new_with_label (_ ("Send"))));
+       _g_object_unref0 (_tmp8_);
+       id_card_widget_set_atk_name_description (self, (GtkWidget*) self->priv->_delete_button, _ ("Delete"), _ ("Delete this ID Card"));
+       id_card_widget_set_atk_name_description (self, (GtkWidget*) self->priv->_details_button, _ ("Details"), _ ("View the details of this ID Card"));
+       id_card_widget_set_atk_name_description (self, (GtkWidget*) self->priv->_send_button, _ ("Send"), _ ("Send this ID Card"));
+       self->priv->hbutton_box = (_tmp9_ = g_object_ref_sink ((GtkHButtonBox*) gtk_hbutton_box_new ()), _g_object_unref0 (self->priv->hbutton_box), _tmp9_);
+       gtk_box_pack_end ((GtkBox*) self->priv->hbutton_box, (GtkWidget*) self->priv->_delete_button, TRUE, TRUE, 0);
+       gtk_box_pack_end ((GtkBox*) self->priv->hbutton_box, (GtkWidget*) self->priv->_details_button, TRUE, TRUE, 0);
+       gtk_box_pack_end ((GtkBox*) self->priv->hbutton_box, (GtkWidget*) self->priv->_send_button, TRUE, TRUE, 0);
+       g_signal_connect_object (self->priv->_delete_button, "clicked", (GCallback) _id_card_widget_delete_button_cb_gtk_button_clicked, self, 0);
+       g_signal_connect_object (self->priv->_details_button, "clicked", (GCallback) _id_card_widget_details_button_cb_gtk_button_clicked, self, 0);
+       g_signal_connect_object (self->priv->_send_button, "clicked", (GCallback) _id_card_widget_send_button_cb_gtk_button_clicked, self, 0);
+       self->priv->main_vbox = (_tmp10_ = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 12)), _g_object_unref0 (self->priv->main_vbox), _tmp10_);
+       gtk_box_pack_start ((GtkBox*) self->priv->main_vbox, (GtkWidget*) self->priv->table, TRUE, TRUE, (guint) 0);
+       gtk_box_pack_start ((GtkBox*) self->priv->main_vbox, (GtkWidget*) self->priv->hbutton_box, FALSE, FALSE, (guint) 0);
+       gtk_container_set_border_width ((GtkContainer*) self->priv->main_vbox, (guint) 12);
+       self->priv->event_box = (_tmp11_ = g_object_ref_sink ((GtkEventBox*) gtk_event_box_new ()), _g_object_unref0 (self->priv->event_box), _tmp11_);
+       gtk_container_add ((GtkContainer*) self->priv->event_box, (GtkWidget*) self->priv->main_vbox);
+       g_signal_connect_object ((GtkWidget*) self->priv->event_box, "button-press-event", (GCallback) _id_card_widget_button_press_cb_gtk_widget_button_press_event, self, 0);
+       gtk_box_pack_start ((GtkBox*) self, (GtkWidget*) self->priv->event_box, TRUE, TRUE, 0);
+       gtk_widget_show_all ((GtkWidget*) self);
+       gtk_widget_hide ((GtkWidget*) self->priv->hbutton_box);
+       id_card_widget_set_idcard_color (self);
+       _g_object_unref0 (id_data_label);
+       _g_free0 (text);
+       _g_free0 (issuer);
+       _g_object_unref0 (image);
+       _g_free0 (services_text);
+       return self;
+}
+
+
+IdCardWidget* id_card_widget_new (IdCard* id_card) {
+       return id_card_widget_construct (TYPE_ID_CARD_WIDGET, id_card);
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+static void id_card_widget_set_atk_name_description (IdCardWidget* self, GtkWidget* widget, const char* name, const char* description) {
+       AtkObject* atk_widget;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (widget != NULL);
+       g_return_if_fail (name != NULL);
+       g_return_if_fail (description != NULL);
+       atk_widget = _g_object_ref0 (gtk_widget_get_accessible (widget));
+       atk_object_set_name (atk_widget, name);
+       atk_object_set_description (atk_widget, description);
+       _g_object_unref0 (atk_widget);
+}
+
+
+IdCard* id_card_widget_get_id_card (IdCardWidget* self) {
+       IdCard* result;
+       g_return_val_if_fail (self != NULL, NULL);
+       result = self->priv->_id_card;
+       return result;
+}
+
+
+void id_card_widget_set_id_card (IdCardWidget* self, IdCard* value) {
+       IdCard* _tmp0_;
+       g_return_if_fail (self != NULL);
+       self->priv->_id_card = (_tmp0_ = _g_object_ref0 (value), _g_object_unref0 (self->priv->_id_card), _tmp0_);
+       g_object_notify ((GObject *) self, "id-card");
+}
+
+
+GtkButton* id_card_widget_get_delete_button (IdCardWidget* self) {
+       GtkButton* result;
+       g_return_val_if_fail (self != NULL, NULL);
+       result = self->priv->_delete_button;
+       return result;
+}
+
+
+static void id_card_widget_set_delete_button (IdCardWidget* self, GtkButton* value) {
+       GtkButton* _tmp0_;
+       g_return_if_fail (self != NULL);
+       self->priv->_delete_button = (_tmp0_ = _g_object_ref0 (value), _g_object_unref0 (self->priv->_delete_button), _tmp0_);
+       g_object_notify ((GObject *) self, "delete-button");
+}
+
+
+GtkButton* id_card_widget_get_details_button (IdCardWidget* self) {
+       GtkButton* result;
+       g_return_val_if_fail (self != NULL, NULL);
+       result = self->priv->_details_button;
+       return result;
+}
+
+
+static void id_card_widget_set_details_button (IdCardWidget* self, GtkButton* value) {
+       GtkButton* _tmp0_;
+       g_return_if_fail (self != NULL);
+       self->priv->_details_button = (_tmp0_ = _g_object_ref0 (value), _g_object_unref0 (self->priv->_details_button), _tmp0_);
+       g_object_notify ((GObject *) self, "details-button");
+}
+
+
+GtkButton* id_card_widget_get_send_button (IdCardWidget* self) {
+       GtkButton* result;
+       g_return_val_if_fail (self != NULL, NULL);
+       result = self->priv->_send_button;
+       return result;
+}
+
+
+static void id_card_widget_set_send_button (IdCardWidget* self, GtkButton* value) {
+       GtkButton* _tmp0_;
+       g_return_if_fail (self != NULL);
+       self->priv->_send_button = (_tmp0_ = _g_object_ref0 (value), _g_object_unref0 (self->priv->_send_button), _tmp0_);
+       g_object_notify ((GObject *) self, "send-button");
+}
+
+
+static void id_card_widget_class_init (IdCardWidgetClass * klass) {
+       id_card_widget_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (IdCardWidgetPrivate));
+       G_OBJECT_CLASS (klass)->get_property = id_card_widget_get_property;
+       G_OBJECT_CLASS (klass)->set_property = id_card_widget_set_property;
+       G_OBJECT_CLASS (klass)->finalize = id_card_widget_finalize;
+       g_object_class_install_property (G_OBJECT_CLASS (klass), ID_CARD_WIDGET_ID_CARD, g_param_spec_object ("id-card", "id-card", "id-card", TYPE_ID_CARD, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
+       g_object_class_install_property (G_OBJECT_CLASS (klass), ID_CARD_WIDGET_DELETE_BUTTON, g_param_spec_object ("delete-button", "delete-button", "delete-button", GTK_TYPE_BUTTON, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
+       g_object_class_install_property (G_OBJECT_CLASS (klass), ID_CARD_WIDGET_DETAILS_BUTTON, g_param_spec_object ("details-button", "details-button", "details-button", GTK_TYPE_BUTTON, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
+       g_object_class_install_property (G_OBJECT_CLASS (klass), ID_CARD_WIDGET_SEND_BUTTON, g_param_spec_object ("send-button", "send-button", "send-button", GTK_TYPE_BUTTON, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
+       g_signal_new ("expanded", TYPE_ID_CARD_WIDGET, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+       g_signal_new ("remove_id", TYPE_ID_CARD_WIDGET, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+       g_signal_new ("details_id", TYPE_ID_CARD_WIDGET, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+       g_signal_new ("send_id", TYPE_ID_CARD_WIDGET, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+}
+
+
+static void id_card_widget_instance_init (IdCardWidget * self) {
+       self->priv = ID_CARD_WIDGET_GET_PRIVATE (self);
+       self->priv->_id_card = NULL;
+       self->priv->_delete_button = NULL;
+       self->priv->_details_button = NULL;
+       self->priv->_send_button = NULL;
+}
+
+
+static void id_card_widget_finalize (GObject* obj) {
+       IdCardWidget * self;
+       self = ID_CARD_WIDGET (obj);
+       _g_object_unref0 (self->priv->_id_card);
+       _g_object_unref0 (self->priv->main_vbox);
+       _g_object_unref0 (self->priv->table);
+       _g_object_unref0 (self->priv->_delete_button);
+       _g_object_unref0 (self->priv->_details_button);
+       _g_object_unref0 (self->priv->_send_button);
+       _g_object_unref0 (self->priv->hbutton_box);
+       _g_object_unref0 (self->priv->event_box);
+       G_OBJECT_CLASS (id_card_widget_parent_class)->finalize (obj);
+}
+
+
+GType id_card_widget_get_type (void) {
+       static volatile gsize id_card_widget_type_id__volatile = 0;
+       if (g_once_init_enter (&id_card_widget_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (IdCardWidgetClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) id_card_widget_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (IdCardWidget), 0, (GInstanceInitFunc) id_card_widget_instance_init, NULL };
+               GType id_card_widget_type_id;
+               id_card_widget_type_id = g_type_register_static (GTK_TYPE_BOX, "IdCardWidget", &g_define_type_info, 0);
+               g_once_init_leave (&id_card_widget_type_id__volatile, id_card_widget_type_id);
+       }
+       return id_card_widget_type_id__volatile;
+}
+
+
+static void id_card_widget_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
+       IdCardWidget * self;
+       self = ID_CARD_WIDGET (object);
+       switch (property_id) {
+               case ID_CARD_WIDGET_ID_CARD:
+               g_value_set_object (value, id_card_widget_get_id_card (self));
+               break;
+               case ID_CARD_WIDGET_DELETE_BUTTON:
+               g_value_set_object (value, id_card_widget_get_delete_button (self));
+               break;
+               case ID_CARD_WIDGET_DETAILS_BUTTON:
+               g_value_set_object (value, id_card_widget_get_details_button (self));
+               break;
+               case ID_CARD_WIDGET_SEND_BUTTON:
+               g_value_set_object (value, id_card_widget_get_send_button (self));
+               break;
+               default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+               break;
+       }
+}
+
+
+static void id_card_widget_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
+       IdCardWidget * self;
+       self = ID_CARD_WIDGET (object);
+       switch (property_id) {
+               case ID_CARD_WIDGET_ID_CARD:
+               id_card_widget_set_id_card (self, g_value_get_object (value));
+               break;
+               case ID_CARD_WIDGET_DELETE_BUTTON:
+               id_card_widget_set_delete_button (self, g_value_get_object (value));
+               break;
+               case ID_CARD_WIDGET_DETAILS_BUTTON:
+               id_card_widget_set_details_button (self, g_value_get_object (value));
+               break;
+               case ID_CARD_WIDGET_SEND_BUTTON:
+               id_card_widget_set_send_button (self, g_value_get_object (value));
+               break;
+               default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+               break;
+       }
+}
+
+
+
+
diff --git a/src/moonshot-identities-manager.c b/src/moonshot-identities-manager.c
new file mode 100644 (file)
index 0000000..d619499
--- /dev/null
@@ -0,0 +1,526 @@
+/* moonshot-identities-manager.c generated by valac 0.10.4, the Vala compiler
+ * generated from moonshot-identities-manager.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <glib/gstdio.h>
+#include <config.h>
+#include <gdk-pixbuf/gdk-pixdata.h>
+
+
+#define TYPE_IDENTITIES_MANAGER (identities_manager_get_type ())
+#define IDENTITIES_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_IDENTITIES_MANAGER, IdentitiesManager))
+#define IDENTITIES_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_IDENTITIES_MANAGER, IdentitiesManagerClass))
+#define IS_IDENTITIES_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_IDENTITIES_MANAGER))
+#define IS_IDENTITIES_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_IDENTITIES_MANAGER))
+#define IDENTITIES_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_IDENTITIES_MANAGER, IdentitiesManagerClass))
+
+typedef struct _IdentitiesManager IdentitiesManager;
+typedef struct _IdentitiesManagerClass IdentitiesManagerClass;
+typedef struct _IdentitiesManagerPrivate IdentitiesManagerPrivate;
+
+#define TYPE_ID_CARD (id_card_get_type ())
+#define ID_CARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ID_CARD, IdCard))
+#define ID_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ID_CARD, IdCardClass))
+#define IS_ID_CARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ID_CARD))
+#define IS_ID_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ID_CARD))
+#define ID_CARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ID_CARD, IdCardClass))
+
+typedef struct _IdCard IdCard;
+typedef struct _IdCardClass IdCardClass;
+#define __g_slist_free_g_object_unref0(var) ((var == NULL) ? NULL : (var = (_g_slist_free_g_object_unref (var), NULL)))
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _g_key_file_free0(var) ((var == NULL) ? NULL : (var = (g_key_file_free (var), NULL)))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+struct _IdentitiesManager {
+       GObject parent_instance;
+       IdentitiesManagerPrivate * priv;
+       GSList* id_card_list;
+};
+
+struct _IdentitiesManagerClass {
+       GObjectClass parent_class;
+};
+
+
+static gpointer identities_manager_parent_class = NULL;
+
+GType identities_manager_get_type (void) G_GNUC_CONST;
+GType id_card_get_type (void) G_GNUC_CONST;
+enum  {
+       IDENTITIES_MANAGER_DUMMY_PROPERTY
+};
+static void _g_slist_free_g_object_unref (GSList* self);
+#define IDENTITIES_MANAGER_FILE_NAME "identities.txt"
+IdentitiesManager* identities_manager_new (void);
+IdentitiesManager* identities_manager_construct (GType object_type);
+static char* identities_manager_get_data_dir (IdentitiesManager* self);
+IdCard* id_card_new (void);
+IdCard* id_card_construct (GType object_type);
+void id_card_set_issuer (IdCard* self, const char* value);
+void id_card_set_username (IdCard* self, const char* value);
+void id_card_set_password (IdCard* self, const char* value);
+void id_card_set_services (IdCard* self, char** value, int value_length1);
+const char* id_card_get_username (IdCard* self);
+const char* id_card_get_issuer (IdCard* self);
+void id_card_set_nai (IdCard* self, const char* value);
+void identities_manager_store_id_cards (IdentitiesManager* self);
+const char* id_card_get_password (IdCard* self);
+char** id_card_get_services (IdCard* self, int* result_length1);
+IdCard* identities_manager_load_gss_eap_id_file (IdentitiesManager* self);
+GdkPixbuf* find_icon (const char* name, gint size);
+void id_card_set_pixbuf (IdCard* self, GdkPixbuf* value);
+void identities_manager_store_gss_eap_id_file (IdentitiesManager* self, IdCard* id_card);
+static void identities_manager_finalize (GObject* obj);
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static gint _vala_array_length (gpointer array);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+
+
+static void _g_slist_free_g_object_unref (GSList* self) {
+       g_slist_foreach (self, (GFunc) g_object_unref, NULL);
+       g_slist_free (self);
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+IdentitiesManager* identities_manager_construct (GType object_type) {
+       IdentitiesManager * self = NULL;
+       GKeyFile* key_file;
+       char* path;
+       char* filename;
+       gint identities_uris_length1;
+       gint _identities_uris_size_;
+       char** _tmp1_;
+       gsize _tmp0_;
+       char** identities_uris;
+       GError * _inner_error_ = NULL;
+       self = (IdentitiesManager*) g_object_new (object_type, NULL);
+       key_file = g_key_file_new ();
+       path = identities_manager_get_data_dir (self);
+       filename = g_build_filename (path, IDENTITIES_MANAGER_FILE_NAME, NULL);
+       {
+               g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, &_inner_error_);
+               if (_inner_error_ != NULL) {
+                       goto __catch0_g_error;
+               }
+       }
+       goto __finally0;
+       __catch0_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+                       fprintf (stdout, "Error: %s\n", e->message);
+                       _g_error_free0 (e);
+               }
+       }
+       __finally0:
+       if (_inner_error_ != NULL) {
+               _g_free0 (filename);
+               _g_free0 (path);
+               _g_key_file_free0 (key_file);
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return NULL;
+       }
+       identities_uris = (_tmp1_ = g_key_file_get_groups (key_file, &_tmp0_), identities_uris_length1 = _tmp0_, _identities_uris_size_ = identities_uris_length1, _tmp1_);
+       {
+               char** identity_collection;
+               int identity_collection_length1;
+               int identity_it;
+               identity_collection = identities_uris;
+               identity_collection_length1 = identities_uris_length1;
+               for (identity_it = 0; identity_it < identities_uris_length1; identity_it = identity_it + 1) {
+                       char* identity;
+                       identity = g_strdup (identity_collection[identity_it]);
+                       {
+                               {
+                                       IdCard* id_card;
+                                       char* _tmp2_;
+                                       char* _tmp3_;
+                                       char* _tmp4_;
+                                       char* _tmp5_;
+                                       char* _tmp6_;
+                                       char* _tmp7_;
+                                       gint _tmp9__length1;
+                                       gint __tmp9__size_;
+                                       char** _tmp10_;
+                                       gsize _tmp8_;
+                                       char** _tmp9_;
+                                       char** _tmp11_;
+                                       gint _tmp11__length1;
+                                       char** _tmp12_;
+                                       char* _tmp13_;
+                                       char* _tmp14_;
+                                       id_card = id_card_new ();
+                                       _tmp2_ = g_key_file_get_string (key_file, identity, "Issuer", &_inner_error_);
+                                       if (_inner_error_ != NULL) {
+                                               _g_object_unref0 (id_card);
+                                               goto __catch1_g_error;
+                                       }
+                                       id_card_set_issuer (id_card, _tmp3_ = _tmp2_);
+                                       _g_free0 (_tmp3_);
+                                       _tmp4_ = g_key_file_get_string (key_file, identity, "Username", &_inner_error_);
+                                       if (_inner_error_ != NULL) {
+                                               _g_object_unref0 (id_card);
+                                               goto __catch1_g_error;
+                                       }
+                                       id_card_set_username (id_card, _tmp5_ = _tmp4_);
+                                       _g_free0 (_tmp5_);
+                                       _tmp6_ = g_key_file_get_string (key_file, identity, "Password", &_inner_error_);
+                                       if (_inner_error_ != NULL) {
+                                               _g_object_unref0 (id_card);
+                                               goto __catch1_g_error;
+                                       }
+                                       id_card_set_password (id_card, _tmp7_ = _tmp6_);
+                                       _g_free0 (_tmp7_);
+                                       _tmp9_ = (_tmp10_ = g_key_file_get_string_list (key_file, identity, "Services", &_tmp8_, &_inner_error_), _tmp9__length1 = _tmp8_, __tmp9__size_ = _tmp9__length1, _tmp10_);
+                                       if (_inner_error_ != NULL) {
+                                               _g_object_unref0 (id_card);
+                                               goto __catch1_g_error;
+                                       }
+                                       _tmp12_ = (_tmp11_ = _tmp9_, _tmp11__length1 = _tmp9__length1, _tmp11_);
+                                       id_card_set_services (id_card, _tmp12_, _tmp9__length1);
+                                       _tmp11_ = (_vala_array_free (_tmp11_, _tmp11__length1, (GDestroyNotify) g_free), NULL);
+                                       id_card_set_nai (id_card, _tmp14_ = g_strconcat (_tmp13_ = g_strconcat (id_card_get_username (id_card), "@", NULL), id_card_get_issuer (id_card), NULL));
+                                       _g_free0 (_tmp14_);
+                                       _g_free0 (_tmp13_);
+                                       self->id_card_list = g_slist_prepend (self->id_card_list, _g_object_ref0 (id_card));
+                                       _g_object_unref0 (id_card);
+                               }
+                               goto __finally1;
+                               __catch1_g_error:
+                               {
+                                       GError * e;
+                                       e = _inner_error_;
+                                       _inner_error_ = NULL;
+                                       {
+                                               fprintf (stdout, "Error:  %s\n", e->message);
+                                               _g_error_free0 (e);
+                                       }
+                               }
+                               __finally1:
+                               if (_inner_error_ != NULL) {
+                                       _g_free0 (identity);
+                                       identities_uris = (_vala_array_free (identities_uris, identities_uris_length1, (GDestroyNotify) g_free), NULL);
+                                       _g_free0 (filename);
+                                       _g_free0 (path);
+                                       _g_key_file_free0 (key_file);
+                                       g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                                       g_clear_error (&_inner_error_);
+                                       return NULL;
+                               }
+                               _g_free0 (identity);
+                       }
+               }
+       }
+       identities_uris = (_vala_array_free (identities_uris, identities_uris_length1, (GDestroyNotify) g_free), NULL);
+       _g_free0 (filename);
+       _g_free0 (path);
+       _g_key_file_free0 (key_file);
+       return self;
+}
+
+
+IdentitiesManager* identities_manager_new (void) {
+       return identities_manager_construct (TYPE_IDENTITIES_MANAGER);
+}
+
+
+void identities_manager_store_id_cards (IdentitiesManager* self) {
+       GKeyFile* key_file;
+       char* text;
+       GError * _inner_error_ = NULL;
+       g_return_if_fail (self != NULL);
+       key_file = g_key_file_new ();
+       {
+               GSList* id_card_collection;
+               GSList* id_card_it;
+               id_card_collection = self->id_card_list;
+               for (id_card_it = id_card_collection; id_card_it != NULL; id_card_it = id_card_it->next) {
+                       IdCard* id_card;
+                       id_card = _g_object_ref0 ((IdCard*) id_card_it->data);
+                       {
+                               gint _tmp0_;
+                               g_key_file_set_string (key_file, id_card_get_issuer (id_card), "Issuer", id_card_get_issuer (id_card));
+                               g_key_file_set_string (key_file, id_card_get_issuer (id_card), "Username", id_card_get_username (id_card));
+                               g_key_file_set_string (key_file, id_card_get_issuer (id_card), "Password", id_card_get_password (id_card));
+                               g_key_file_set_string_list (key_file, id_card_get_issuer (id_card), "Services", (const gchar* const*) id_card_get_services (id_card, &_tmp0_), _tmp0_);
+                               _g_object_unref0 (id_card);
+                       }
+               }
+       }
+       text = g_key_file_to_data (key_file, NULL, NULL);
+       {
+               char* path;
+               char* filename;
+               path = identities_manager_get_data_dir (self);
+               filename = g_build_filename (path, IDENTITIES_MANAGER_FILE_NAME, NULL);
+               g_file_set_contents (filename, text, (gssize) (-1), &_inner_error_);
+               if (_inner_error_ != NULL) {
+                       _g_free0 (filename);
+                       _g_free0 (path);
+                       goto __catch2_g_error;
+               }
+               _g_free0 (filename);
+               _g_free0 (path);
+       }
+       goto __finally2;
+       __catch2_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+                       fprintf (stdout, "Error:  %s\n", e->message);
+                       _g_error_free0 (e);
+               }
+       }
+       __finally2:
+       if (_inner_error_ != NULL) {
+               _g_free0 (text);
+               _g_key_file_free0 (key_file);
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return;
+       }
+       _g_free0 (text);
+       _g_key_file_free0 (key_file);
+}
+
+
+static char* identities_manager_get_data_dir (IdentitiesManager* self) {
+       char* result = NULL;
+       char* path;
+       char* _tmp0_;
+       g_return_val_if_fail (self != NULL, NULL);
+       path = NULL;
+       path = (_tmp0_ = g_build_filename (g_get_user_data_dir (), PACKAGE_TARNAME, NULL), _g_free0 (path), _tmp0_);
+       if (!g_file_test (path, G_FILE_TEST_EXISTS)) {
+               g_mkdir (path, 0700);
+       }
+       result = path;
+       return result;
+}
+
+
+IdCard* identities_manager_load_gss_eap_id_file (IdentitiesManager* self) {
+       IdCard* result = NULL;
+       IdCard* id_card;
+       char* text;
+       char* id_card_data[2] = {0};
+       char* filename;
+       char** _tmp2_;
+       char** _tmp3_;
+       char** _tmp4_ = NULL;
+       char** _tmp5_;
+       gint _tmp5__length1;
+       char** _tmp6_;
+       char* _tmp7_;
+       char* _tmp8_;
+       GdkPixbuf* _tmp9_;
+       GError * _inner_error_ = NULL;
+       g_return_val_if_fail (self != NULL, NULL);
+       id_card = id_card_new ();
+       text = NULL;
+       filename = g_build_filename (g_get_home_dir (), ".gss_eap_id", NULL);
+       {
+               char* _tmp0_ = NULL;
+               char* _tmp1_;
+               g_file_get_contents (filename, &_tmp0_, NULL, &_inner_error_);
+               text = (_tmp1_ = _tmp0_, _g_free0 (text), _tmp1_);
+               if (_inner_error_ != NULL) {
+                       goto __catch3_g_error;
+               }
+       }
+       goto __finally3;
+       __catch3_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+                       result = NULL;
+                       _g_error_free0 (e);
+                       _g_free0 (filename);
+                       _vala_array_destroy (id_card_data, 2, (GDestroyNotify) g_free);
+                       _g_free0 (text);
+                       _g_object_unref0 (id_card);
+                       return result;
+               }
+       }
+       __finally3:
+       if (_inner_error_ != NULL) {
+               _g_free0 (filename);
+               _vala_array_destroy (id_card_data, 2, (GDestroyNotify) g_free);
+               _g_free0 (text);
+               _g_object_unref0 (id_card);
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return NULL;
+       }
+       if (_vala_strcmp0 (text, "") == 0) {
+               result = NULL;
+               _g_free0 (filename);
+               _vala_array_destroy (id_card_data, 2, (GDestroyNotify) g_free);
+               _g_free0 (text);
+               _g_object_unref0 (id_card);
+               return result;
+       }
+       memcpy (id_card_data, _tmp2_ = g_strsplit (text, "\n", 2), 2 * sizeof (char*));
+       if (_vala_strcmp0 (id_card_data[1], "") != 0) {
+               id_card_set_password (id_card, id_card_data[1]);
+       }
+       memcpy (id_card_data, _tmp3_ = g_strsplit (id_card_data[0], "@", 2), 2 * sizeof (char*));
+       id_card_set_username (id_card, id_card_data[0]);
+       id_card_set_issuer (id_card, id_card_data[1]);
+       _tmp6_ = (_tmp5_ = (_tmp4_ = g_new0 (char*, 3 + 1), _tmp4_[0] = g_strdup ("email"), _tmp4_[1] = g_strdup ("jabber"), _tmp4_[2] = g_strdup ("irc"), _tmp4_), _tmp5__length1 = 3, _tmp5_);
+       id_card_set_services (id_card, _tmp6_, 3);
+       _tmp5_ = (_vala_array_free (_tmp5_, _tmp5__length1, (GDestroyNotify) g_free), NULL);
+       id_card_set_nai (id_card, _tmp8_ = g_strconcat (_tmp7_ = g_strconcat (id_card_get_username (id_card), "@", NULL), id_card_get_issuer (id_card), NULL));
+       _g_free0 (_tmp8_);
+       _g_free0 (_tmp7_);
+       id_card_set_pixbuf (id_card, _tmp9_ = find_icon ("avatar-default", 48));
+       _g_object_unref0 (_tmp9_);
+       result = id_card;
+       _g_free0 (filename);
+       _vala_array_destroy (id_card_data, 2, (GDestroyNotify) g_free);
+       _g_free0 (text);
+       return result;
+}
+
+
+void identities_manager_store_gss_eap_id_file (IdentitiesManager* self, IdCard* id_card) {
+       char* text;
+       char* filename;
+       GError * _inner_error_ = NULL;
+       g_return_if_fail (self != NULL);
+       text = g_strdup ("");
+       if (id_card != NULL) {
+               char* _tmp0_;
+               char* _tmp1_;
+               char* _tmp2_;
+               char* _tmp3_;
+               text = (_tmp3_ = g_strconcat (_tmp2_ = g_strconcat (_tmp1_ = g_strconcat (_tmp0_ = g_strconcat (id_card_get_username (id_card), "@", NULL), id_card_get_issuer (id_card), NULL), "\n", NULL), id_card_get_password (id_card), NULL), _g_free0 (text), _tmp3_);
+               _g_free0 (_tmp2_);
+               _g_free0 (_tmp1_);
+               _g_free0 (_tmp0_);
+       }
+       filename = g_build_filename (g_get_home_dir (), ".gss_eap_id", NULL);
+       {
+               g_file_set_contents (filename, text, (gssize) (-1), &_inner_error_);
+               if (_inner_error_ != NULL) {
+                       goto __catch4_g_error;
+               }
+       }
+       goto __finally4;
+       __catch4_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+                       fprintf (stdout, "Error:  %s\n", e->message);
+                       _g_error_free0 (e);
+               }
+       }
+       __finally4:
+       if (_inner_error_ != NULL) {
+               _g_free0 (filename);
+               _g_free0 (text);
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return;
+       }
+       _g_free0 (filename);
+       _g_free0 (text);
+}
+
+
+static void identities_manager_class_init (IdentitiesManagerClass * klass) {
+       identities_manager_parent_class = g_type_class_peek_parent (klass);
+       G_OBJECT_CLASS (klass)->finalize = identities_manager_finalize;
+}
+
+
+static void identities_manager_instance_init (IdentitiesManager * self) {
+}
+
+
+static void identities_manager_finalize (GObject* obj) {
+       IdentitiesManager * self;
+       self = IDENTITIES_MANAGER (obj);
+       __g_slist_free_g_object_unref0 (self->id_card_list);
+       G_OBJECT_CLASS (identities_manager_parent_class)->finalize (obj);
+}
+
+
+GType identities_manager_get_type (void) {
+       static volatile gsize identities_manager_type_id__volatile = 0;
+       if (g_once_init_enter (&identities_manager_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (IdentitiesManagerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) identities_manager_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (IdentitiesManager), 0, (GInstanceInitFunc) identities_manager_instance_init, NULL };
+               GType identities_manager_type_id;
+               identities_manager_type_id = g_type_register_static (G_TYPE_OBJECT, "IdentitiesManager", &g_define_type_info, 0);
+               g_once_init_leave (&identities_manager_type_id__volatile, identities_manager_type_id);
+       }
+       return identities_manager_type_id__volatile;
+}
+
+
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+       if ((array != NULL) && (destroy_func != NULL)) {
+               int i;
+               for (i = 0; i < array_length; i = i + 1) {
+                       if (((gpointer*) array)[i] != NULL) {
+                               destroy_func (((gpointer*) array)[i]);
+                       }
+               }
+       }
+}
+
+
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+       _vala_array_destroy (array, array_length, destroy_func);
+       g_free (array);
+}
+
+
+static gint _vala_array_length (gpointer array) {
+       int length;
+       length = 0;
+       if (array) {
+               while (((gpointer*) array)[length]) {
+                       length++;
+               }
+       }
+       return length;
+}
+
+
+static int _vala_strcmp0 (const char * str1, const char * str2) {
+       if (str1 == NULL) {
+               return -(str1 != str2);
+       }
+       if (str2 == NULL) {
+               return str1 != str2;
+       }
+       return strcmp (str1, str2);
+}
+
+
+
+
diff --git a/src/moonshot-identity-request.c b/src/moonshot-identity-request.c
new file mode 100644 (file)
index 0000000..39b2d51
--- /dev/null
@@ -0,0 +1,238 @@
+/* moonshot-identity-request.c generated by valac 0.10.4, the Vala compiler
+ * generated from moonshot-identity-request.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define TYPE_IDENTITY_REQUEST (identity_request_get_type ())
+#define IDENTITY_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_IDENTITY_REQUEST, IdentityRequest))
+#define IDENTITY_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_IDENTITY_REQUEST, IdentityRequestClass))
+#define IS_IDENTITY_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_IDENTITY_REQUEST))
+#define IS_IDENTITY_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_IDENTITY_REQUEST))
+#define IDENTITY_REQUEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_IDENTITY_REQUEST, IdentityRequestClass))
+
+typedef struct _IdentityRequest IdentityRequest;
+typedef struct _IdentityRequestClass IdentityRequestClass;
+typedef struct _IdentityRequestPrivate IdentityRequestPrivate;
+
+#define TYPE_ID_CARD (id_card_get_type ())
+#define ID_CARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ID_CARD, IdCard))
+#define ID_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ID_CARD, IdCardClass))
+#define IS_ID_CARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ID_CARD))
+#define IS_ID_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ID_CARD))
+#define ID_CARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ID_CARD, IdCardClass))
+
+typedef struct _IdCard IdCard;
+typedef struct _IdCardClass IdCardClass;
+
+#define TYPE_MAIN_WINDOW (main_window_get_type ())
+#define MAIN_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MAIN_WINDOW, MainWindow))
+#define MAIN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MAIN_WINDOW, MainWindowClass))
+#define IS_MAIN_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MAIN_WINDOW))
+#define IS_MAIN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MAIN_WINDOW))
+#define MAIN_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MAIN_WINDOW, MainWindowClass))
+
+typedef struct _MainWindow MainWindow;
+typedef struct _MainWindowClass MainWindowClass;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+typedef struct _Block1Data Block1Data;
+
+typedef void (*ReturnIdentityCallback) (IdentityRequest* request, void* user_data);
+struct _IdentityRequest {
+       GObject parent_instance;
+       IdentityRequestPrivate * priv;
+       IdCard* id_card;
+       gboolean complete;
+};
+
+struct _IdentityRequestClass {
+       GObjectClass parent_class;
+};
+
+struct _IdentityRequestPrivate {
+       MainWindow* main_window;
+       char* nai;
+       char* password;
+       char* certificate;
+       ReturnIdentityCallback callback;
+       gpointer callback_target;
+       GDestroyNotify callback_target_destroy_notify;
+};
+
+struct _Block1Data {
+       int _ref_count_;
+       IdentityRequest * self;
+       ReturnIdentityCallback cb;
+       gpointer cb_target;
+       GDestroyNotify cb_target_destroy_notify;
+};
+
+
+static gpointer identity_request_parent_class = NULL;
+
+GType identity_request_get_type (void) G_GNUC_CONST;
+GType id_card_get_type (void) G_GNUC_CONST;
+GType main_window_get_type (void) G_GNUC_CONST;
+#define IDENTITY_REQUEST_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_IDENTITY_REQUEST, IdentityRequestPrivate))
+enum  {
+       IDENTITY_REQUEST_DUMMY_PROPERTY
+};
+IdentityRequest* identity_request_new (MainWindow* main_window, const char* nai, const char* password, const char* certificate);
+IdentityRequest* identity_request_construct (GType object_type, MainWindow* main_window, const char* nai, const char* password, const char* certificate);
+void identity_request_set_callback (IdentityRequest* self, ReturnIdentityCallback cb, void* cb_target, GDestroyNotify cb_target_destroy_notify);
+static void _lambda0_ (IdentityRequest* IdCard, Block1Data* _data1_);
+static void __lambda0__return_identity_callback (IdentityRequest* request, gpointer self);
+static Block1Data* block1_data_ref (Block1Data* _data1_);
+static void block1_data_unref (Block1Data* _data1_);
+gboolean identity_request_execute (IdentityRequest* self);
+void main_window_select_identity (MainWindow* self, IdentityRequest* request);
+void identity_request_return_identity (IdentityRequest* self, IdCard* id_card);
+static void identity_request_finalize (GObject* obj);
+
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+IdentityRequest* identity_request_construct (GType object_type, MainWindow* main_window, const char* nai, const char* password, const char* certificate) {
+       IdentityRequest * self = NULL;
+       MainWindow* _tmp0_;
+       char* _tmp1_;
+       char* _tmp2_;
+       char* _tmp3_;
+       g_return_val_if_fail (main_window != NULL, NULL);
+       g_return_val_if_fail (nai != NULL, NULL);
+       g_return_val_if_fail (password != NULL, NULL);
+       g_return_val_if_fail (certificate != NULL, NULL);
+       self = (IdentityRequest*) g_object_new (object_type, NULL);
+       self->priv->main_window = (_tmp0_ = _g_object_ref0 (main_window), _g_object_unref0 (self->priv->main_window), _tmp0_);
+       self->priv->nai = (_tmp1_ = g_strdup (nai), _g_free0 (self->priv->nai), _tmp1_);
+       self->priv->password = (_tmp2_ = g_strdup (password), _g_free0 (self->priv->password), _tmp2_);
+       self->priv->certificate = (_tmp3_ = g_strdup (certificate), _g_free0 (self->priv->certificate), _tmp3_);
+       return self;
+}
+
+
+IdentityRequest* identity_request_new (MainWindow* main_window, const char* nai, const char* password, const char* certificate) {
+       return identity_request_construct (TYPE_IDENTITY_REQUEST, main_window, nai, password, certificate);
+}
+
+
+static void _lambda0_ (IdentityRequest* IdCard, Block1Data* _data1_) {
+       IdentityRequest * self;
+       self = _data1_->self;
+       g_return_if_fail (IdCard != NULL);
+       _data1_->cb (IdCard, _data1_->cb_target);
+}
+
+
+static void __lambda0__return_identity_callback (IdentityRequest* request, gpointer self) {
+       _lambda0_ (request, self);
+}
+
+
+static Block1Data* block1_data_ref (Block1Data* _data1_) {
+       g_atomic_int_inc (&_data1_->_ref_count_);
+       return _data1_;
+}
+
+
+static void block1_data_unref (Block1Data* _data1_) {
+       if (g_atomic_int_dec_and_test (&_data1_->_ref_count_)) {
+               _g_object_unref0 (_data1_->self);
+               (_data1_->cb_target_destroy_notify == NULL) ? NULL : (_data1_->cb_target_destroy_notify (_data1_->cb_target), NULL);
+               _data1_->cb = NULL;
+               _data1_->cb_target = NULL;
+               _data1_->cb_target_destroy_notify = NULL;
+               g_slice_free (Block1Data, _data1_);
+       }
+}
+
+
+void identity_request_set_callback (IdentityRequest* self, ReturnIdentityCallback cb, void* cb_target, GDestroyNotify cb_target_destroy_notify) {
+       Block1Data* _data1_;
+       ReturnIdentityCallback _tmp0_;
+       g_return_if_fail (self != NULL);
+       _data1_ = g_slice_new0 (Block1Data);
+       _data1_->_ref_count_ = 1;
+       _data1_->self = g_object_ref (self);
+       _data1_->cb = cb;
+       _data1_->cb_target = cb_target;
+       _data1_->cb_target_destroy_notify = cb_target_destroy_notify;
+       self->priv->callback = (_tmp0_ = __lambda0__return_identity_callback, ((self->priv->callback_target_destroy_notify == NULL) ? NULL : (self->priv->callback_target_destroy_notify (self->priv->callback_target), NULL), self->priv->callback = NULL, self->priv->callback_target = NULL, self->priv->callback_target_destroy_notify = NULL), self->priv->callback_target = block1_data_ref (_data1_), self->priv->callback_target_destroy_notify = block1_data_unref, _tmp0_);
+       block1_data_unref (_data1_);
+}
+
+
+gboolean identity_request_execute (IdentityRequest* self) {
+       gboolean result = FALSE;
+       g_return_val_if_fail (self != NULL, FALSE);
+       main_window_select_identity (self->priv->main_window, self);
+       result = FALSE;
+       return result;
+}
+
+
+void identity_request_return_identity (IdentityRequest* self, IdCard* id_card) {
+       IdCard* _tmp0_;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (self->priv->callback != NULL);
+       self->id_card = (_tmp0_ = _g_object_ref0 (id_card), _g_object_unref0 (self->id_card), _tmp0_);
+       self->complete = TRUE;
+       self->priv->callback (self, self->priv->callback_target);
+}
+
+
+static void identity_request_class_init (IdentityRequestClass * klass) {
+       identity_request_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (IdentityRequestPrivate));
+       G_OBJECT_CLASS (klass)->finalize = identity_request_finalize;
+}
+
+
+static void identity_request_instance_init (IdentityRequest * self) {
+       self->priv = IDENTITY_REQUEST_GET_PRIVATE (self);
+       self->id_card = NULL;
+       self->complete = FALSE;
+       self->priv->callback = NULL;
+}
+
+
+static void identity_request_finalize (GObject* obj) {
+       IdentityRequest * self;
+       self = IDENTITY_REQUEST (obj);
+       _g_object_unref0 (self->id_card);
+       _g_object_unref0 (self->priv->main_window);
+       _g_free0 (self->priv->nai);
+       _g_free0 (self->priv->password);
+       _g_free0 (self->priv->certificate);
+       (self->priv->callback_target_destroy_notify == NULL) ? NULL : (self->priv->callback_target_destroy_notify (self->priv->callback_target), NULL);
+       self->priv->callback = NULL;
+       self->priv->callback_target = NULL;
+       self->priv->callback_target_destroy_notify = NULL;
+       G_OBJECT_CLASS (identity_request_parent_class)->finalize (obj);
+}
+
+
+GType identity_request_get_type (void) {
+       static volatile gsize identity_request_type_id__volatile = 0;
+       if (g_once_init_enter (&identity_request_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (IdentityRequestClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) identity_request_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (IdentityRequest), 0, (GInstanceInitFunc) identity_request_instance_init, NULL };
+               GType identity_request_type_id;
+               identity_request_type_id = g_type_register_static (G_TYPE_OBJECT, "IdentityRequest", &g_define_type_info, 0);
+               g_once_init_leave (&identity_request_type_id__volatile, identity_request_type_id);
+       }
+       return identity_request_type_id__volatile;
+}
+
+
+
+
diff --git a/src/moonshot-password-dialog.c b/src/moonshot-password-dialog.c
new file mode 100644 (file)
index 0000000..0e636c6
--- /dev/null
@@ -0,0 +1,200 @@
+/* moonshot-password-dialog.c generated by valac 0.10.4, the Vala compiler
+ * generated from moonshot-password-dialog.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n-lib.h>
+#include <float.h>
+#include <math.h>
+#include <atk/atk.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define TYPE_ADD_PASSWORD_DIALOG (add_password_dialog_get_type ())
+#define ADD_PASSWORD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ADD_PASSWORD_DIALOG, AddPasswordDialog))
+#define ADD_PASSWORD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ADD_PASSWORD_DIALOG, AddPasswordDialogClass))
+#define IS_ADD_PASSWORD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ADD_PASSWORD_DIALOG))
+#define IS_ADD_PASSWORD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ADD_PASSWORD_DIALOG))
+#define ADD_PASSWORD_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ADD_PASSWORD_DIALOG, AddPasswordDialogClass))
+
+typedef struct _AddPasswordDialog AddPasswordDialog;
+typedef struct _AddPasswordDialogClass AddPasswordDialogClass;
+typedef struct _AddPasswordDialogPrivate AddPasswordDialogPrivate;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+struct _AddPasswordDialog {
+       GtkDialog parent_instance;
+       AddPasswordDialogPrivate * priv;
+};
+
+struct _AddPasswordDialogClass {
+       GtkDialogClass parent_class;
+};
+
+struct _AddPasswordDialogPrivate {
+       GtkEntry* password_entry;
+       GtkCheckButton* remember_checkbutton;
+};
+
+
+static gpointer add_password_dialog_parent_class = NULL;
+
+GType add_password_dialog_get_type (void) G_GNUC_CONST;
+#define ADD_PASSWORD_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_ADD_PASSWORD_DIALOG, AddPasswordDialogPrivate))
+enum  {
+       ADD_PASSWORD_DIALOG_DUMMY_PROPERTY,
+       ADD_PASSWORD_DIALOG_PASSWORD,
+       ADD_PASSWORD_DIALOG_REMEMBER
+};
+AddPasswordDialog* add_password_dialog_new (void);
+AddPasswordDialog* add_password_dialog_construct (GType object_type);
+static void add_password_dialog_set_atk_relation (AddPasswordDialog* self, GtkWidget* widget, GtkWidget* target_widget, AtkRelationType relationship);
+const char* add_password_dialog_get_password (AddPasswordDialog* self);
+gboolean add_password_dialog_get_remember (AddPasswordDialog* self);
+static void add_password_dialog_finalize (GObject* obj);
+static void add_password_dialog_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
+
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+AddPasswordDialog* add_password_dialog_construct (GType object_type) {
+       AddPasswordDialog * self;
+       GtkWidget* content_area;
+       GtkLabel* password_label;
+       GtkEntry* _tmp0_;
+       GtkCheckButton* _tmp1_;
+       GtkTable* table;
+       GtkVBox* vbox;
+       self = g_object_newv (object_type, 0, NULL);
+       gtk_window_set_title ((GtkWindow*) self, _ ("Please enter your password"));
+       gtk_window_set_modal ((GtkWindow*) self, TRUE);
+       gtk_dialog_add_buttons ((GtkDialog*) self, _ ("Send"), GTK_RESPONSE_OK, _ ("Return to application"), GTK_RESPONSE_CANCEL, NULL);
+       gtk_dialog_set_default_response ((GtkDialog*) self, (gint) GTK_RESPONSE_OK);
+       content_area = _g_object_ref0 (gtk_dialog_get_content_area ((GtkDialog*) self));
+       gtk_box_set_spacing (GTK_BOX (content_area), 12);
+       password_label = g_object_ref_sink ((GtkLabel*) gtk_label_new (_ ("Password:")));
+       gtk_misc_set_alignment ((GtkMisc*) password_label, (float) 1, (float) 0.5);
+       self->priv->password_entry = (_tmp0_ = g_object_ref_sink ((GtkEntry*) gtk_entry_new ()), _g_object_unref0 (self->priv->password_entry), _tmp0_);
+       gtk_entry_set_invisible_char (self->priv->password_entry, (gunichar) '*');
+       gtk_entry_set_visibility (self->priv->password_entry, FALSE);
+       gtk_entry_set_activates_default (self->priv->password_entry, TRUE);
+       self->priv->remember_checkbutton = (_tmp1_ = g_object_ref_sink ((GtkCheckButton*) gtk_check_button_new_with_label (_ ("Remember password"))), _g_object_unref0 (self->priv->remember_checkbutton), _tmp1_);
+       add_password_dialog_set_atk_relation (self, (GtkWidget*) self->priv->password_entry, (GtkWidget*) self->priv->password_entry, ATK_RELATION_LABEL_FOR);
+       table = g_object_ref_sink ((GtkTable*) gtk_table_new ((guint) 2, (guint) 2, FALSE));
+       gtk_table_set_col_spacings (table, (guint) 10);
+       gtk_table_set_row_spacings (table, (guint) 10);
+       gtk_table_attach_defaults (table, (GtkWidget*) password_label, (guint) 0, (guint) 1, (guint) 2, (guint) 3);
+       gtk_table_attach_defaults (table, (GtkWidget*) self->priv->password_entry, (guint) 1, (guint) 2, (guint) 2, (guint) 3);
+       gtk_table_attach_defaults (table, (GtkWidget*) self->priv->remember_checkbutton, (guint) 1, (guint) 2, (guint) 3, (guint) 4);
+       vbox = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 0));
+       gtk_container_set_border_width ((GtkContainer*) vbox, (guint) 6);
+       gtk_box_pack_start ((GtkBox*) vbox, (GtkWidget*) table, FALSE, FALSE, (guint) 0);
+       gtk_container_add (GTK_CONTAINER (content_area), (GtkWidget*) vbox);
+       gtk_container_set_border_width ((GtkContainer*) self, (guint) 6);
+       gtk_window_set_resizable ((GtkWindow*) self, FALSE);
+       gtk_widget_show_all ((GtkWidget*) self);
+       _g_object_unref0 (vbox);
+       _g_object_unref0 (table);
+       _g_object_unref0 (password_label);
+       _g_object_unref0 (content_area);
+       return self;
+}
+
+
+AddPasswordDialog* add_password_dialog_new (void) {
+       return add_password_dialog_construct (TYPE_ADD_PASSWORD_DIALOG);
+}
+
+
+static void add_password_dialog_set_atk_relation (AddPasswordDialog* self, GtkWidget* widget, GtkWidget* target_widget, AtkRelationType relationship) {
+       AtkObject* atk_widget;
+       AtkObject* atk_target_widget;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (widget != NULL);
+       g_return_if_fail (target_widget != NULL);
+       atk_widget = _g_object_ref0 (gtk_widget_get_accessible (widget));
+       atk_target_widget = _g_object_ref0 (gtk_widget_get_accessible (target_widget));
+       atk_object_add_relationship (atk_widget, relationship, atk_target_widget);
+       _g_object_unref0 (atk_target_widget);
+       _g_object_unref0 (atk_widget);
+}
+
+
+const char* add_password_dialog_get_password (AddPasswordDialog* self) {
+       const char* result;
+       g_return_val_if_fail (self != NULL, NULL);
+       result = gtk_entry_get_text (self->priv->password_entry);
+       return result;
+}
+
+
+gboolean add_password_dialog_get_remember (AddPasswordDialog* self) {
+       gboolean result;
+       g_return_val_if_fail (self != NULL, FALSE);
+       result = gtk_toggle_button_get_active ((GtkToggleButton*) self->priv->remember_checkbutton);
+       return result;
+}
+
+
+static void add_password_dialog_class_init (AddPasswordDialogClass * klass) {
+       add_password_dialog_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (AddPasswordDialogPrivate));
+       G_OBJECT_CLASS (klass)->get_property = add_password_dialog_get_property;
+       G_OBJECT_CLASS (klass)->finalize = add_password_dialog_finalize;
+       g_object_class_install_property (G_OBJECT_CLASS (klass), ADD_PASSWORD_DIALOG_PASSWORD, g_param_spec_string ("password", "password", "password", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
+       g_object_class_install_property (G_OBJECT_CLASS (klass), ADD_PASSWORD_DIALOG_REMEMBER, g_param_spec_boolean ("remember", "remember", "remember", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
+}
+
+
+static void add_password_dialog_instance_init (AddPasswordDialog * self) {
+       self->priv = ADD_PASSWORD_DIALOG_GET_PRIVATE (self);
+}
+
+
+static void add_password_dialog_finalize (GObject* obj) {
+       AddPasswordDialog * self;
+       self = ADD_PASSWORD_DIALOG (obj);
+       _g_object_unref0 (self->priv->password_entry);
+       _g_object_unref0 (self->priv->remember_checkbutton);
+       G_OBJECT_CLASS (add_password_dialog_parent_class)->finalize (obj);
+}
+
+
+GType add_password_dialog_get_type (void) {
+       static volatile gsize add_password_dialog_type_id__volatile = 0;
+       if (g_once_init_enter (&add_password_dialog_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (AddPasswordDialogClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) add_password_dialog_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (AddPasswordDialog), 0, (GInstanceInitFunc) add_password_dialog_instance_init, NULL };
+               GType add_password_dialog_type_id;
+               add_password_dialog_type_id = g_type_register_static (GTK_TYPE_DIALOG, "AddPasswordDialog", &g_define_type_info, 0);
+               g_once_init_leave (&add_password_dialog_type_id__volatile, add_password_dialog_type_id);
+       }
+       return add_password_dialog_type_id__volatile;
+}
+
+
+static void add_password_dialog_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
+       AddPasswordDialog * self;
+       self = ADD_PASSWORD_DIALOG (object);
+       switch (property_id) {
+               case ADD_PASSWORD_DIALOG_PASSWORD:
+               g_value_set_string (value, add_password_dialog_get_password (self));
+               break;
+               case ADD_PASSWORD_DIALOG_REMEMBER:
+               g_value_set_boolean (value, add_password_dialog_get_remember (self));
+               break;
+               default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+               break;
+       }
+}
+
+
+
+
diff --git a/src/moonshot-utils.c b/src/moonshot-utils.c
new file mode 100644 (file)
index 0000000..57df141
--- /dev/null
@@ -0,0 +1,79 @@
+/* moonshot-utils.c generated by valac 0.10.4, the Vala compiler
+ * generated from moonshot-utils.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gtk/gtk.h>
+#include <gdk-pixbuf/gdk-pixdata.h>
+#include <stdio.h>
+
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+
+
+
+GdkPixbuf* find_icon_sized (const char* name, GtkIconSize icon_size);
+GdkPixbuf* find_icon (const char* name, gint size);
+
+
+
+GdkPixbuf* find_icon_sized (const char* name, GtkIconSize icon_size) {
+       GdkPixbuf* result = NULL;
+       gint width = 0;
+       gint height = 0;
+       g_return_val_if_fail (name != NULL, NULL);
+       gtk_icon_size_lookup (icon_size, &width, &height);
+       result = find_icon (name, width);
+       return result;
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+GdkPixbuf* find_icon (const char* name, gint size) {
+       GdkPixbuf* result = NULL;
+       GError * _inner_error_ = NULL;
+       g_return_val_if_fail (name != NULL, NULL);
+       {
+               GtkIconTheme* icon_theme;
+               GdkPixbuf* _tmp0_;
+               icon_theme = _g_object_ref0 (gtk_icon_theme_get_default ());
+               _tmp0_ = gtk_icon_theme_load_icon (icon_theme, name, size, GTK_ICON_LOOKUP_FORCE_SIZE, &_inner_error_);
+               if (_inner_error_ != NULL) {
+                       _g_object_unref0 (icon_theme);
+                       goto __catch7_g_error;
+               }
+               result = _tmp0_;
+               _g_object_unref0 (icon_theme);
+               return result;
+       }
+       goto __finally7;
+       __catch7_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+                       fprintf (stdout, "Error loading icon '%s': %s\n", name, e->message);
+                       result = NULL;
+                       _g_error_free0 (e);
+                       return result;
+               }
+       }
+       __finally7:
+       {
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return NULL;
+       }
+}
+
+
+
+
diff --git a/src/moonshot-window.c b/src/moonshot-window.c
new file mode 100644 (file)
index 0000000..3d462a5
--- /dev/null
@@ -0,0 +1,1426 @@
+/* moonshot-window.c generated by valac 0.10.4, the Vala compiler
+ * generated from moonshot-window.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gdk-pixbuf/gdk-pixdata.h>
+#include <gdk/gdk.h>
+#include <glib/gi18n-lib.h>
+#include <pango/pango.h>
+#include <float.h>
+#include <math.h>
+#include <stdio.h>
+#include <atk/atk.h>
+#include <dbus/dbus-glib-lowlevel.h>
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus.h>
+#include <config.h>
+
+
+#define TYPE_MAIN_WINDOW (main_window_get_type ())
+#define MAIN_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MAIN_WINDOW, MainWindow))
+#define MAIN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MAIN_WINDOW, MainWindowClass))
+#define IS_MAIN_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MAIN_WINDOW))
+#define IS_MAIN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MAIN_WINDOW))
+#define MAIN_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MAIN_WINDOW, MainWindowClass))
+
+typedef struct _MainWindow MainWindow;
+typedef struct _MainWindowClass MainWindowClass;
+typedef struct _MainWindowPrivate MainWindowPrivate;
+
+#define TYPE_ID_CARD_WIDGET (id_card_widget_get_type ())
+#define ID_CARD_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ID_CARD_WIDGET, IdCardWidget))
+#define ID_CARD_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ID_CARD_WIDGET, IdCardWidgetClass))
+#define IS_ID_CARD_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ID_CARD_WIDGET))
+#define IS_ID_CARD_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ID_CARD_WIDGET))
+#define ID_CARD_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ID_CARD_WIDGET, IdCardWidgetClass))
+
+typedef struct _IdCardWidget IdCardWidget;
+typedef struct _IdCardWidgetClass IdCardWidgetClass;
+
+#define TYPE_CUSTOM_VBOX (custom_vbox_get_type ())
+#define CUSTOM_VBOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CUSTOM_VBOX, CustomVBox))
+#define CUSTOM_VBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CUSTOM_VBOX, CustomVBoxClass))
+#define IS_CUSTOM_VBOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CUSTOM_VBOX))
+#define IS_CUSTOM_VBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CUSTOM_VBOX))
+#define CUSTOM_VBOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CUSTOM_VBOX, CustomVBoxClass))
+
+typedef struct _CustomVBox CustomVBox;
+typedef struct _CustomVBoxClass CustomVBoxClass;
+
+#define TYPE_IDENTITIES_MANAGER (identities_manager_get_type ())
+#define IDENTITIES_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_IDENTITIES_MANAGER, IdentitiesManager))
+#define IDENTITIES_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_IDENTITIES_MANAGER, IdentitiesManagerClass))
+#define IS_IDENTITIES_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_IDENTITIES_MANAGER))
+#define IS_IDENTITIES_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_IDENTITIES_MANAGER))
+#define IDENTITIES_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_IDENTITIES_MANAGER, IdentitiesManagerClass))
+
+typedef struct _IdentitiesManager IdentitiesManager;
+typedef struct _IdentitiesManagerClass IdentitiesManagerClass;
+
+#define TYPE_MOONSHOT_SERVER (moonshot_server_get_type ())
+#define MOONSHOT_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MOONSHOT_SERVER, MoonshotServer))
+#define MOONSHOT_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MOONSHOT_SERVER, MoonshotServerClass))
+#define IS_MOONSHOT_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MOONSHOT_SERVER))
+#define IS_MOONSHOT_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MOONSHOT_SERVER))
+#define MOONSHOT_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MOONSHOT_SERVER, MoonshotServerClass))
+
+typedef struct _MoonshotServer MoonshotServer;
+typedef struct _MoonshotServerClass MoonshotServerClass;
+
+#define TYPE_IDENTITY_REQUEST (identity_request_get_type ())
+#define IDENTITY_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_IDENTITY_REQUEST, IdentityRequest))
+#define IDENTITY_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_IDENTITY_REQUEST, IdentityRequestClass))
+#define IS_IDENTITY_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_IDENTITY_REQUEST))
+#define IS_IDENTITY_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_IDENTITY_REQUEST))
+#define IDENTITY_REQUEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_IDENTITY_REQUEST, IdentityRequestClass))
+
+typedef struct _IdentityRequest IdentityRequest;
+typedef struct _IdentityRequestClass IdentityRequestClass;
+
+#define MAIN_WINDOW_TYPE_COLUMNS (main_window_columns_get_type ())
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_queue_free0(var) ((var == NULL) ? NULL : (var = (g_queue_free (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+#define TYPE_ID_CARD (id_card_get_type ())
+#define ID_CARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ID_CARD, IdCard))
+#define ID_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ID_CARD, IdCardClass))
+#define IS_ID_CARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ID_CARD))
+#define IS_ID_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ID_CARD))
+#define ID_CARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ID_CARD, IdCardClass))
+
+typedef struct _IdCard IdCard;
+typedef struct _IdCardClass IdCardClass;
+typedef struct _IdentitiesManagerPrivate IdentitiesManagerPrivate;
+#define _g_list_free0(var) ((var == NULL) ? NULL : (var = (g_list_free (var), NULL)))
+
+#define TYPE_ADD_IDENTITY_DIALOG (add_identity_dialog_get_type ())
+#define ADD_IDENTITY_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ADD_IDENTITY_DIALOG, AddIdentityDialog))
+#define ADD_IDENTITY_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ADD_IDENTITY_DIALOG, AddIdentityDialogClass))
+#define IS_ADD_IDENTITY_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ADD_IDENTITY_DIALOG))
+#define IS_ADD_IDENTITY_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ADD_IDENTITY_DIALOG))
+#define ADD_IDENTITY_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ADD_IDENTITY_DIALOG, AddIdentityDialogClass))
+
+typedef struct _AddIdentityDialog AddIdentityDialog;
+typedef struct _AddIdentityDialogClass AddIdentityDialogClass;
+
+#define TYPE_ADD_PASSWORD_DIALOG (add_password_dialog_get_type ())
+#define ADD_PASSWORD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ADD_PASSWORD_DIALOG, AddPasswordDialog))
+#define ADD_PASSWORD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ADD_PASSWORD_DIALOG, AddPasswordDialogClass))
+#define IS_ADD_PASSWORD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ADD_PASSWORD_DIALOG))
+#define IS_ADD_PASSWORD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ADD_PASSWORD_DIALOG))
+#define ADD_PASSWORD_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ADD_PASSWORD_DIALOG, AddPasswordDialogClass))
+
+typedef struct _AddPasswordDialog AddPasswordDialog;
+typedef struct _AddPasswordDialogClass AddPasswordDialogClass;
+#define _pango_font_description_free0(var) ((var == NULL) ? NULL : (var = (pango_font_description_free (var), NULL)))
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+#define _dbus_g_connection_unref0(var) ((var == NULL) ? NULL : (var = (dbus_g_connection_unref (var), NULL)))
+typedef struct _DBusObjectVTable _DBusObjectVTable;
+
+struct _MainWindow {
+       GtkWindow parent_instance;
+       MainWindowPrivate * priv;
+       IdCardWidget* selected_id_card_widget;
+};
+
+struct _MainWindowClass {
+       GtkWindowClass parent_class;
+};
+
+struct _MainWindowPrivate {
+       GtkUIManager* ui_manager;
+       GtkEntry* search_entry;
+       GtkVBox* vbox_rigth;
+       CustomVBox* custom_vbox;
+       GtkVBox* services_internal_vbox;
+       GtkEntry* username_entry;
+       GtkEntry* password_entry;
+       GtkListStore* listmodel;
+       GtkTreeModelFilter* filter;
+       IdentitiesManager* identities_manager;
+       MoonshotServer* ipc_server;
+       GQueue* request_queue;
+};
+
+typedef enum  {
+       MAIN_WINDOW_COLUMNS_IDCARD_COL,
+       MAIN_WINDOW_COLUMNS_LOGO_COL,
+       MAIN_WINDOW_COLUMNS_ISSUER_COL,
+       MAIN_WINDOW_COLUMNS_USERNAME_COL,
+       MAIN_WINDOW_COLUMNS_PASSWORD_COL,
+       MAIN_WINDOW_COLUMNS_N_COLUMNS
+} MainWindowColumns;
+
+struct _IdentitiesManager {
+       GObject parent_instance;
+       IdentitiesManagerPrivate * priv;
+       GSList* id_card_list;
+};
+
+struct _IdentitiesManagerClass {
+       GObjectClass parent_class;
+};
+
+struct _DBusObjectVTable {
+       void (*register_object) (DBusConnection*, const char*, void*);
+};
+
+
+static gpointer main_window_parent_class = NULL;
+
+GType main_window_get_type (void) G_GNUC_CONST;
+GType id_card_widget_get_type (void) G_GNUC_CONST;
+GType custom_vbox_get_type (void) G_GNUC_CONST;
+GType identities_manager_get_type (void) G_GNUC_CONST;
+GType moonshot_server_get_type (void) G_GNUC_CONST;
+GType identity_request_get_type (void) G_GNUC_CONST;
+#define MAIN_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_MAIN_WINDOW, MainWindowPrivate))
+enum  {
+       MAIN_WINDOW_DUMMY_PROPERTY
+};
+static GType main_window_columns_get_type (void) G_GNUC_UNUSED;
+#define MAIN_WINDOW_WINDOW_WIDTH 400
+#define MAIN_WINDOW_WINDOW_HEIGHT 500
+#define MAIN_WINDOW_layout "\n" \
+"<menubar name='MenuBar'>\n" \
+"        <menu name='FileMenu' action='FileMenuAction'>\n" \
+"            <menuitem name='AddIdCard' action='AddIdCardAction' />\n" \
+"            <separator />\n" \
+"            <menuitem name='Quit' action='QuitAction' />\n" \
+"        </menu>\n" \
+"\n" \
+"        <menu name='HelpMenu' action='HelpMenuAction'>\n" \
+"             <menuitem name='About' action='AboutAction' />\n" \
+"        </menu>\n" \
+"</menubar>\n"
+MainWindow* main_window_new (void);
+MainWindow* main_window_construct (GType object_type);
+static void main_window_build_ui (MainWindow* self);
+static void main_window_setup_identities_list (MainWindow* self);
+static void main_window_load_gss_eap_id_file (MainWindow* self);
+static void main_window_connect_signals (MainWindow* self);
+static void main_window_init_ipc_server (MainWindow* self);
+static gboolean main_window_visible_func (MainWindow* self, GtkTreeModel* model, GtkTreeIter* iter);
+GType id_card_get_type (void) G_GNUC_CONST;
+static gboolean _main_window_visible_func_gtk_tree_model_filter_visible_func (GtkTreeModel* model, GtkTreeIter* iter, gpointer self);
+static void main_window_search_entry_icon_press_cb (MainWindow* self, GtkEntryIconPosition pos, GdkEvent* event);
+static void main_window_search_entry_text_changed_cb (MainWindow* self);
+static void main_window_redraw_id_card_widgets (MainWindow* self);
+static gboolean main_window_search_entry_key_press_event_cb (MainWindow* self, GdkEventKey* e);
+IdentitiesManager* identities_manager_new (void);
+IdentitiesManager* identities_manager_construct (GType object_type);
+IdCard* identities_manager_load_gss_eap_id_file (IdentitiesManager* self);
+static void main_window_add_id_card_data (MainWindow* self, IdCard* id_card);
+static void main_window_add_id_card_widget (MainWindow* self, IdCard* id_card);
+static void main_window_load_id_cards (MainWindow* self);
+static void main_window_fill_details (MainWindow* self, IdCardWidget* id_card_widget);
+IdCard* id_card_widget_get_id_card (IdCardWidget* self);
+const char* id_card_get_username (IdCard* self);
+const char* id_card_get_password (IdCard* self);
+static void main_window_fill_services_vbox (MainWindow* self, IdCard* id_card);
+static void main_window_show_details (MainWindow* self, IdCard* id_card);
+static void main_window_details_identity_cb (MainWindow* self, IdCardWidget* id_card_widget);
+GType add_identity_dialog_get_type (void) G_GNUC_CONST;
+static IdCard* main_window_get_id_card_data (MainWindow* self, AddIdentityDialog* dialog);
+IdCard* id_card_new (void);
+IdCard* id_card_construct (GType object_type);
+const char* add_identity_dialog_get_issuer (AddIdentityDialog* self);
+void id_card_set_issuer (IdCard* self, const char* value);
+const char* id_card_get_issuer (IdCard* self);
+const char* add_identity_dialog_get_username (AddIdentityDialog* self);
+void id_card_set_username (IdCard* self, const char* value);
+const char* add_identity_dialog_get_password (AddIdentityDialog* self);
+void id_card_set_password (IdCard* self, const char* value);
+void id_card_set_nai (IdCard* self, const char* value);
+GdkPixbuf* find_icon (const char* name, gint size);
+void id_card_set_pixbuf (IdCard* self, GdkPixbuf* value);
+void id_card_set_services (IdCard* self, char** value, int value_length1);
+GdkPixbuf* id_card_get_pixbuf (IdCard* self);
+static void main_window_remove_id_card_data (MainWindow* self, IdCard* id_card);
+IdCardWidget* id_card_widget_new (IdCard* id_card);
+IdCardWidget* id_card_widget_construct (GType object_type, IdCard* id_card);
+void custom_vbox_add_id_card_widget (CustomVBox* self, IdCardWidget* id_card_widget);
+static void _main_window_details_identity_cb_id_card_widget_details_id (IdCardWidget* _sender, gpointer self);
+static void main_window_remove_identity_cb (MainWindow* self, IdCardWidget* id_card_widget);
+static void _main_window_remove_identity_cb_id_card_widget_remove_id (IdCardWidget* _sender, gpointer self);
+void main_window_send_identity_cb (MainWindow* self, IdCardWidget* id_card_widget);
+static void _main_window_send_identity_cb_id_card_widget_send_id (IdCardWidget* _sender, gpointer self);
+void custom_vbox_receive_expanded_event (CustomVBox* self, IdCardWidget* id_card_widget);
+static void _custom_vbox_receive_expanded_event_id_card_widget_expanded (IdCardWidget* _sender, gpointer self);
+static void _main_window_fill_details_id_card_widget_expanded (IdCardWidget* _sender, gpointer self);
+static void main_window_add_identity (MainWindow* self, AddIdentityDialog* dialog);
+void identities_manager_store_id_cards (IdentitiesManager* self);
+void identities_manager_store_gss_eap_id_file (IdentitiesManager* self, IdCard* id_card);
+static void main_window_add_identity_cb (MainWindow* self);
+AddIdentityDialog* add_identity_dialog_new (void);
+AddIdentityDialog* add_identity_dialog_construct (GType object_type);
+static void main_window_remove_id_card_widget (MainWindow* self, IdCardWidget* id_card_widget);
+void custom_vbox_remove_id_card_widget (CustomVBox* self, IdCardWidget* id_card_widget);
+static void main_window_remove_identity (MainWindow* self, IdCardWidget* id_card_widget);
+void main_window_select_identity (MainWindow* self, IdentityRequest* request);
+AddPasswordDialog* add_password_dialog_new (void);
+AddPasswordDialog* add_password_dialog_construct (GType object_type);
+GType add_password_dialog_get_type (void) G_GNUC_CONST;
+const char* add_password_dialog_get_password (AddPasswordDialog* self);
+gboolean add_password_dialog_get_remember (AddPasswordDialog* self);
+void identity_request_return_identity (IdentityRequest* self, IdCard* id_card);
+static void main_window_label_make_bold (MainWindow* self, GtkLabel* label);
+char** id_card_get_services (IdCard* self, int* result_length1);
+static void main_window_on_about_action (MainWindow* self);
+static GtkActionEntry* main_window_create_actions (MainWindow* self, int* result_length1);
+static void _vala_array_add1 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value);
+static void _main_window_add_identity_cb_gtk_action_callback (GtkAction* action, gpointer self);
+static void _vala_array_add2 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value);
+static void _gtk_main_quit_gtk_action_callback (GtkAction* action, gpointer self);
+static void _vala_array_add3 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value);
+static void _vala_array_add4 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value);
+static void _main_window_on_about_action_gtk_action_callback (GtkAction* action, gpointer self);
+static void _vala_array_add5 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value);
+static void main_window_create_ui_manager (MainWindow* self);
+static void main_window_set_atk_name_description (MainWindow* self, GtkWidget* widget, const char* name, const char* description);
+GdkPixbuf* find_icon_sized (const char* name, GtkIconSize icon_size);
+static void _main_window_search_entry_icon_press_cb_gtk_entry_icon_press (GtkEntry* _sender, GtkEntryIconPosition p0, GdkEvent* p1, gpointer self);
+static void _main_window_search_entry_text_changed_cb_g_object_notify (GObject* _sender, GParamSpec* pspec, gpointer self);
+static gboolean _main_window_search_entry_key_press_event_cb_gtk_widget_key_press_event (GtkWidget* _sender, GdkEventKey* event, gpointer self);
+CustomVBox* custom_vbox_new (gboolean homogeneous, gint spacing);
+CustomVBox* custom_vbox_construct (GType object_type, gboolean homogeneous, gint spacing);
+static void _gtk_main_quit_gtk_object_destroy (GtkObject* _sender, gpointer self);
+static guint _dynamic_request_name0 (DBusGProxy* self, const char* param1, guint param2, GError** error);
+MoonshotServer* moonshot_server_new (GtkWindow* window);
+MoonshotServer* moonshot_server_construct (GType object_type, GtkWindow* window);
+static void _vala_dbus_register_object (DBusConnection* connection, const char* path, void* object);
+static void _vala_dbus_unregister_object (gpointer connection, GObject* object);
+gint main_window_main (char** args, int args_length1);
+static void main_window_finalize (GObject* obj);
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+
+
+static GType main_window_columns_get_type (void) {
+       static volatile gsize main_window_columns_type_id__volatile = 0;
+       if (g_once_init_enter (&main_window_columns_type_id__volatile)) {
+               static const GEnumValue values[] = {{MAIN_WINDOW_COLUMNS_IDCARD_COL, "MAIN_WINDOW_COLUMNS_IDCARD_COL", "idcard-col"}, {MAIN_WINDOW_COLUMNS_LOGO_COL, "MAIN_WINDOW_COLUMNS_LOGO_COL", "logo-col"}, {MAIN_WINDOW_COLUMNS_ISSUER_COL, "MAIN_WINDOW_COLUMNS_ISSUER_COL", "issuer-col"}, {MAIN_WINDOW_COLUMNS_USERNAME_COL, "MAIN_WINDOW_COLUMNS_USERNAME_COL", "username-col"}, {MAIN_WINDOW_COLUMNS_PASSWORD_COL, "MAIN_WINDOW_COLUMNS_PASSWORD_COL", "password-col"}, {MAIN_WINDOW_COLUMNS_N_COLUMNS, "MAIN_WINDOW_COLUMNS_N_COLUMNS", "n-columns"}, {0, NULL, NULL}};
+               GType main_window_columns_type_id;
+               main_window_columns_type_id = g_enum_register_static ("MainWindowColumns", values);
+               g_once_init_leave (&main_window_columns_type_id__volatile, main_window_columns_type_id);
+       }
+       return main_window_columns_type_id__volatile;
+}
+
+
+MainWindow* main_window_construct (GType object_type) {
+       MainWindow * self;
+       GQueue* _tmp0_;
+       self = g_object_newv (object_type, 0, NULL);
+       self->priv->request_queue = (_tmp0_ = g_queue_new (), _g_queue_free0 (self->priv->request_queue), _tmp0_);
+       gtk_window_set_title ((GtkWindow*) self, "Moonshoot");
+       gtk_window_set_position ((GtkWindow*) self, GTK_WIN_POS_CENTER);
+       gtk_window_set_default_size ((GtkWindow*) self, MAIN_WINDOW_WINDOW_WIDTH, MAIN_WINDOW_WINDOW_HEIGHT);
+       main_window_build_ui (self);
+       main_window_setup_identities_list (self);
+       main_window_load_gss_eap_id_file (self);
+       main_window_connect_signals (self);
+       main_window_init_ipc_server (self);
+       return self;
+}
+
+
+MainWindow* main_window_new (void) {
+       return main_window_construct (TYPE_MAIN_WINDOW);
+}
+
+
+static gboolean string_contains (const char* self, const char* needle) {
+       gboolean result = FALSE;
+       g_return_val_if_fail (self != NULL, FALSE);
+       g_return_val_if_fail (needle != NULL, FALSE);
+       result = strstr (self, needle) != NULL;
+       return result;
+}
+
+
+static gboolean main_window_visible_func (MainWindow* self, GtkTreeModel* model, GtkTreeIter* iter) {
+       gboolean result = FALSE;
+       char* issuer;
+       char* search_text;
+       char* issuer_casefold;
+       char* search_text_casefold;
+       char* _tmp0_;
+       gboolean _tmp1_ = FALSE;
+       char* _tmp2_;
+       char* _tmp3_;
+       g_return_val_if_fail (self != NULL, FALSE);
+       g_return_val_if_fail (model != NULL, FALSE);
+       issuer = NULL;
+       search_text = NULL;
+       issuer_casefold = NULL;
+       search_text_casefold = NULL;
+       gtk_tree_model_get (model, iter, MAIN_WINDOW_COLUMNS_ISSUER_COL, &issuer, -1);
+       search_text = (_tmp0_ = g_strdup (gtk_entry_get_text (self->priv->search_entry)), _g_free0 (search_text), _tmp0_);
+       if (issuer == NULL) {
+               _tmp1_ = TRUE;
+       } else {
+               _tmp1_ = search_text == NULL;
+       }
+       if (_tmp1_) {
+               result = FALSE;
+               _g_free0 (search_text_casefold);
+               _g_free0 (issuer_casefold);
+               _g_free0 (search_text);
+               _g_free0 (issuer);
+               return result;
+       }
+       issuer_casefold = (_tmp2_ = g_utf8_casefold (issuer, -1), _g_free0 (issuer_casefold), _tmp2_);
+       search_text_casefold = (_tmp3_ = g_utf8_casefold (search_text, -1), _g_free0 (search_text_casefold), _tmp3_);
+       if (string_contains (issuer_casefold, search_text_casefold)) {
+               result = TRUE;
+               _g_free0 (search_text_casefold);
+               _g_free0 (issuer_casefold);
+               _g_free0 (search_text);
+               _g_free0 (issuer);
+               return result;
+       }
+       result = FALSE;
+       _g_free0 (search_text_casefold);
+       _g_free0 (issuer_casefold);
+       _g_free0 (search_text);
+       _g_free0 (issuer);
+       return result;
+}
+
+
+static gboolean _main_window_visible_func_gtk_tree_model_filter_visible_func (GtkTreeModel* model, GtkTreeIter* iter, gpointer self) {
+       gboolean result;
+       result = main_window_visible_func (self, model, iter);
+       return result;
+}
+
+
+static void main_window_setup_identities_list (MainWindow* self) {
+       GtkListStore* _tmp0_;
+       GtkTreeModelFilter* _tmp1_;
+       g_return_if_fail (self != NULL);
+       self->priv->listmodel = (_tmp0_ = gtk_list_store_new ((gint) MAIN_WINDOW_COLUMNS_N_COLUMNS, TYPE_ID_CARD, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING), _g_object_unref0 (self->priv->listmodel), _tmp0_);
+       self->priv->filter = (_tmp1_ = (GtkTreeModelFilter*) gtk_tree_model_filter_new ((GtkTreeModel*) self->priv->listmodel, NULL), _g_object_unref0 (self->priv->filter), _tmp1_);
+       gtk_tree_model_filter_set_visible_func (self->priv->filter, _main_window_visible_func_gtk_tree_model_filter_visible_func, g_object_ref (self), g_object_unref);
+}
+
+
+static void main_window_search_entry_icon_press_cb (MainWindow* self, GtkEntryIconPosition pos, GdkEvent* event) {
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (event != NULL);
+       if (pos == GTK_ENTRY_ICON_PRIMARY) {
+               g_print ("Search entry icon pressed\n");
+       } else {
+               gtk_entry_set_text (self->priv->search_entry, "");
+       }
+}
+
+
+static void main_window_search_entry_text_changed_cb (MainWindow* self) {
+       gboolean has_text;
+       g_return_if_fail (self != NULL);
+       gtk_tree_model_filter_refilter (self->priv->filter);
+       main_window_redraw_id_card_widgets (self);
+       has_text = gtk_entry_get_text_length (self->priv->search_entry) > 0;
+       gtk_entry_set_icon_sensitive (self->priv->search_entry, GTK_ENTRY_ICON_PRIMARY, has_text);
+       gtk_entry_set_icon_sensitive (self->priv->search_entry, GTK_ENTRY_ICON_SECONDARY, has_text);
+       gtk_widget_set_visible ((GtkWidget*) self->priv->vbox_rigth, FALSE);
+       gtk_window_resize ((GtkWindow*) self, MAIN_WINDOW_WINDOW_WIDTH, MAIN_WINDOW_WINDOW_HEIGHT);
+}
+
+
+static gboolean main_window_search_entry_key_press_event_cb (MainWindow* self, GdkEventKey* e) {
+       gboolean result = FALSE;
+       g_return_val_if_fail (self != NULL, FALSE);
+       if (_vala_strcmp0 (gdk_keyval_name ((*e).keyval), "Escape") == 0) {
+               gtk_entry_set_text (self->priv->search_entry, "");
+       }
+       result = FALSE;
+       return result;
+}
+
+
+static void main_window_load_gss_eap_id_file (MainWindow* self) {
+       IdCard* id_card;
+       IdentitiesManager* _tmp0_;
+       IdCard* _tmp1_;
+       g_return_if_fail (self != NULL);
+       id_card = NULL;
+       self->priv->identities_manager = (_tmp0_ = identities_manager_new (), _g_object_unref0 (self->priv->identities_manager), _tmp0_);
+       id_card = (_tmp1_ = identities_manager_load_gss_eap_id_file (self->priv->identities_manager), _g_object_unref0 (id_card), _tmp1_);
+       if (id_card != NULL) {
+               main_window_add_id_card_data (self, id_card);
+               main_window_add_id_card_widget (self, id_card);
+       }
+       _g_object_unref0 (id_card);
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+static void main_window_load_id_cards (MainWindow* self) {
+       IdentitiesManager* _tmp0_;
+       g_return_if_fail (self != NULL);
+       self->priv->identities_manager = (_tmp0_ = identities_manager_new (), _g_object_unref0 (self->priv->identities_manager), _tmp0_);
+       {
+               GSList* id_card_collection;
+               GSList* id_card_it;
+               id_card_collection = self->priv->identities_manager->id_card_list;
+               for (id_card_it = id_card_collection; id_card_it != NULL; id_card_it = id_card_it->next) {
+                       IdCard* id_card;
+                       id_card = _g_object_ref0 ((IdCard*) id_card_it->data);
+                       {
+                               main_window_add_id_card_data (self, id_card);
+                               main_window_add_id_card_widget (self, id_card);
+                               _g_object_unref0 (id_card);
+                       }
+               }
+       }
+}
+
+
+static void main_window_fill_details (MainWindow* self, IdCardWidget* id_card_widget) {
+       IdCard* id_card;
+       char* _tmp0_;
+       GList* children;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (id_card_widget != NULL);
+       id_card = _g_object_ref0 (id_card_widget_get_id_card (id_card_widget));
+       gtk_entry_set_text (self->priv->username_entry, id_card_get_username (id_card));
+       _tmp0_ = g_strdup (id_card_get_password (id_card));
+       if (_tmp0_ == NULL) {
+               char* _tmp1_;
+               _tmp0_ = (_tmp1_ = g_strdup (""), _g_free0 (_tmp0_), _tmp1_);
+       }
+       gtk_entry_set_text (self->priv->password_entry, _tmp0_);
+       children = gtk_container_get_children ((GtkContainer*) self->priv->services_internal_vbox);
+       {
+               GList* hbox_collection;
+               GList* hbox_it;
+               hbox_collection = children;
+               for (hbox_it = hbox_collection; hbox_it != NULL; hbox_it = hbox_it->next) {
+                       GtkWidget* hbox;
+                       hbox = (GtkWidget*) hbox_it->data;
+                       {
+                               gtk_object_destroy ((GtkObject*) hbox);
+                       }
+               }
+       }
+       main_window_fill_services_vbox (self, id_card_widget_get_id_card (id_card_widget));
+       _g_list_free0 (children);
+       _g_free0 (_tmp0_);
+       _g_object_unref0 (id_card);
+}
+
+
+static void main_window_show_details (MainWindow* self, IdCard* id_card) {
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (id_card != NULL);
+       gtk_widget_set_visible ((GtkWidget*) self->priv->vbox_rigth, !gtk_widget_get_visible ((GtkWidget*) self->priv->vbox_rigth));
+       if (gtk_widget_get_visible ((GtkWidget*) self->priv->vbox_rigth) == FALSE) {
+               gtk_window_resize ((GtkWindow*) self, MAIN_WINDOW_WINDOW_WIDTH, MAIN_WINDOW_WINDOW_HEIGHT);
+       }
+}
+
+
+static void main_window_details_identity_cb (MainWindow* self, IdCardWidget* id_card_widget) {
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (id_card_widget != NULL);
+       main_window_fill_details (self, id_card_widget);
+       main_window_show_details (self, id_card_widget_get_id_card (id_card_widget));
+}
+
+
+static IdCard* main_window_get_id_card_data (MainWindow* self, AddIdentityDialog* dialog) {
+       IdCard* result = NULL;
+       IdCard* id_card;
+       char* _tmp0_;
+       char* _tmp1_;
+       GdkPixbuf* _tmp2_;
+       char** _tmp3_ = NULL;
+       char** _tmp4_;
+       gint _tmp4__length1;
+       char** _tmp5_;
+       g_return_val_if_fail (self != NULL, NULL);
+       g_return_val_if_fail (dialog != NULL, NULL);
+       id_card = id_card_new ();
+       id_card_set_issuer (id_card, add_identity_dialog_get_issuer (dialog));
+       if (_vala_strcmp0 (id_card_get_issuer (id_card), "") == 0) {
+               id_card_set_issuer (id_card, "Issuer");
+       }
+       id_card_set_username (id_card, add_identity_dialog_get_username (dialog));
+       id_card_set_password (id_card, add_identity_dialog_get_password (dialog));
+       id_card_set_nai (id_card, _tmp1_ = g_strconcat (_tmp0_ = g_strconcat (id_card_get_username (id_card), "@", NULL), id_card_get_issuer (id_card), NULL));
+       _g_free0 (_tmp1_);
+       _g_free0 (_tmp0_);
+       id_card_set_pixbuf (id_card, _tmp2_ = find_icon ("avatar-default", 48));
+       _g_object_unref0 (_tmp2_);
+       _tmp5_ = (_tmp4_ = (_tmp3_ = g_new0 (char*, 3 + 1), _tmp3_[0] = g_strdup ("email"), _tmp3_[1] = g_strdup ("jabber"), _tmp3_[2] = g_strdup ("irc"), _tmp3_), _tmp4__length1 = 3, _tmp4_);
+       id_card_set_services (id_card, _tmp5_, 3);
+       _tmp4_ = (_vala_array_free (_tmp4_, _tmp4__length1, (GDestroyNotify) g_free), NULL);
+       result = id_card;
+       return result;
+}
+
+
+static void main_window_add_id_card_data (MainWindow* self, IdCard* id_card) {
+       GtkTreeIter iter = {0};
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (id_card != NULL);
+       gtk_list_store_append (self->priv->listmodel, &iter);
+       gtk_list_store_set (self->priv->listmodel, &iter, MAIN_WINDOW_COLUMNS_IDCARD_COL, id_card, MAIN_WINDOW_COLUMNS_LOGO_COL, id_card_get_pixbuf (id_card), MAIN_WINDOW_COLUMNS_ISSUER_COL, id_card_get_issuer (id_card), MAIN_WINDOW_COLUMNS_USERNAME_COL, id_card_get_username (id_card), MAIN_WINDOW_COLUMNS_PASSWORD_COL, id_card_get_password (id_card), -1);
+}
+
+
+static void main_window_remove_id_card_data (MainWindow* self, IdCard* id_card) {
+       GtkTreeIter iter = {0};
+       char* issuer;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (id_card != NULL);
+       issuer = NULL;
+       if (gtk_tree_model_get_iter_first ((GtkTreeModel*) self->priv->listmodel, &iter)) {
+               {
+                       gboolean _tmp0_;
+                       _tmp0_ = TRUE;
+                       while (TRUE) {
+                               if (!_tmp0_) {
+                                       if (!gtk_tree_model_iter_next ((GtkTreeModel*) self->priv->listmodel, &iter)) {
+                                               break;
+                                       }
+                               }
+                               _tmp0_ = FALSE;
+                               gtk_tree_model_get ((GtkTreeModel*) self->priv->listmodel, &iter, MAIN_WINDOW_COLUMNS_ISSUER_COL, &issuer, -1);
+                               if (_vala_strcmp0 (id_card_get_issuer (id_card), issuer) == 0) {
+                                       gtk_list_store_remove (self->priv->listmodel, &iter);
+                                       break;
+                               }
+                       }
+               }
+       }
+       _g_free0 (issuer);
+}
+
+
+static void _main_window_details_identity_cb_id_card_widget_details_id (IdCardWidget* _sender, gpointer self) {
+       main_window_details_identity_cb (self, _sender);
+}
+
+
+static void _main_window_remove_identity_cb_id_card_widget_remove_id (IdCardWidget* _sender, gpointer self) {
+       main_window_remove_identity_cb (self, _sender);
+}
+
+
+static void _main_window_send_identity_cb_id_card_widget_send_id (IdCardWidget* _sender, gpointer self) {
+       main_window_send_identity_cb (self, _sender);
+}
+
+
+static void _custom_vbox_receive_expanded_event_id_card_widget_expanded (IdCardWidget* _sender, gpointer self) {
+       custom_vbox_receive_expanded_event (self, _sender);
+}
+
+
+static void _main_window_fill_details_id_card_widget_expanded (IdCardWidget* _sender, gpointer self) {
+       main_window_fill_details (self, _sender);
+}
+
+
+static void main_window_add_id_card_widget (MainWindow* self, IdCard* id_card) {
+       IdCardWidget* id_card_widget;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (id_card != NULL);
+       id_card_widget = g_object_ref_sink (id_card_widget_new (id_card));
+       custom_vbox_add_id_card_widget (self->priv->custom_vbox, id_card_widget);
+       g_signal_connect_object (id_card_widget, "details-id", (GCallback) _main_window_details_identity_cb_id_card_widget_details_id, self, 0);
+       g_signal_connect_object (id_card_widget, "remove-id", (GCallback) _main_window_remove_identity_cb_id_card_widget_remove_id, self, 0);
+       g_signal_connect_object (id_card_widget, "send-id", (GCallback) _main_window_send_identity_cb_id_card_widget_send_id, self, 0);
+       g_signal_connect_object (id_card_widget, "expanded", (GCallback) _custom_vbox_receive_expanded_event_id_card_widget_expanded, self->priv->custom_vbox, 0);
+       g_signal_connect_object (id_card_widget, "expanded", (GCallback) _main_window_fill_details_id_card_widget_expanded, self, 0);
+       _g_object_unref0 (id_card_widget);
+}
+
+
+static void main_window_add_identity (MainWindow* self, AddIdentityDialog* dialog) {
+       IdCard* id_card;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (dialog != NULL);
+       id_card = main_window_get_id_card_data (self, dialog);
+       self->priv->identities_manager->id_card_list = g_slist_prepend (self->priv->identities_manager->id_card_list, _g_object_ref0 (id_card));
+       identities_manager_store_id_cards (self->priv->identities_manager);
+       identities_manager_store_gss_eap_id_file (self->priv->identities_manager, id_card);
+       main_window_add_id_card_data (self, id_card);
+       main_window_add_id_card_widget (self, id_card);
+       _g_object_unref0 (id_card);
+}
+
+
+static void main_window_add_identity_cb (MainWindow* self) {
+       AddIdentityDialog* dialog;
+       gint _result_;
+       g_return_if_fail (self != NULL);
+       dialog = g_object_ref_sink (add_identity_dialog_new ());
+       _result_ = gtk_dialog_run ((GtkDialog*) dialog);
+       switch (_result_) {
+               case GTK_RESPONSE_OK:
+               {
+                       main_window_add_identity (self, dialog);
+                       break;
+               }
+               default:
+               {
+                       break;
+               }
+       }
+       gtk_object_destroy ((GtkObject*) dialog);
+       _g_object_unref0 (dialog);
+}
+
+
+static void main_window_remove_id_card_widget (MainWindow* self, IdCardWidget* id_card_widget) {
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (id_card_widget != NULL);
+       main_window_remove_id_card_data (self, id_card_widget_get_id_card (id_card_widget));
+       custom_vbox_remove_id_card_widget (self->priv->custom_vbox, id_card_widget);
+}
+
+
+static void main_window_remove_identity (MainWindow* self, IdCardWidget* id_card_widget) {
+       IdCard* id_card;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (id_card_widget != NULL);
+       id_card = _g_object_ref0 (id_card_widget_get_id_card (id_card_widget));
+       self->priv->identities_manager->id_card_list = g_slist_remove (self->priv->identities_manager->id_card_list, id_card);
+       identities_manager_store_id_cards (self->priv->identities_manager);
+       identities_manager_store_gss_eap_id_file (self->priv->identities_manager, NULL);
+       main_window_remove_id_card_widget (self, id_card_widget);
+       _g_object_unref0 (id_card);
+}
+
+
+static void main_window_redraw_id_card_widgets (MainWindow* self) {
+       GtkTreeIter iter = {0};
+       IdCard* id_card;
+       GList* children;
+       g_return_if_fail (self != NULL);
+       id_card = NULL;
+       children = gtk_container_get_children ((GtkContainer*) self->priv->custom_vbox);
+       {
+               GList* id_card_widget_collection;
+               GList* id_card_widget_it;
+               id_card_widget_collection = children;
+               for (id_card_widget_it = id_card_widget_collection; id_card_widget_it != NULL; id_card_widget_it = id_card_widget_it->next) {
+                       GtkWidget* id_card_widget;
+                       id_card_widget = (GtkWidget*) id_card_widget_it->data;
+                       {
+                               gtk_object_destroy ((GtkObject*) id_card_widget);
+                       }
+               }
+       }
+       if (gtk_tree_model_get_iter_first ((GtkTreeModel*) self->priv->filter, &iter)) {
+               {
+                       gboolean _tmp0_;
+                       _tmp0_ = TRUE;
+                       while (TRUE) {
+                               if (!_tmp0_) {
+                                       if (!gtk_tree_model_iter_next ((GtkTreeModel*) self->priv->filter, &iter)) {
+                                               break;
+                                       }
+                               }
+                               _tmp0_ = FALSE;
+                               gtk_tree_model_get ((GtkTreeModel*) self->priv->filter, &iter, MAIN_WINDOW_COLUMNS_IDCARD_COL, &id_card, -1);
+                               main_window_add_id_card_widget (self, id_card);
+                       }
+               }
+       }
+       _g_list_free0 (children);
+       _g_object_unref0 (id_card);
+}
+
+
+static void main_window_remove_identity_cb (MainWindow* self, IdCardWidget* id_card_widget) {
+       IdCard* id_card;
+       GtkMessageDialog* dialog;
+       gint _result_;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (id_card_widget != NULL);
+       id_card = _g_object_ref0 (id_card_widget_get_id_card (id_card_widget));
+       dialog = g_object_ref_sink ((GtkMessageDialog*) gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, _ ("Are you sure you want to delete %s ID Card?"), id_card_get_issuer (id_card)));
+       _result_ = gtk_dialog_run ((GtkDialog*) dialog);
+       switch (_result_) {
+               case GTK_RESPONSE_YES:
+               {
+                       main_window_remove_identity (self, id_card_widget);
+                       break;
+               }
+               default:
+               {
+                       break;
+               }
+       }
+       gtk_object_destroy ((GtkObject*) dialog);
+       _g_object_unref0 (dialog);
+       _g_object_unref0 (id_card);
+}
+
+
+void main_window_select_identity (MainWindow* self, IdentityRequest* request) {
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (request != NULL);
+       g_queue_push_tail (self->priv->request_queue, _g_object_ref0 (request));
+       gtk_widget_show ((GtkWidget*) self);
+}
+
+
+void main_window_send_identity_cb (MainWindow* self, IdCardWidget* id_card_widget) {
+       IdCardWidget* _tmp0_;
+       IdentityRequest* request;
+       IdCard* identity;
+       gboolean reset_password;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (id_card_widget != NULL);
+       g_return_if_fail (self->priv->request_queue->length > 0);
+       self->selected_id_card_widget = (_tmp0_ = _g_object_ref0 (id_card_widget), _g_object_unref0 (self->selected_id_card_widget), _tmp0_);
+       request = (IdentityRequest*) g_queue_pop_head (self->priv->request_queue);
+       identity = _g_object_ref0 (id_card_widget_get_id_card (id_card_widget));
+       reset_password = FALSE;
+       if (id_card_get_password (identity) == NULL) {
+               AddPasswordDialog* dialog;
+               gint _result_;
+               dialog = g_object_ref_sink (add_password_dialog_new ());
+               _result_ = gtk_dialog_run ((GtkDialog*) dialog);
+               switch (_result_) {
+                       case GTK_RESPONSE_OK:
+                       {
+                               id_card_set_password (identity, add_password_dialog_get_password (dialog));
+                               reset_password = !add_password_dialog_get_remember (dialog);
+                               break;
+                       }
+                       default:
+                       {
+                               IdCard* _tmp1_;
+                               identity = (_tmp1_ = NULL, _g_object_unref0 (identity), _tmp1_);
+                               break;
+                       }
+               }
+               gtk_object_destroy ((GtkObject*) dialog);
+               _g_object_unref0 (dialog);
+       }
+       if (g_queue_is_empty (self->priv->request_queue)) {
+               gtk_widget_hide ((GtkWidget*) self);
+       }
+       identity_request_return_identity (request, identity);
+       if (reset_password) {
+               id_card_set_password (identity, NULL);
+       }
+       _g_object_unref0 (identity);
+       _g_object_unref0 (request);
+}
+
+
+static void main_window_label_make_bold (MainWindow* self, GtkLabel* label) {
+       PangoFontDescription* font_desc;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (label != NULL);
+       font_desc = pango_font_description_new ();
+       pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
+       gtk_widget_modify_font ((GtkWidget*) label, font_desc);
+       _pango_font_description_free0 (font_desc);
+}
+
+
+static void main_window_fill_services_vbox (MainWindow* self, IdCard* id_card) {
+       gint i;
+       gint _tmp0_;
+       gint n_columns;
+       GtkTable* services_table;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (id_card != NULL);
+       i = 0;
+       n_columns = _tmp0_;
+       services_table = g_object_ref_sink ((GtkTable*) gtk_table_new ((guint) n_columns, (guint) 2, FALSE));
+       gtk_table_set_col_spacings (services_table, (guint) 10);
+       gtk_table_set_row_spacings (services_table, (guint) 10);
+       gtk_container_add ((GtkContainer*) self->priv->services_internal_vbox, (GtkWidget*) services_table);
+       {
+               gint _tmp1_;
+               char** service_collection;
+               int service_collection_length1;
+               int service_it;
+               service_collection = id_card_get_services (id_card, &_tmp1_);
+               service_collection_length1 = _tmp1_;
+               for (service_it = 0; service_it < _tmp1_; service_it = service_it + 1) {
+                       char* service;
+                       service = g_strdup (service_collection[service_it]);
+                       {
+                               GtkLabel* label;
+                               GtkButton* remove_button;
+                               label = g_object_ref_sink ((GtkLabel*) gtk_label_new (service));
+                               gtk_misc_set_alignment ((GtkMisc*) label, (float) 0, (float) 0.5);
+                               remove_button = g_object_ref_sink ((GtkButton*) gtk_button_new_from_stock (GTK_STOCK_REMOVE));
+                               gtk_table_attach_defaults (services_table, (GtkWidget*) label, (guint) 0, (guint) 1, (guint) i, (guint) (i + 1));
+                               gtk_table_attach_defaults (services_table, (GtkWidget*) remove_button, (guint) 1, (guint) 2, (guint) i, (guint) (i + 1));
+                               i++;
+                               _g_object_unref0 (remove_button);
+                               _g_object_unref0 (label);
+                               _g_free0 (service);
+                       }
+               }
+       }
+       gtk_widget_show_all ((GtkWidget*) self->priv->services_internal_vbox);
+       _g_object_unref0 (services_table);
+}
+
+
+static void main_window_on_about_action (MainWindow* self) {
+       gint authors_length1;
+       gint _authors_size_;
+       char** _tmp1_;
+       char** _tmp0_ = NULL;
+       char** authors;
+       char* copyright;
+       char* license;
+       g_return_if_fail (self != NULL);
+       authors = (_tmp1_ = (_tmp0_ = g_new0 (char*, 3 + 1), _tmp0_[0] = g_strdup ("Javier Jardón <jjardon@codethink.co.uk>"), _tmp0_[1] = g_strdup ("Sam Thursfield <samthursfield@codethink.co.uk>"), _tmp0_[2] = NULL, _tmp0_), authors_length1 = 3, _authors_size_ = authors_length1, _tmp1_);
+       copyright = g_strdup ("Copyright 2011 JANET");
+       license = g_strdup ("\n" \
+"Copyright (c) 2011, JANET(UK)\n" \
+"All rights reserved.\n" \
+"\n" \
+"Redistribution and use in source and binary forms, with or without\n" \
+"modification, are permitted provided that the following conditions\n" \
+"are met:\n" \
+"\n" \
+"1. Redistributions of source code must retain the above copyright\n" \
+"   notice, this list of conditions and the following disclaimer.\n" \
+"\n" \
+"2. Redistributions in binary form must reproduce the above copyright\n" \
+"   notice, this list of conditions and the following disclaimer in the" \
+"\n" \
+"   documentation and/or other materials provided with the distribution" \
+".\n" \
+"\n" \
+"3. Neither the name of JANET(UK) nor the names of its contributors\n" \
+"   may be used to endorse or promote products derived from this softwa" \
+"re\n" \
+"   without specific prior written permission.\n" \
+"\n" \
+"THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\" \
+"\"AS IS\\\"\n" \
+"AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, " \
+"THE\n" \
+"IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PUR" \
+"POSE\n" \
+"ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS" \
+" BE LIABLE\n" \
+"FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUEN" \
+"TIAL\n" \
+"DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOOD" \
+"S\n" \
+"OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n" \
+"HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, ST" \
+"RICT\n" \
+"LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY " \
+"WAY\n" \
+"OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF" \
+"\n" \
+"SUCH DAMAGE.\n");
+       gtk_show_about_dialog ((GtkWindow*) self, "comments", _ ("Moonshot project UI"), "copyright", copyright, "website", "http://www.project-moonshot.org/", "license", license, "website-label", _ ("Visit the Moonshot project web site"), "authors", authors, "translator-credits", _ ("translator-credits"), NULL, NULL);
+       _g_free0 (license);
+       _g_free0 (copyright);
+       authors = (_vala_array_free (authors, authors_length1, (GDestroyNotify) g_free), NULL);
+}
+
+
+static void _vala_array_add1 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value) {
+       if ((*length) == (*size)) {
+               *size = (*size) ? (2 * (*size)) : 4;
+               *array = g_renew (GtkActionEntry, *array, *size);
+       }
+       (*array)[(*length)++] = *value;
+}
+
+
+static void _main_window_add_identity_cb_gtk_action_callback (GtkAction* action, gpointer self) {
+       main_window_add_identity_cb (self);
+}
+
+
+static void _vala_array_add2 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value) {
+       if ((*length) == (*size)) {
+               *size = (*size) ? (2 * (*size)) : 4;
+               *array = g_renew (GtkActionEntry, *array, *size);
+       }
+       (*array)[(*length)++] = *value;
+}
+
+
+static void _gtk_main_quit_gtk_action_callback (GtkAction* action, gpointer self) {
+       gtk_main_quit ();
+}
+
+
+static void _vala_array_add3 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value) {
+       if ((*length) == (*size)) {
+               *size = (*size) ? (2 * (*size)) : 4;
+               *array = g_renew (GtkActionEntry, *array, *size);
+       }
+       (*array)[(*length)++] = *value;
+}
+
+
+static void _vala_array_add4 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value) {
+       if ((*length) == (*size)) {
+               *size = (*size) ? (2 * (*size)) : 4;
+               *array = g_renew (GtkActionEntry, *array, *size);
+       }
+       (*array)[(*length)++] = *value;
+}
+
+
+static void _main_window_on_about_action_gtk_action_callback (GtkAction* action, gpointer self) {
+       main_window_on_about_action (self);
+}
+
+
+static void _vala_array_add5 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value) {
+       if ((*length) == (*size)) {
+               *size = (*size) ? (2 * (*size)) : 4;
+               *array = g_renew (GtkActionEntry, *array, *size);
+       }
+       (*array)[(*length)++] = *value;
+}
+
+
+static GtkActionEntry* main_window_create_actions (MainWindow* self, int* result_length1) {
+       GtkActionEntry* result = NULL;
+       gint actions_length1;
+       gint _actions_size_;
+       GtkActionEntry* _tmp0_;
+       GtkActionEntry* actions;
+       GtkActionEntry _tmp1_ = {0};
+       GtkActionEntry filemenu;
+       GtkActionEntry _tmp2_ = {0};
+       GtkActionEntry add;
+       GtkActionEntry _tmp3_ = {0};
+       GtkActionEntry quit;
+       GtkActionEntry _tmp4_ = {0};
+       GtkActionEntry helpmenu;
+       GtkActionEntry _tmp5_ = {0};
+       GtkActionEntry about;
+       GtkActionEntry* _tmp6_;
+       g_return_val_if_fail (self != NULL, NULL);
+       actions = (_tmp0_ = g_new0 (GtkActionEntry, 0), actions_length1 = 0, _actions_size_ = actions_length1, _tmp0_);
+       filemenu = (_tmp1_.name = "FileMenuAction", _tmp1_.stock_id = NULL, _tmp1_.label = N_ ("_File"), _tmp1_.accelerator = NULL, _tmp1_.tooltip = NULL, _tmp1_.callback = (GCallback) NULL, _tmp1_);
+       _vala_array_add1 (&actions, &actions_length1, &_actions_size_, &filemenu);
+       add = (_tmp2_.name = "AddIdCardAction", _tmp2_.stock_id = GTK_STOCK_ADD, _tmp2_.label = N_ ("Add ID Card"), _tmp2_.accelerator = NULL, _tmp2_.tooltip = N_ ("Add a new ID Card"), _tmp2_.callback = (GCallback) _main_window_add_identity_cb_gtk_action_callback, _tmp2_);
+       _vala_array_add2 (&actions, &actions_length1, &_actions_size_, &add);
+       quit = (_tmp3_.name = "QuitAction", _tmp3_.stock_id = GTK_STOCK_QUIT, _tmp3_.label = N_ ("Quit"), _tmp3_.accelerator = "<control>Q", _tmp3_.tooltip = N_ ("Quit the application"), _tmp3_.callback = (GCallback) _gtk_main_quit_gtk_action_callback, _tmp3_);
+       _vala_array_add3 (&actions, &actions_length1, &_actions_size_, &quit);
+       helpmenu = (_tmp4_.name = "HelpMenuAction", _tmp4_.stock_id = NULL, _tmp4_.label = N_ ("_Help"), _tmp4_.accelerator = NULL, _tmp4_.tooltip = NULL, _tmp4_.callback = (GCallback) NULL, _tmp4_);
+       _vala_array_add4 (&actions, &actions_length1, &_actions_size_, &helpmenu);
+       about = (_tmp5_.name = "AboutAction", _tmp5_.stock_id = GTK_STOCK_ABOUT, _tmp5_.label = N_ ("About"), _tmp5_.accelerator = NULL, _tmp5_.tooltip = N_ ("About this application"), _tmp5_.callback = (GCallback) _main_window_on_about_action_gtk_action_callback, _tmp5_);
+       _vala_array_add5 (&actions, &actions_length1, &_actions_size_, &about);
+       result = (_tmp6_ = actions, *result_length1 = actions_length1, _tmp6_);
+       return result;
+       actions = (g_free (actions), NULL);
+}
+
+
+static void main_window_create_ui_manager (MainWindow* self) {
+       GtkActionGroup* action_group;
+       gint _tmp0_;
+       GtkActionEntry* _tmp1_;
+       gint _tmp1__length1;
+       GtkActionEntry* _tmp2_;
+       GError * _inner_error_ = NULL;
+       g_return_if_fail (self != NULL);
+       action_group = gtk_action_group_new ("GeneralActionGroup");
+       _tmp2_ = (_tmp1_ = main_window_create_actions (self, &_tmp0_), _tmp1__length1 = _tmp0_, _tmp1_);
+       gtk_action_group_add_actions (action_group, _tmp2_, _tmp0_, self);
+       _tmp1_ = (g_free (_tmp1_), NULL);
+       gtk_ui_manager_insert_action_group (self->priv->ui_manager, action_group, 0);
+       {
+               gtk_ui_manager_add_ui_from_string (self->priv->ui_manager, MAIN_WINDOW_layout, (gssize) (-1), &_inner_error_);
+               if (_inner_error_ != NULL) {
+                       goto __catch5_g_error;
+               }
+       }
+       goto __finally5;
+       __catch5_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+                       fprintf (stderr, "%s\n", e->message);
+                       _g_error_free0 (e);
+               }
+       }
+       __finally5:
+       if (_inner_error_ != NULL) {
+               _g_object_unref0 (action_group);
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return;
+       }
+       gtk_ui_manager_ensure_update (self->priv->ui_manager);
+       _g_object_unref0 (action_group);
+}
+
+
+static void _main_window_search_entry_icon_press_cb_gtk_entry_icon_press (GtkEntry* _sender, GtkEntryIconPosition p0, GdkEvent* p1, gpointer self) {
+       main_window_search_entry_icon_press_cb (self, p0, p1);
+}
+
+
+static void _main_window_search_entry_text_changed_cb_g_object_notify (GObject* _sender, GParamSpec* pspec, gpointer self) {
+       main_window_search_entry_text_changed_cb (self);
+}
+
+
+static gboolean _main_window_search_entry_key_press_event_cb_gtk_widget_key_press_event (GtkWidget* _sender, GdkEventKey* event, gpointer self) {
+       gboolean result;
+       result = main_window_search_entry_key_press_event_cb (self, event);
+       return result;
+}
+
+
+static void main_window_build_ui (MainWindow* self) {
+       GtkEntry* _tmp0_;
+       GdkPixbuf* _tmp1_;
+       GdkPixbuf* _tmp2_;
+       CustomVBox* _tmp3_;
+       GtkViewport* viewport;
+       GtkScrolledWindow* scroll;
+       GtkVBox* vbox_left;
+       GtkLabel* login_vbox_title;
+       GtkLabel* username_label;
+       GtkEntry* _tmp4_;
+       GtkLabel* password_label;
+       GtkEntry* _tmp5_;
+       GtkCheckButton* remember_checkbutton;
+       GtkTable* login_table;
+       GtkAlignment* login_vbox_alignment;
+       GtkVBox* login_vbox;
+       GtkLabel* services_vbox_title;
+       GtkAlignment* services_vbox_alignment;
+       GtkVBox* _tmp6_;
+       GtkVBox* services_vbox;
+       GtkVBox* _tmp7_;
+       GtkHBox* hbox;
+       GtkVBox* main_vbox;
+       GtkWidget* menubar;
+       g_return_if_fail (self != NULL);
+       main_window_create_ui_manager (self);
+       self->priv->search_entry = (_tmp0_ = g_object_ref_sink ((GtkEntry*) gtk_entry_new ()), _g_object_unref0 (self->priv->search_entry), _tmp0_);
+       main_window_set_atk_name_description (self, (GtkWidget*) self->priv->search_entry, _ ("Search entry"), _ ("Search for a specific ID Card"));
+       gtk_entry_set_icon_from_pixbuf (self->priv->search_entry, GTK_ENTRY_ICON_PRIMARY, _tmp1_ = find_icon_sized ("edit-find-symbolic", GTK_ICON_SIZE_MENU));
+       _g_object_unref0 (_tmp1_);
+       gtk_entry_set_icon_tooltip_text (self->priv->search_entry, GTK_ENTRY_ICON_PRIMARY, _ ("Search identity or service"));
+       gtk_entry_set_icon_sensitive (self->priv->search_entry, GTK_ENTRY_ICON_PRIMARY, FALSE);
+       gtk_entry_set_icon_from_pixbuf (self->priv->search_entry, GTK_ENTRY_ICON_SECONDARY, _tmp2_ = find_icon_sized ("edit-clear-symbolic", GTK_ICON_SIZE_MENU));
+       _g_object_unref0 (_tmp2_);
+       gtk_entry_set_icon_tooltip_text (self->priv->search_entry, GTK_ENTRY_ICON_SECONDARY, _ ("Clear the current search"));
+       gtk_entry_set_icon_sensitive (self->priv->search_entry, GTK_ENTRY_ICON_SECONDARY, FALSE);
+       g_signal_connect_object (self->priv->search_entry, "icon-press", (GCallback) _main_window_search_entry_icon_press_cb_gtk_entry_icon_press, self, 0);
+       g_signal_connect_object ((GObject*) self->priv->search_entry, "notify::text", (GCallback) _main_window_search_entry_text_changed_cb_g_object_notify, self, 0);
+       g_signal_connect_object ((GtkWidget*) self->priv->search_entry, "key-press-event", (GCallback) _main_window_search_entry_key_press_event_cb_gtk_widget_key_press_event, self, 0);
+       self->priv->custom_vbox = (_tmp3_ = g_object_ref_sink (custom_vbox_new (FALSE, 6)), _g_object_unref0 (self->priv->custom_vbox), _tmp3_);
+       viewport = g_object_ref_sink ((GtkViewport*) gtk_viewport_new (NULL, NULL));
+       gtk_container_set_border_width ((GtkContainer*) viewport, (guint) 6);
+       gtk_viewport_set_shadow_type (viewport, GTK_SHADOW_NONE);
+       gtk_container_add ((GtkContainer*) viewport, (GtkWidget*) self->priv->custom_vbox);
+       scroll = g_object_ref_sink ((GtkScrolledWindow*) gtk_scrolled_window_new (NULL, NULL));
+       gtk_scrolled_window_set_policy (scroll, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+       gtk_scrolled_window_set_shadow_type (scroll, GTK_SHADOW_IN);
+       gtk_scrolled_window_add_with_viewport (scroll, (GtkWidget*) viewport);
+       vbox_left = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 0));
+       gtk_box_pack_start ((GtkBox*) vbox_left, (GtkWidget*) self->priv->search_entry, FALSE, FALSE, (guint) 6);
+       gtk_box_pack_start ((GtkBox*) vbox_left, (GtkWidget*) scroll, TRUE, TRUE, (guint) 0);
+       gtk_widget_set_size_request ((GtkWidget*) vbox_left, MAIN_WINDOW_WINDOW_WIDTH, 0);
+       login_vbox_title = g_object_ref_sink ((GtkLabel*) gtk_label_new (_ ("Login: ")));
+       main_window_label_make_bold (self, login_vbox_title);
+       gtk_misc_set_alignment ((GtkMisc*) login_vbox_title, (float) 0, (float) 0.5);
+       username_label = g_object_ref_sink ((GtkLabel*) gtk_label_new (_ ("Username:")));
+       gtk_misc_set_alignment ((GtkMisc*) username_label, (float) 1, (float) 0.5);
+       self->priv->username_entry = (_tmp4_ = g_object_ref_sink ((GtkEntry*) gtk_entry_new ()), _g_object_unref0 (self->priv->username_entry), _tmp4_);
+       password_label = g_object_ref_sink ((GtkLabel*) gtk_label_new (_ ("Password:")));
+       gtk_misc_set_alignment ((GtkMisc*) password_label, (float) 1, (float) 0.5);
+       self->priv->password_entry = (_tmp5_ = g_object_ref_sink ((GtkEntry*) gtk_entry_new ()), _g_object_unref0 (self->priv->password_entry), _tmp5_);
+       gtk_entry_set_invisible_char (self->priv->password_entry, (gunichar) '*');
+       gtk_entry_set_visibility (self->priv->password_entry, FALSE);
+       remember_checkbutton = g_object_ref_sink ((GtkCheckButton*) gtk_check_button_new_with_label (_ ("Remember password")));
+       login_table = g_object_ref_sink ((GtkTable*) gtk_table_new ((guint) 3, (guint) 3, FALSE));
+       gtk_table_set_col_spacings (login_table, (guint) 10);
+       gtk_table_set_row_spacings (login_table, (guint) 10);
+       gtk_table_attach_defaults (login_table, (GtkWidget*) username_label, (guint) 0, (guint) 1, (guint) 0, (guint) 1);
+       gtk_table_attach_defaults (login_table, (GtkWidget*) self->priv->username_entry, (guint) 1, (guint) 2, (guint) 0, (guint) 1);
+       gtk_table_attach_defaults (login_table, (GtkWidget*) password_label, (guint) 0, (guint) 1, (guint) 1, (guint) 2);
+       gtk_table_attach_defaults (login_table, (GtkWidget*) self->priv->password_entry, (guint) 1, (guint) 2, (guint) 1, (guint) 2);
+       gtk_table_attach_defaults (login_table, (GtkWidget*) remember_checkbutton, (guint) 1, (guint) 2, (guint) 2, (guint) 3);
+       login_vbox_alignment = g_object_ref_sink ((GtkAlignment*) gtk_alignment_new ((float) 0, (float) 0, (float) 0, (float) 0));
+       gtk_alignment_set_padding (login_vbox_alignment, (guint) 0, (guint) 0, (guint) 12, (guint) 0);
+       gtk_container_add ((GtkContainer*) login_vbox_alignment, (GtkWidget*) login_table);
+       login_vbox = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 6));
+       gtk_box_pack_start ((GtkBox*) login_vbox, (GtkWidget*) login_vbox_title, FALSE, TRUE, (guint) 0);
+       gtk_box_pack_start ((GtkBox*) login_vbox, (GtkWidget*) login_vbox_alignment, FALSE, TRUE, (guint) 0);
+       services_vbox_title = g_object_ref_sink ((GtkLabel*) gtk_label_new (_ ("Services:")));
+       main_window_label_make_bold (self, services_vbox_title);
+       gtk_misc_set_alignment ((GtkMisc*) services_vbox_title, (float) 0, (float) 0.5);
+       services_vbox_alignment = g_object_ref_sink ((GtkAlignment*) gtk_alignment_new ((float) 0, (float) 0, (float) 0, (float) 0));
+       gtk_alignment_set_padding (services_vbox_alignment, (guint) 0, (guint) 0, (guint) 12, (guint) 0);
+       self->priv->services_internal_vbox = (_tmp6_ = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (TRUE, 6)), _g_object_unref0 (self->priv->services_internal_vbox), _tmp6_);
+       gtk_container_add ((GtkContainer*) services_vbox_alignment, (GtkWidget*) self->priv->services_internal_vbox);
+       services_vbox = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 6));
+       gtk_box_pack_start ((GtkBox*) services_vbox, (GtkWidget*) services_vbox_title, FALSE, TRUE, (guint) 0);
+       gtk_box_pack_start ((GtkBox*) services_vbox, (GtkWidget*) services_vbox_alignment, FALSE, TRUE, (guint) 0);
+       self->priv->vbox_rigth = (_tmp7_ = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 18)), _g_object_unref0 (self->priv->vbox_rigth), _tmp7_);
+       gtk_box_pack_start ((GtkBox*) self->priv->vbox_rigth, (GtkWidget*) login_vbox, FALSE, TRUE, (guint) 0);
+       gtk_box_pack_start ((GtkBox*) self->priv->vbox_rigth, (GtkWidget*) services_vbox, FALSE, TRUE, (guint) 0);
+       hbox = g_object_ref_sink ((GtkHBox*) gtk_hbox_new (FALSE, 12));
+       gtk_box_pack_start ((GtkBox*) hbox, (GtkWidget*) vbox_left, FALSE, FALSE, (guint) 0);
+       gtk_box_pack_start ((GtkBox*) hbox, (GtkWidget*) self->priv->vbox_rigth, FALSE, FALSE, (guint) 0);
+       main_vbox = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 0));
+       gtk_container_set_border_width ((GtkContainer*) main_vbox, (guint) 12);
+       menubar = _g_object_ref0 (gtk_ui_manager_get_widget (self->priv->ui_manager, "/MenuBar"));
+       gtk_box_pack_start ((GtkBox*) main_vbox, menubar, FALSE, FALSE, (guint) 0);
+       gtk_box_pack_start ((GtkBox*) main_vbox, (GtkWidget*) hbox, TRUE, TRUE, (guint) 0);
+       gtk_container_add ((GtkContainer*) self, (GtkWidget*) main_vbox);
+       gtk_widget_show_all ((GtkWidget*) main_vbox);
+       gtk_widget_hide ((GtkWidget*) self->priv->vbox_rigth);
+       _g_object_unref0 (menubar);
+       _g_object_unref0 (main_vbox);
+       _g_object_unref0 (hbox);
+       _g_object_unref0 (services_vbox);
+       _g_object_unref0 (services_vbox_alignment);
+       _g_object_unref0 (services_vbox_title);
+       _g_object_unref0 (login_vbox);
+       _g_object_unref0 (login_vbox_alignment);
+       _g_object_unref0 (login_table);
+       _g_object_unref0 (remember_checkbutton);
+       _g_object_unref0 (password_label);
+       _g_object_unref0 (username_label);
+       _g_object_unref0 (login_vbox_title);
+       _g_object_unref0 (vbox_left);
+       _g_object_unref0 (scroll);
+       _g_object_unref0 (viewport);
+}
+
+
+static void main_window_set_atk_name_description (MainWindow* self, GtkWidget* widget, const char* name, const char* description) {
+       AtkObject* atk_widget;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (widget != NULL);
+       g_return_if_fail (name != NULL);
+       g_return_if_fail (description != NULL);
+       atk_widget = _g_object_ref0 (gtk_widget_get_accessible (widget));
+       atk_object_set_name (atk_widget, name);
+       atk_object_set_description (atk_widget, description);
+       _g_object_unref0 (atk_widget);
+}
+
+
+static void _gtk_main_quit_gtk_object_destroy (GtkObject* _sender, gpointer self) {
+       gtk_main_quit ();
+}
+
+
+static void main_window_connect_signals (MainWindow* self) {
+       g_return_if_fail (self != NULL);
+       g_signal_connect ((GtkObject*) self, "destroy", (GCallback) _gtk_main_quit_gtk_object_destroy, NULL);
+}
+
+
+static guint _dynamic_request_name0 (DBusGProxy* self, const char* param1, guint param2, GError** error) {
+       guint result;
+       dbus_g_proxy_call (self, "RequestName", error, G_TYPE_STRING, param1, G_TYPE_UINT, param2, G_TYPE_INVALID, G_TYPE_UINT, &result, G_TYPE_INVALID);
+       if (*error) {
+               return 0U;
+       }
+       return result;
+}
+
+
+static void _vala_dbus_register_object (DBusConnection* connection, const char* path, void* object) {
+       const _DBusObjectVTable * vtable;
+       vtable = g_type_get_qdata (G_TYPE_FROM_INSTANCE (object), g_quark_from_static_string ("DBusObjectVTable"));
+       if (vtable) {
+               vtable->register_object (connection, path, object);
+       } else {
+               g_warning ("Object does not implement any D-Bus interface");
+       }
+}
+
+
+static void _vala_dbus_unregister_object (gpointer connection, GObject* object) {
+       char* path;
+       path = g_object_steal_data ((GObject*) object, "dbus_object_path");
+       dbus_connection_unregister_object_path (connection, path);
+       g_free (path);
+}
+
+
+static void main_window_init_ipc_server (MainWindow* self) {
+       GError * _inner_error_ = NULL;
+       g_return_if_fail (self != NULL);
+       {
+               DBusGConnection* conn;
+               DBusGProxy* bus;
+               guint reply;
+               MoonshotServer* _tmp0_;
+               conn = dbus_g_bus_get (DBUS_BUS_SESSION, &_inner_error_);
+               if (_inner_error_ != NULL) {
+                       if (_inner_error_->domain == DBUS_GERROR) {
+                               goto __catch6_dbus_gerror;
+                       }
+                       g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                       g_clear_error (&_inner_error_);
+                       return;
+               }
+               bus = dbus_g_proxy_new_for_name (conn, "org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus");
+               reply = _dynamic_request_name0 (bus, "org.janet.Moonshot", (guint) 0, &_inner_error_);
+               if (_inner_error_ != NULL) {
+                       _g_object_unref0 (bus);
+                       _dbus_g_connection_unref0 (conn);
+                       if (_inner_error_->domain == DBUS_GERROR) {
+                               goto __catch6_dbus_gerror;
+                       }
+                       goto __finally6;
+               }
+               g_assert (reply == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER);
+               self->priv->ipc_server = (_tmp0_ = moonshot_server_new ((GtkWindow*) self), _g_object_unref0 (self->priv->ipc_server), _tmp0_);
+               _vala_dbus_register_object (dbus_g_connection_get_connection (conn), "/org/janet/moonshot", (GObject*) self->priv->ipc_server);
+               _g_object_unref0 (bus);
+               _dbus_g_connection_unref0 (conn);
+       }
+       goto __finally6;
+       __catch6_dbus_gerror:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+                       fprintf (stderr, "%s\n", e->message);
+                       _g_error_free0 (e);
+               }
+       }
+       __finally6:
+       if (_inner_error_ != NULL) {
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return;
+       }
+}
+
+
+gint main_window_main (char** args, int args_length1) {
+       gint result = 0;
+       MainWindow* window;
+       gtk_init (&args_length1, &args);
+       bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+       bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+       textdomain (GETTEXT_PACKAGE);
+       window = g_object_ref_sink (main_window_new ());
+       gtk_widget_show ((GtkWidget*) window);
+       gtk_main ();
+       result = 0;
+       _g_object_unref0 (window);
+       return result;
+}
+
+
+int main (int argc, char ** argv) {
+       g_type_init ();
+       return main_window_main (argv, argc);
+}
+
+
+static void main_window_class_init (MainWindowClass * klass) {
+       main_window_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (MainWindowPrivate));
+       G_OBJECT_CLASS (klass)->finalize = main_window_finalize;
+}
+
+
+static void main_window_instance_init (MainWindow * self) {
+       self->priv = MAIN_WINDOW_GET_PRIVATE (self);
+       self->priv->ui_manager = gtk_ui_manager_new ();
+}
+
+
+static void main_window_finalize (GObject* obj) {
+       MainWindow * self;
+       self = MAIN_WINDOW (obj);
+       _g_object_unref0 (self->priv->ui_manager);
+       _g_object_unref0 (self->priv->search_entry);
+       _g_object_unref0 (self->priv->vbox_rigth);
+       _g_object_unref0 (self->priv->custom_vbox);
+       _g_object_unref0 (self->priv->services_internal_vbox);
+       _g_object_unref0 (self->priv->username_entry);
+       _g_object_unref0 (self->priv->password_entry);
+       _g_object_unref0 (self->priv->listmodel);
+       _g_object_unref0 (self->priv->filter);
+       _g_object_unref0 (self->priv->identities_manager);
+       _g_object_unref0 (self->priv->ipc_server);
+       _g_object_unref0 (self->selected_id_card_widget);
+       _g_queue_free0 (self->priv->request_queue);
+       G_OBJECT_CLASS (main_window_parent_class)->finalize (obj);
+}
+
+
+GType main_window_get_type (void) {
+       static volatile gsize main_window_type_id__volatile = 0;
+       if (g_once_init_enter (&main_window_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (MainWindowClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) main_window_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (MainWindow), 0, (GInstanceInitFunc) main_window_instance_init, NULL };
+               GType main_window_type_id;
+               main_window_type_id = g_type_register_static (GTK_TYPE_WINDOW, "MainWindow", &g_define_type_info, 0);
+               g_once_init_leave (&main_window_type_id__volatile, main_window_type_id);
+       }
+       return main_window_type_id__volatile;
+}
+
+
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+       if ((array != NULL) && (destroy_func != NULL)) {
+               int i;
+               for (i = 0; i < array_length; i = i + 1) {
+                       if (((gpointer*) array)[i] != NULL) {
+                               destroy_func (((gpointer*) array)[i]);
+                       }
+               }
+       }
+}
+
+
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+       _vala_array_destroy (array, array_length, destroy_func);
+       g_free (array);
+}
+
+
+static int _vala_strcmp0 (const char * str1, const char * str2) {
+       if (str1 == NULL) {
+               return -(str1 != str2);
+       }
+       if (str2 == NULL) {
+               return str1 != str2;
+       }
+       return strcmp (str1, str2);
+}
+
+
+
+
diff --git a/src_moonshot_vala.stamp b/src_moonshot_vala.stamp
new file mode 100644 (file)
index 0000000..e69de29