1ad8600f74c112ad0d43ec743d267b90963a19ae
[moonshot-ui.git] / src / moonshot-identity-management-view.c
1 /* moonshot-identity-management-view.c generated by valac 0.10.4, the Vala compiler
2  * generated from moonshot-identity-management-view.vala, do not modify */
3
4
5 #include <glib.h>
6 #include <glib-object.h>
7 #include <gtk/gtk.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include <gdk-pixbuf/gdk-pixdata.h>
11 #include <gdk/gdk.h>
12 #include <gee.h>
13 #include <glib/gi18n-lib.h>
14 #include <pango/pango.h>
15 #include <float.h>
16 #include <math.h>
17 #include <stdio.h>
18 #include <atk/atk.h>
19
20
21 #define TYPE_IDENTITY_MANAGER_VIEW (identity_manager_view_get_type ())
22 #define IDENTITY_MANAGER_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_IDENTITY_MANAGER_VIEW, IdentityManagerView))
23 #define IDENTITY_MANAGER_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_IDENTITY_MANAGER_VIEW, IdentityManagerViewClass))
24 #define IS_IDENTITY_MANAGER_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_IDENTITY_MANAGER_VIEW))
25 #define IS_IDENTITY_MANAGER_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_IDENTITY_MANAGER_VIEW))
26 #define IDENTITY_MANAGER_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_IDENTITY_MANAGER_VIEW, IdentityManagerViewClass))
27
28 typedef struct _IdentityManagerView IdentityManagerView;
29 typedef struct _IdentityManagerViewClass IdentityManagerViewClass;
30 typedef struct _IdentityManagerViewPrivate IdentityManagerViewPrivate;
31
32 #define TYPE_IDENTITY_MANAGER_APP (identity_manager_app_get_type ())
33 #define IDENTITY_MANAGER_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_IDENTITY_MANAGER_APP, IdentityManagerApp))
34 #define IDENTITY_MANAGER_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_IDENTITY_MANAGER_APP, IdentityManagerAppClass))
35 #define IS_IDENTITY_MANAGER_APP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_IDENTITY_MANAGER_APP))
36 #define IS_IDENTITY_MANAGER_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_IDENTITY_MANAGER_APP))
37 #define IDENTITY_MANAGER_APP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_IDENTITY_MANAGER_APP, IdentityManagerAppClass))
38
39 typedef struct _IdentityManagerApp IdentityManagerApp;
40 typedef struct _IdentityManagerAppClass IdentityManagerAppClass;
41
42 #define TYPE_IDENTITY_MANAGER_MODEL (identity_manager_model_get_type ())
43 #define IDENTITY_MANAGER_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_IDENTITY_MANAGER_MODEL, IdentityManagerModel))
44 #define IDENTITY_MANAGER_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_IDENTITY_MANAGER_MODEL, IdentityManagerModelClass))
45 #define IS_IDENTITY_MANAGER_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_IDENTITY_MANAGER_MODEL))
46 #define IS_IDENTITY_MANAGER_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_IDENTITY_MANAGER_MODEL))
47 #define IDENTITY_MANAGER_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_IDENTITY_MANAGER_MODEL, IdentityManagerModelClass))
48
49 typedef struct _IdentityManagerModel IdentityManagerModel;
50 typedef struct _IdentityManagerModelClass IdentityManagerModelClass;
51
52 #define TYPE_IDENTITY_REQUEST (identity_request_get_type ())
53 #define IDENTITY_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_IDENTITY_REQUEST, IdentityRequest))
54 #define IDENTITY_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_IDENTITY_REQUEST, IdentityRequestClass))
55 #define IS_IDENTITY_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_IDENTITY_REQUEST))
56 #define IS_IDENTITY_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_IDENTITY_REQUEST))
57 #define IDENTITY_REQUEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_IDENTITY_REQUEST, IdentityRequestClass))
58
59 typedef struct _IdentityRequest IdentityRequest;
60 typedef struct _IdentityRequestClass IdentityRequestClass;
61
62 #define TYPE_CUSTOM_VBOX (custom_vbox_get_type ())
63 #define CUSTOM_VBOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CUSTOM_VBOX, CustomVBox))
64 #define CUSTOM_VBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CUSTOM_VBOX, CustomVBoxClass))
65 #define IS_CUSTOM_VBOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CUSTOM_VBOX))
66 #define IS_CUSTOM_VBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CUSTOM_VBOX))
67 #define CUSTOM_VBOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CUSTOM_VBOX, CustomVBoxClass))
68
69 typedef struct _CustomVBox CustomVBox;
70 typedef struct _CustomVBoxClass CustomVBoxClass;
71
72 #define TYPE_ID_CARD (id_card_get_type ())
73 #define ID_CARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ID_CARD, IdCard))
74 #define ID_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ID_CARD, IdCardClass))
75 #define IS_ID_CARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ID_CARD))
76 #define IS_ID_CARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ID_CARD))
77 #define ID_CARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ID_CARD, IdCardClass))
78
79 typedef struct _IdCard IdCard;
80 typedef struct _IdCardClass IdCardClass;
81
82 #define IDENTITY_MANAGER_VIEW_TYPE_COLUMNS (identity_manager_view_columns_get_type ())
83 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
84 #define __g_slist_free_g_object_unref0(var) ((var == NULL) ? NULL : (var = (_g_slist_free_g_object_unref (var), NULL)))
85 #define _g_queue_free0(var) ((var == NULL) ? NULL : (var = (g_queue_free (var), NULL)))
86 #define _g_hash_table_unref0(var) ((var == NULL) ? NULL : (var = (g_hash_table_unref (var), NULL)))
87 typedef struct _IdentityManagerAppPrivate IdentityManagerAppPrivate;
88 #define _g_free0(var) (var = (g_free (var), NULL))
89
90 #define TYPE_ID_CARD_WIDGET (id_card_widget_get_type ())
91 #define ID_CARD_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ID_CARD_WIDGET, IdCardWidget))
92 #define ID_CARD_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ID_CARD_WIDGET, IdCardWidgetClass))
93 #define IS_ID_CARD_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ID_CARD_WIDGET))
94 #define IS_ID_CARD_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ID_CARD_WIDGET))
95 #define ID_CARD_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ID_CARD_WIDGET, IdCardWidgetClass))
96
97 typedef struct _IdCardWidget IdCardWidget;
98 typedef struct _IdCardWidgetClass IdCardWidgetClass;
99 #define _g_list_free0(var) ((var == NULL) ? NULL : (var = (g_list_free (var), NULL)))
100
101 #define TYPE_ADD_IDENTITY_DIALOG (add_identity_dialog_get_type ())
102 #define ADD_IDENTITY_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ADD_IDENTITY_DIALOG, AddIdentityDialog))
103 #define ADD_IDENTITY_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ADD_IDENTITY_DIALOG, AddIdentityDialogClass))
104 #define IS_ADD_IDENTITY_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ADD_IDENTITY_DIALOG))
105 #define IS_ADD_IDENTITY_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ADD_IDENTITY_DIALOG))
106 #define ADD_IDENTITY_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ADD_IDENTITY_DIALOG, AddIdentityDialogClass))
107
108 typedef struct _AddIdentityDialog AddIdentityDialog;
109 typedef struct _AddIdentityDialogClass AddIdentityDialogClass;
110 typedef struct _IdentityRequestPrivate IdentityRequestPrivate;
111 #define __g_slist_free_g_free0(var) ((var == NULL) ? NULL : (var = (_g_slist_free_g_free (var), NULL)))
112
113 #define TYPE_RULE (rule_get_type ())
114 typedef struct _Rule Rule;
115 typedef struct _Block1Data Block1Data;
116 #define _g_pattern_spec_free0(var) ((var == NULL) ? NULL : (var = (g_pattern_spec_free (var), NULL)))
117
118 #define TYPE_ADD_PASSWORD_DIALOG (add_password_dialog_get_type ())
119 #define ADD_PASSWORD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_ADD_PASSWORD_DIALOG, AddPasswordDialog))
120 #define ADD_PASSWORD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_ADD_PASSWORD_DIALOG, AddPasswordDialogClass))
121 #define IS_ADD_PASSWORD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_ADD_PASSWORD_DIALOG))
122 #define IS_ADD_PASSWORD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_ADD_PASSWORD_DIALOG))
123 #define ADD_PASSWORD_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_ADD_PASSWORD_DIALOG, AddPasswordDialogClass))
124
125 typedef struct _AddPasswordDialog AddPasswordDialog;
126 typedef struct _AddPasswordDialogClass AddPasswordDialogClass;
127 #define _pango_font_description_free0(var) ((var == NULL) ? NULL : (var = (pango_font_description_free (var), NULL)))
128 #define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
129
130 struct _IdentityManagerView {
131         GtkWindow parent_instance;
132         IdentityManagerViewPrivate * priv;
133         IdentityManagerApp* parent_app;
134         IdentityManagerModel* identities_manager;
135         GQueue* request_queue;
136 };
137
138 struct _IdentityManagerViewClass {
139         GtkWindowClass parent_class;
140 };
141
142 struct _IdentityManagerViewPrivate {
143         GtkUIManager* ui_manager;
144         GtkEntry* search_entry;
145         GtkVBox* vbox_right;
146         CustomVBox* custom_vbox;
147         GtkVBox* services_internal_vbox;
148         GtkEntry* username_entry;
149         GtkEntry* password_entry;
150         GtkListStore* listmodel;
151         GtkTreeModelFilter* filter;
152         GSList* candidates;
153         IdCard* default_id_card;
154         GHashTable* service_button_map;
155 };
156
157 typedef enum  {
158         IDENTITY_MANAGER_VIEW_COLUMNS_IDCARD_COL,
159         IDENTITY_MANAGER_VIEW_COLUMNS_LOGO_COL,
160         IDENTITY_MANAGER_VIEW_COLUMNS_ISSUER_COL,
161         IDENTITY_MANAGER_VIEW_COLUMNS_USERNAME_COL,
162         IDENTITY_MANAGER_VIEW_COLUMNS_PASSWORD_COL,
163         IDENTITY_MANAGER_VIEW_COLUMNS_N_COLUMNS
164 } IdentityManagerViewColumns;
165
166 struct _IdentityManagerApp {
167         GtkWindow parent_instance;
168         IdentityManagerAppPrivate * priv;
169         IdentityManagerModel* model;
170 };
171
172 struct _IdentityManagerAppClass {
173         GtkWindowClass parent_class;
174 };
175
176 struct _IdentityRequest {
177         GObject parent_instance;
178         IdentityRequestPrivate * priv;
179         IdCard* id_card;
180         gboolean complete;
181         gboolean select_default;
182         char* nai;
183         char* password;
184         char* service;
185 };
186
187 struct _IdentityRequestClass {
188         GObjectClass parent_class;
189 };
190
191 struct _Rule {
192         char* pattern;
193         char* always_confirm;
194 };
195
196 struct _Block1Data {
197         int _ref_count_;
198         IdentityManagerView * self;
199         IdCard* identity;
200 };
201
202
203 static gpointer identity_manager_view_parent_class = NULL;
204
205 GType identity_manager_view_get_type (void) G_GNUC_CONST;
206 GType identity_manager_app_get_type (void) G_GNUC_CONST;
207 GType identity_manager_model_get_type (void) G_GNUC_CONST;
208 GType identity_request_get_type (void) G_GNUC_CONST;
209 GType custom_vbox_get_type (void) G_GNUC_CONST;
210 GType id_card_get_type (void) G_GNUC_CONST;
211 #define IDENTITY_MANAGER_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_IDENTITY_MANAGER_VIEW, IdentityManagerViewPrivate))
212 enum  {
213         IDENTITY_MANAGER_VIEW_DUMMY_PROPERTY
214 };
215 static GType identity_manager_view_columns_get_type (void) G_GNUC_UNUSED;
216 static void _g_slist_free_g_object_unref (GSList* self);
217 #define IDENTITY_MANAGER_VIEW_WINDOW_WIDTH 400
218 #define IDENTITY_MANAGER_VIEW_WINDOW_HEIGHT 500
219 #define IDENTITY_MANAGER_VIEW_layout "<menubar name='MenuBar'>" "        <menu name='FileMenu' action='FileMenuAction'>" "            <menuitem name='AddIdCard' action='AddIdCardAction' />" "            <separator />" "            <menuitem name='Quit' action='QuitAction' />" "        </menu>" "" "        <menu name='HelpMenu' action='HelpMenuAction'>" "             <menuitem name='About' action='AboutAction' />" "        </menu>" "</menubar>"
220 IdentityManagerView* identity_manager_view_new (IdentityManagerApp* app);
221 IdentityManagerView* identity_manager_view_construct (GType object_type, IdentityManagerApp* app);
222 static void identity_manager_view_build_ui (IdentityManagerView* self);
223 static void identity_manager_view_setup_list_model (IdentityManagerView* self);
224 static void identity_manager_view_load_id_cards (IdentityManagerView* self);
225 static void identity_manager_view_connect_signals (IdentityManagerView* self);
226 void identity_manager_view_on_card_list_changed (IdentityManagerView* self);
227 void identity_manager_view_add_candidate (IdentityManagerView* self, IdCard* idcard);
228 static gboolean identity_manager_view_visible_func (IdentityManagerView* self, GtkTreeModel* model, GtkTreeIter* iter);
229 const char* id_card_get_issuer (IdCard* self);
230 const char* id_card_get_display_name (IdCard* self);
231 char** id_card_get_services (IdCard* self, int* result_length1);
232 static gboolean _identity_manager_view_visible_func_gtk_tree_model_filter_visible_func (GtkTreeModel* model, GtkTreeIter* iter, gpointer self);
233 static void identity_manager_view_search_entry_icon_press_cb (IdentityManagerView* self, GtkEntryIconPosition pos, GdkEvent* event);
234 static void identity_manager_view_search_entry_text_changed_cb (IdentityManagerView* self);
235 static void identity_manager_view_redraw_id_card_widgets (IdentityManagerView* self);
236 static gboolean identity_manager_view_search_entry_key_press_event_cb (IdentityManagerView* self, GdkEventKey* e);
237 GType id_card_widget_get_type (void) G_GNUC_CONST;
238 static void identity_manager_view_remove_id_card_widget (IdentityManagerView* self, IdCardWidget* id_card_widget);
239 GeeLinkedList* identity_manager_model_get_card_list (IdentityManagerModel* self);
240 static void identity_manager_view_add_id_card_data (IdentityManagerView* self, IdCard* id_card);
241 static void identity_manager_view_add_id_card_widget (IdentityManagerView* self, IdCard* id_card);
242 static void identity_manager_view_fill_details (IdentityManagerView* self, IdCardWidget* id_card_widget);
243 IdCard* id_card_widget_get_id_card (IdCardWidget* self);
244 const char* id_card_get_username (IdCard* self);
245 const char* id_card_get_password (IdCard* self);
246 static void identity_manager_view_fill_services_vbox (IdentityManagerView* self, IdCard* id_card);
247 static void identity_manager_view_show_details (IdentityManagerView* self, IdCard* id_card);
248 static void identity_manager_view_details_identity_cb (IdentityManagerView* self, IdCardWidget* id_card_widget);
249 GType add_identity_dialog_get_type (void) G_GNUC_CONST;
250 static IdCard* identity_manager_view_get_id_card_data (IdentityManagerView* self, AddIdentityDialog* dialog);
251 IdCard* id_card_new (void);
252 IdCard* id_card_construct (GType object_type);
253 const char* add_identity_dialog_get_display_name (AddIdentityDialog* self);
254 void id_card_set_display_name (IdCard* self, const char* value);
255 const char* add_identity_dialog_get_issuer (AddIdentityDialog* self);
256 void id_card_set_issuer (IdCard* self, const char* value);
257 const char* add_identity_dialog_get_username (AddIdentityDialog* self);
258 void id_card_set_username (IdCard* self, const char* value);
259 const char* add_identity_dialog_get_password (AddIdentityDialog* self);
260 void id_card_set_password (IdCard* self, const char* value);
261 void id_card_set_services (IdCard* self, char** value, int value_length1);
262 GdkPixbuf* find_icon (const char* name, gint size);
263 static void identity_manager_view_remove_id_card_data (IdentityManagerView* self, IdCard* id_card);
264 IdCardWidget* id_card_widget_new (IdCard* id_card);
265 IdCardWidget* id_card_widget_construct (GType object_type, IdCard* id_card);
266 void custom_vbox_add_id_card_widget (CustomVBox* self, IdCardWidget* id_card_widget);
267 static void _identity_manager_view_details_identity_cb_id_card_widget_details_id (IdCardWidget* _sender, gpointer self);
268 static void identity_manager_view_remove_identity_cb (IdentityManagerView* self, IdCardWidget* id_card_widget);
269 static void _identity_manager_view_remove_identity_cb_id_card_widget_remove_id (IdCardWidget* _sender, gpointer self);
270 static void _lambda2_ (IdCardWidget* w, IdentityManagerView* self);
271 void identity_manager_view_send_identity_cb (IdentityManagerView* self, IdCard* identity);
272 static void __lambda2__id_card_widget_send_id (IdCardWidget* _sender, gpointer self);
273 void custom_vbox_receive_expanded_event (CustomVBox* self, IdCardWidget* id_card_widget);
274 static void _custom_vbox_receive_expanded_event_id_card_widget_expanded (IdCardWidget* _sender, gpointer self);
275 static void _identity_manager_view_fill_details_id_card_widget_expanded (IdCardWidget* _sender, gpointer self);
276 gboolean identity_manager_view_display_name_is_valid (IdentityManagerView* self, const char* name, char** candidate);
277 void identity_manager_view_insert_id_card (IdentityManagerView* self, IdCard* id_card);
278 void identity_manager_model_add_card (IdentityManagerModel* self, IdCard* card);
279 gboolean identity_manager_view_add_identity (IdentityManagerView* self, IdCard* id_card);
280 static void identity_manager_view_add_identity_manual_cb (IdentityManagerView* self);
281 AddIdentityDialog* add_identity_dialog_new (void);
282 AddIdentityDialog* add_identity_dialog_construct (GType object_type);
283 void custom_vbox_remove_id_card_widget (CustomVBox* self, IdCardWidget* id_card_widget);
284 static void identity_manager_view_remove_identity (IdentityManagerView* self, IdCardWidget* id_card_widget);
285 void identity_manager_model_remove_card (IdentityManagerModel* self, IdCard* card);
286 void identity_manager_view_select_identity (IdentityManagerView* self, IdentityRequest* request);
287 IdCardWidget* custom_vbox_get_current_idcard (CustomVBox* self);
288 GtkButton* id_card_widget_get_send_button (IdCardWidget* self);
289 const char* id_card_get_nai (IdCard* self);
290 static void _g_slist_free_g_free (GSList* self);
291 GType rule_get_type (void) G_GNUC_CONST;
292 Rule* rule_dup (const Rule* self);
293 void rule_free (Rule* self);
294 void rule_copy (const Rule* self, Rule* dest);
295 void rule_destroy (Rule* self);
296 Rule* id_card_get_rules (IdCard* self, int* result_length1);
297 static gboolean identity_manager_view_match_service_pattern (IdentityManagerView* self, const char* service, const char* pattern);
298 static gboolean _lambda3_ (Block1Data* _data1_);
299 static gboolean __lambda3__gsource_func (gpointer self);
300 static Block1Data* block1_data_ref (Block1Data* _data1_);
301 static void block1_data_unref (Block1Data* _data1_);
302 AddPasswordDialog* add_password_dialog_new (void);
303 AddPasswordDialog* add_password_dialog_construct (GType object_type);
304 GType add_password_dialog_get_type (void) G_GNUC_CONST;
305 const char* add_password_dialog_get_password (AddPasswordDialog* self);
306 gboolean add_password_dialog_get_remember (AddPasswordDialog* self);
307 void identity_request_return_identity (IdentityRequest* self, IdCard* id_card);
308 static void identity_manager_view_label_make_bold (IdentityManagerView* self, GtkLabel* label);
309 static void _lambda1_ (GtkButton* remove_button, IdentityManagerView* self);
310 void id_card_widget_update_id_card_label (IdCardWidget* self);
311 static void __lambda1__gtk_button_clicked (GtkButton* _sender, gpointer self);
312 static void identity_manager_view_on_about_action (IdentityManagerView* self);
313 static GtkActionEntry* identity_manager_view_create_actions (IdentityManagerView* self, int* result_length1);
314 static void _vala_array_add1 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value);
315 static void _identity_manager_view_add_identity_manual_cb_gtk_action_callback (GtkAction* action, gpointer self);
316 static void _vala_array_add2 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value);
317 static void _gtk_main_quit_gtk_action_callback (GtkAction* action, gpointer self);
318 static void _vala_array_add3 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value);
319 static void _vala_array_add4 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value);
320 static void _identity_manager_view_on_about_action_gtk_action_callback (GtkAction* action, gpointer self);
321 static void _vala_array_add5 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value);
322 static void identity_manager_view_create_ui_manager (IdentityManagerView* self);
323 static void identity_manager_view_set_atk_name_description (IdentityManagerView* self, GtkWidget* widget, const char* name, const char* description);
324 GdkPixbuf* find_icon_sized (const char* name, GtkIconSize icon_size);
325 static void _identity_manager_view_search_entry_icon_press_cb_gtk_entry_icon_press (GtkEntry* _sender, GtkEntryIconPosition p0, GdkEvent* p1, gpointer self);
326 static void _identity_manager_view_search_entry_text_changed_cb_g_object_notify (GObject* _sender, GParamSpec* pspec, gpointer self);
327 static gboolean _identity_manager_view_search_entry_key_press_event_cb_gtk_widget_key_press_event (GtkWidget* _sender, GdkEventKey* event, gpointer self);
328 CustomVBox* custom_vbox_new (IdentityManagerView* window, gboolean homogeneous, gint spacing);
329 CustomVBox* custom_vbox_construct (GType object_type, IdentityManagerView* window, gboolean homogeneous, gint spacing);
330 static void _gtk_main_quit_gtk_object_destroy (GtkObject* _sender, gpointer self);
331 static void _identity_manager_view_on_card_list_changed_identity_manager_model_card_list_changed (IdentityManagerModel* _sender, gpointer self);
332 static void identity_manager_view_finalize (GObject* obj);
333 static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
334 static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
335 static gint _vala_array_length (gpointer array);
336 static int _vala_strcmp0 (const char * str1, const char * str2);
337
338
339
340 static GType identity_manager_view_columns_get_type (void) {
341         static volatile gsize identity_manager_view_columns_type_id__volatile = 0;
342         if (g_once_init_enter (&identity_manager_view_columns_type_id__volatile)) {
343                 static const GEnumValue values[] = {{IDENTITY_MANAGER_VIEW_COLUMNS_IDCARD_COL, "IDENTITY_MANAGER_VIEW_COLUMNS_IDCARD_COL", "idcard-col"}, {IDENTITY_MANAGER_VIEW_COLUMNS_LOGO_COL, "IDENTITY_MANAGER_VIEW_COLUMNS_LOGO_COL", "logo-col"}, {IDENTITY_MANAGER_VIEW_COLUMNS_ISSUER_COL, "IDENTITY_MANAGER_VIEW_COLUMNS_ISSUER_COL", "issuer-col"}, {IDENTITY_MANAGER_VIEW_COLUMNS_USERNAME_COL, "IDENTITY_MANAGER_VIEW_COLUMNS_USERNAME_COL", "username-col"}, {IDENTITY_MANAGER_VIEW_COLUMNS_PASSWORD_COL, "IDENTITY_MANAGER_VIEW_COLUMNS_PASSWORD_COL", "password-col"}, {IDENTITY_MANAGER_VIEW_COLUMNS_N_COLUMNS, "IDENTITY_MANAGER_VIEW_COLUMNS_N_COLUMNS", "n-columns"}, {0, NULL, NULL}};
344                 GType identity_manager_view_columns_type_id;
345                 identity_manager_view_columns_type_id = g_enum_register_static ("IdentityManagerViewColumns", values);
346                 g_once_init_leave (&identity_manager_view_columns_type_id__volatile, identity_manager_view_columns_type_id);
347         }
348         return identity_manager_view_columns_type_id__volatile;
349 }
350
351
352 static void _g_slist_free_g_object_unref (GSList* self) {
353         g_slist_foreach (self, (GFunc) g_object_unref, NULL);
354         g_slist_free (self);
355 }
356
357
358 static gpointer _g_object_ref0 (gpointer self) {
359         return self ? g_object_ref (self) : NULL;
360 }
361
362
363 IdentityManagerView* identity_manager_view_construct (GType object_type, IdentityManagerApp* app) {
364         IdentityManagerView * self;
365         IdentityManagerApp* _tmp0_;
366         IdentityManagerModel* _tmp1_;
367         GQueue* _tmp2_;
368         GHashTable* _tmp3_;
369         g_return_val_if_fail (app != NULL, NULL);
370         self = g_object_newv (object_type, 0, NULL);
371         self->parent_app = (_tmp0_ = _g_object_ref0 (app), _g_object_unref0 (self->parent_app), _tmp0_);
372         self->identities_manager = (_tmp1_ = _g_object_ref0 (self->parent_app->model), _g_object_unref0 (self->identities_manager), _tmp1_);
373         self->request_queue = (_tmp2_ = g_queue_new (), _g_queue_free0 (self->request_queue), _tmp2_);
374         self->priv->service_button_map = (_tmp3_ = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, g_free), _g_hash_table_unref0 (self->priv->service_button_map), _tmp3_);
375         gtk_window_set_title ((GtkWindow*) self, "Moonshoot");
376         gtk_window_set_position ((GtkWindow*) self, GTK_WIN_POS_CENTER);
377         gtk_window_set_default_size ((GtkWindow*) self, IDENTITY_MANAGER_VIEW_WINDOW_WIDTH, IDENTITY_MANAGER_VIEW_WINDOW_HEIGHT);
378         identity_manager_view_build_ui (self);
379         identity_manager_view_setup_list_model (self);
380         identity_manager_view_load_id_cards (self);
381         identity_manager_view_connect_signals (self);
382         return self;
383 }
384
385
386 IdentityManagerView* identity_manager_view_new (IdentityManagerApp* app) {
387         return identity_manager_view_construct (TYPE_IDENTITY_MANAGER_VIEW, app);
388 }
389
390
391 void identity_manager_view_on_card_list_changed (IdentityManagerView* self) {
392         g_return_if_fail (self != NULL);
393         identity_manager_view_load_id_cards (self);
394 }
395
396
397 void identity_manager_view_add_candidate (IdentityManagerView* self, IdCard* idcard) {
398         g_return_if_fail (self != NULL);
399         g_return_if_fail (idcard != NULL);
400         self->priv->candidates = g_slist_append (self->priv->candidates, _g_object_ref0 (idcard));
401 }
402
403
404 static gboolean string_contains (const char* self, const char* needle) {
405         gboolean result = FALSE;
406         g_return_val_if_fail (self != NULL, FALSE);
407         g_return_val_if_fail (needle != NULL, FALSE);
408         result = strstr (self, needle) != NULL;
409         return result;
410 }
411
412
413 static gboolean identity_manager_view_visible_func (IdentityManagerView* self, GtkTreeModel* model, GtkTreeIter* iter) {
414         gboolean result = FALSE;
415         IdCard* id_card;
416         char* entry_text;
417         gboolean _tmp0_ = FALSE;
418         g_return_val_if_fail (self != NULL, FALSE);
419         g_return_val_if_fail (model != NULL, FALSE);
420         id_card = NULL;
421         gtk_tree_model_get (model, iter, IDENTITY_MANAGER_VIEW_COLUMNS_IDCARD_COL, &id_card, -1);
422         if (id_card == NULL) {
423                 result = FALSE;
424                 _g_object_unref0 (id_card);
425                 return result;
426         }
427         if (self->priv->candidates != NULL) {
428                 gboolean is_candidate;
429                 is_candidate = FALSE;
430                 {
431                         GSList* candidate_collection;
432                         GSList* candidate_it;
433                         candidate_collection = self->priv->candidates;
434                         for (candidate_it = candidate_collection; candidate_it != NULL; candidate_it = candidate_it->next) {
435                                 IdCard* candidate;
436                                 candidate = _g_object_ref0 ((IdCard*) candidate_it->data);
437                                 {
438                                         if (candidate == id_card) {
439                                                 is_candidate = TRUE;
440                                         }
441                                         _g_object_unref0 (candidate);
442                                 }
443                         }
444                 }
445                 if (!is_candidate) {
446                         result = FALSE;
447                         _g_object_unref0 (id_card);
448                         return result;
449                 }
450         }
451         entry_text = g_strdup (gtk_entry_get_text (self->priv->search_entry));
452         if (entry_text == NULL) {
453                 _tmp0_ = TRUE;
454         } else {
455                 _tmp0_ = _vala_strcmp0 (entry_text, "") == 0;
456         }
457         if (_tmp0_) {
458                 result = TRUE;
459                 _g_free0 (entry_text);
460                 _g_object_unref0 (id_card);
461                 return result;
462         }
463         {
464                 char** _tmp1_;
465                 char** search_text_collection;
466                 int search_text_collection_length1;
467                 int search_text_it;
468                 search_text_collection = _tmp1_ = g_strsplit (entry_text, " ", 0);
469                 search_text_collection_length1 = _vala_array_length (_tmp1_);
470                 for (search_text_it = 0; search_text_it < _vala_array_length (_tmp1_); search_text_it = search_text_it + 1) {
471                         char* search_text;
472                         search_text = g_strdup (search_text_collection[search_text_it]);
473                         {
474                                 char* search_text_casefold;
475                                 gint _tmp2_;
476                                 if (_vala_strcmp0 (search_text, "") == 0) {
477                                         _g_free0 (search_text);
478                                         continue;
479                                 }
480                                 search_text_casefold = g_utf8_casefold (search_text, -1);
481                                 if (id_card_get_issuer (id_card) != NULL) {
482                                         char* issuer_casefold;
483                                         issuer_casefold = g_strdup (id_card_get_issuer (id_card));
484                                         if (string_contains (issuer_casefold, search_text_casefold)) {
485                                                 result = TRUE;
486                                                 _g_free0 (issuer_casefold);
487                                                 _g_free0 (search_text_casefold);
488                                                 _g_free0 (search_text);
489                                                 search_text_collection = (_vala_array_free (search_text_collection, search_text_collection_length1, (GDestroyNotify) g_free), NULL);
490                                                 _g_free0 (entry_text);
491                                                 _g_object_unref0 (id_card);
492                                                 return result;
493                                         }
494                                         _g_free0 (issuer_casefold);
495                                 }
496                                 if (id_card_get_display_name (id_card) != NULL) {
497                                         char* display_name_casefold;
498                                         display_name_casefold = g_utf8_casefold (id_card_get_display_name (id_card), -1);
499                                         if (string_contains (display_name_casefold, search_text_casefold)) {
500                                                 result = TRUE;
501                                                 _g_free0 (display_name_casefold);
502                                                 _g_free0 (search_text_casefold);
503                                                 _g_free0 (search_text);
504                                                 search_text_collection = (_vala_array_free (search_text_collection, search_text_collection_length1, (GDestroyNotify) g_free), NULL);
505                                                 _g_free0 (entry_text);
506                                                 _g_object_unref0 (id_card);
507                                                 return result;
508                                         }
509                                         _g_free0 (display_name_casefold);
510                                 }
511                                 if (_tmp2_ > 0) {
512                                         {
513                                                 gint _tmp3_;
514                                                 char** service_collection;
515                                                 int service_collection_length1;
516                                                 int service_it;
517                                                 service_collection = id_card_get_services (id_card, &_tmp3_);
518                                                 service_collection_length1 = _tmp3_;
519                                                 for (service_it = 0; service_it < _tmp3_; service_it = service_it + 1) {
520                                                         char* service;
521                                                         service = g_strdup (service_collection[service_it]);
522                                                         {
523                                                                 char* service_casefold;
524                                                                 service_casefold = g_utf8_casefold (service, -1);
525                                                                 if (string_contains (service_casefold, search_text_casefold)) {
526                                                                         result = TRUE;
527                                                                         _g_free0 (service_casefold);
528                                                                         _g_free0 (service);
529                                                                         _g_free0 (search_text_casefold);
530                                                                         _g_free0 (search_text);
531                                                                         search_text_collection = (_vala_array_free (search_text_collection, search_text_collection_length1, (GDestroyNotify) g_free), NULL);
532                                                                         _g_free0 (entry_text);
533                                                                         _g_object_unref0 (id_card);
534                                                                         return result;
535                                                                 }
536                                                                 _g_free0 (service_casefold);
537                                                                 _g_free0 (service);
538                                                         }
539                                                 }
540                                         }
541                                 }
542                                 _g_free0 (search_text_casefold);
543                                 _g_free0 (search_text);
544                         }
545                 }
546                 search_text_collection = (_vala_array_free (search_text_collection, search_text_collection_length1, (GDestroyNotify) g_free), NULL);
547         }
548         result = FALSE;
549         _g_free0 (entry_text);
550         _g_object_unref0 (id_card);
551         return result;
552 }
553
554
555 static gboolean _identity_manager_view_visible_func_gtk_tree_model_filter_visible_func (GtkTreeModel* model, GtkTreeIter* iter, gpointer self) {
556         gboolean result;
557         result = identity_manager_view_visible_func (self, model, iter);
558         return result;
559 }
560
561
562 static void identity_manager_view_setup_list_model (IdentityManagerView* self) {
563         GtkTreeModelFilter* _tmp0_;
564         g_return_if_fail (self != NULL);
565         self->priv->listmodel = gtk_list_store_new ((gint) IDENTITY_MANAGER_VIEW_COLUMNS_N_COLUMNS, TYPE_ID_CARD, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
566         self->priv->filter = (_tmp0_ = (GtkTreeModelFilter*) gtk_tree_model_filter_new ((GtkTreeModel*) self->priv->listmodel, NULL), _g_object_unref0 (self->priv->filter), _tmp0_);
567         gtk_tree_model_filter_set_visible_func (self->priv->filter, _identity_manager_view_visible_func_gtk_tree_model_filter_visible_func, g_object_ref (self), g_object_unref);
568 }
569
570
571 static void identity_manager_view_search_entry_icon_press_cb (IdentityManagerView* self, GtkEntryIconPosition pos, GdkEvent* event) {
572         g_return_if_fail (self != NULL);
573         g_return_if_fail (event != NULL);
574         if (pos == GTK_ENTRY_ICON_PRIMARY) {
575                 g_print ("Search entry icon pressed\n");
576         } else {
577                 gtk_entry_set_text (self->priv->search_entry, "");
578         }
579 }
580
581
582 static void identity_manager_view_search_entry_text_changed_cb (IdentityManagerView* self) {
583         gboolean has_text;
584         g_return_if_fail (self != NULL);
585         gtk_tree_model_filter_refilter (self->priv->filter);
586         identity_manager_view_redraw_id_card_widgets (self);
587         has_text = gtk_entry_get_text_length (self->priv->search_entry) > 0;
588         gtk_entry_set_icon_sensitive (self->priv->search_entry, GTK_ENTRY_ICON_PRIMARY, has_text);
589         gtk_entry_set_icon_sensitive (self->priv->search_entry, GTK_ENTRY_ICON_SECONDARY, has_text);
590         gtk_widget_set_visible ((GtkWidget*) self->priv->vbox_right, FALSE);
591 }
592
593
594 static gboolean identity_manager_view_search_entry_key_press_event_cb (IdentityManagerView* self, GdkEventKey* e) {
595         gboolean result = FALSE;
596         g_return_val_if_fail (self != NULL, FALSE);
597         if (_vala_strcmp0 (gdk_keyval_name ((*e).keyval), "Escape") == 0) {
598                 gtk_entry_set_text (self->priv->search_entry, "");
599         }
600         result = FALSE;
601         return result;
602 }
603
604
605 static void identity_manager_view_load_id_cards (IdentityManagerView* self) {
606         GList* children;
607         IdCard* _tmp0_;
608         GeeLinkedList* card_list;
609         g_return_if_fail (self != NULL);
610         children = gtk_container_get_children ((GtkContainer*) self->priv->custom_vbox);
611         {
612                 GList* id_card_widget_collection;
613                 GList* id_card_widget_it;
614                 id_card_widget_collection = children;
615                 for (id_card_widget_it = id_card_widget_collection; id_card_widget_it != NULL; id_card_widget_it = id_card_widget_it->next) {
616                         GtkWidget* id_card_widget;
617                         id_card_widget = (GtkWidget*) id_card_widget_it->data;
618                         {
619                                 identity_manager_view_remove_id_card_widget (self, ID_CARD_WIDGET (id_card_widget));
620                         }
621                 }
622         }
623         self->priv->default_id_card = (_tmp0_ = NULL, _g_object_unref0 (self->priv->default_id_card), _tmp0_);
624         card_list = identity_manager_model_get_card_list (self->identities_manager);
625         if (card_list == NULL) {
626                 _g_object_unref0 (card_list);
627                 _g_list_free0 (children);
628                 return;
629         }
630         {
631                 GeeIterator* _id_card_it;
632                 _id_card_it = gee_abstract_collection_iterator ((GeeAbstractCollection*) card_list);
633                 while (TRUE) {
634                         IdCard* id_card;
635                         if (!gee_iterator_next (_id_card_it)) {
636                                 break;
637                         }
638                         id_card = (IdCard*) gee_iterator_get (_id_card_it);
639                         identity_manager_view_add_id_card_data (self, id_card);
640                         identity_manager_view_add_id_card_widget (self, id_card);
641                         _g_object_unref0 (id_card);
642                 }
643                 _g_object_unref0 (_id_card_it);
644         }
645         if (gee_collection_get_size ((GeeCollection*) card_list) > 0) {
646                 IdCard* _tmp1_;
647                 self->priv->default_id_card = (_tmp1_ = (IdCard*) gee_abstract_list_first ((GeeAbstractList*) card_list), _g_object_unref0 (self->priv->default_id_card), _tmp1_);
648         }
649         _g_object_unref0 (card_list);
650         _g_list_free0 (children);
651 }
652
653
654 static void identity_manager_view_fill_details (IdentityManagerView* self, IdCardWidget* id_card_widget) {
655         IdCard* id_card;
656         char* _tmp0_;
657         GList* children;
658         g_return_if_fail (self != NULL);
659         g_return_if_fail (id_card_widget != NULL);
660         id_card = _g_object_ref0 (id_card_widget_get_id_card (id_card_widget));
661         gtk_entry_set_text (self->priv->username_entry, id_card_get_username (id_card));
662         _tmp0_ = g_strdup (id_card_get_password (id_card));
663         if (_tmp0_ == NULL) {
664                 char* _tmp1_;
665                 _tmp0_ = (_tmp1_ = g_strdup (""), _g_free0 (_tmp0_), _tmp1_);
666         }
667         gtk_entry_set_text (self->priv->password_entry, _tmp0_);
668         children = gtk_container_get_children ((GtkContainer*) self->priv->services_internal_vbox);
669         {
670                 GList* hbox_collection;
671                 GList* hbox_it;
672                 hbox_collection = children;
673                 for (hbox_it = hbox_collection; hbox_it != NULL; hbox_it = hbox_it->next) {
674                         GtkWidget* hbox;
675                         hbox = (GtkWidget*) hbox_it->data;
676                         {
677                                 gtk_object_destroy ((GtkObject*) hbox);
678                         }
679                 }
680         }
681         identity_manager_view_fill_services_vbox (self, id_card_widget_get_id_card (id_card_widget));
682         _g_list_free0 (children);
683         _g_free0 (_tmp0_);
684         _g_object_unref0 (id_card);
685 }
686
687
688 static void identity_manager_view_show_details (IdentityManagerView* self, IdCard* id_card) {
689         g_return_if_fail (self != NULL);
690         g_return_if_fail (id_card != NULL);
691         gtk_widget_set_visible ((GtkWidget*) self->priv->vbox_right, !gtk_widget_get_visible ((GtkWidget*) self->priv->vbox_right));
692         if (gtk_widget_get_visible ((GtkWidget*) self->priv->vbox_right) == FALSE) {
693                 gtk_window_resize ((GtkWindow*) self, IDENTITY_MANAGER_VIEW_WINDOW_WIDTH, IDENTITY_MANAGER_VIEW_WINDOW_HEIGHT);
694         }
695 }
696
697
698 static void identity_manager_view_details_identity_cb (IdentityManagerView* self, IdCardWidget* id_card_widget) {
699         g_return_if_fail (self != NULL);
700         g_return_if_fail (id_card_widget != NULL);
701         identity_manager_view_fill_details (self, id_card_widget);
702         identity_manager_view_show_details (self, id_card_widget_get_id_card (id_card_widget));
703 }
704
705
706 static IdCard* identity_manager_view_get_id_card_data (IdentityManagerView* self, AddIdentityDialog* dialog) {
707         IdCard* result = NULL;
708         IdCard* id_card;
709         char** _tmp0_ = NULL;
710         char** _tmp1_;
711         gint _tmp1__length1;
712         char** _tmp2_;
713         g_return_val_if_fail (self != NULL, NULL);
714         g_return_val_if_fail (dialog != NULL, NULL);
715         id_card = id_card_new ();
716         id_card_set_display_name (id_card, add_identity_dialog_get_display_name (dialog));
717         id_card_set_issuer (id_card, add_identity_dialog_get_issuer (dialog));
718         if (_vala_strcmp0 (id_card_get_issuer (id_card), "") == 0) {
719                 id_card_set_issuer (id_card, "Issuer");
720         }
721         id_card_set_username (id_card, add_identity_dialog_get_username (dialog));
722         id_card_set_password (id_card, add_identity_dialog_get_password (dialog));
723         _tmp2_ = (_tmp1_ = (_tmp0_ = g_new0 (char*, 0 + 1), _tmp0_), _tmp1__length1 = 0, _tmp1_);
724         id_card_set_services (id_card, _tmp2_, 0);
725         _tmp1_ = (_vala_array_free (_tmp1_, _tmp1__length1, (GDestroyNotify) g_free), NULL);
726         g_object_set_data_full ((GObject*) id_card, "pixbuf", find_icon ("avatar-default", 48), g_object_unref);
727         result = id_card;
728         return result;
729 }
730
731
732 static void identity_manager_view_add_id_card_data (IdentityManagerView* self, IdCard* id_card) {
733         GtkTreeIter iter = {0};
734         GdkPixbuf* pixbuf;
735         GdkPixbuf* _tmp0_;
736         g_return_if_fail (self != NULL);
737         g_return_if_fail (id_card != NULL);
738         pixbuf = NULL;
739         gtk_list_store_append (self->priv->listmodel, &iter);
740         pixbuf = (_tmp0_ = _g_object_ref0 ((GdkPixbuf*) g_object_get_data ((GObject*) id_card, "pixbuf")), _g_object_unref0 (pixbuf), _tmp0_);
741         gtk_list_store_set (self->priv->listmodel, &iter, IDENTITY_MANAGER_VIEW_COLUMNS_IDCARD_COL, id_card, IDENTITY_MANAGER_VIEW_COLUMNS_LOGO_COL, pixbuf, IDENTITY_MANAGER_VIEW_COLUMNS_ISSUER_COL, id_card_get_issuer (id_card), IDENTITY_MANAGER_VIEW_COLUMNS_USERNAME_COL, id_card_get_username (id_card), IDENTITY_MANAGER_VIEW_COLUMNS_PASSWORD_COL, id_card_get_password (id_card), -1);
742         _g_object_unref0 (pixbuf);
743 }
744
745
746 static void identity_manager_view_remove_id_card_data (IdentityManagerView* self, IdCard* id_card) {
747         GtkTreeIter iter = {0};
748         char* issuer;
749         g_return_if_fail (self != NULL);
750         g_return_if_fail (id_card != NULL);
751         issuer = NULL;
752         if (gtk_tree_model_get_iter_first ((GtkTreeModel*) self->priv->listmodel, &iter)) {
753                 {
754                         gboolean _tmp0_;
755                         _tmp0_ = TRUE;
756                         while (TRUE) {
757                                 if (!_tmp0_) {
758                                         if (!gtk_tree_model_iter_next ((GtkTreeModel*) self->priv->listmodel, &iter)) {
759                                                 break;
760                                         }
761                                 }
762                                 _tmp0_ = FALSE;
763                                 gtk_tree_model_get ((GtkTreeModel*) self->priv->listmodel, &iter, IDENTITY_MANAGER_VIEW_COLUMNS_ISSUER_COL, &issuer, -1);
764                                 if (_vala_strcmp0 (id_card_get_issuer (id_card), issuer) == 0) {
765                                         gtk_list_store_remove (self->priv->listmodel, &iter);
766                                         break;
767                                 }
768                         }
769                 }
770         }
771         _g_free0 (issuer);
772 }
773
774
775 static void _identity_manager_view_details_identity_cb_id_card_widget_details_id (IdCardWidget* _sender, gpointer self) {
776         identity_manager_view_details_identity_cb (self, _sender);
777 }
778
779
780 static void _identity_manager_view_remove_identity_cb_id_card_widget_remove_id (IdCardWidget* _sender, gpointer self) {
781         identity_manager_view_remove_identity_cb (self, _sender);
782 }
783
784
785 static void _lambda2_ (IdCardWidget* w, IdentityManagerView* self) {
786         g_return_if_fail (w != NULL);
787         identity_manager_view_send_identity_cb (self, id_card_widget_get_id_card (w));
788 }
789
790
791 static void __lambda2__id_card_widget_send_id (IdCardWidget* _sender, gpointer self) {
792         _lambda2_ (_sender, self);
793 }
794
795
796 static void _custom_vbox_receive_expanded_event_id_card_widget_expanded (IdCardWidget* _sender, gpointer self) {
797         custom_vbox_receive_expanded_event (self, _sender);
798 }
799
800
801 static void _identity_manager_view_fill_details_id_card_widget_expanded (IdCardWidget* _sender, gpointer self) {
802         identity_manager_view_fill_details (self, _sender);
803 }
804
805
806 static void identity_manager_view_add_id_card_widget (IdentityManagerView* self, IdCard* id_card) {
807         IdCardWidget* id_card_widget;
808         g_return_if_fail (self != NULL);
809         g_return_if_fail (id_card != NULL);
810         id_card_widget = g_object_ref_sink (id_card_widget_new (id_card));
811         custom_vbox_add_id_card_widget (self->priv->custom_vbox, id_card_widget);
812         g_signal_connect_object (id_card_widget, "details-id", (GCallback) _identity_manager_view_details_identity_cb_id_card_widget_details_id, self, 0);
813         g_signal_connect_object (id_card_widget, "remove-id", (GCallback) _identity_manager_view_remove_identity_cb_id_card_widget_remove_id, self, 0);
814         g_signal_connect_object (id_card_widget, "send-id", (GCallback) __lambda2__id_card_widget_send_id, self, 0);
815         g_signal_connect_object (id_card_widget, "expanded", (GCallback) _custom_vbox_receive_expanded_event_id_card_widget_expanded, self->priv->custom_vbox, 0);
816         g_signal_connect_object (id_card_widget, "expanded", (GCallback) _identity_manager_view_fill_details_id_card_widget_expanded, self, 0);
817         _g_object_unref0 (id_card_widget);
818 }
819
820
821 gboolean identity_manager_view_display_name_is_valid (IdentityManagerView* self, const char* name, char** candidate) {
822         gboolean result = FALSE;
823         g_return_val_if_fail (self != NULL, FALSE);
824         g_return_val_if_fail (name != NULL, FALSE);
825         if (candidate != NULL) {
826                 *candidate = NULL;
827         }
828         {
829                 GeeLinkedList* _tmp0_;
830                 GeeIterator* _tmp1_;
831                 GeeIterator* _id_card_it;
832                 _id_card_it = (_tmp1_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) (_tmp0_ = identity_manager_model_get_card_list (self->identities_manager))), _g_object_unref0 (_tmp0_), _tmp1_);
833                 while (TRUE) {
834                         IdCard* id_card;
835                         if (!gee_iterator_next (_id_card_it)) {
836                                 break;
837                         }
838                         id_card = (IdCard*) gee_iterator_get (_id_card_it);
839                         if (_vala_strcmp0 (id_card_get_display_name (id_card), name) == 0) {
840                                 if ((candidate) != NULL) {
841                                         {
842                                                 gint i;
843                                                 i = 0;
844                                                 {
845                                                         gboolean _tmp2_;
846                                                         _tmp2_ = TRUE;
847                                                         while (TRUE) {
848                                                                 char* tmp;
849                                                                 if (!_tmp2_) {
850                                                                         i++;
851                                                                 }
852                                                                 _tmp2_ = FALSE;
853                                                                 if (!(i < 1000)) {
854                                                                         break;
855                                                                 }
856                                                                 tmp = g_strdup_printf ("%s %d", name, i);
857                                                                 if (identity_manager_view_display_name_is_valid (self, tmp, NULL)) {
858                                                                         char* _tmp3_;
859                                                                         *candidate = (_tmp3_ = g_strdup (tmp), _g_free0 (*candidate), _tmp3_);
860                                                                         _g_free0 (tmp);
861                                                                         break;
862                                                                 }
863                                                                 _g_free0 (tmp);
864                                                         }
865                                                 }
866                                         }
867                                 }
868                                 result = FALSE;
869                                 _g_object_unref0 (id_card);
870                                 _g_object_unref0 (_id_card_it);
871                                 return result;
872                         }
873                         _g_object_unref0 (id_card);
874                 }
875                 _g_object_unref0 (_id_card_it);
876         }
877         result = TRUE;
878         return result;
879 }
880
881
882 void identity_manager_view_insert_id_card (IdentityManagerView* self, IdCard* id_card) {
883         char* candidate;
884         char* _tmp0_ = NULL;
885         gboolean _tmp1_;
886         char* _tmp2_;
887         g_return_if_fail (self != NULL);
888         g_return_if_fail (id_card != NULL);
889         candidate = NULL;
890         if (!(_tmp1_ = identity_manager_view_display_name_is_valid (self, id_card_get_display_name (id_card), &_tmp0_), candidate = (_tmp2_ = _tmp0_, _g_free0 (candidate), _tmp2_), _tmp1_)) {
891                 id_card_set_display_name (id_card, candidate);
892         }
893         identity_manager_model_add_card (self->identities_manager, id_card);
894         _g_free0 (candidate);
895 }
896
897
898 gboolean identity_manager_view_add_identity (IdentityManagerView* self, IdCard* id_card) {
899         gboolean result = FALSE;
900         GtkMessageDialog* dialog;
901         gint ret;
902         g_return_val_if_fail (self != NULL, FALSE);
903         g_return_val_if_fail (id_card != NULL, FALSE);
904         dialog = g_object_ref_sink ((GtkMessageDialog*) gtk_message_dialog_new ((GtkWindow*) self, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _ ("Would you like to add '%s' ID Card to the ID Card Organizer?"), id_card_get_display_name (id_card)));
905         gtk_widget_show_all ((GtkWidget*) dialog);
906         ret = gtk_dialog_run ((GtkDialog*) dialog);
907         gtk_widget_hide ((GtkWidget*) dialog);
908         if (ret == GTK_RESPONSE_YES) {
909                 g_object_set_data_full ((GObject*) id_card, "pixbuf", find_icon ("avatar-default", 48), g_object_unref);
910                 identity_manager_view_insert_id_card (self, id_card);
911                 result = TRUE;
912                 _g_object_unref0 (dialog);
913                 return result;
914         }
915         result = FALSE;
916         _g_object_unref0 (dialog);
917         return result;
918 }
919
920
921 static void identity_manager_view_add_identity_manual_cb (IdentityManagerView* self) {
922         AddIdentityDialog* dialog;
923         gint _result_;
924         g_return_if_fail (self != NULL);
925         dialog = g_object_ref_sink (add_identity_dialog_new ());
926         _result_ = gtk_dialog_run ((GtkDialog*) dialog);
927         switch (_result_) {
928                 case GTK_RESPONSE_OK:
929                 {
930                         IdCard* _tmp0_;
931                         identity_manager_view_insert_id_card (self, _tmp0_ = identity_manager_view_get_id_card_data (self, dialog));
932                         _g_object_unref0 (_tmp0_);
933                         break;
934                 }
935                 default:
936                 {
937                         break;
938                 }
939         }
940         gtk_object_destroy ((GtkObject*) dialog);
941         _g_object_unref0 (dialog);
942 }
943
944
945 static void identity_manager_view_remove_id_card_widget (IdentityManagerView* self, IdCardWidget* id_card_widget) {
946         g_return_if_fail (self != NULL);
947         g_return_if_fail (id_card_widget != NULL);
948         custom_vbox_remove_id_card_widget (self->priv->custom_vbox, id_card_widget);
949 }
950
951
952 static void identity_manager_view_remove_identity (IdentityManagerView* self, IdCardWidget* id_card_widget) {
953         IdCard* id_card;
954         g_return_if_fail (self != NULL);
955         g_return_if_fail (id_card_widget != NULL);
956         id_card = _g_object_ref0 (id_card_widget_get_id_card (id_card_widget));
957         identity_manager_view_remove_id_card_widget (self, id_card_widget);
958         identity_manager_model_remove_card (self->identities_manager, id_card);
959         _g_object_unref0 (id_card);
960 }
961
962
963 static void identity_manager_view_redraw_id_card_widgets (IdentityManagerView* self) {
964         GtkTreeIter iter = {0};
965         IdCard* id_card;
966         GList* children;
967         g_return_if_fail (self != NULL);
968         id_card = NULL;
969         children = gtk_container_get_children ((GtkContainer*) self->priv->custom_vbox);
970         {
971                 GList* id_card_widget_collection;
972                 GList* id_card_widget_it;
973                 id_card_widget_collection = children;
974                 for (id_card_widget_it = id_card_widget_collection; id_card_widget_it != NULL; id_card_widget_it = id_card_widget_it->next) {
975                         GtkWidget* id_card_widget;
976                         id_card_widget = (GtkWidget*) id_card_widget_it->data;
977                         {
978                                 gtk_object_destroy ((GtkObject*) id_card_widget);
979                         }
980                 }
981         }
982         if (gtk_tree_model_get_iter_first ((GtkTreeModel*) self->priv->filter, &iter)) {
983                 {
984                         gboolean _tmp0_;
985                         _tmp0_ = TRUE;
986                         while (TRUE) {
987                                 if (!_tmp0_) {
988                                         if (!gtk_tree_model_iter_next ((GtkTreeModel*) self->priv->filter, &iter)) {
989                                                 break;
990                                         }
991                                 }
992                                 _tmp0_ = FALSE;
993                                 gtk_tree_model_get ((GtkTreeModel*) self->priv->filter, &iter, IDENTITY_MANAGER_VIEW_COLUMNS_IDCARD_COL, &id_card, -1);
994                                 identity_manager_view_add_id_card_widget (self, id_card);
995                         }
996                 }
997         }
998         _g_list_free0 (children);
999         _g_object_unref0 (id_card);
1000 }
1001
1002
1003 static void identity_manager_view_remove_identity_cb (IdentityManagerView* self, IdCardWidget* id_card_widget) {
1004         IdCard* id_card;
1005         GtkMessageDialog* dialog;
1006         gint _result_;
1007         g_return_if_fail (self != NULL);
1008         g_return_if_fail (id_card_widget != NULL);
1009         id_card = _g_object_ref0 (id_card_widget_get_id_card (id_card_widget));
1010         dialog = g_object_ref_sink ((GtkMessageDialog*) gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _ ("Are you sure you want to delete %s ID Card?"), id_card_get_issuer (id_card)));
1011         _result_ = gtk_dialog_run ((GtkDialog*) dialog);
1012         switch (_result_) {
1013                 case GTK_RESPONSE_YES:
1014                 {
1015                         identity_manager_view_remove_identity (self, id_card_widget);
1016                         break;
1017                 }
1018                 default:
1019                 {
1020                         break;
1021                 }
1022         }
1023         gtk_object_destroy ((GtkObject*) dialog);
1024         _g_object_unref0 (dialog);
1025         _g_object_unref0 (id_card);
1026 }
1027
1028
1029 static void _g_slist_free_g_free (GSList* self) {
1030         g_slist_foreach (self, (GFunc) g_free, NULL);
1031         g_slist_free (self);
1032 }
1033
1034
1035 static gboolean _lambda3_ (Block1Data* _data1_) {
1036         IdentityManagerView * self;
1037         gboolean result = FALSE;
1038         self = _data1_->self;
1039         identity_manager_view_send_identity_cb (self, _data1_->identity);
1040         result = FALSE;
1041         return result;
1042 }
1043
1044
1045 static gboolean __lambda3__gsource_func (gpointer self) {
1046         gboolean result;
1047         result = _lambda3_ (self);
1048         return result;
1049 }
1050
1051
1052 static Block1Data* block1_data_ref (Block1Data* _data1_) {
1053         g_atomic_int_inc (&_data1_->_ref_count_);
1054         return _data1_;
1055 }
1056
1057
1058 static void block1_data_unref (Block1Data* _data1_) {
1059         if (g_atomic_int_dec_and_test (&_data1_->_ref_count_)) {
1060                 _g_object_unref0 (_data1_->self);
1061                 _g_object_unref0 (_data1_->identity);
1062                 g_slice_free (Block1Data, _data1_);
1063         }
1064 }
1065
1066
1067 void identity_manager_view_select_identity (IdentityManagerView* self, IdentityRequest* request) {
1068         Block1Data* _data1_;
1069         gboolean _tmp0_ = FALSE;
1070         g_return_if_fail (self != NULL);
1071         g_return_if_fail (request != NULL);
1072         _data1_ = g_slice_new0 (Block1Data);
1073         _data1_->_ref_count_ = 1;
1074         _data1_->self = g_object_ref (self);
1075         _data1_->identity = NULL;
1076         g_queue_push_tail (self->request_queue, _g_object_ref0 (request));
1077         if (custom_vbox_get_current_idcard (self->priv->custom_vbox) != NULL) {
1078                 _tmp0_ = id_card_widget_get_send_button (custom_vbox_get_current_idcard (self->priv->custom_vbox)) != NULL;
1079         } else {
1080                 _tmp0_ = FALSE;
1081         }
1082         if (_tmp0_) {
1083                 gtk_widget_set_sensitive ((GtkWidget*) id_card_widget_get_send_button (custom_vbox_get_current_idcard (self->priv->custom_vbox)), TRUE);
1084         }
1085         if (request->select_default) {
1086                 IdCard* _tmp1_;
1087                 _data1_->identity = (_tmp1_ = _g_object_ref0 (self->priv->default_id_card), _g_object_unref0 (_data1_->identity), _tmp1_);
1088         }
1089         if (_data1_->identity == NULL) {
1090                 gboolean _tmp2_ = FALSE;
1091                 gboolean has_nai;
1092                 gboolean _tmp3_ = FALSE;
1093                 gboolean has_srv;
1094                 gboolean confirm;
1095                 IdCard* nai_provided;
1096                 gboolean _tmp9_ = FALSE;
1097                 if (request->nai != NULL) {
1098                         _tmp2_ = _vala_strcmp0 (request->nai, "") != 0;
1099                 } else {
1100                         _tmp2_ = FALSE;
1101                 }
1102                 has_nai = _tmp2_;
1103                 if (request->service != NULL) {
1104                         _tmp3_ = _vala_strcmp0 (request->service, "") != 0;
1105                 } else {
1106                         _tmp3_ = FALSE;
1107                 }
1108                 has_srv = _tmp3_;
1109                 confirm = FALSE;
1110                 nai_provided = NULL;
1111                 {
1112                         GeeLinkedList* _tmp4_;
1113                         GeeIterator* _tmp5_;
1114                         GeeIterator* _id_it;
1115                         _id_it = (_tmp5_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) (_tmp4_ = identity_manager_model_get_card_list (self->identities_manager))), _g_object_unref0 (_tmp4_), _tmp5_);
1116                         while (TRUE) {
1117                                 IdCard* id;
1118                                 gboolean _tmp6_ = FALSE;
1119                                 if (!gee_iterator_next (_id_it)) {
1120                                         break;
1121                                 }
1122                                 id = (IdCard*) gee_iterator_get (_id_it);
1123                                 if (has_nai) {
1124                                         _tmp6_ = _vala_strcmp0 (request->nai, id_card_get_nai (id)) == 0;
1125                                 } else {
1126                                         _tmp6_ = FALSE;
1127                                 }
1128                                 if (_tmp6_) {
1129                                         IdCard* _tmp7_;
1130                                         nai_provided = (_tmp7_ = _g_object_ref0 (id), _g_object_unref0 (nai_provided), _tmp7_);
1131                                         identity_manager_view_add_candidate (self, id);
1132                                         _g_object_unref0 (id);
1133                                         continue;
1134                                 }
1135                                 if (has_srv) {
1136                                         {
1137                                                 gint _tmp8_;
1138                                                 char** srv_collection;
1139                                                 int srv_collection_length1;
1140                                                 int srv_it;
1141                                                 srv_collection = id_card_get_services (id, &_tmp8_);
1142                                                 srv_collection_length1 = _tmp8_;
1143                                                 for (srv_it = 0; srv_it < _tmp8_; srv_it = srv_it + 1) {
1144                                                         char* srv;
1145                                                         srv = g_strdup (srv_collection[srv_it]);
1146                                                         {
1147                                                                 if (_vala_strcmp0 (request->service, srv) == 0) {
1148                                                                         identity_manager_view_add_candidate (self, id);
1149                                                                         _g_free0 (srv);
1150                                                                         continue;
1151                                                                 }
1152                                                                 _g_free0 (srv);
1153                                                         }
1154                                                 }
1155                                         }
1156                                 }
1157                                 _g_object_unref0 (id);
1158                         }
1159                         _g_object_unref0 (_id_it);
1160                 }
1161                 if (has_srv) {
1162                         _tmp9_ = g_slist_length (self->priv->candidates) > 1;
1163                 } else {
1164                         _tmp9_ = FALSE;
1165                 }
1166                 if (_tmp9_) {
1167                         {
1168                                 GSList* id_collection;
1169                                 GSList* id_it;
1170                                 id_collection = self->priv->candidates;
1171                                 for (id_it = id_collection; id_it != NULL; id_it = id_it->next) {
1172                                         IdCard* id;
1173                                         id = _g_object_ref0 ((IdCard*) id_it->data);
1174                                         {
1175                                                 gint i;
1176                                                 GSList* services_list;
1177                                                 gboolean has_service;
1178                                                 gint services_length1;
1179                                                 gint _services_size_;
1180                                                 char** _tmp15_;
1181                                                 gint _tmp14_;
1182                                                 char** services;
1183                                                 char** _tmp17_;
1184                                                 i = 0;
1185                                                 services_list = NULL;
1186                                                 has_service = FALSE;
1187                                                 {
1188                                                         gint _tmp10_;
1189                                                         char** srv_collection;
1190                                                         int srv_collection_length1;
1191                                                         int srv_it;
1192                                                         srv_collection = id_card_get_services (id, &_tmp10_);
1193                                                         srv_collection_length1 = _tmp10_;
1194                                                         for (srv_it = 0; srv_it < _tmp10_; srv_it = srv_it + 1) {
1195                                                                 char* srv;
1196                                                                 srv = g_strdup (srv_collection[srv_it]);
1197                                                                 {
1198                                                                         if (_vala_strcmp0 (srv, request->service) == 0) {
1199                                                                                 has_service = TRUE;
1200                                                                                 _g_free0 (srv);
1201                                                                                 continue;
1202                                                                         }
1203                                                                         services_list = g_slist_append (services_list, g_strdup (srv));
1204                                                                         _g_free0 (srv);
1205                                                                 }
1206                                                         }
1207                                                 }
1208                                                 if (!has_service) {
1209                                                         __g_slist_free_g_free0 (services_list);
1210                                                         _g_object_unref0 (id);
1211                                                         continue;
1212                                                 }
1213                                                 if (g_slist_length (services_list) == 0) {
1214                                                         char** _tmp11_ = NULL;
1215                                                         char** _tmp12_;
1216                                                         gint _tmp12__length1;
1217                                                         char** _tmp13_;
1218                                                         _tmp13_ = (_tmp12_ = (_tmp11_ = g_new0 (char*, 0 + 1), _tmp11_), _tmp12__length1 = 0, _tmp12_);
1219                                                         id_card_set_services (id, _tmp13_, 0);
1220                                                         _tmp12_ = (_vala_array_free (_tmp12_, _tmp12__length1, (GDestroyNotify) g_free), NULL);
1221                                                         __g_slist_free_g_free0 (services_list);
1222                                                         _g_object_unref0 (id);
1223                                                         continue;
1224                                                 }
1225                                                 services = (_tmp15_ = g_new0 (char*, (_tmp14_ = g_slist_length (services_list)) + 1), services_length1 = _tmp14_, _services_size_ = services_length1, _tmp15_);
1226                                                 {
1227                                                         GSList* srv_collection;
1228                                                         GSList* srv_it;
1229                                                         srv_collection = services_list;
1230                                                         for (srv_it = srv_collection; srv_it != NULL; srv_it = srv_it->next) {
1231                                                                 char* srv;
1232                                                                 srv = g_strdup ((const char*) srv_it->data);
1233                                                                 {
1234                                                                         char* _tmp16_;
1235                                                                         services[i] = (_tmp16_ = g_strdup (srv), _g_free0 (services[i]), _tmp16_);
1236                                                                         i++;
1237                                                                         _g_free0 (srv);
1238                                                                 }
1239                                                         }
1240                                                 }
1241                                                 _tmp17_ = services;
1242                                                 id_card_set_services (id, _tmp17_, services_length1);
1243                                                 services = (_vala_array_free (services, services_length1, (GDestroyNotify) g_free), NULL);
1244                                                 __g_slist_free_g_free0 (services_list);
1245                                                 _g_object_unref0 (id);
1246                                         }
1247                                 }
1248                         }
1249                 }
1250                 if (g_slist_length (self->priv->candidates) == 0) {
1251                         {
1252                                 GeeLinkedList* _tmp18_;
1253                                 GeeIterator* _tmp19_;
1254                                 GeeIterator* _id_it;
1255                                 _id_it = (_tmp19_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) (_tmp18_ = identity_manager_model_get_card_list (self->identities_manager))), _g_object_unref0 (_tmp18_), _tmp19_);
1256                                 while (TRUE) {
1257                                         IdCard* id;
1258                                         if (!gee_iterator_next (_id_it)) {
1259                                                 break;
1260                                         }
1261                                         id = (IdCard*) gee_iterator_get (_id_it);
1262                                         {
1263                                                 gint _tmp20_;
1264                                                 Rule* rule_collection;
1265                                                 int rule_collection_length1;
1266                                                 int rule_it;
1267                                                 rule_collection = id_card_get_rules (id, &_tmp20_);
1268                                                 rule_collection_length1 = _tmp20_;
1269                                                 for (rule_it = 0; rule_it < _tmp20_; rule_it = rule_it + 1) {
1270                                                         Rule _tmp21_ = {0};
1271                                                         Rule rule;
1272                                                         rule = (rule_copy (&rule_collection[rule_it], &_tmp21_), _tmp21_);
1273                                                         {
1274                                                                 if (!identity_manager_view_match_service_pattern (self, request->service, rule.pattern)) {
1275                                                                         rule_destroy (&rule);
1276                                                                         continue;
1277                                                                 }
1278                                                                 self->priv->candidates = g_slist_append (self->priv->candidates, _g_object_ref0 (id));
1279                                                                 if (_vala_strcmp0 (rule.always_confirm, "true") == 0) {
1280                                                                         confirm = TRUE;
1281                                                                 }
1282                                                                 rule_destroy (&rule);
1283                                                         }
1284                                                 }
1285                                         }
1286                                         _g_object_unref0 (id);
1287                                 }
1288                                 _g_object_unref0 (_id_it);
1289                         }
1290                 }
1291                 if (g_slist_length (self->priv->candidates) > 1) {
1292                         gboolean _tmp22_ = FALSE;
1293                         if (has_nai) {
1294                                 _tmp22_ = nai_provided != NULL;
1295                         } else {
1296                                 _tmp22_ = FALSE;
1297                         }
1298                         if (_tmp22_) {
1299                                 IdCard* _tmp23_;
1300                                 _data1_->identity = (_tmp23_ = _g_object_ref0 (nai_provided), _g_object_unref0 (_data1_->identity), _tmp23_);
1301                                 confirm = FALSE;
1302                         } else {
1303                                 confirm = TRUE;
1304                         }
1305                 } else {
1306                         IdCard* _tmp24_;
1307                         _data1_->identity = (_tmp24_ = _g_object_ref0 ((IdCard*) g_slist_nth_data (self->priv->candidates, (guint) 0)), _g_object_unref0 (_data1_->identity), _tmp24_);
1308                 }
1309                 if (confirm) {
1310                         gtk_tree_model_filter_refilter (self->priv->filter);
1311                         identity_manager_view_redraw_id_card_widgets (self);
1312                         gtk_widget_show ((GtkWidget*) self);
1313                         _g_object_unref0 (nai_provided);
1314                         block1_data_unref (_data1_);
1315                         return;
1316                 }
1317                 _g_object_unref0 (nai_provided);
1318         }
1319         g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, __lambda3__gsource_func, block1_data_ref (_data1_), block1_data_unref);
1320         block1_data_unref (_data1_);
1321         return;
1322 }
1323
1324
1325 static gboolean identity_manager_view_match_service_pattern (IdentityManagerView* self, const char* service, const char* pattern) {
1326         gboolean result = FALSE;
1327         GPatternSpec* pspec;
1328         g_return_val_if_fail (self != NULL, FALSE);
1329         g_return_val_if_fail (service != NULL, FALSE);
1330         g_return_val_if_fail (pattern != NULL, FALSE);
1331         pspec = g_pattern_spec_new (pattern);
1332         result = g_pattern_match_string (pspec, service);
1333         _g_pattern_spec_free0 (pspec);
1334         return result;
1335 }
1336
1337
1338 void identity_manager_view_send_identity_cb (IdentityManagerView* self, IdCard* identity) {
1339         IdentityRequest* request;
1340         gboolean reset_password;
1341         gboolean _tmp0_ = FALSE;
1342         GSList* _tmp12_;
1343         g_return_if_fail (self != NULL);
1344         g_return_if_fail (identity != NULL);
1345         g_return_if_fail (self->request_queue->length > 0);
1346         request = (IdentityRequest*) g_queue_pop_head (self->request_queue);
1347         reset_password = FALSE;
1348         if (request->service != NULL) {
1349                 _tmp0_ = _vala_strcmp0 (request->service, "") != 0;
1350         } else {
1351                 _tmp0_ = FALSE;
1352         }
1353         if (_tmp0_) {
1354                 gint services_length1;
1355                 gint _services_size_;
1356                 char** _tmp2_;
1357                 gint _tmp1_;
1358                 char** services;
1359                 gint _tmp7_;
1360                 gint _tmp8_;
1361                 char* _tmp9_;
1362                 char** _tmp10_;
1363                 services = (_tmp2_ = g_new0 (char*, (_tmp1_ + 1) + 1), services_length1 = _tmp1_ + 1, _services_size_ = services_length1, _tmp2_);
1364                 {
1365                         gint i;
1366                         i = 0;
1367                         {
1368                                 gboolean _tmp3_;
1369                                 _tmp3_ = TRUE;
1370                                 while (TRUE) {
1371                                         gint _tmp4_;
1372                                         gint _tmp5_;
1373                                         char* _tmp6_;
1374                                         if (!_tmp3_) {
1375                                                 i++;
1376                                         }
1377                                         _tmp3_ = FALSE;
1378                                         if (!(i < _tmp4_)) {
1379                                                 break;
1380                                         }
1381                                         services[i] = (_tmp6_ = g_strdup (id_card_get_services (identity, &_tmp5_)[i]), _g_free0 (services[i]), _tmp6_);
1382                                 }
1383                         }
1384                 }
1385                 services[_tmp7_] = (_tmp9_ = g_strdup (request->service), _g_free0 (services[_tmp7_]), _tmp9_);
1386                 _tmp10_ = services;
1387                 id_card_set_services (identity, _tmp10_, services_length1);
1388                 services = (_vala_array_free (services, services_length1, (GDestroyNotify) g_free), NULL);
1389         }
1390         if (id_card_get_password (identity) == NULL) {
1391                 AddPasswordDialog* dialog;
1392                 gint _result_;
1393                 dialog = g_object_ref_sink (add_password_dialog_new ());
1394                 _result_ = gtk_dialog_run ((GtkDialog*) dialog);
1395                 switch (_result_) {
1396                         case GTK_RESPONSE_OK:
1397                         {
1398                                 id_card_set_password (identity, add_password_dialog_get_password (dialog));
1399                                 reset_password = !add_password_dialog_get_remember (dialog);
1400                                 break;
1401                         }
1402                         default:
1403                         {
1404                                 identity = NULL;
1405                                 break;
1406                         }
1407                 }
1408                 gtk_object_destroy ((GtkObject*) dialog);
1409                 _g_object_unref0 (dialog);
1410         }
1411         if (g_queue_is_empty (self->request_queue)) {
1412                 gtk_widget_hide ((GtkWidget*) self);
1413         }
1414         if (identity != NULL) {
1415                 IdCard* _tmp11_;
1416                 self->priv->default_id_card = (_tmp11_ = _g_object_ref0 (identity), _g_object_unref0 (self->priv->default_id_card), _tmp11_);
1417         }
1418         identity_request_return_identity (request, identity);
1419         if (reset_password) {
1420                 id_card_set_password (identity, NULL);
1421         }
1422         self->priv->candidates = (_tmp12_ = NULL, __g_slist_free_g_object_unref0 (self->priv->candidates), _tmp12_);
1423         _g_object_unref0 (request);
1424 }
1425
1426
1427 static void identity_manager_view_label_make_bold (IdentityManagerView* self, GtkLabel* label) {
1428         PangoFontDescription* font_desc;
1429         g_return_if_fail (self != NULL);
1430         g_return_if_fail (label != NULL);
1431         font_desc = pango_font_description_new ();
1432         pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
1433         gtk_widget_modify_font ((GtkWidget*) label, font_desc);
1434         _pango_font_description_free0 (font_desc);
1435 }
1436
1437
1438 static void _lambda1_ (GtkButton* remove_button, IdentityManagerView* self) {
1439         GtkMessageDialog* dialog;
1440         gint ret;
1441         g_return_if_fail (remove_button != NULL);
1442         dialog = g_object_ref_sink ((GtkMessageDialog*) gtk_message_dialog_new ((GtkWindow*) self, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _ ("Are you sure you want to stop '%s' ID Card to use %s?"), id_card_get_display_name (id_card_widget_get_id_card (custom_vbox_get_current_idcard (self->priv->custom_vbox)))));
1443         ret = gtk_dialog_run ((GtkDialog*) dialog);
1444         gtk_widget_hide ((GtkWidget*) dialog);
1445         if (ret == GTK_RESPONSE_YES) {
1446                 IdCard* idcard;
1447                 char* candidate;
1448                 GSList* services;
1449                 gint _tmp1_;
1450                 char** _tmp2_;
1451                 gint _tmp2__length1;
1452                 char** _tmp3_;
1453                 GList* children;
1454                 idcard = _g_object_ref0 (id_card_widget_get_id_card (custom_vbox_get_current_idcard (self->priv->custom_vbox)));
1455                 candidate = g_strdup ((const char*) g_hash_table_lookup (self->priv->service_button_map, remove_button));
1456                 services = NULL;
1457                 {
1458                         gint _tmp0_;
1459                         char** srv_collection;
1460                         int srv_collection_length1;
1461                         int srv_it;
1462                         srv_collection = id_card_get_services (idcard, &_tmp0_);
1463                         srv_collection_length1 = _tmp0_;
1464                         for (srv_it = 0; srv_it < _tmp0_; srv_it = srv_it + 1) {
1465                                 char* srv;
1466                                 srv = g_strdup (srv_collection[srv_it]);
1467                                 {
1468                                         if (_vala_strcmp0 (srv, candidate) == 0) {
1469                                                 _g_free0 (srv);
1470                                                 continue;
1471                                         }
1472                                         services = g_slist_append (services, g_strdup (srv));
1473                                         _g_free0 (srv);
1474                                 }
1475                         }
1476                 }
1477                 _tmp3_ = (_tmp2_ = g_new0 (char*, (_tmp1_ = g_slist_length (services)) + 1), _tmp2__length1 = _tmp1_, _tmp2_);
1478                 id_card_set_services (idcard, _tmp3_, _tmp1_);
1479                 _tmp2_ = (_vala_array_free (_tmp2_, _tmp2__length1, (GDestroyNotify) g_free), NULL);
1480                 {
1481                         gint j;
1482                         j = 0;
1483                         {
1484                                 gboolean _tmp4_;
1485                                 _tmp4_ = TRUE;
1486                                 while (TRUE) {
1487                                         gint _tmp5_;
1488                                         gint _tmp6_;
1489                                         gint _tmp7_;
1490                                         char* *_tmp8_;
1491                                         char* _tmp9_;
1492                                         if (!_tmp4_) {
1493                                                 j++;
1494                                         }
1495                                         _tmp4_ = FALSE;
1496                                         if (!(j < _tmp5_)) {
1497                                                 break;
1498                                         }
1499                                         _tmp8_ = &id_card_get_services (idcard, &_tmp7_)[j];
1500                                         (*_tmp8_) = (_tmp9_ = g_strdup ((const char*) g_slist_nth_data (services, (guint) j)), _g_free0 ((*_tmp8_)), _tmp9_);
1501                                 }
1502                         }
1503                 }
1504                 children = gtk_container_get_children ((GtkContainer*) self->priv->services_internal_vbox);
1505                 {
1506                         GList* hbox_collection;
1507                         GList* hbox_it;
1508                         hbox_collection = children;
1509                         for (hbox_it = hbox_collection; hbox_it != NULL; hbox_it = hbox_it->next) {
1510                                 GtkWidget* hbox;
1511                                 hbox = (GtkWidget*) hbox_it->data;
1512                                 {
1513                                         gtk_object_destroy ((GtkObject*) hbox);
1514                                 }
1515                         }
1516                 }
1517                 identity_manager_view_fill_services_vbox (self, idcard);
1518                 id_card_widget_update_id_card_label (custom_vbox_get_current_idcard (self->priv->custom_vbox));
1519                 _g_list_free0 (children);
1520                 __g_slist_free_g_free0 (services);
1521                 _g_free0 (candidate);
1522                 _g_object_unref0 (idcard);
1523         }
1524         _g_object_unref0 (dialog);
1525 }
1526
1527
1528 static void __lambda1__gtk_button_clicked (GtkButton* _sender, gpointer self) {
1529         _lambda1_ (_sender, self);
1530 }
1531
1532
1533 static void identity_manager_view_fill_services_vbox (IdentityManagerView* self, IdCard* id_card) {
1534         gint i;
1535         gint _tmp0_;
1536         gint n_columns;
1537         GtkTable* services_table;
1538         g_return_if_fail (self != NULL);
1539         g_return_if_fail (id_card != NULL);
1540         i = 0;
1541         n_columns = _tmp0_;
1542         services_table = g_object_ref_sink ((GtkTable*) gtk_table_new ((guint) n_columns, (guint) 2, FALSE));
1543         gtk_table_set_col_spacings (services_table, (guint) 10);
1544         gtk_table_set_row_spacings (services_table, (guint) 10);
1545         gtk_container_add ((GtkContainer*) self->priv->services_internal_vbox, (GtkWidget*) services_table);
1546         g_hash_table_remove_all (self->priv->service_button_map);
1547         {
1548                 gint _tmp1_;
1549                 char** service_collection;
1550                 int service_collection_length1;
1551                 int service_it;
1552                 service_collection = id_card_get_services (id_card, &_tmp1_);
1553                 service_collection_length1 = _tmp1_;
1554                 for (service_it = 0; service_it < _tmp1_; service_it = service_it + 1) {
1555                         char* service;
1556                         service = g_strdup (service_collection[service_it]);
1557                         {
1558                                 GtkLabel* label;
1559                                 GtkButton* remove_button;
1560                                 label = g_object_ref_sink ((GtkLabel*) gtk_label_new (service));
1561                                 gtk_misc_set_alignment ((GtkMisc*) label, (float) 0, (float) 0.5);
1562                                 remove_button = g_object_ref_sink ((GtkButton*) gtk_button_new_from_stock (GTK_STOCK_REMOVE));
1563                                 g_hash_table_insert (self->priv->service_button_map, _g_object_ref0 (remove_button), g_strdup (service));
1564                                 g_signal_connect_object (remove_button, "clicked", (GCallback) __lambda1__gtk_button_clicked, self, 0);
1565                                 gtk_table_attach_defaults (services_table, (GtkWidget*) label, (guint) 0, (guint) 1, (guint) i, (guint) (i + 1));
1566                                 gtk_table_attach_defaults (services_table, (GtkWidget*) remove_button, (guint) 1, (guint) 2, (guint) i, (guint) (i + 1));
1567                                 i++;
1568                                 _g_object_unref0 (remove_button);
1569                                 _g_object_unref0 (label);
1570                                 _g_free0 (service);
1571                         }
1572                 }
1573         }
1574         gtk_widget_show_all ((GtkWidget*) self->priv->services_internal_vbox);
1575         _g_object_unref0 (services_table);
1576 }
1577
1578
1579 static void identity_manager_view_on_about_action (IdentityManagerView* self) {
1580         gint authors_length1;
1581         gint _authors_size_;
1582         char** _tmp1_;
1583         char** _tmp0_ = NULL;
1584         char** authors;
1585         char* copyright;
1586         char* license;
1587         g_return_if_fail (self != NULL);
1588         authors = (_tmp1_ = (_tmp0_ = g_new0 (char*, 4 + 1), _tmp0_[0] = g_strdup ("Javier Jardón <jjardon@codethink.co.uk>"), _tmp0_[1] = g_strdup ("Sam Thursfield <samthursfield@codethink.co.uk>"), _tmp0_[2] = g_strdup ("Alberto Ruiz <alberto.ruiz@codethink.co.uk>"), _tmp0_[3] = NULL, _tmp0_), authors_length1 = 4, _authors_size_ = authors_length1, _tmp1_);
1589         copyright = g_strdup ("Copyright 2011 JANET");
1590         license = g_strdup ("\n" \
1591 "Copyright (c) 2011, JANET(UK)\n" \
1592 "All rights reserved.\n" \
1593 "\n" \
1594 "Redistribution and use in source and binary forms, with or without\n" \
1595 "modification, are permitted provided that the following conditions\n" \
1596 "are met:\n" \
1597 "\n" \
1598 "1. Redistributions of source code must retain the above copyright\n" \
1599 "   notice, this list of conditions and the following disclaimer.\n" \
1600 "\n" \
1601 "2. Redistributions in binary form must reproduce the above copyright\n" \
1602 "   notice, this list of conditions and the following disclaimer in the" \
1603 "\n" \
1604 "   documentation and/or other materials provided with the distribution" \
1605 ".\n" \
1606 "\n" \
1607 "3. Neither the name of JANET(UK) nor the names of its contributors\n" \
1608 "   may be used to endorse or promote products derived from this softwa" \
1609 "re\n" \
1610 "   without specific prior written permission.\n" \
1611 "\n" \
1612 "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\" \
1613 "\"AS IS\\\"\n" \
1614 "AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, " \
1615 "THE\n" \
1616 "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PUR" \
1617 "POSE\n" \
1618 "ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS" \
1619 " BE LIABLE\n" \
1620 "FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUEN" \
1621 "TIAL\n" \
1622 "DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOOD" \
1623 "S\n" \
1624 "OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n" \
1625 "HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, ST" \
1626 "RICT\n" \
1627 "LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY " \
1628 "WAY\n" \
1629 "OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF" \
1630 "\n" \
1631 "SUCH DAMAGE.\n");
1632         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);
1633         _g_free0 (license);
1634         _g_free0 (copyright);
1635         authors = (_vala_array_free (authors, authors_length1, (GDestroyNotify) g_free), NULL);
1636 }
1637
1638
1639 static void _vala_array_add1 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value) {
1640         if ((*length) == (*size)) {
1641                 *size = (*size) ? (2 * (*size)) : 4;
1642                 *array = g_renew (GtkActionEntry, *array, *size);
1643         }
1644         (*array)[(*length)++] = *value;
1645 }
1646
1647
1648 static void _identity_manager_view_add_identity_manual_cb_gtk_action_callback (GtkAction* action, gpointer self) {
1649         identity_manager_view_add_identity_manual_cb (self);
1650 }
1651
1652
1653 static void _vala_array_add2 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value) {
1654         if ((*length) == (*size)) {
1655                 *size = (*size) ? (2 * (*size)) : 4;
1656                 *array = g_renew (GtkActionEntry, *array, *size);
1657         }
1658         (*array)[(*length)++] = *value;
1659 }
1660
1661
1662 static void _gtk_main_quit_gtk_action_callback (GtkAction* action, gpointer self) {
1663         gtk_main_quit ();
1664 }
1665
1666
1667 static void _vala_array_add3 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value) {
1668         if ((*length) == (*size)) {
1669                 *size = (*size) ? (2 * (*size)) : 4;
1670                 *array = g_renew (GtkActionEntry, *array, *size);
1671         }
1672         (*array)[(*length)++] = *value;
1673 }
1674
1675
1676 static void _vala_array_add4 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value) {
1677         if ((*length) == (*size)) {
1678                 *size = (*size) ? (2 * (*size)) : 4;
1679                 *array = g_renew (GtkActionEntry, *array, *size);
1680         }
1681         (*array)[(*length)++] = *value;
1682 }
1683
1684
1685 static void _identity_manager_view_on_about_action_gtk_action_callback (GtkAction* action, gpointer self) {
1686         identity_manager_view_on_about_action (self);
1687 }
1688
1689
1690 static void _vala_array_add5 (GtkActionEntry** array, int* length, int* size, const GtkActionEntry* value) {
1691         if ((*length) == (*size)) {
1692                 *size = (*size) ? (2 * (*size)) : 4;
1693                 *array = g_renew (GtkActionEntry, *array, *size);
1694         }
1695         (*array)[(*length)++] = *value;
1696 }
1697
1698
1699 static GtkActionEntry* identity_manager_view_create_actions (IdentityManagerView* self, int* result_length1) {
1700         GtkActionEntry* result = NULL;
1701         gint actions_length1;
1702         gint _actions_size_;
1703         GtkActionEntry* _tmp0_;
1704         GtkActionEntry* actions;
1705         GtkActionEntry _tmp1_ = {0};
1706         GtkActionEntry filemenu;
1707         GtkActionEntry _tmp2_ = {0};
1708         GtkActionEntry add;
1709         GtkActionEntry _tmp3_ = {0};
1710         GtkActionEntry quit;
1711         GtkActionEntry _tmp4_ = {0};
1712         GtkActionEntry helpmenu;
1713         GtkActionEntry _tmp5_ = {0};
1714         GtkActionEntry about;
1715         GtkActionEntry* _tmp6_;
1716         g_return_val_if_fail (self != NULL, NULL);
1717         actions = (_tmp0_ = g_new0 (GtkActionEntry, 0), actions_length1 = 0, _actions_size_ = actions_length1, _tmp0_);
1718         filemenu = (_tmp1_.name = "FileMenuAction", _tmp1_.stock_id = NULL, _tmp1_.label = N_ ("_File"), _tmp1_.accelerator = NULL, _tmp1_.tooltip = NULL, _tmp1_.callback = (GCallback) NULL, _tmp1_);
1719         _vala_array_add1 (&actions, &actions_length1, &_actions_size_, &filemenu);
1720         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) _identity_manager_view_add_identity_manual_cb_gtk_action_callback, _tmp2_);
1721         _vala_array_add2 (&actions, &actions_length1, &_actions_size_, &add);
1722         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_);
1723         _vala_array_add3 (&actions, &actions_length1, &_actions_size_, &quit);
1724         helpmenu = (_tmp4_.name = "HelpMenuAction", _tmp4_.stock_id = NULL, _tmp4_.label = N_ ("_Help"), _tmp4_.accelerator = NULL, _tmp4_.tooltip = NULL, _tmp4_.callback = (GCallback) NULL, _tmp4_);
1725         _vala_array_add4 (&actions, &actions_length1, &_actions_size_, &helpmenu);
1726         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) _identity_manager_view_on_about_action_gtk_action_callback, _tmp5_);
1727         _vala_array_add5 (&actions, &actions_length1, &_actions_size_, &about);
1728         result = (_tmp6_ = actions, *result_length1 = actions_length1, _tmp6_);
1729         return result;
1730         actions = (g_free (actions), NULL);
1731 }
1732
1733
1734 static void identity_manager_view_create_ui_manager (IdentityManagerView* self) {
1735         GtkActionGroup* action_group;
1736         gint _tmp0_;
1737         GtkActionEntry* _tmp1_;
1738         gint _tmp1__length1;
1739         GtkActionEntry* _tmp2_;
1740         GError * _inner_error_ = NULL;
1741         g_return_if_fail (self != NULL);
1742         action_group = gtk_action_group_new ("GeneralActionGroup");
1743         _tmp2_ = (_tmp1_ = identity_manager_view_create_actions (self, &_tmp0_), _tmp1__length1 = _tmp0_, _tmp1_);
1744         gtk_action_group_add_actions (action_group, _tmp2_, _tmp0_, self);
1745         _tmp1_ = (g_free (_tmp1_), NULL);
1746         gtk_ui_manager_insert_action_group (self->priv->ui_manager, action_group, 0);
1747         {
1748                 gtk_ui_manager_add_ui_from_string (self->priv->ui_manager, IDENTITY_MANAGER_VIEW_layout, (gssize) (-1), &_inner_error_);
1749                 if (_inner_error_ != NULL) {
1750                         goto __catch1_g_error;
1751                 }
1752         }
1753         goto __finally1;
1754         __catch1_g_error:
1755         {
1756                 GError * e;
1757                 e = _inner_error_;
1758                 _inner_error_ = NULL;
1759                 {
1760                         fprintf (stderr, "%s\n", e->message);
1761                         _g_error_free0 (e);
1762                 }
1763         }
1764         __finally1:
1765         if (_inner_error_ != NULL) {
1766                 _g_object_unref0 (action_group);
1767                 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);
1768                 g_clear_error (&_inner_error_);
1769                 return;
1770         }
1771         gtk_ui_manager_ensure_update (self->priv->ui_manager);
1772         _g_object_unref0 (action_group);
1773 }
1774
1775
1776 static void _identity_manager_view_search_entry_icon_press_cb_gtk_entry_icon_press (GtkEntry* _sender, GtkEntryIconPosition p0, GdkEvent* p1, gpointer self) {
1777         identity_manager_view_search_entry_icon_press_cb (self, p0, p1);
1778 }
1779
1780
1781 static void _identity_manager_view_search_entry_text_changed_cb_g_object_notify (GObject* _sender, GParamSpec* pspec, gpointer self) {
1782         identity_manager_view_search_entry_text_changed_cb (self);
1783 }
1784
1785
1786 static gboolean _identity_manager_view_search_entry_key_press_event_cb_gtk_widget_key_press_event (GtkWidget* _sender, GdkEventKey* event, gpointer self) {
1787         gboolean result;
1788         result = identity_manager_view_search_entry_key_press_event_cb (self, event);
1789         return result;
1790 }
1791
1792
1793 static void identity_manager_view_build_ui (IdentityManagerView* self) {
1794         GtkEntry* _tmp0_;
1795         GdkPixbuf* _tmp1_;
1796         GdkPixbuf* _tmp2_;
1797         CustomVBox* _tmp3_;
1798         GtkViewport* viewport;
1799         GtkScrolledWindow* scroll;
1800         GtkVBox* vbox_left;
1801         GtkLabel* login_vbox_title;
1802         GtkLabel* username_label;
1803         GtkEntry* _tmp4_;
1804         GtkLabel* password_label;
1805         GtkEntry* _tmp5_;
1806         GtkCheckButton* remember_checkbutton;
1807         GtkTable* login_table;
1808         GtkAlignment* login_vbox_alignment;
1809         GtkVBox* login_vbox;
1810         GtkLabel* services_vbox_title;
1811         GtkAlignment* services_vbox_alignment;
1812         GtkVBox* _tmp6_;
1813         GtkVBox* services_vbox;
1814         GtkVBox* _tmp7_;
1815         GtkHBox* hbox;
1816         GtkVBox* main_vbox;
1817         GtkWidget* menubar;
1818         g_return_if_fail (self != NULL);
1819         identity_manager_view_create_ui_manager (self);
1820         self->priv->search_entry = (_tmp0_ = g_object_ref_sink ((GtkEntry*) gtk_entry_new ()), _g_object_unref0 (self->priv->search_entry), _tmp0_);
1821         identity_manager_view_set_atk_name_description (self, (GtkWidget*) self->priv->search_entry, _ ("Search entry"), _ ("Search for a specific ID Card"));
1822         gtk_entry_set_icon_from_pixbuf (self->priv->search_entry, GTK_ENTRY_ICON_PRIMARY, _tmp1_ = find_icon_sized ("edit-find", GTK_ICON_SIZE_MENU));
1823         _g_object_unref0 (_tmp1_);
1824         gtk_entry_set_icon_tooltip_text (self->priv->search_entry, GTK_ENTRY_ICON_PRIMARY, _ ("Search identity or service"));
1825         gtk_entry_set_icon_sensitive (self->priv->search_entry, GTK_ENTRY_ICON_PRIMARY, FALSE);
1826         gtk_entry_set_icon_from_pixbuf (self->priv->search_entry, GTK_ENTRY_ICON_SECONDARY, _tmp2_ = find_icon_sized ("process-stop", GTK_ICON_SIZE_MENU));
1827         _g_object_unref0 (_tmp2_);
1828         gtk_entry_set_icon_tooltip_text (self->priv->search_entry, GTK_ENTRY_ICON_SECONDARY, _ ("Clear the current search"));
1829         gtk_entry_set_icon_sensitive (self->priv->search_entry, GTK_ENTRY_ICON_SECONDARY, FALSE);
1830         g_signal_connect_object (self->priv->search_entry, "icon-press", (GCallback) _identity_manager_view_search_entry_icon_press_cb_gtk_entry_icon_press, self, 0);
1831         g_signal_connect_object ((GObject*) self->priv->search_entry, "notify::text", (GCallback) _identity_manager_view_search_entry_text_changed_cb_g_object_notify, self, 0);
1832         g_signal_connect_object ((GtkWidget*) self->priv->search_entry, "key-press-event", (GCallback) _identity_manager_view_search_entry_key_press_event_cb_gtk_widget_key_press_event, self, 0);
1833         self->priv->custom_vbox = (_tmp3_ = g_object_ref_sink (custom_vbox_new (self, FALSE, 6)), _g_object_unref0 (self->priv->custom_vbox), _tmp3_);
1834         viewport = g_object_ref_sink ((GtkViewport*) gtk_viewport_new (NULL, NULL));
1835         gtk_container_set_border_width ((GtkContainer*) viewport, (guint) 6);
1836         gtk_viewport_set_shadow_type (viewport, GTK_SHADOW_NONE);
1837         gtk_container_add ((GtkContainer*) viewport, (GtkWidget*) self->priv->custom_vbox);
1838         scroll = g_object_ref_sink ((GtkScrolledWindow*) gtk_scrolled_window_new (NULL, NULL));
1839         gtk_scrolled_window_set_policy (scroll, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1840         gtk_scrolled_window_set_shadow_type (scroll, GTK_SHADOW_IN);
1841         gtk_scrolled_window_add_with_viewport (scroll, (GtkWidget*) viewport);
1842         vbox_left = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 0));
1843         gtk_box_pack_start ((GtkBox*) vbox_left, (GtkWidget*) self->priv->search_entry, FALSE, FALSE, (guint) 6);
1844         gtk_box_pack_start ((GtkBox*) vbox_left, (GtkWidget*) scroll, TRUE, TRUE, (guint) 0);
1845         gtk_widget_set_size_request ((GtkWidget*) vbox_left, IDENTITY_MANAGER_VIEW_WINDOW_WIDTH, 0);
1846         login_vbox_title = g_object_ref_sink ((GtkLabel*) gtk_label_new (_ ("Login: ")));
1847         identity_manager_view_label_make_bold (self, login_vbox_title);
1848         gtk_misc_set_alignment ((GtkMisc*) login_vbox_title, (float) 0, (float) 0.5);
1849         username_label = g_object_ref_sink ((GtkLabel*) gtk_label_new (_ ("Username:")));
1850         gtk_misc_set_alignment ((GtkMisc*) username_label, (float) 1, (float) 0.5);
1851         self->priv->username_entry = (_tmp4_ = g_object_ref_sink ((GtkEntry*) gtk_entry_new ()), _g_object_unref0 (self->priv->username_entry), _tmp4_);
1852         password_label = g_object_ref_sink ((GtkLabel*) gtk_label_new (_ ("Password:")));
1853         gtk_misc_set_alignment ((GtkMisc*) password_label, (float) 1, (float) 0.5);
1854         self->priv->password_entry = (_tmp5_ = g_object_ref_sink ((GtkEntry*) gtk_entry_new ()), _g_object_unref0 (self->priv->password_entry), _tmp5_);
1855         gtk_entry_set_invisible_char (self->priv->password_entry, (gunichar) '*');
1856         gtk_entry_set_visibility (self->priv->password_entry, FALSE);
1857         remember_checkbutton = g_object_ref_sink ((GtkCheckButton*) gtk_check_button_new_with_label (_ ("Remember password")));
1858         login_table = g_object_ref_sink ((GtkTable*) gtk_table_new ((guint) 3, (guint) 3, FALSE));
1859         gtk_table_set_col_spacings (login_table, (guint) 10);
1860         gtk_table_set_row_spacings (login_table, (guint) 10);
1861         gtk_table_attach_defaults (login_table, (GtkWidget*) username_label, (guint) 0, (guint) 1, (guint) 0, (guint) 1);
1862         gtk_table_attach_defaults (login_table, (GtkWidget*) self->priv->username_entry, (guint) 1, (guint) 2, (guint) 0, (guint) 1);
1863         gtk_table_attach_defaults (login_table, (GtkWidget*) password_label, (guint) 0, (guint) 1, (guint) 1, (guint) 2);
1864         gtk_table_attach_defaults (login_table, (GtkWidget*) self->priv->password_entry, (guint) 1, (guint) 2, (guint) 1, (guint) 2);
1865         gtk_table_attach_defaults (login_table, (GtkWidget*) remember_checkbutton, (guint) 1, (guint) 2, (guint) 2, (guint) 3);
1866         login_vbox_alignment = g_object_ref_sink ((GtkAlignment*) gtk_alignment_new ((float) 0, (float) 0, (float) 0, (float) 0));
1867         gtk_alignment_set_padding (login_vbox_alignment, (guint) 0, (guint) 0, (guint) 12, (guint) 0);
1868         gtk_container_add ((GtkContainer*) login_vbox_alignment, (GtkWidget*) login_table);
1869         login_vbox = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 6));
1870         gtk_box_pack_start ((GtkBox*) login_vbox, (GtkWidget*) login_vbox_title, FALSE, TRUE, (guint) 0);
1871         gtk_box_pack_start ((GtkBox*) login_vbox, (GtkWidget*) login_vbox_alignment, FALSE, TRUE, (guint) 0);
1872         services_vbox_title = g_object_ref_sink ((GtkLabel*) gtk_label_new (_ ("Services:")));
1873         identity_manager_view_label_make_bold (self, services_vbox_title);
1874         gtk_misc_set_alignment ((GtkMisc*) services_vbox_title, (float) 0, (float) 0.5);
1875         services_vbox_alignment = g_object_ref_sink ((GtkAlignment*) gtk_alignment_new ((float) 0, (float) 0, (float) 0, (float) 0));
1876         gtk_alignment_set_padding (services_vbox_alignment, (guint) 0, (guint) 0, (guint) 12, (guint) 0);
1877         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_);
1878         gtk_container_add ((GtkContainer*) services_vbox_alignment, (GtkWidget*) self->priv->services_internal_vbox);
1879         services_vbox = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 6));
1880         gtk_box_pack_start ((GtkBox*) services_vbox, (GtkWidget*) services_vbox_title, FALSE, TRUE, (guint) 0);
1881         gtk_box_pack_start ((GtkBox*) services_vbox, (GtkWidget*) services_vbox_alignment, FALSE, TRUE, (guint) 0);
1882         self->priv->vbox_right = (_tmp7_ = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 18)), _g_object_unref0 (self->priv->vbox_right), _tmp7_);
1883         gtk_box_pack_start ((GtkBox*) self->priv->vbox_right, (GtkWidget*) login_vbox, FALSE, TRUE, (guint) 0);
1884         gtk_box_pack_start ((GtkBox*) self->priv->vbox_right, (GtkWidget*) services_vbox, FALSE, TRUE, (guint) 0);
1885         hbox = g_object_ref_sink ((GtkHBox*) gtk_hbox_new (FALSE, 12));
1886         gtk_box_pack_start ((GtkBox*) hbox, (GtkWidget*) vbox_left, TRUE, TRUE, (guint) 0);
1887         gtk_box_pack_start ((GtkBox*) hbox, (GtkWidget*) self->priv->vbox_right, FALSE, FALSE, (guint) 0);
1888         main_vbox = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 0));
1889         gtk_container_set_border_width ((GtkContainer*) main_vbox, (guint) 12);
1890         menubar = _g_object_ref0 (gtk_ui_manager_get_widget (self->priv->ui_manager, "/MenuBar"));
1891         gtk_box_pack_start ((GtkBox*) main_vbox, menubar, FALSE, FALSE, (guint) 0);
1892         gtk_box_pack_start ((GtkBox*) main_vbox, (GtkWidget*) hbox, TRUE, TRUE, (guint) 0);
1893         gtk_container_add ((GtkContainer*) self, (GtkWidget*) main_vbox);
1894         gtk_widget_show_all ((GtkWidget*) main_vbox);
1895         gtk_widget_hide ((GtkWidget*) self->priv->vbox_right);
1896         _g_object_unref0 (menubar);
1897         _g_object_unref0 (main_vbox);
1898         _g_object_unref0 (hbox);
1899         _g_object_unref0 (services_vbox);
1900         _g_object_unref0 (services_vbox_alignment);
1901         _g_object_unref0 (services_vbox_title);
1902         _g_object_unref0 (login_vbox);
1903         _g_object_unref0 (login_vbox_alignment);
1904         _g_object_unref0 (login_table);
1905         _g_object_unref0 (remember_checkbutton);
1906         _g_object_unref0 (password_label);
1907         _g_object_unref0 (username_label);
1908         _g_object_unref0 (login_vbox_title);
1909         _g_object_unref0 (vbox_left);
1910         _g_object_unref0 (scroll);
1911         _g_object_unref0 (viewport);
1912 }
1913
1914
1915 static void identity_manager_view_set_atk_name_description (IdentityManagerView* self, GtkWidget* widget, const char* name, const char* description) {
1916         AtkObject* atk_widget;
1917         g_return_if_fail (self != NULL);
1918         g_return_if_fail (widget != NULL);
1919         g_return_if_fail (name != NULL);
1920         g_return_if_fail (description != NULL);
1921         atk_widget = _g_object_ref0 (gtk_widget_get_accessible (widget));
1922         atk_object_set_name (atk_widget, name);
1923         atk_object_set_description (atk_widget, description);
1924         _g_object_unref0 (atk_widget);
1925 }
1926
1927
1928 static void _gtk_main_quit_gtk_object_destroy (GtkObject* _sender, gpointer self) {
1929         gtk_main_quit ();
1930 }
1931
1932
1933 static void _identity_manager_view_on_card_list_changed_identity_manager_model_card_list_changed (IdentityManagerModel* _sender, gpointer self) {
1934         identity_manager_view_on_card_list_changed (self);
1935 }
1936
1937
1938 static void identity_manager_view_connect_signals (IdentityManagerView* self) {
1939         g_return_if_fail (self != NULL);
1940         g_signal_connect ((GtkObject*) self, "destroy", (GCallback) _gtk_main_quit_gtk_object_destroy, NULL);
1941         g_signal_connect_object (self->identities_manager, "card-list-changed", (GCallback) _identity_manager_view_on_card_list_changed_identity_manager_model_card_list_changed, self, 0);
1942 }
1943
1944
1945 static void identity_manager_view_class_init (IdentityManagerViewClass * klass) {
1946         identity_manager_view_parent_class = g_type_class_peek_parent (klass);
1947         g_type_class_add_private (klass, sizeof (IdentityManagerViewPrivate));
1948         G_OBJECT_CLASS (klass)->finalize = identity_manager_view_finalize;
1949 }
1950
1951
1952 static void identity_manager_view_instance_init (IdentityManagerView * self) {
1953         self->priv = IDENTITY_MANAGER_VIEW_GET_PRIVATE (self);
1954         self->priv->ui_manager = gtk_ui_manager_new ();
1955 }
1956
1957
1958 static void identity_manager_view_finalize (GObject* obj) {
1959         IdentityManagerView * self;
1960         self = IDENTITY_MANAGER_VIEW (obj);
1961         _g_object_unref0 (self->parent_app);
1962         _g_object_unref0 (self->priv->ui_manager);
1963         _g_object_unref0 (self->priv->search_entry);
1964         _g_object_unref0 (self->priv->vbox_right);
1965         _g_object_unref0 (self->priv->custom_vbox);
1966         _g_object_unref0 (self->priv->services_internal_vbox);
1967         _g_object_unref0 (self->priv->username_entry);
1968         _g_object_unref0 (self->priv->password_entry);
1969         _g_object_unref0 (self->priv->filter);
1970         _g_object_unref0 (self->identities_manager);
1971         __g_slist_free_g_object_unref0 (self->priv->candidates);
1972         _g_object_unref0 (self->priv->default_id_card);
1973         _g_queue_free0 (self->request_queue);
1974         _g_hash_table_unref0 (self->priv->service_button_map);
1975         G_OBJECT_CLASS (identity_manager_view_parent_class)->finalize (obj);
1976 }
1977
1978
1979 GType identity_manager_view_get_type (void) {
1980         static volatile gsize identity_manager_view_type_id__volatile = 0;
1981         if (g_once_init_enter (&identity_manager_view_type_id__volatile)) {
1982                 static const GTypeInfo g_define_type_info = { sizeof (IdentityManagerViewClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) identity_manager_view_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (IdentityManagerView), 0, (GInstanceInitFunc) identity_manager_view_instance_init, NULL };
1983                 GType identity_manager_view_type_id;
1984                 identity_manager_view_type_id = g_type_register_static (GTK_TYPE_WINDOW, "IdentityManagerView", &g_define_type_info, 0);
1985                 g_once_init_leave (&identity_manager_view_type_id__volatile, identity_manager_view_type_id);
1986         }
1987         return identity_manager_view_type_id__volatile;
1988 }
1989
1990
1991 static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
1992         if ((array != NULL) && (destroy_func != NULL)) {
1993                 int i;
1994                 for (i = 0; i < array_length; i = i + 1) {
1995                         if (((gpointer*) array)[i] != NULL) {
1996                                 destroy_func (((gpointer*) array)[i]);
1997                         }
1998                 }
1999         }
2000 }
2001
2002
2003 static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
2004         _vala_array_destroy (array, array_length, destroy_func);
2005         g_free (array);
2006 }
2007
2008
2009 static gint _vala_array_length (gpointer array) {
2010         int length;
2011         length = 0;
2012         if (array) {
2013                 while (((gpointer*) array)[length]) {
2014                         length++;
2015                 }
2016         }
2017         return length;
2018 }
2019
2020
2021 static int _vala_strcmp0 (const char * str1, const char * str2) {
2022         if (str1 == NULL) {
2023                 return -(str1 != str2);
2024         }
2025         if (str2 == NULL) {
2026                 return str1 != str2;
2027         }
2028         return strcmp (str1, str2);
2029 }
2030
2031
2032
2033