static void on_import_button_clicked (GtkButton *import_button, gpointer user_data) { SeahorseKeyserverResultsRow *row = user_data; g_autoptr(GtkWidget) spinner = NULL; g_autoptr(GList) keys = NULL; g_autoptr(GCancellable) cancellable = NULL; SeahorsePgpBackend *backend; SeahorseGpgmeKeyring *keyring; /* Let the button show a spinner while importing */ gtk_widget_set_sensitive (GTK_WIDGET (import_button), FALSE); spinner = gtk_spinner_new (); gtk_spinner_start (GTK_SPINNER (spinner)); gtk_button_set_image (import_button, g_steal_pointer (&spinner)); /* Now import the key */ keys = g_list_append (keys, row->key); cancellable = g_cancellable_new (); backend = seahorse_pgp_backend_get (); keyring = seahorse_pgp_backend_get_default_keyring (backend); seahorse_pgp_backend_transfer_async (backend, keys, SEAHORSE_PLACE (keyring), cancellable, on_import_complete, g_object_ref (row)); }
/** * seahorse_keyserver_results_show: * @search_text: The text to search for * @parent: A GTK window as parent (or NULL) * * Creates a search results window and adds the operation to it's progress status. */ void seahorse_keyserver_results_show (const gchar* search_text, GtkWindow *parent) { SeahorseKeyserverResults* self; g_autoptr(GCancellable) cancellable = NULL; g_return_if_fail (search_text != NULL); self = g_object_new (SEAHORSE_TYPE_KEYSERVER_RESULTS, "search", search_text, "transient-for", parent, NULL); /* Destorys itself with destroy */ g_object_ref_sink (self); cancellable = g_cancellable_new (); seahorse_pgp_backend_search_remote_async (seahorse_pgp_backend_get (), search_text, self->collection, cancellable, on_search_completed, g_object_ref (self)); seahorse_progress_attach (cancellable, self->builder); }
static void on_key_import_keyring (GtkAction* action, SeahorseCatalog* self) { GCancellable *cancellable; SeahorsePgpBackend *backend; SeahorseGpgmeKeyring *keyring; GList* objects; g_return_if_fail (SEAHORSE_IS_CATALOG (self)); g_return_if_fail (GTK_IS_ACTION (action)); objects = seahorse_catalog_get_selected_objects (self); objects = objects_prune_non_exportable (objects); /* No objects, nothing to do */ if (objects == NULL) return; cancellable = g_cancellable_new (); backend = seahorse_pgp_backend_get (); keyring = seahorse_pgp_backend_get_default_keyring (NULL); seahorse_pgp_backend_transfer_async (backend, objects, SEAHORSE_PLACE (keyring), cancellable, on_import_complete, g_object_ref (self)); seahorse_progress_show (cancellable, _ ("Importing keys from key servers"), TRUE); g_object_unref (cancellable); g_list_free (objects); }
static void on_search_completed (GObject *source, GAsyncResult *result, gpointer user_data) { SeahorseKeyserverResults *self = SEAHORSE_KEYSERVER_RESULTS (user_data); SeahorsePgpBackend *backend = seahorse_pgp_backend_get (); g_autoptr(GError) error = NULL; seahorse_pgp_backend_search_remote_finish (backend, result, &error); if (error != NULL) { g_dbus_error_strip_remote_error (error); seahorse_util_show_error (GTK_WIDGET (self), _("The search for keys failed."), error->message); } g_object_unref (self); }
static void seahorse_keyserver_results_constructed (GObject *obj) { SeahorseKeyserverResults *self = SEAHORSE_KEYSERVER_RESULTS (obj); GtkActionGroup* actions; GtkTreeSelection *selection; GtkWindow *window; GtkBuilder *builder; char* title; G_OBJECT_CLASS (seahorse_keyserver_results_parent_class)->constructed (obj); if (g_utf8_strlen (self->pv->search_string, -1) == 0) { title = g_strdup (_("Remote Keys")); } else { title = g_strdup_printf (_ ("Remote Keys Containing '%s'"), self->pv->search_string); } window = seahorse_catalog_get_window (SEAHORSE_CATALOG (self)); gtk_window_set_default_geometry(window, 640, 476); gtk_widget_set_events (GTK_WIDGET (window), GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); gtk_window_set_title (window, title); gtk_widget_set_visible (GTK_WIDGET (window), TRUE); g_free (title); g_signal_connect (window, "delete-event", G_CALLBACK (on_delete_event), self); actions = gtk_action_group_new ("general"); gtk_action_group_set_translation_domain (actions, GETTEXT_PACKAGE); gtk_action_group_add_actions (actions, GENERAL_ENTRIES, G_N_ELEMENTS (GENERAL_ENTRIES), self); seahorse_catalog_include_actions (SEAHORSE_CATALOG (self), actions); actions = gtk_action_group_new ("keyserver"); gtk_action_group_set_translation_domain (actions, GETTEXT_PACKAGE); gtk_action_group_add_actions (actions, SERVER_ENTRIES, G_N_ELEMENTS (SERVER_ENTRIES), self); seahorse_catalog_include_actions (SEAHORSE_CATALOG (self), actions); self->pv->import_actions = gtk_action_group_new ("import"); gtk_action_group_set_translation_domain (self->pv->import_actions, GETTEXT_PACKAGE); gtk_action_group_add_actions (self->pv->import_actions, IMPORT_ENTRIES, G_N_ELEMENTS (IMPORT_ENTRIES), self); g_object_set (gtk_action_group_get_action (self->pv->import_actions, "key-import-keyring"), "is-important", TRUE, NULL); seahorse_catalog_include_actions (SEAHORSE_CATALOG (self), self->pv->import_actions); /* init key list & selection settings */ builder = seahorse_catalog_get_builder (SEAHORSE_CATALOG (self)); self->pv->view = GTK_TREE_VIEW (gtk_builder_get_object (builder, "key_list")); selection = gtk_tree_view_get_selection (self->pv->view); gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE); g_signal_connect_object (selection, "changed", G_CALLBACK (on_view_selection_changed), self, 0); g_signal_connect_object (self->pv->view, "row-activated", G_CALLBACK (on_row_activated), self, 0); g_signal_connect_object (self->pv->view, "button-press-event", G_CALLBACK (on_key_list_button_pressed), self, 0); g_signal_connect_object (self->pv->view, "popup-menu", G_CALLBACK (on_key_list_popup_menu), self, 0); gtk_widget_realize (GTK_WIDGET (self->pv->view)); /* Set focus to the current key list */ gtk_widget_grab_focus (GTK_WIDGET (self->pv->view)); /* To avoid flicker */ seahorse_catalog_ensure_updated (SEAHORSE_CATALOG (self)); gtk_widget_show (GTK_WIDGET (self)); self->pv->store = seahorse_key_manager_store_new (GCR_COLLECTION (self->pv->collection), self->pv->view, &self->pv->pred, self->pv->settings); on_view_selection_changed (selection, self); /* Include actions from the backend */ actions = NULL; g_object_get (seahorse_pgp_backend_get (), "actions", &actions, NULL); seahorse_catalog_include_actions (SEAHORSE_CATALOG (self), actions); g_object_unref (actions); }