diff options
Diffstat (limited to 'src/passwords-dialog.c')
-rw-r--r-- | src/passwords-dialog.c | 667 |
1 files changed, 328 insertions, 339 deletions
diff --git a/src/passwords-dialog.c b/src/passwords-dialog.c index ab51b23ea..649f04374 100644 --- a/src/passwords-dialog.c +++ b/src/passwords-dialog.c @@ -29,13 +29,12 @@ #include "ephy-string.h" #include "passwords-dialog.h" -typedef enum -{ - COL_PASSWORDS_HOST, - COL_PASSWORDS_USER, - COL_PASSWORDS_PASSWORD, - COL_PASSWORDS_INVISIBLE, - COL_PASSWORDS_DATA, +typedef enum { + COL_PASSWORDS_HOST, + COL_PASSWORDS_USER, + COL_PASSWORDS_PASSWORD, + COL_PASSWORDS_INVISIBLE, + COL_PASSWORDS_DATA, } PasswordsDialogColumn; #define URI_KEY "uri" @@ -43,27 +42,26 @@ typedef enum #define FORM_PASSWORD_KEY "form_password" #define USERNAME_KEY "username" -struct _EphyPasswordsDialog -{ - GtkDialog parent_instance; +struct _EphyPasswordsDialog { + GtkDialog parent_instance; - GtkWidget *passwords_treeview; - GtkTreeSelection *tree_selection; - GtkWidget *liststore; - GtkWidget *treemodelfilter; - GtkWidget *treemodelsort; - GtkWidget *show_passwords_button; - GtkWidget *password_column; - GtkWidget *password_renderer; - GMenuModel *treeview_popup_menu_model; + GtkWidget *passwords_treeview; + GtkTreeSelection *tree_selection; + GtkWidget *liststore; + GtkWidget *treemodelfilter; + GtkWidget *treemodelsort; + GtkWidget *show_passwords_button; + GtkWidget *password_column; + GtkWidget *password_renderer; + GMenuModel *treeview_popup_menu_model; - GActionGroup *action_group; + GActionGroup *action_group; - SecretService *ss; - GCancellable *ss_cancellable; - gboolean filled; + SecretService *ss; + GCancellable *ss_cancellable; + gboolean filled; - char *search_text; + char *search_text; }; G_DEFINE_TYPE (EphyPasswordsDialog, ephy_passwords_dialog, GTK_TYPE_DIALOG) @@ -73,26 +71,26 @@ static void populate_model (EphyPasswordsDialog *dialog); static void reload_model (EphyPasswordsDialog *dialog) { - gtk_list_store_clear (GTK_LIST_STORE (dialog->liststore)); - dialog->filled = FALSE; - populate_model (dialog); + gtk_list_store_clear (GTK_LIST_STORE (dialog->liststore)); + dialog->filled = FALSE; + populate_model (dialog); } static void ephy_passwords_dialog_dispose (GObject *object) { - EphyPasswordsDialog *dialog = EPHY_PASSWORDS_DIALOG (object); + EphyPasswordsDialog *dialog = EPHY_PASSWORDS_DIALOG (object); - if (dialog->ss_cancellable != NULL) { - g_cancellable_cancel (dialog->ss_cancellable); - g_clear_object (&(dialog->ss_cancellable)); - } + if (dialog->ss_cancellable != NULL) { + g_cancellable_cancel (dialog->ss_cancellable); + g_clear_object (&(dialog->ss_cancellable)); + } - g_clear_object (&(dialog->ss)); - g_free (dialog->search_text); - dialog->search_text = NULL; + g_clear_object (&(dialog->ss)); + g_free (dialog->search_text); + dialog->search_text = NULL; - G_OBJECT_CLASS (ephy_passwords_dialog_parent_class)->dispose (object); + G_OBJECT_CLASS (ephy_passwords_dialog_parent_class)->dispose (object); } static void @@ -100,224 +98,215 @@ secret_remove_ready_cb (GObject *source, GAsyncResult *res, EphyPasswordsDialog *dialog) { - secret_item_delete_finish (SECRET_ITEM (source), res, NULL); + secret_item_delete_finish (SECRET_ITEM (source), res, NULL); } static void secret_remove (EphyPasswordsDialog *dialog, SecretItem *item) { - secret_item_delete (item, NULL, (GAsyncReadyCallback)secret_remove_ready_cb, dialog); + secret_item_delete (item, NULL, (GAsyncReadyCallback)secret_remove_ready_cb, dialog); } static void -forget (GSimpleAction *action, - GVariant *parameter, - gpointer user_data) +forget (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) { - EphyPasswordsDialog *dialog = EPHY_PASSWORDS_DIALOG (user_data); - GList *llist, *rlist = NULL, *l, *r; - GtkTreeModel *model; - GtkTreePath *path; - GtkTreeIter iter, iter2; - GtkTreeRowReference *row_ref = NULL; - - llist = gtk_tree_selection_get_selected_rows (dialog->tree_selection, &model); - - if (llist == NULL) - { - /* nothing to delete, return early */ - return; - } - - for (l = llist; l != NULL; l = l->next) - { - rlist = g_list_prepend (rlist, gtk_tree_row_reference_new (model, (GtkTreePath *)l->data)); - } - - /* Intelligent selection logic, no actual selection yet */ - - path = gtk_tree_row_reference_get_path ((GtkTreeRowReference *) g_list_first (rlist)->data); - - gtk_tree_model_get_iter (model, &iter, path); - gtk_tree_path_free (path); - iter2 = iter; - - if (gtk_tree_model_iter_next (GTK_TREE_MODEL (model), &iter)) - { - path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter); - row_ref = gtk_tree_row_reference_new (model, path); - } - else - { - path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter2); - if (gtk_tree_path_prev (path)) - { - row_ref = gtk_tree_row_reference_new (model, path); - } - } - gtk_tree_path_free (path); - - /* Removal */ - for (r = rlist; r != NULL; r = r->next) - { - GValue val = { 0, }; - SecretItem *item; - GtkTreeIter filter_iter; - GtkTreeIter child_iter; - - path = gtk_tree_row_reference_get_path ((GtkTreeRowReference *)r->data); - gtk_tree_model_get_iter (model, &iter, path); - gtk_tree_model_get_value (model, &iter, COL_PASSWORDS_DATA, &val); - item = g_value_get_object (&val); - secret_remove (dialog, item); - g_value_unset (&val); - - gtk_tree_model_sort_convert_iter_to_child_iter (GTK_TREE_MODEL_SORT (dialog->treemodelsort), - &filter_iter, - &iter); - - gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (dialog->treemodelfilter), - &child_iter, - &filter_iter); - - gtk_list_store_remove (GTK_LIST_STORE (dialog->liststore), &child_iter); - - gtk_tree_row_reference_free ((GtkTreeRowReference *)r->data); - gtk_tree_path_free (path); - } - - g_list_foreach (llist, (GFunc)gtk_tree_path_free, NULL); - g_list_free (llist); - g_list_free (rlist); - - /* Selection */ - if (row_ref != NULL) - { - path = gtk_tree_row_reference_get_path (row_ref); - - if (path != NULL) - { - gtk_tree_view_set_cursor (GTK_TREE_VIEW (dialog->passwords_treeview), path, NULL, FALSE); - gtk_tree_path_free (path); - } - - gtk_tree_row_reference_free (row_ref); - } + EphyPasswordsDialog *dialog = EPHY_PASSWORDS_DIALOG (user_data); + GList *llist, *rlist = NULL, *l, *r; + GtkTreeModel *model; + GtkTreePath *path; + GtkTreeIter iter, iter2; + GtkTreeRowReference *row_ref = NULL; + + llist = gtk_tree_selection_get_selected_rows (dialog->tree_selection, &model); + + if (llist == NULL) { + /* nothing to delete, return early */ + return; + } + + for (l = llist; l != NULL; l = l->next) { + rlist = g_list_prepend (rlist, gtk_tree_row_reference_new (model, (GtkTreePath *)l->data)); + } + + /* Intelligent selection logic, no actual selection yet */ + + path = gtk_tree_row_reference_get_path ((GtkTreeRowReference *)g_list_first (rlist)->data); + + gtk_tree_model_get_iter (model, &iter, path); + gtk_tree_path_free (path); + iter2 = iter; + + if (gtk_tree_model_iter_next (GTK_TREE_MODEL (model), &iter)) { + path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter); + row_ref = gtk_tree_row_reference_new (model, path); + } else { + path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter2); + if (gtk_tree_path_prev (path)) { + row_ref = gtk_tree_row_reference_new (model, path); + } + } + gtk_tree_path_free (path); + + /* Removal */ + for (r = rlist; r != NULL; r = r->next) { + GValue val = { 0, }; + SecretItem *item; + GtkTreeIter filter_iter; + GtkTreeIter child_iter; + + path = gtk_tree_row_reference_get_path ((GtkTreeRowReference *)r->data); + gtk_tree_model_get_iter (model, &iter, path); + gtk_tree_model_get_value (model, &iter, COL_PASSWORDS_DATA, &val); + item = g_value_get_object (&val); + secret_remove (dialog, item); + g_value_unset (&val); + + gtk_tree_model_sort_convert_iter_to_child_iter (GTK_TREE_MODEL_SORT (dialog->treemodelsort), + &filter_iter, + &iter); + + gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (dialog->treemodelfilter), + &child_iter, + &filter_iter); + + gtk_list_store_remove (GTK_LIST_STORE (dialog->liststore), &child_iter); + + gtk_tree_row_reference_free ((GtkTreeRowReference *)r->data); + gtk_tree_path_free (path); + } + + g_list_foreach (llist, (GFunc)gtk_tree_path_free, NULL); + g_list_free (llist); + g_list_free (rlist); + + /* Selection */ + if (row_ref != NULL) { + path = gtk_tree_row_reference_get_path (row_ref); + + if (path != NULL) { + gtk_tree_view_set_cursor (GTK_TREE_VIEW (dialog->passwords_treeview), path, NULL, FALSE); + gtk_tree_path_free (path); + } + + gtk_tree_row_reference_free (row_ref); + } } static void -show_passwords (GSimpleAction *action, - GVariant *parameter, - gpointer user_data) +show_passwords (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) { - EphyPasswordsDialog *dialog = EPHY_PASSWORDS_DIALOG (user_data); - gboolean active; + EphyPasswordsDialog *dialog = EPHY_PASSWORDS_DIALOG (user_data); + gboolean active; - active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->show_passwords_button)); + active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->show_passwords_button)); - gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (dialog->password_column), - GTK_CELL_RENDERER (dialog->password_renderer), - "text", (active ? COL_PASSWORDS_PASSWORD : COL_PASSWORDS_INVISIBLE), - NULL); - gtk_widget_queue_draw (dialog->passwords_treeview); + gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (dialog->password_column), + GTK_CELL_RENDERER (dialog->password_renderer), + "text", (active ? COL_PASSWORDS_PASSWORD : COL_PASSWORDS_INVISIBLE), + NULL); + gtk_widget_queue_draw (dialog->passwords_treeview); } static void update_selection_actions (GActionMap *action_map, gboolean has_selection) { - GAction *forget_action; + GAction *forget_action; - forget_action = g_action_map_lookup_action (action_map, "forget"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (forget_action), has_selection); + forget_action = g_action_map_lookup_action (action_map, "forget"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (forget_action), has_selection); } static void on_treeview_selection_changed (GtkTreeSelection *selection, EphyPasswordsDialog *dialog) { - update_selection_actions (G_ACTION_MAP (dialog->action_group), - gtk_tree_selection_count_selected_rows (selection) > 0); + update_selection_actions (G_ACTION_MAP (dialog->action_group), + gtk_tree_selection_count_selected_rows (selection) > 0); } static void on_search_entry_changed (GtkSearchEntry *entry, EphyPasswordsDialog *dialog) { - const char *text; + const char *text; - text = gtk_entry_get_text (GTK_ENTRY (entry)); - g_free (dialog->search_text); - dialog->search_text = g_strdup (text); - gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (dialog->treemodelfilter)); + text = gtk_entry_get_text (GTK_ENTRY (entry)); + g_free (dialog->search_text); + dialog->search_text = g_strdup (text); + gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (dialog->treemodelfilter)); } static char * -get_selected_item (EphyPasswordsDialog *dialog, - PasswordsDialogColumn column) +get_selected_item (EphyPasswordsDialog *dialog, + PasswordsDialogColumn column) { - GtkTreeModel *model; - GList *selected; - GtkTreeIter iter; - char *value; - - selected = gtk_tree_selection_get_selected_rows (dialog->tree_selection, &model); - gtk_tree_model_get_iter (model, &iter, selected->data); - gtk_tree_model_get (model, &iter, - column, &value, - -1); - g_list_free_full (selected, (GDestroyNotify) gtk_tree_path_free); - - return value; + GtkTreeModel *model; + GList *selected; + GtkTreeIter iter; + char *value; + + selected = gtk_tree_selection_get_selected_rows (dialog->tree_selection, &model); + gtk_tree_model_get_iter (model, &iter, selected->data); + gtk_tree_model_get (model, &iter, + column, &value, + -1); + g_list_free_full (selected, (GDestroyNotify)gtk_tree_path_free); + + return value; } static void -copy_password (GSimpleAction *action, - GVariant *parameter, - gpointer user_data) +copy_password (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) { - EphyPasswordsDialog *dialog = EPHY_PASSWORDS_DIALOG (user_data); - char *password; - - password = get_selected_item (dialog, COL_PASSWORDS_PASSWORD); - if (password != NULL) { - gtk_clipboard_set_text (gtk_widget_get_clipboard (GTK_WIDGET (dialog), - GDK_SELECTION_CLIPBOARD), - password, -1); - } - g_free (password); + EphyPasswordsDialog *dialog = EPHY_PASSWORDS_DIALOG (user_data); + char *password; + + password = get_selected_item (dialog, COL_PASSWORDS_PASSWORD); + if (password != NULL) { + gtk_clipboard_set_text (gtk_widget_get_clipboard (GTK_WIDGET (dialog), + GDK_SELECTION_CLIPBOARD), + password, -1); + } + g_free (password); } static void -copy_username (GSimpleAction *action, - GVariant *parameter, - gpointer user_data) +copy_username (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) { - EphyPasswordsDialog *dialog = EPHY_PASSWORDS_DIALOG (user_data); - char *username; - - username = get_selected_item (dialog, COL_PASSWORDS_USER); - if (username != NULL) { - gtk_clipboard_set_text (gtk_widget_get_clipboard (GTK_WIDGET (dialog), - GDK_SELECTION_CLIPBOARD), - username, -1); - } - g_free (username); + EphyPasswordsDialog *dialog = EPHY_PASSWORDS_DIALOG (user_data); + char *username; + + username = get_selected_item (dialog, COL_PASSWORDS_USER); + if (username != NULL) { + gtk_clipboard_set_text (gtk_widget_get_clipboard (GTK_WIDGET (dialog), + GDK_SELECTION_CLIPBOARD), + username, -1); + } + g_free (username); } static void update_popup_menu_actions (GActionGroup *action_group, gboolean only_one_selected_item) { - GAction *copy_password_action; - GAction *copy_username_action; + GAction *copy_password_action; + GAction *copy_username_action; - copy_password_action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "copy-password"); - copy_username_action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "copy-username"); + copy_password_action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "copy-password"); + copy_username_action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "copy-username"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (copy_password_action), only_one_selected_item); - g_simple_action_set_enabled (G_SIMPLE_ACTION (copy_username_action), only_one_selected_item); + g_simple_action_set_enabled (G_SIMPLE_ACTION (copy_password_action), only_one_selected_item); + g_simple_action_set_enabled (G_SIMPLE_ACTION (copy_username_action), only_one_selected_item); } static gboolean @@ -325,49 +314,49 @@ on_passwords_treeview_button_press_event (GtkWidget *widget, GdkEventButton *event, EphyPasswordsDialog *dialog) { - if (event->button == 3) { - int n; - GtkWidget *menu; + if (event->button == 3) { + int n; + GtkWidget *menu; - n = gtk_tree_selection_count_selected_rows (dialog->tree_selection); - if (n == 0) - return FALSE; + n = gtk_tree_selection_count_selected_rows (dialog->tree_selection); + if (n == 0) + return FALSE; - update_popup_menu_actions (dialog->action_group, (n == 1)); + update_popup_menu_actions (dialog->action_group, (n == 1)); - menu = gtk_menu_new_from_model (dialog->treeview_popup_menu_model); - gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (dialog), NULL); - gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, event->button, event->time); - return TRUE; - } + menu = gtk_menu_new_from_model (dialog->treeview_popup_menu_model); + gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (dialog), NULL); + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, event->button, event->time); + return TRUE; + } - return FALSE; + return FALSE; } static void ephy_passwords_dialog_class_init (EphyPasswordsDialogClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - - object_class->dispose = ephy_passwords_dialog_dispose; - - gtk_widget_class_set_template_from_resource (widget_class, - "/org/gnome/epiphany/passwords-dialog.ui"); - - gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, liststore); - gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, treemodelfilter); - gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, treemodelsort); - gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, passwords_treeview); - gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, tree_selection); - gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, show_passwords_button); - gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, password_column); - gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, password_renderer); - gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, treeview_popup_menu_model); - - gtk_widget_class_bind_template_callback (widget_class, on_passwords_treeview_button_press_event); - gtk_widget_class_bind_template_callback (widget_class, on_treeview_selection_changed); - gtk_widget_class_bind_template_callback (widget_class, on_search_entry_changed); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + object_class->dispose = ephy_passwords_dialog_dispose; + + gtk_widget_class_set_template_from_resource (widget_class, + "/org/gnome/epiphany/passwords-dialog.ui"); + + gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, liststore); + gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, treemodelfilter); + gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, treemodelsort); + gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, passwords_treeview); + gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, tree_selection); + gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, show_passwords_button); + gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, password_column); + gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, password_renderer); + gtk_widget_class_bind_template_child (widget_class, EphyPasswordsDialog, treeview_popup_menu_model); + + gtk_widget_class_bind_template_callback (widget_class, on_passwords_treeview_button_press_event); + gtk_widget_class_bind_template_callback (widget_class, on_treeview_selection_changed); + gtk_widget_class_bind_template_callback (widget_class, on_search_entry_changed); } static void @@ -375,26 +364,26 @@ delete_all_passwords_ready_cb (GObject *source_object, GAsyncResult *res, EphyPasswordsDialog *dialog) { - secret_service_clear_finish (dialog->ss, res, NULL); - reload_model (dialog); + secret_service_clear_finish (dialog->ss, res, NULL); + reload_model (dialog); } static void -forget_all (GSimpleAction *action, - GVariant *parameter, - gpointer user_data) +forget_all (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) { - EphyPasswordsDialog *dialog = EPHY_PASSWORDS_DIALOG (user_data); - GHashTable *attributes; - - attributes = secret_attributes_build (EPHY_FORM_PASSWORD_SCHEMA, NULL); - secret_service_clear (dialog->ss, - EPHY_FORM_PASSWORD_SCHEMA, - attributes, - dialog->ss_cancellable, - (GAsyncReadyCallback)delete_all_passwords_ready_cb, - dialog); - g_hash_table_unref (attributes); + EphyPasswordsDialog *dialog = EPHY_PASSWORDS_DIALOG (user_data); + GHashTable *attributes; + + attributes = secret_attributes_build (EPHY_FORM_PASSWORD_SCHEMA, NULL); + secret_service_clear (dialog->ss, + EPHY_FORM_PASSWORD_SCHEMA, + attributes, + dialog->ss_cancellable, + (GAsyncReadyCallback)delete_all_passwords_ready_cb, + dialog); + g_hash_table_unref (attributes); } static void @@ -402,61 +391,61 @@ secrets_search_ready_cb (GObject *source_object, GAsyncResult *res, EphyPasswordsDialog *dialog) { - GList *matches; - GList *l; - - matches = secret_service_search_finish (dialog->ss, res, NULL); - - for (l = matches; l != NULL; l = l->next) { - SecretItem *item = l->data; - SecretValue *value = NULL; - GHashTable *attributes = NULL; - const char *username = NULL; - const char *password = NULL; - char *host = NULL; - GtkTreeIter iter; - - attributes = secret_item_get_attributes (item); - username = g_hash_table_lookup (attributes, USERNAME_KEY); - host = ephy_string_get_host_name (g_hash_table_lookup (attributes, URI_KEY)); - value = secret_item_get_secret (item); - password = secret_value_get (value, NULL); - - gtk_list_store_insert_with_values (GTK_LIST_STORE (dialog->liststore), - &iter, - -1, - COL_PASSWORDS_HOST, host, - COL_PASSWORDS_USER, username, - COL_PASSWORDS_PASSWORD, password, - COL_PASSWORDS_INVISIBLE, "●●●●●●●●", - COL_PASSWORDS_DATA, item, - -1); - - g_free (host); - g_hash_table_unref (attributes); - } - - g_list_free_full (matches, g_object_unref); + GList *matches; + GList *l; + + matches = secret_service_search_finish (dialog->ss, res, NULL); + + for (l = matches; l != NULL; l = l->next) { + SecretItem *item = l->data; + SecretValue *value = NULL; + GHashTable *attributes = NULL; + const char *username = NULL; + const char *password = NULL; + char *host = NULL; + GtkTreeIter iter; + + attributes = secret_item_get_attributes (item); + username = g_hash_table_lookup (attributes, USERNAME_KEY); + host = ephy_string_get_host_name (g_hash_table_lookup (attributes, URI_KEY)); + value = secret_item_get_secret (item); + password = secret_value_get (value, NULL); + + gtk_list_store_insert_with_values (GTK_LIST_STORE (dialog->liststore), + &iter, + -1, + COL_PASSWORDS_HOST, host, + COL_PASSWORDS_USER, username, + COL_PASSWORDS_PASSWORD, password, + COL_PASSWORDS_INVISIBLE, "●●●●●●●●", + COL_PASSWORDS_DATA, item, + -1); + + g_free (host); + g_hash_table_unref (attributes); + } + + g_list_free_full (matches, g_object_unref); } static void populate_model (EphyPasswordsDialog *dialog) { - GHashTable *attributes; + GHashTable *attributes; - g_assert (dialog->filled == FALSE); + g_assert (dialog->filled == FALSE); - attributes = secret_attributes_build (EPHY_FORM_PASSWORD_SCHEMA, NULL); + attributes = secret_attributes_build (EPHY_FORM_PASSWORD_SCHEMA, NULL); - secret_service_search (dialog->ss, - EPHY_FORM_PASSWORD_SCHEMA, - attributes, - SECRET_SEARCH_ALL | SECRET_SEARCH_UNLOCK | SECRET_SEARCH_LOAD_SECRETS, - dialog->ss_cancellable, - (GAsyncReadyCallback)secrets_search_ready_cb, - dialog); + secret_service_search (dialog->ss, + EPHY_FORM_PASSWORD_SCHEMA, + attributes, + SECRET_SEARCH_ALL | SECRET_SEARCH_UNLOCK | SECRET_SEARCH_LOAD_SECRETS, + dialog->ss_cancellable, + (GAsyncReadyCallback)secrets_search_ready_cb, + dialog); - g_hash_table_unref (attributes); + g_hash_table_unref (attributes); } static void @@ -464,8 +453,8 @@ secrets_ready_cb (GObject *source_object, GAsyncResult *res, EphyPasswordsDialog *dialog) { - dialog->ss = secret_service_get_finish (res, NULL); - populate_model (dialog); + dialog->ss = secret_service_get_finish (res, NULL); + populate_model (dialog); } static gboolean @@ -473,74 +462,74 @@ row_visible_func (GtkTreeModel *model, GtkTreeIter *iter, EphyPasswordsDialog *dialog) { - char *username; - char *host; - gboolean visible = FALSE; + char *username; + char *host; + gboolean visible = FALSE; - if (dialog->search_text == NULL) - return TRUE; + if (dialog->search_text == NULL) + return TRUE; - gtk_tree_model_get (model, iter, - COL_PASSWORDS_HOST, &host, - COL_PASSWORDS_USER, &username, - -1); + gtk_tree_model_get (model, iter, + COL_PASSWORDS_HOST, &host, + COL_PASSWORDS_USER, &username, + -1); - if (host != NULL && g_strrstr (host, dialog->search_text) != NULL) - visible = TRUE; - else if (username != NULL && g_strrstr (username, dialog->search_text) != NULL) - visible = TRUE; + if (host != NULL && g_strrstr (host, dialog->search_text) != NULL) + visible = TRUE; + else if (username != NULL && g_strrstr (username, dialog->search_text) != NULL) + visible = TRUE; - g_free (host); - g_free (username); + g_free (host); + g_free (username); - return visible; + return visible; } static GActionGroup * create_action_group (EphyPasswordsDialog *dialog) { - const GActionEntry entries[] = { - { "copy-password", copy_password }, - { "copy-username", copy_username }, - { "forget", forget }, - { "forget-all", forget_all }, - { "show-passwords", show_passwords } - }; + const GActionEntry entries[] = { + { "copy-password", copy_password }, + { "copy-username", copy_username }, + { "forget", forget }, + { "forget-all", forget_all }, + { "show-passwords", show_passwords } + }; - GSimpleActionGroup *group; + GSimpleActionGroup *group; - group = g_simple_action_group_new (); - g_action_map_add_action_entries (G_ACTION_MAP (group), entries, G_N_ELEMENTS (entries), dialog); + group = g_simple_action_group_new (); + g_action_map_add_action_entries (G_ACTION_MAP (group), entries, G_N_ELEMENTS (entries), dialog); - return G_ACTION_GROUP (group); + return G_ACTION_GROUP (group); } static void ephy_passwords_dialog_init (EphyPasswordsDialog *dialog) { - gtk_widget_init_template (GTK_WIDGET (dialog)); + gtk_widget_init_template (GTK_WIDGET (dialog)); - gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (dialog->treemodelfilter), - (GtkTreeModelFilterVisibleFunc)row_visible_func, - dialog, - NULL); + gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (dialog->treemodelfilter), + (GtkTreeModelFilterVisibleFunc)row_visible_func, + dialog, + NULL); - dialog->ss_cancellable = g_cancellable_new (); - secret_service_get (SECRET_SERVICE_OPEN_SESSION | SECRET_SERVICE_LOAD_COLLECTIONS, - dialog->ss_cancellable, - (GAsyncReadyCallback)secrets_ready_cb, - dialog); + dialog->ss_cancellable = g_cancellable_new (); + secret_service_get (SECRET_SERVICE_OPEN_SESSION | SECRET_SERVICE_LOAD_COLLECTIONS, + dialog->ss_cancellable, + (GAsyncReadyCallback)secrets_ready_cb, + dialog); - dialog->action_group = create_action_group (dialog); - gtk_widget_insert_action_group (GTK_WIDGET (dialog), "passwords", dialog->action_group); + dialog->action_group = create_action_group (dialog); + gtk_widget_insert_action_group (GTK_WIDGET (dialog), "passwords", dialog->action_group); - update_selection_actions (G_ACTION_MAP (dialog->action_group), FALSE); + update_selection_actions (G_ACTION_MAP (dialog->action_group), FALSE); } EphyPasswordsDialog * ephy_passwords_dialog_new (void) { - return g_object_new (EPHY_TYPE_PASSWORDS_DIALOG, - "use-header-bar", TRUE, - NULL); + return g_object_new (EPHY_TYPE_PASSWORDS_DIALOG, + "use-header-bar", TRUE, + NULL); } |