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