[seahorse/pgp/uids-listbox: 6/6] pgp-key-properties: Rework the UI
- From: Niels De Graef <nielsdg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [seahorse/pgp/uids-listbox: 6/6] pgp-key-properties: Rework the UI
- Date: Tue, 17 Aug 2021 16:11:38 +0000 (UTC)
commit 5d2fb0e6f121de7aae17a250d5394b676b55026f
Author: Niels De Graef <nielsdegraef gmail com>
Date: Mon Aug 16 07:51:41 2021 +0200
pgp-key-properties: Rework the UI
Stop using a `GtkNotebook` and put everything in a vertical fashion in
the same dialog. By using the new `SeahorsePgpUidListBox` and
`SeahorsePgpSubkeyListBox`, extra information can still be shown by
pressing the appropirate buttons (so that they don't pollute the UI by
default).
pgp/seahorse-pgp-key-properties.c | 1078 ++++++----------------------
pgp/seahorse-pgp-private-key-properties.ui | 792 +++++---------------
pgp/seahorse-pgp-public-key-properties.ui | 954 +++++++-----------------
pgp/seahorse-pgp-uid-list-box.c | 8 +
4 files changed, 657 insertions(+), 2175 deletions(-)
---
diff --git a/pgp/seahorse-pgp-key-properties.c b/pgp/seahorse-pgp-key-properties.c
index 42b770e7..e263e2bc 100644
--- a/pgp/seahorse-pgp-key-properties.c
+++ b/pgp/seahorse-pgp-key-properties.c
@@ -38,6 +38,7 @@
#include "seahorse-pgp-dialogs.h"
#include "seahorse-pgp-key.h"
#include "seahorse-pgp-uid.h"
+#include "seahorse-pgp-uid-list-box.h"
#include "seahorse-pgp-signature.h"
#include "seahorse-pgp-subkey.h"
#include "seahorse-pgp-subkey-list-box.h"
@@ -51,7 +52,6 @@
#include <glib/gi18n.h>
#include <string.h>
-#include <time.h>
#define PUBLIC_KEY_PROPERTIES_UI "/org/gnome/Seahorse/seahorse-pgp-public-key-properties.ui"
#define PRIVATE_KEY_PROPERTIES_UI "/org/gnome/Seahorse/seahorse-pgp-private-key-properties.ui"
@@ -71,56 +71,44 @@ struct _SeahorsePgpKeyProperties {
/* Common widgets */
GtkWidget *revoked_area;
GtkWidget *expired_area;
- GtkLabel *expired_message;
+ GtkWidget *expired_message;
GtkImage *photoid;
GtkEventBox *photo_event_box;
- GtkLabel *owner_name_label;
- GtkLabel *owner_email_label;
- GtkLabel *owner_comment_label;
- GtkLabel *owner_keyid_label;
- GtkWidget *owner_photo_previous_button;
- GtkWidget *owner_photo_next_button;
- GtkLabel *details_id_label;
- GtkLabel *details_fingerprint_label;
- GtkLabel *details_algo_label;
- GtkLabel *details_created_label;
- GtkLabel *details_strength_label;
- GtkLabel *details_expires_label;
- GtkComboBox *details_trust_combobox;
+ GtkWidget *name_label;
+ GtkWidget *email_label;
+ GtkWidget *comment_label;
+ GtkWidget *keyid_label;
+ GtkWidget *fingerprint_label;
+ GtkWidget *expires_label;
+ GtkWidget *photo_previous_button;
+ GtkWidget *photo_next_button;
+ GtkWidget *ownertrust_combobox;
+ GtkWidget *uids_container;
GtkWidget *subkeys_container;
/* Private key widgets */
- GtkTreeView *names_tree;
+ GMenuModel *actions_menu;
GtkWidget *owner_photo_frame;
GtkWidget *owner_photo_add_button;
GtkWidget *owner_photo_delete_button;
GtkWidget *owner_photo_primary_button;
/* Public key widgets */
- GtkBox *indicate_trust_box;
- GtkTreeView *owner_userid_tree;
- GtkTreeView *signatures_tree;
- GtkWidget *signatures_area;
- GtkWidget *uids_area;
+ GtkWidget *indicate_trust_row;
GtkWidget *trust_page;
- GtkLabel *trust_sign_label;
- GtkLabel *trust_revoke_label;
- GtkWidget *manual_trust_area;
- GtkWidget *sign_area;
- GtkWidget *revoke_area;
- GtkLabel *trust_marginal_label;
- GtkSwitch *trust_marginal_switch;
- GtkToggleButton *signatures_toggle;
+ GtkWidget *trust_sign_row;
+ GtkWidget *trust_revoke_row;
+ GtkWidget *trust_marginal_switch;
};
G_DEFINE_TYPE (SeahorsePgpKeyProperties, seahorse_pgp_key_properties, GTK_TYPE_DIALOG)
static void
set_action_enabled (SeahorsePgpKeyProperties *self,
- const gchar *action_str,
- gboolean enabled)
+ const char *action_str,
+ gboolean enabled)
{
GAction *action;
@@ -129,107 +117,8 @@ set_action_enabled (SeahorsePgpKeyProperties *self,
g_simple_action_set_enabled (G_SIMPLE_ACTION (action), enabled);
}
-static gpointer
-get_selected_object (GtkTreeView *widget, guint column)
-{
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- GtkTreeModel *model;
- GList *rows;
- gpointer object = NULL;
-
- model = gtk_tree_view_get_model (widget);
-
- selection = gtk_tree_view_get_selection (widget);
- g_assert (gtk_tree_selection_get_mode (selection) == GTK_SELECTION_SINGLE);
-
- rows = gtk_tree_selection_get_selected_rows (selection, NULL);
-
- if (g_list_length (rows) > 0) {
- gtk_tree_model_get_iter (model, &iter, rows->data);
- gtk_tree_model_get (model, &iter, column, &object, -1);
- if (object)
- g_object_unref (object);
- }
-
- g_list_foreach (rows, (GFunc)gtk_tree_path_free, NULL);
- g_list_free (rows);
-
- return object;
-}
-
-static void
-on_pgp_signature_row_activated (GtkTreeView *treeview,
- GtkTreePath *path,
- GtkTreeViewColumn *arg2,
- gpointer user_data)
-{
- SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
- GObject *object = NULL;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- model = gtk_tree_view_get_model (treeview);
-
- if (GTK_IS_TREE_MODEL_FILTER (model))
- model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (model));
-
- g_return_if_fail (gtk_tree_model_get_iter (model, &iter, path));
-
- object = seahorse_object_model_get_row_key (SEAHORSE_OBJECT_MODEL (model), &iter);
- if (object != NULL && SEAHORSE_PGP_IS_KEY (object)) {
- GtkWindow *parent;
- g_autoptr(GtkWindow) dialog = NULL;
-
- parent = GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (self)));
- dialog = seahorse_pgp_key_properties_new (SEAHORSE_PGP_KEY (object),
- parent);
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (GTK_WIDGET (dialog));
- }
-}
-
-static void
-unique_strings (GPtrArray *keyids)
-{
- guint i;
-
- g_ptr_array_sort (keyids, (GCompareFunc)g_ascii_strcasecmp);
- for (i = 0; i + 1 < keyids->len; ) {
- if (g_ascii_strcasecmp (keyids->pdata[i], keyids->pdata[i + 1]) == 0)
- g_ptr_array_remove_index (keyids, i);
- else
- i++;
- }
-}
-
-/* -----------------------------------------------------------------------------
- * NAMES PAGE (PRIVATE KEYS)
- */
-
-enum {
- UIDSIG_OBJECT,
- UIDSIG_ICON,
- UIDSIG_NAME,
- UIDSIG_KEYID,
- UIDSIG_N_COLUMNS
-};
-
-static GType uidsig_columns[] = {
- G_TYPE_OBJECT, /* index */
- 0 /* later */, /* icon */
- G_TYPE_STRING, /* name */
- G_TYPE_STRING /* keyid */
-};
-
-static SeahorsePgpUid*
-names_get_selected_uid (SeahorsePgpKeyProperties *self)
-{
- return get_selected_object (self->names_tree, UIDSIG_OBJECT);
-}
-
static void
-on_uids_add (GSimpleAction *action, GVariant *param, gpointer user_data)
+on_uids_add (GSimpleAction *action, GVariant *param, void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
g_return_if_fail (SEAHORSE_GPGME_IS_KEY (self->key));
@@ -237,258 +126,6 @@ on_uids_add (GSimpleAction *action, GVariant *param, gpointer user_data)
GTK_WINDOW (self));
}
-static void
-on_uids_make_primary_cb (GObject *source, GAsyncResult *res, gpointer user_data)
-{
- SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
- SeahorseGpgmeUid *uid = SEAHORSE_GPGME_UID (source);
- g_autoptr(GError) error = NULL;
-
- if (!seahorse_gpgme_key_op_make_primary_finish (uid, res, &error)) {
- GtkWindow *window;
- window = gtk_window_get_transient_for (GTK_WINDOW (self));
- seahorse_util_show_error (GTK_WIDGET (window),
- _("Couldn’t change primary user ID"),
- error->message);
- }
-}
-
-static void
-on_uids_make_primary (GSimpleAction *action, GVariant *param, gpointer user_data)
-{
- SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
- SeahorsePgpUid *uid;
-
- uid = names_get_selected_uid (self);
- if (!uid)
- return;
-
- g_return_if_fail (SEAHORSE_GPGME_IS_UID (uid));
- seahorse_gpgme_key_op_make_primary_async (SEAHORSE_GPGME_UID (uid),
- NULL,
- on_uids_make_primary_cb, self);
-}
-
-static void
-on_uids_delete (GSimpleAction *action, GVariant *param, gpointer user_data)
-{
- SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
- SeahorsePgpUid *uid;
- gboolean ret;
- g_autofree gchar *message = NULL;
- gpgme_error_t gerr;
-
- uid = names_get_selected_uid (self);
- if (uid == NULL)
- return;
-
- g_return_if_fail (SEAHORSE_GPGME_IS_UID (uid));
- message = g_strdup_printf (_("Are you sure you want to permanently delete the “%s” user ID?"),
- seahorse_object_get_label (SEAHORSE_OBJECT (uid)));
- ret = seahorse_delete_dialog_prompt (GTK_WINDOW (self), message);
-
- if (ret == FALSE)
- return;
-
- gerr = seahorse_gpgme_key_op_del_uid (SEAHORSE_GPGME_UID (uid));
- if (!GPG_IS_OK (gerr))
- seahorse_gpgme_handle_error (gerr, _("Couldn’t delete user ID"));
-}
-
-static void
-on_uids_sign (GSimpleAction *action, GVariant *param, gpointer user_data)
-{
- SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
- SeahorsePgpUid *uid;
- SeahorseGpgmeSignDialog *dialog;
-
- uid = names_get_selected_uid (self);
- if (uid == NULL)
- return;
-
- g_return_if_fail (SEAHORSE_GPGME_IS_UID (uid));
-
- dialog = seahorse_gpgme_sign_dialog_new (SEAHORSE_OBJECT (uid));
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-static void
-on_uids_revoke (GSimpleAction *action, GVariant *param, gpointer user_data)
-{
- /* TODO: */
-/* SeahorseObject *skey;
- int index;
- Glist *keys = NULL;
-
- skey = self->key;
- index = names_get_selected_uid (swidget);
-
- if (index >= 1) {
- seahorse_revoke_show (SEAHORSE_PGP_KEY (skey), index - 1);
-
-#ifdef WITH_KEYSERVER
- if (g_settings_get_boolean(AUTOSYNC_KEY) == TRUE) {
- keys = g_list_append (keys, skey);
- seahorse_keyserver_sync (keys);
- g_list_free(keys);
- }
-#endif
- }*/
-}
-
-static void
-update_names (GtkTreeSelection *selection, SeahorsePgpKeyProperties *self)
-{
- SeahorsePgpUid *uid = names_get_selected_uid (self);
- int index = -1;
-
- if (uid && SEAHORSE_GPGME_IS_UID (uid))
- index = seahorse_gpgme_uid_get_gpgme_index (SEAHORSE_GPGME_UID (uid));
-
- set_action_enabled (self, "uids.make-primary", index > 0);
- set_action_enabled (self, "uids.sign", index >= 0);
- set_action_enabled (self, "uids.delete", index >= 0);
-}
-
-/* Is called whenever a signature key changes, to update row */
-static void
-names_update_row (SeahorseObjectModel *skmodel, SeahorseObject *object,
- GtkTreeIter *iter, SeahorsePgpKeyProperties *self)
-{
- g_autoptr(GIcon) icon = NULL;
- const gchar *name, *id;
-
- icon = g_themed_icon_new (SEAHORSE_PGP_IS_KEY (object) ?
- SEAHORSE_ICON_SIGN : "dialog-question");
- name = seahorse_object_get_markup (object);
- id = seahorse_object_get_identifier (object);
-
- gtk_tree_store_set (GTK_TREE_STORE (skmodel), iter,
- UIDSIG_OBJECT, NULL,
- UIDSIG_ICON, icon,
- /* TRANSLATORS: [Unknown] signature name */
- UIDSIG_NAME, name ? name : _("[Unknown]"),
- UIDSIG_KEYID, id, -1);
-}
-
-static void
-names_populate (SeahorsePgpKeyProperties *self, GtkTreeStore *store, SeahorsePgpKey *pkey)
-{
- GObject *object;
- GtkTreeIter uiditer, sigiter;
- GList *keys, *l;
- GListModel *uids;
-
- /* Insert all the fun-ness */
- uids = seahorse_pgp_key_get_uids (pkey);
-
- for (guint i = 0; i < g_list_model_get_n_items (uids); i++) {
- g_autoptr(SeahorsePgpUid) uid = NULL;
- g_autoptr(GIcon) icon = NULL;
- g_autoptr(GPtrArray) keyids = NULL;
- g_autoptr(GCancellable) cancellable = NULL;
- GListModel *sigs;
-
- uid = g_list_model_get_item (uids, i);
- icon = g_themed_icon_new ("avatar-default-symbolic");
- gtk_tree_store_append (store, &uiditer, NULL);
- gtk_tree_store_set (store, &uiditer,
- UIDSIG_OBJECT, uid,
- UIDSIG_ICON, icon,
- UIDSIG_NAME, seahorse_object_get_markup (SEAHORSE_OBJECT (uid)),
- -1);
-
- keyids = g_ptr_array_new ();
-
- /* Build a list of all the keyids */
- sigs = seahorse_pgp_uid_get_signatures (uid);
- for (guint j = 0; j < g_list_model_get_n_items (sigs); j++) {
- g_autoptr(SeahorsePgpSignature) sig = g_list_model_get_item (sigs, j);
-
- /* Never show self signatures, they're implied */
- if (seahorse_pgp_key_has_keyid (pkey, seahorse_pgp_signature_get_keyid (sig)))
- continue;
- g_ptr_array_add (keyids, (void *) seahorse_pgp_signature_get_keyid (sig));
- }
-
- g_ptr_array_add (keyids, NULL);
-
- /*
- * Pass it to 'DiscoverKeys' for resolution/download, cancellable
- * ties search scope together
- */
- cancellable = g_cancellable_new ();
- keys = seahorse_pgp_backend_discover_keys (NULL, (const gchar **)keyids->pdata, cancellable);
-
- /* Add the keys to the store */
- for (l = keys; l; l = g_list_next (l)) {
- object = G_OBJECT (l->data);
- gtk_tree_store_append (store, &sigiter, &uiditer);
-
- /* This calls the 'update-row' callback, to set the values for the key */
- seahorse_object_model_set_row_object (SEAHORSE_OBJECT_MODEL (store), &sigiter, object);
- }
- }
-}
-
-static void
-do_names (SeahorsePgpKeyProperties *self)
-{
- GtkTreeStore *store;
- GtkCellRenderer *renderer;
-
- if (seahorse_object_get_usage (SEAHORSE_OBJECT (self->key)) != SEAHORSE_USAGE_PRIVATE_KEY)
- return;
-
- /* Clear/create table store */
- g_return_if_fail (self->names_tree != NULL);
-
- store = GTK_TREE_STORE (gtk_tree_view_get_model (self->names_tree));
- if (store) {
- gtk_tree_store_clear (store);
-
- } else {
- g_assert (UIDSIG_N_COLUMNS == G_N_ELEMENTS (uidsig_columns));
- uidsig_columns[UIDSIG_ICON] = G_TYPE_ICON;
-
- /* This is our first time so create a store */
- store = GTK_TREE_STORE (seahorse_object_model_new (UIDSIG_N_COLUMNS, uidsig_columns));
- g_signal_connect (store, "update-row", G_CALLBACK (names_update_row), self);
-
- /* Icon column */
- renderer = gtk_cell_renderer_pixbuf_new ();
- gtk_tree_view_insert_column_with_attributes (self->names_tree,
- -1, "", renderer,
- "gicon", UIDSIG_ICON, NULL);
-
- renderer = gtk_cell_renderer_text_new ();
- g_object_set (renderer, "yalign", 0.0, "xalign", 0.0, NULL);
- gtk_tree_view_insert_column_with_attributes (self->names_tree,
- /* TRANSLATORS: The name and email set on the PGP key */
- -1, _("Name/Email"), renderer,
- "markup", UIDSIG_NAME, NULL);
-
- /* The signature ID column */
- renderer = gtk_cell_renderer_text_new ();
- g_object_set (renderer, "yalign", 0.0, "xalign", 0.0, NULL);
- gtk_tree_view_insert_column_with_attributes (self->names_tree,
- -1, _("Signature ID"), renderer,
- "text", UIDSIG_KEYID, NULL);
- }
-
- names_populate (self, store, self->key);
-
- gtk_tree_view_set_model (self->names_tree, GTK_TREE_MODEL(store));
- gtk_tree_view_expand_all (self->names_tree);
-
- update_names (NULL, self);
-}
-
-/* -----------------------------------------------------------------------------
- * PHOTO ID AREA
- */
-
/* drag-n-drop uri data */
enum {
TARGET_URI,
@@ -498,14 +135,14 @@ static GtkTargetEntry target_list[] = {
{ "text/uri-list", 0, TARGET_URI } };
static void
-on_pgp_owner_photo_drag_received (GtkWidget *widget,
- GdkDragContext *context,
- int x,
- int y,
+on_pgp_owner_photo_drag_received (GtkWidget *widget,
+ GdkDragContext *context,
+ int x,
+ int y,
GtkSelectionData *sel_data,
- guint target_type,
- guint time,
- gpointer user_data)
+ unsigned int target_type,
+ unsigned int time,
+ void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
gboolean dnd_success = FALSE;
@@ -543,7 +180,7 @@ on_pgp_owner_photo_drag_received (GtkWidget *widget,
}
static void
-on_photos_add (GSimpleAction *action, GVariant *param, gpointer user_data)
+on_photos_add (GSimpleAction *action, GVariant *param, void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
@@ -555,7 +192,7 @@ on_photos_add (GSimpleAction *action, GVariant *param, gpointer user_data)
}
static void
-on_photos_delete (GSimpleAction *action, GVariant *param, gpointer user_data)
+on_photos_delete (GSimpleAction *action, GVariant *param, void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
SeahorseGpgmePhoto *photo;
@@ -568,7 +205,7 @@ on_photos_delete (GSimpleAction *action, GVariant *param, gpointer user_data)
}
static void
-on_photos_make_primary (GSimpleAction *action, GVariant *param, gpointer user_data)
+on_photos_make_primary (GSimpleAction *action, GVariant *param, void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
gpgme_error_t gerr;
@@ -590,7 +227,7 @@ set_photoid_state (SeahorsePgpKeyProperties *self)
gboolean is_gpgme;
GdkPixbuf *pixbuf;
GListModel *photos;
- guint n_photos;
+ unsigned int n_photos;
g_autoptr(SeahorsePgpPhoto) first_photo = NULL;
g_autoptr(SeahorsePgpPhoto) last_photo = NULL;
@@ -611,8 +248,8 @@ set_photoid_state (SeahorsePgpKeyProperties *self)
}
/* Display both of these when there is more than one photo id */
- gtk_widget_set_visible (self->owner_photo_previous_button, n_photos > 1);
- gtk_widget_set_visible (self->owner_photo_next_button, n_photos > 1);
+ gtk_widget_set_visible (self->photo_previous_button, n_photos > 1);
+ gtk_widget_set_visible (self->photo_next_button, n_photos > 1);
/* Change sensitivity if first/last photo id */
first_photo = g_list_model_get_item (photos, 0);
@@ -644,10 +281,10 @@ do_photo_id (SeahorsePgpKeyProperties *self)
set_photoid_state (self);
}
-static guint
+static unsigned int
find_photo_index (GListModel *photos, SeahorsePgpPhoto *photo)
{
- for (guint i = 0; i < g_list_model_get_n_items (photos); i++) {
+ for (unsigned int i = 0; i < g_list_model_get_n_items (photos); i++) {
g_autoptr(SeahorsePgpPhoto) foto = g_list_model_get_item (photos, i);
if (photo == foto)
@@ -658,7 +295,7 @@ find_photo_index (GListModel *photos, SeahorsePgpPhoto *photo)
}
static void
-on_photos_next (GSimpleAction *action, GVariant *param, gpointer user_data)
+on_photos_next (GSimpleAction *action, GVariant *param, void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
SeahorsePgpPhoto *photo;
@@ -667,7 +304,7 @@ on_photos_next (GSimpleAction *action, GVariant *param, gpointer user_data)
photos = seahorse_pgp_key_get_photos (self->key);
photo = g_object_get_data (G_OBJECT (self), "current-photoid");
if (photo) {
- guint index;
+ unsigned int index;
g_autoptr(SeahorsePgpPhoto) next = NULL;
index = find_photo_index (photos, photo);
@@ -682,7 +319,7 @@ on_photos_next (GSimpleAction *action, GVariant *param, gpointer user_data)
}
static void
-on_photos_previous (GSimpleAction *action, GVariant *param, gpointer user_data)
+on_photos_previous (GSimpleAction *action, GVariant *param, void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
SeahorsePgpPhoto *photo;
@@ -691,7 +328,7 @@ on_photos_previous (GSimpleAction *action, GVariant *param, gpointer user_data)
photos = seahorse_pgp_key_get_photos (self->key);
photo = g_object_get_data (G_OBJECT (self), "current-photoid");
if (photo) {
- guint index;
+ unsigned int index;
index = find_photo_index (photos, photo);
if (index > 0) {
@@ -709,11 +346,11 @@ on_photos_previous (GSimpleAction *action, GVariant *param, gpointer user_data)
static void
on_pgp_owner_photoid_button (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data)
+ GdkEvent *event,
+ void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
- const gchar *action_str;
+ const char *action_str;
if (event->type != GDK_SCROLL)
return;
@@ -733,30 +370,10 @@ on_pgp_owner_photoid_button (GtkWidget *widget,
action_str, NULL);
}
-/* -----------------------------------------------------------------------------
- * OWNER PAGE
- */
-
-/* owner uid list */
-enum {
- UID_OBJECT,
- UID_ICON,
- UID_MARKUP,
- UID_N_COLUMNS
-};
-
-static GType uid_columns[] = {
- G_TYPE_OBJECT, /* object */
- 0 /* later */, /* icon */
- G_TYPE_STRING, /* name */
- G_TYPE_STRING, /* email */
- G_TYPE_STRING /* comment */
-};
-
static void
-on_gpgme_key_change_pass_done (GObject *source,
+on_gpgme_key_change_pass_done (GObject *source,
GAsyncResult *res,
- gpointer user_data)
+ void *user_data)
{
g_autoptr(SeahorsePgpKeyProperties) self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
SeahorseGpgmeKey *pkey = SEAHORSE_GPGME_KEY (source);
@@ -772,7 +389,7 @@ on_gpgme_key_change_pass_done (GObject *source,
}
static void
-on_change_password (GSimpleAction *action, GVariant *param, gpointer user_data)
+on_change_password (GSimpleAction *action, GVariant *param, void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
SeahorseUsage usage;
@@ -787,16 +404,51 @@ on_change_password (GSimpleAction *action, GVariant *param, gpointer user_data)
g_object_ref (self));
}
+static void
+setup_titlebar (SeahorsePgpKeyProperties *self)
+{
+ const char *name;
+ GtkWidget *headerbar;
+ GtkWidget *menu_icon;
+ GtkWidget *menu_button;
+ g_autofree char *title = NULL;
+
+ name = seahorse_pgp_key_get_primary_name (self->key);
+
+ headerbar = gtk_header_bar_new ();
+ gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (headerbar), TRUE);
+ gtk_widget_show (headerbar);
+
+ menu_button = gtk_menu_button_new ();
+ menu_icon = gtk_image_new_from_icon_name ("open-menu-symbolic", GTK_ICON_SIZE_BUTTON);
+ gtk_button_set_image (GTK_BUTTON (menu_button), menu_icon);
+ gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (menu_button), self->actions_menu);
+
+ gtk_header_bar_pack_start (GTK_HEADER_BAR (headerbar), menu_button);
+
+ if (seahorse_pgp_key_is_private_key (self->key)) {
+ /* Translators: the 1st part of the title is the owner's name */
+ title = g_strdup_printf (_("%s — Private key"), name);
+ gtk_widget_show (menu_button);
+ } else {
+ /* Translators: the 1st part of the title is the owner's name */
+ title = g_strdup_printf (_("%s — Public key"), name);
+ gtk_widget_hide (menu_button);
+ }
+ gtk_header_bar_set_title (GTK_HEADER_BAR (headerbar), title);
+
+ gtk_window_set_titlebar (GTK_WINDOW (self), headerbar);
+}
+
static void
do_owner (SeahorsePgpKeyProperties *self)
{
- GtkCellRenderer *renderer;
- GtkListStore *store;
- GtkTreeIter iter;
- guint flags;
+ unsigned int flags;
const char *label;
GListModel *uids;
g_autoptr(SeahorsePgpUid) primary_uid = NULL;
+ GDateTime *expires;
+ g_autofree char *expires_str = NULL;
flags = seahorse_object_get_flags (SEAHORSE_OBJECT (self->key));
@@ -818,8 +470,8 @@ do_owner (SeahorsePgpKeyProperties *self)
date_str = g_date_time_format (expires_date, "%x");
}
- message = g_strdup_printf (_("This key expired on: %s"), date_str);
- gtk_label_set_text (self->expired_message, message);
+ message = g_strdup_printf (_("This key expired on %s"), date_str);
+ gtk_label_set_text (GTK_LABEL (self->expired_message), message);
}
/* Hide trust page when above */
@@ -829,115 +481,52 @@ do_owner (SeahorsePgpKeyProperties *self)
(flags & SEAHORSE_FLAG_DISABLED)));
}
- /* Hide or show the uids area */
uids = seahorse_pgp_key_get_uids (self->key);
primary_uid = g_list_model_get_item (uids, 0);
- if (self->uids_area != NULL)
- gtk_widget_set_visible (self->uids_area, primary_uid != NULL);
if (primary_uid != NULL) {
- g_autofree gchar *title = NULL;
- g_autofree gchar *email_escaped = NULL;
- g_autofree gchar *email_label = NULL;
+ g_autofree char *title = NULL;
+ g_autofree char *email_escaped = NULL;
+ g_autofree char *email_label = NULL;
label = seahorse_pgp_uid_get_name (primary_uid);
- gtk_label_set_text (self->owner_name_label, label);
-
- if (seahorse_object_get_usage (SEAHORSE_OBJECT (self->key)) != SEAHORSE_USAGE_PRIVATE_KEY) {
- /* Translators: the 1st part of the title is the owner's name */
- title = g_strdup_printf (_("%s — Public key"), label);
- } else {
- /* Translators: the 1st part of the title is the owner's name */
- title = g_strdup_printf (_("%s — Private key"), label);
- }
- gtk_window_set_title (GTK_WINDOW (self), title);
+ gtk_label_set_text (GTK_LABEL (self->name_label), label);
label = seahorse_pgp_uid_get_email (primary_uid);
if (label && *label) {
email_escaped = g_markup_escape_text (label, -1);
email_label = g_strdup_printf ("<a href=\"mailto:%s\">%s</a>", label, email_escaped);
- gtk_label_set_markup (self->owner_email_label, email_label);
+ gtk_label_set_markup (GTK_LABEL (self->email_label), email_label);
+ gtk_widget_show (self->email_label);
+ } else {
+ gtk_widget_hide (self->email_label);
}
label = seahorse_pgp_uid_get_comment (primary_uid);
- gtk_label_set_text (self->owner_comment_label, label);
+ if (label && *label) {
+ gtk_label_set_markup (GTK_LABEL (self->comment_label), label);
+ gtk_widget_show (self->comment_label);
+ } else {
+ gtk_widget_hide (self->comment_label);
+ }
label = seahorse_object_get_identifier (SEAHORSE_OBJECT (self->key));
- gtk_label_set_text (self->owner_keyid_label, label);
+ gtk_label_set_text (GTK_LABEL (self->keyid_label), label);
}
- /* Clear/create table store */
- if (self->owner_userid_tree) {
- store = GTK_LIST_STORE (gtk_tree_view_get_model (self->owner_userid_tree));
-
- if (store) {
- gtk_list_store_clear (GTK_LIST_STORE (store));
-
- } else {
- g_assert (UID_N_COLUMNS != G_N_ELEMENTS (uid_columns));
- uid_columns[1] = G_TYPE_ICON;
-
- /* This is our first time so create a store */
- store = gtk_list_store_newv (UID_N_COLUMNS, (GType*)uid_columns);
-
- /* Make the columns for the view */
- renderer = gtk_cell_renderer_pixbuf_new ();
- gtk_tree_view_insert_column_with_attributes (self->owner_userid_tree,
- -1, "", renderer,
- "gicon", UID_ICON, NULL);
+ gtk_label_set_text (GTK_LABEL (self->fingerprint_label),
+ seahorse_pgp_key_get_fingerprint (self->key));
- gtk_tree_view_insert_column_with_attributes (self->owner_userid_tree,
- -1, _("Name"), gtk_cell_renderer_text_new (),
- "markup", UID_MARKUP, NULL);
- }
-
- for (guint i = 0; i < g_list_model_get_n_items (uids); i++) {
- g_autoptr(SeahorsePgpUid) uid = g_list_model_get_item (uids, i);
- const char *markup;
- g_autoptr(GIcon) icon = NULL;
-
- markup = seahorse_object_get_markup (SEAHORSE_OBJECT (uid));
- icon = g_themed_icon_new ("avatar-default-symbolic");
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- UID_OBJECT, uid,
- UID_ICON, icon,
- UID_MARKUP, markup, -1);
- }
-
- gtk_tree_view_set_model (self->owner_userid_tree, GTK_TREE_MODEL (store));
- }
+ expires = seahorse_pgp_key_get_expires (self->key);
+ if (expires)
+ expires_str = g_date_time_format (expires, "%x");
+ else
+ expires_str = g_strdup (C_("Expires", "Never"));
+ gtk_label_set_text (GTK_LABEL (self->expires_label), expires_str);
+ setup_titlebar (self);
do_photo_id (self);
}
-/* -----------------------------------------------------------------------------
- * DETAILS PAGE
- */
-
-/* details subkey list */
-enum {
- SUBKEY_OBJECT,
- SUBKEY_ID,
- SUBKEY_TYPE,
- SUBKEY_USAGE,
- SUBKEY_CREATED,
- SUBKEY_EXPIRES,
- SUBKEY_STATUS,
- SUBKEY_LENGTH,
- SUBKEY_N_COLUMNS
-};
-
-const GType subkey_columns[] = {
- G_TYPE_OBJECT, /* SUBKEY_OBJECT */
- G_TYPE_STRING, /* SUBKEY_ID */
- G_TYPE_STRING, /* SUBKEY_TYPE */
- G_TYPE_STRING, /* SUBKEY_USAGE */
- G_TYPE_STRING, /* SUBKEY_CREATED */
- G_TYPE_STRING, /* SUBKEY_EXPIRES */
- G_TYPE_STRING, /* SUBKEY_STATUS */
- G_TYPE_UINT /* SUBKEY_LENGTH */
-};
-
/* trust combo box list */
enum {
TRUST_LABEL,
@@ -951,7 +540,7 @@ const GType trust_columns[] = {
};
static void
-on_add_subkey_completed (GObject *object, GAsyncResult *res, gpointer user_data)
+on_add_subkey_completed (GObject *object, GAsyncResult *res, void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
g_autoptr(GError) error = NULL;
@@ -963,13 +552,13 @@ on_add_subkey_completed (GObject *object, GAsyncResult *res, gpointer user_data)
}
static void
-on_subkeys_add (GSimpleAction *action, GVariant *param, gpointer user_data)
+on_subkeys_add (GSimpleAction *action, GVariant *param, void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
SeahorseGpgmeAddSubkey *dialog;
int response;
SeahorseKeyEncType type;
- guint length;
+ unsigned int length;
GDateTime *expires;
g_return_if_fail (SEAHORSE_GPGME_IS_KEY (self->key));
@@ -994,7 +583,7 @@ on_subkeys_add (GSimpleAction *action, GVariant *param, gpointer user_data)
}
static void
-on_pgp_details_trust_changed (GtkComboBox *selection, gpointer user_data)
+on_pgp_details_trust_changed (GtkComboBox *selection, void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
int trust;
@@ -1020,7 +609,7 @@ on_pgp_details_trust_changed (GtkComboBox *selection, gpointer user_data)
}
static void
-on_export_complete (GObject *source, GAsyncResult *result, gpointer user_data)
+on_export_complete (GObject *source, GAsyncResult *result, void *user_data)
{
g_autoptr(GtkWindow) parent = GTK_WINDOW (user_data);
GError *error = NULL;
@@ -1035,7 +624,7 @@ export_key_to_file (SeahorsePgpKeyProperties *self, gboolean secret)
{
GList *exporters = NULL;
GtkWindow *window;
- g_autofree gchar *directory = NULL;
+ g_autofree char *directory = NULL;
g_autoptr(GFile) file = NULL;
SeahorseExporter *exporter = NULL;
@@ -1053,7 +642,7 @@ export_key_to_file (SeahorsePgpKeyProperties *self, gboolean secret)
}
static void
-on_export_secret (GSimpleAction *action, GVariant *param, gpointer user_data)
+on_export_secret (GSimpleAction *action, GVariant *param, void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
@@ -1061,7 +650,7 @@ on_export_secret (GSimpleAction *action, GVariant *param, gpointer user_data)
}
static void
-on_export_public (GSimpleAction *action, GVariant *param, gpointer user_data)
+on_export_public (GSimpleAction *action, GVariant *param, void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
@@ -1069,7 +658,7 @@ on_export_public (GSimpleAction *action, GVariant *param, gpointer user_data)
}
static void
-on_change_expires (GSimpleAction *action, GVariant *param, gpointer user_data)
+on_change_expires (GSimpleAction *action, GVariant *param, void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
GListModel *subkeys;
@@ -1096,10 +685,10 @@ setup_trust_combobox (SeahorsePgpKeyProperties *self)
etype = seahorse_object_get_usage (SEAHORSE_OBJECT (self->key));
- gtk_cell_layout_clear (GTK_CELL_LAYOUT (self->details_trust_combobox));
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (self->details_trust_combobox),
+ gtk_cell_layout_clear (GTK_CELL_LAYOUT (self->ownertrust_combobox));
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (self->ownertrust_combobox),
text_cell, FALSE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (self->details_trust_combobox),
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (self->ownertrust_combobox),
text_cell,
"text", TRUST_LABEL,
NULL);
@@ -1135,69 +724,26 @@ setup_trust_combobox (SeahorsePgpKeyProperties *self)
-1);
}
- gtk_combo_box_set_model (self->details_trust_combobox, GTK_TREE_MODEL (model));
+ gtk_combo_box_set_model (GTK_COMBO_BOX (self->ownertrust_combobox),
+ GTK_TREE_MODEL (model));
}
static void
do_details (SeahorsePgpKeyProperties *self)
{
- GtkTreeModel *model;
- GtkTreeIter iter;
- char dbuffer[G_ASCII_DTOSTR_BUF_SIZE];
- g_autofree char *fp_label = NULL;
- GDateTime *created;
- const char *label;
int trust;
- GListModel *subkeys;
gboolean valid;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
- subkeys = seahorse_pgp_key_get_subkeys (self->key);
- g_return_if_fail (g_list_model_get_n_items (subkeys) > 0);
-
- label = seahorse_object_get_identifier (SEAHORSE_OBJECT (self->key));
- gtk_label_set_text (self->details_id_label, label);
-
- fp_label = g_strdup (seahorse_pgp_key_get_fingerprint (self->key));
- if (strlen (fp_label) > 24 && g_ascii_isspace (fp_label[24]))
- fp_label[24] = '\n';
- gtk_label_set_text (self->details_fingerprint_label, fp_label);
-
- label = seahorse_pgp_key_get_algo (self->key);
- gtk_label_set_text (self->details_algo_label, label);
-
- created = seahorse_pgp_key_get_created (self->key);
- if (created) {
- g_autofree char *created_str = NULL;
-
- created_str = g_date_time_format (created, "%x");
- gtk_label_set_text (self->details_created_label, created_str);
- }
-
- g_ascii_dtostr (dbuffer, G_ASCII_DTOSTR_BUF_SIZE, seahorse_pgp_key_get_length (self->key));
- gtk_label_set_text (self->details_strength_label, dbuffer);
-
- if (SEAHORSE_GPGME_IS_KEY (self->key)) {
- GDateTime *expires;
- g_autofree char *expires_str = NULL;
-
- expires = seahorse_pgp_key_get_expires (self->key);
- if (expires)
- expires_str = g_date_time_format (expires, "%x");
- else
- expires_str = g_strdup (C_("Expires", "Never"));
- gtk_label_set_text (self->details_expires_label, expires_str);
- } else {
- gtk_label_set_text (self->details_expires_label, NULL);
- }
-
- if (seahorse_object_get_usage (SEAHORSE_OBJECT (self->key)) == SEAHORSE_USAGE_PUBLIC_KEY) {
- gtk_widget_set_visible (GTK_WIDGET (self->indicate_trust_box),
+ if (!seahorse_pgp_key_is_private_key (self->key)) {
+ gtk_widget_set_visible (self->indicate_trust_row,
SEAHORSE_GPGME_IS_KEY (self->key));
}
- gtk_widget_set_sensitive (GTK_WIDGET (self->details_trust_combobox),
+ gtk_widget_set_sensitive (GTK_WIDGET (self->ownertrust_combobox),
!(seahorse_object_get_flags (SEAHORSE_OBJECT (self->key)) &
SEAHORSE_FLAG_DISABLED));
- model = gtk_combo_box_get_model (self->details_trust_combobox);
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (self->ownertrust_combobox));
valid = gtk_tree_model_get_iter_first (model, &iter);
while (valid) {
gtk_tree_model_get (model, &iter,
@@ -1205,9 +751,9 @@ do_details (SeahorsePgpKeyProperties *self)
-1);
if (trust == seahorse_pgp_key_get_trust (self->key)) {
- g_signal_handlers_block_by_func (self->details_trust_combobox, on_pgp_details_trust_changed,
self);
- gtk_combo_box_set_active_iter (self->details_trust_combobox, &iter);
- g_signal_handlers_unblock_by_func (self->details_trust_combobox, on_pgp_details_trust_changed,
self);
+ g_signal_handlers_block_by_func (self->ownertrust_combobox, on_pgp_details_trust_changed, self);
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (self->ownertrust_combobox), &iter);
+ g_signal_handlers_unblock_by_func (self->ownertrust_combobox, on_pgp_details_trust_changed,
self);
break;
}
@@ -1215,36 +761,10 @@ do_details (SeahorsePgpKeyProperties *self)
}
}
-/* -----------------------------------------------------------------------------
- * TRUST PAGE (PUBLIC KEYS)
- */
-
-enum {
- SIGN_ICON,
- SIGN_NAME,
- SIGN_KEYID,
- SIGN_TRUSTED,
- SIGN_N_COLUMNS
-};
-
-static GType sign_columns[] = {
- 0 /* later */,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_BOOLEAN
-};
-
-static void
-on_toggle_action (GSimpleAction *action, GVariant *param, gpointer user_data) {
- GVariant *old_state, *new_state;
-
- old_state = g_action_get_state (G_ACTION (action));
- new_state = g_variant_new_boolean (!g_variant_get_boolean (old_state));
- g_action_change_state (G_ACTION (action), new_state);
-}
-
static void
-on_trust_marginal_changed (GSimpleAction *action, GVariant *new_state, gpointer user_data)
+on_trust_marginal_changed (GSimpleAction *action,
+ GVariant *new_state,
+ void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
SeahorseValidity trust;
@@ -1263,107 +783,9 @@ on_trust_marginal_changed (GSimpleAction *action, GVariant *new_state, gpointer
}
}
-/* Is called whenever a signature key changes */
-static void
-trust_update_row (SeahorseObjectModel *skmodel, SeahorseObject *object,
- GtkTreeIter *iter, gpointer user_data)
-{
- gboolean trusted = FALSE;
- g_autoptr(GIcon) icon = NULL;
- const gchar *name, *id;
-
- if (seahorse_object_get_usage (object) == SEAHORSE_USAGE_PRIVATE_KEY)
- trusted = TRUE;
- else if (seahorse_object_get_flags (object) & SEAHORSE_FLAG_TRUSTED)
- trusted = TRUE;
-
- icon = g_themed_icon_new (SEAHORSE_PGP_IS_KEY (object) ?
- SEAHORSE_ICON_SIGN : "dialog-question");
- name = seahorse_object_get_label (object);
- id = seahorse_object_get_identifier (object);
-
- gtk_tree_store_set (GTK_TREE_STORE (skmodel), iter,
- SIGN_ICON, icon,
- /* TRANSLATORS: [Unknown] signature name */
- SIGN_NAME, name ? name : _("[Unknown]"),
- SIGN_KEYID, id,
- SIGN_TRUSTED, trusted,
- -1);
-}
-
-static void
-signatures_populate_model (SeahorsePgpKeyProperties *self, SeahorseObjectModel *skmodel)
-{
- GtkTreeIter iter;
- gboolean have_sigs = FALSE;
- g_autoptr(GPtrArray) rawids = NULL;
- GListModel *uids;
- GList *keys, *l;
-
- if (self->signatures_tree == NULL)
- return;
-
- rawids = g_ptr_array_new ();
- uids = seahorse_pgp_key_get_uids (self->key);
-
- /* Build a list of all the keyids */
- for (guint i = 0; i < g_list_model_get_n_items (uids); i++) {
- g_autoptr(SeahorsePgpUid) uid = g_list_model_get_item (uids, i);
- GListModel *sigs;
-
- sigs = seahorse_pgp_uid_get_signatures (uid);
- for (guint j = 0; j < g_list_model_get_n_items (sigs); j++) {
- g_autoptr(SeahorsePgpSignature) sig = g_list_model_get_item (sigs, j);
-
- /* Never show self signatures, they're implied */
- if (seahorse_pgp_key_has_keyid (self->key,
- seahorse_pgp_signature_get_keyid (sig)))
- continue;
- have_sigs = TRUE;
- g_ptr_array_add (rawids, (char *) seahorse_pgp_signature_get_keyid (sig));
- }
- }
-
- /* Strip out duplicates */
- unique_strings (rawids);
- g_ptr_array_add (rawids, NULL);
-
- /* Only show signatures area when there are signatures */
- gtk_widget_set_visible (self->signatures_area, have_sigs);
-
- if (skmodel) {
- g_autoptr(GCancellable) cancellable = NULL;
-
- /* Pass it to 'DiscoverKeys' for resolution/download. cancellable ties
- * search scope together */
- cancellable = g_cancellable_new ();
- keys = seahorse_pgp_backend_discover_keys (NULL, (const gchar **)rawids->pdata, cancellable);
-
- /* Add the keys to the store */
- for (l = keys; l; l = g_list_next (l)) {
- GObject *object = G_OBJECT (l->data);
-
- gtk_tree_store_append (GTK_TREE_STORE (skmodel), &iter, NULL);
- /* This calls the 'update-row' callback, to set the values for the key */
- seahorse_object_model_set_row_object (SEAHORSE_OBJECT_MODEL (skmodel), &iter, object);
- }
- }
-}
-
-/* Refilter when the user toggles the 'only show trusted' checkbox */
-static void
-on_pgp_trusted_toggled (GtkToggleButton *toggle, GtkTreeModelFilter *filter)
-{
- /* Set flag on the store */
- GtkTreeModel *model = gtk_tree_model_filter_get_model (filter);
- g_object_set_data (G_OBJECT (model), "only-trusted",
- GINT_TO_POINTER (gtk_toggle_button_get_active (toggle)));
- gtk_tree_model_filter_refilter (filter);
-}
-
/* Add a signature */
static void
-on_sign_key (GSimpleAction *action, GVariant *param, gpointer user_data)
+on_sign_key (GSimpleAction *action, GVariant *param, void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
SeahorseGpgmeSignDialog *dialog;
@@ -1376,28 +798,18 @@ on_sign_key (GSimpleAction *action, GVariant *param, gpointer user_data)
gtk_widget_destroy (GTK_WIDGET (dialog));
}
-/* When the 'only display trusted' check is checked, hide untrusted rows */
-static gboolean
-trust_filter (GtkTreeModel *model, GtkTreeIter *iter, gpointer userdata)
-{
- /* Read flag on the store */
- gboolean trusted = FALSE;
- gtk_tree_model_get (model, iter, SIGN_TRUSTED, &trusted, -1);
- return !g_object_get_data (G_OBJECT (model), "only-trusted") || trusted;
-}
-
static gboolean
-key_have_signatures (SeahorsePgpKey *pkey, guint types)
+key_have_signatures (SeahorsePgpKey *pkey, unsigned int types)
{
GListModel *uids;
uids = seahorse_pgp_key_get_uids (pkey);
- for (guint i = 0; i < g_list_model_get_n_items (uids); i++) {
+ for (unsigned int i = 0; i < g_list_model_get_n_items (uids); i++) {
g_autoptr(SeahorsePgpUid) uid = g_list_model_get_item (uids, i);
GListModel *sigs;
sigs = seahorse_pgp_uid_get_signatures (uid);
- for (guint j = 0; j < g_list_model_get_n_items (sigs); j++) {
+ for (unsigned int j = 0; j < g_list_model_get_n_items (sigs); j++) {
g_autoptr(SeahorsePgpSignature) sig = g_list_model_get_item (sigs, j);
if (seahorse_pgp_signature_get_sigtype (sig) & types)
return TRUE;
@@ -1410,10 +822,7 @@ key_have_signatures (SeahorsePgpKey *pkey, guint types)
static void
do_trust (SeahorsePgpKeyProperties *self)
{
- GtkTreeStore *store;
- GtkTreeModelFilter *filter;
gboolean sigpersonal;
- GtkCellRenderer *renderer;
GAction *trust_action;
if (seahorse_object_get_usage (SEAHORSE_OBJECT (self->key)) != SEAHORSE_USAGE_PUBLIC_KEY)
@@ -1421,15 +830,14 @@ do_trust (SeahorsePgpKeyProperties *self)
/* Remote keys */
if (!SEAHORSE_GPGME_IS_KEY (self->key)) {
- gtk_widget_set_visible (self->manual_trust_area, FALSE);
- gtk_widget_set_visible (GTK_WIDGET (self->trust_marginal_switch), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (self->trust_marginal_switch), FALSE);
- gtk_widget_set_visible (self->sign_area, FALSE);
- gtk_widget_set_visible (self->revoke_area, FALSE);
+ gtk_widget_set_visible (self->trust_marginal_switch, TRUE);
+ gtk_widget_set_sensitive (self->trust_marginal_switch, FALSE);
+ gtk_widget_set_visible (self->trust_sign_row, FALSE);
+ gtk_widget_set_visible (self->trust_revoke_row, FALSE);
/* Local keys */
} else {
- guint trust;
+ unsigned int trust;
gboolean managed = FALSE;
trust = seahorse_pgp_key_get_trust (self->key);
@@ -1457,8 +865,7 @@ do_trust (SeahorsePgpKeyProperties *self)
}
/* Managed and unmanaged areas */
- gtk_widget_set_visible (self->manual_trust_area, !managed);
- gtk_widget_set_visible (GTK_WIDGET (self->trust_marginal_switch), managed);
+ gtk_widget_set_visible (self->trust_marginal_switch, managed);
trust_action = g_action_map_lookup_action (G_ACTION_MAP (self->action_group),
"trust-marginal");
@@ -1471,91 +878,39 @@ do_trust (SeahorsePgpKeyProperties *self)
/* Signing and revoking */
sigpersonal = key_have_signatures (self->key, SKEY_PGPSIG_PERSONAL);
- gtk_widget_set_visible (self->sign_area, !sigpersonal);
- gtk_widget_set_visible (self->revoke_area, sigpersonal);
- }
-
- /* The actual signatures listing */
- if (self->signatures_tree != NULL) {
- filter = GTK_TREE_MODEL_FILTER (gtk_tree_view_get_model (self->signatures_tree));
-
- if (filter) {
- /* First time create the store */
- store = GTK_TREE_STORE (gtk_tree_model_filter_get_model (filter));
- gtk_tree_store_clear (store);
- } else {
- /* Create a new SeahorseObjectModel store.... */
- sign_columns[SIGN_ICON] = G_TYPE_ICON;
- store = GTK_TREE_STORE (seahorse_object_model_new (SIGN_N_COLUMNS, (GType*)sign_columns));
- g_signal_connect (store, "update-row",
- G_CALLBACK (trust_update_row), self);
-
- /* .... and a filter to go ontop of it */
- filter = GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL));
- gtk_tree_model_filter_set_visible_func (filter,
- (GtkTreeModelFilterVisibleFunc)trust_filter, NULL, NULL);
-
- /* Make the colunms for the view */
- renderer = gtk_cell_renderer_pixbuf_new ();
- g_object_set (renderer, "stock-size", GTK_ICON_SIZE_LARGE_TOOLBAR, NULL);
- gtk_tree_view_insert_column_with_attributes (self->signatures_tree,
- -1, "", renderer,
- "gicon", SIGN_ICON, NULL);
- gtk_tree_view_insert_column_with_attributes (self->signatures_tree,
- /* TRANSLATORS: The name and email set on the PGP
key */
- -1, _("Name/Email"), gtk_cell_renderer_text_new (),
- "text", SIGN_NAME, NULL);
- gtk_tree_view_insert_column_with_attributes (self->signatures_tree,
- -1, _("Key ID"), gtk_cell_renderer_text_new (),
- "text", SIGN_KEYID, NULL);
-
- gtk_tree_view_set_model (self->signatures_tree, GTK_TREE_MODEL (filter));
-
- g_signal_connect (self->signatures_toggle, "toggled",
- G_CALLBACK (on_pgp_trusted_toggled), filter);
- gtk_toggle_button_set_active (self->signatures_toggle, TRUE);
- }
-
- signatures_populate_model (self, SEAHORSE_OBJECT_MODEL (store));
+ gtk_widget_set_visible (self->trust_sign_row, !sigpersonal);
+ gtk_widget_set_visible (self->trust_revoke_row, sigpersonal);
}
}
-/* -----------------------------------------------------------------------------
- * GENERAL
- */
-
static const GActionEntry PRIVATE_KEY_ACTIONS[] = {
{ "change-password", on_change_password },
{ "change-expires", on_change_expires },
{ "export-secret", on_export_secret },
{ "export-public", on_export_public },
- { "uids.add", on_uids_add },
- { "uids.delete", on_uids_delete },
- { "uids.make-primary", on_uids_make_primary },
- { "uids.revoke", on_uids_revoke },
- { "uids.sign", on_uids_sign },
+ { "uids.add", on_uids_add },
+ { "subkeys.add", on_subkeys_add },
{ "photos.add", on_photos_add },
{ "photos.delete", on_photos_delete },
{ "photos.previous", on_photos_previous },
{ "photos.next", on_photos_next },
{ "photos.make-primary", on_photos_make_primary },
- { "subkeys.add", on_subkeys_add },
};
static const GActionEntry PUBLIC_KEY_ACTIONS[] = {
- { "sign-key", on_sign_key },
- { "trust-marginal", on_toggle_action, NULL, "false", on_trust_marginal_changed },
- { "photos.previous", on_photos_previous },
- { "photos.next", on_photos_next },
+ { "sign-key", on_sign_key },
+ /* { "revoke-key", on_revoke_key }, TODO */
+ { "trust-marginal", seahorse_util_toggle_action, NULL, "false", on_trust_marginal_changed },
+ { "photos.previous", on_photos_previous },
+ { "photos.next", on_photos_next },
};
static void
-key_notify (GObject *object, GParamSpec *pspec, gpointer user_data)
+key_notify (GObject *object, GParamSpec *pspec, void *user_data)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (user_data);
do_owner (self);
- do_names (self);
do_trust (self);
do_details (self);
}
@@ -1563,35 +918,37 @@ key_notify (GObject *object, GParamSpec *pspec, gpointer user_data)
static void
get_common_widgets (SeahorsePgpKeyProperties *self, GtkBuilder *builder)
{
- GtkWidget *subkeys_listbox;
-
- self->owner_name_label = GTK_LABEL (gtk_builder_get_object (builder, "owner-name-label"));
- self->owner_email_label = GTK_LABEL (gtk_builder_get_object (builder, "owner-email-label"));
- self->owner_comment_label = GTK_LABEL (gtk_builder_get_object (builder, "owner-comment-label"));
- self->owner_keyid_label = GTK_LABEL (gtk_builder_get_object (builder, "owner-keyid-label"));
- self->owner_photo_previous_button = GTK_WIDGET (gtk_builder_get_object (builder,
"owner-photo-previous-button"));
- self->owner_photo_next_button = GTK_WIDGET (gtk_builder_get_object (builder, "owner-photo-next-button"));
- self->revoked_area = GTK_WIDGET (gtk_builder_get_object (builder, "revoked-area"));
- self->expired_area = GTK_WIDGET (gtk_builder_get_object (builder, "expired-area"));
- self->expired_message = GTK_LABEL (gtk_builder_get_object (builder, "expired-message"));
+ GtkWidget *uids_listbox, *subkeys_listbox;
+
+ self->name_label = GTK_WIDGET (gtk_builder_get_object (builder, "name_label"));
+ self->email_label = GTK_WIDGET (gtk_builder_get_object (builder, "email_label"));
+ self->comment_label = GTK_WIDGET (gtk_builder_get_object (builder, "comment_label"));
+ self->keyid_label = GTK_WIDGET (gtk_builder_get_object (builder, "keyid_label"));
+ self->fingerprint_label = GTK_WIDGET (gtk_builder_get_object (builder, "fingerprint_label"));
+ self->expires_label = GTK_WIDGET (gtk_builder_get_object (builder, "expires_label"));
+ self->photo_previous_button = GTK_WIDGET (gtk_builder_get_object (builder, "photo_previous_button"));
+ self->photo_next_button = GTK_WIDGET (gtk_builder_get_object (builder, "photo_next_button"));
+ self->revoked_area = GTK_WIDGET (gtk_builder_get_object (builder, "revoked_area"));
+ self->expired_area = GTK_WIDGET (gtk_builder_get_object (builder, "expired_area"));
+ self->expired_message = GTK_WIDGET (gtk_builder_get_object (builder, "expired_message"));
self->photoid = GTK_IMAGE (gtk_builder_get_object (builder, "photoid"));
self->photo_event_box = GTK_EVENT_BOX (gtk_builder_get_object (builder, "photo-event-box"));
- self->details_id_label = GTK_LABEL (gtk_builder_get_object (builder, "details-id-label"));
- self->details_fingerprint_label = GTK_LABEL (gtk_builder_get_object (builder,
"details-fingerprint-label"));
- self->details_algo_label = GTK_LABEL (gtk_builder_get_object (builder, "details-algo-label"));
- self->details_created_label = GTK_LABEL (gtk_builder_get_object (builder, "details-created-label"));
- self->details_strength_label = GTK_LABEL (gtk_builder_get_object (builder, "details-strength-label"));
- self->details_expires_label = GTK_LABEL (gtk_builder_get_object (builder, "details-expires-label"));
- self->details_trust_combobox = GTK_COMBO_BOX (gtk_builder_get_object (builder,
"details-trust-combobox"));
+ self->ownertrust_combobox = GTK_WIDGET (gtk_builder_get_object (builder, "ownertrust_combobox"));
+ self->uids_container = GTK_WIDGET (gtk_builder_get_object (builder, "uids_container"));
self->subkeys_container = GTK_WIDGET (gtk_builder_get_object (builder, "subkeys_container"));
g_signal_connect_object (self->photo_event_box, "scroll-event",
G_CALLBACK (on_pgp_owner_photoid_button),
self, 0);
- g_signal_connect_object (self->details_trust_combobox, "changed",
+ g_signal_connect_object (self->ownertrust_combobox, "changed",
G_CALLBACK (on_pgp_details_trust_changed),
self, 0);
+ uids_listbox = seahorse_pgp_uid_list_box_new (self->key);
+ gtk_widget_show (uids_listbox);
+ gtk_container_add (GTK_CONTAINER (self->uids_container),
+ uids_listbox);
+
subkeys_listbox = seahorse_pgp_subkey_list_box_new (self->key);
gtk_widget_show (subkeys_listbox);
gtk_container_add (GTK_CONTAINER (self->subkeys_container),
@@ -1603,14 +960,15 @@ create_public_key_dialog (SeahorsePgpKeyProperties *self)
{
g_autoptr(GtkBuilder) builder = NULL;
GtkWidget *content_area, *content;
- const gchar *user;
- g_autofree gchar *user_escaped = NULL;
+ const char *user;
+ g_autofree char *sign_text = NULL;
+ g_autofree char *revoke_text = NULL;
builder = gtk_builder_new_from_resource (PUBLIC_KEY_PROPERTIES_UI);
gtk_builder_connect_signals (builder, self);
content_area = gtk_dialog_get_content_area (GTK_DIALOG (self));
- content = GTK_WIDGET (gtk_builder_get_object (builder, "window-content"));
+ content = GTK_WIDGET (gtk_builder_get_object (builder, "window_content"));
gtk_container_add (GTK_CONTAINER (content_area), content);
g_action_map_add_action_entries (G_ACTION_MAP (self->action_group),
@@ -1623,54 +981,29 @@ create_public_key_dialog (SeahorsePgpKeyProperties *self)
get_common_widgets (self, builder);
- self->signatures_tree = GTK_TREE_VIEW (gtk_builder_get_object (builder, "signatures-tree"));
- self->signatures_area = GTK_WIDGET (gtk_builder_get_object (builder, "signatures-area"));
- self->uids_area = GTK_WIDGET (gtk_builder_get_object (builder, "uids-area"));
self->trust_page = GTK_WIDGET (gtk_builder_get_object (builder, "trust-page"));
- self->indicate_trust_box = GTK_BOX (gtk_builder_get_object (builder, "indicate_trust_box"));
- self->trust_sign_label = GTK_LABEL (gtk_builder_get_object (builder, "trust-sign-label"));
- self->trust_revoke_label = GTK_LABEL (gtk_builder_get_object (builder, "trust-revoke-label"));
- self->manual_trust_area = GTK_WIDGET (gtk_builder_get_object (builder, "manual-trust-area"));
- self->sign_area = GTK_WIDGET (gtk_builder_get_object (builder, "sign-area"));
- self->revoke_area = GTK_WIDGET (gtk_builder_get_object (builder, "revoke-area"));
- self->trust_marginal_switch = GTK_SWITCH (gtk_builder_get_object (builder, "trust-marginal-switch"));
- self->trust_marginal_label = GTK_LABEL (gtk_builder_get_object (builder, "trust-marginal-label"));
- self->signatures_toggle = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "signatures-toggle"));
- self->owner_userid_tree = GTK_TREE_VIEW (gtk_builder_get_object (builder, "owner-userid-tree"));
+ self->indicate_trust_row = GTK_WIDGET (gtk_builder_get_object (builder, "indicate_trust_row"));
+ self->trust_sign_row = GTK_WIDGET (gtk_builder_get_object (builder, "trust_sign_row"));
+ self->trust_revoke_row = GTK_WIDGET (gtk_builder_get_object (builder, "trust_revoke_row"));
+ self->trust_marginal_switch = GTK_WIDGET (gtk_builder_get_object (builder, "trust-marginal-switch"));
setup_trust_combobox (self);
do_owner (self);
do_details (self);
do_trust (self);
- g_signal_connect_object (self->signatures_tree, "row-activated",
- G_CALLBACK (on_pgp_signature_row_activated),
- self, 0);
-
/* Fill in trust labels with name. */
user = seahorse_object_get_label (SEAHORSE_OBJECT (self->key));
- user_escaped = g_markup_escape_text (user, -1);
- {
- g_autofree gchar *text = NULL;
- text = g_strdup_printf(_("I trust signatures from “%s” on other keys"),
+ sign_text = g_strdup_printf(_("I believe “%s” is the owner of this key"),
user);
- gtk_label_set_label (self->trust_marginal_label, text);
- }
-
- {
- g_autofree gchar *text = NULL;
- text = g_strdup_printf(_("If you believe that the person that owns this key is “%s”, <i>sign</i>
this key:"),
- user_escaped);
- gtk_label_set_markup (self->trust_sign_label, text);
- }
+ hdy_action_row_set_subtitle (HDY_ACTION_ROW (self->trust_sign_row), sign_text);
+ hdy_action_row_set_subtitle_lines (HDY_ACTION_ROW (self->trust_sign_row), 0);
- {
- g_autofree gchar *text = NULL;
- text = g_strdup_printf(_("If you no longer trust that “%s” owns this key, <i>revoke</i> your
signature:"),
- user_escaped);
- gtk_label_set_markup (self->trust_revoke_label, text);
- }
+ revoke_text = g_strdup_printf(_("I no longer trust that “%s” owns this key"),
+ user);
+ hdy_action_row_set_subtitle (HDY_ACTION_ROW (self->trust_revoke_row), revoke_text);
+ hdy_action_row_set_subtitle_lines (HDY_ACTION_ROW (self->trust_revoke_row), 0);
}
static void
@@ -1678,12 +1011,12 @@ create_private_key_dialog (SeahorsePgpKeyProperties *self)
{
g_autoptr(GtkBuilder) builder = NULL;
GtkWidget *content_area, *content;
- GtkTreeSelection *selection;
builder = gtk_builder_new_from_resource (PRIVATE_KEY_PROPERTIES_UI);
content_area = gtk_dialog_get_content_area (GTK_DIALOG (self));
- content = GTK_WIDGET (gtk_builder_get_object (builder, "window-content"));
+ content = GTK_WIDGET (gtk_builder_get_object (builder, "window_content"));
+ self->actions_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "actions_menu"));
gtk_container_add (GTK_CONTAINER (content_area), content);
g_action_map_add_action_entries (G_ACTION_MAP (self->action_group),
@@ -1696,7 +1029,6 @@ create_private_key_dialog (SeahorsePgpKeyProperties *self)
get_common_widgets (self, builder);
- self->names_tree = GTK_TREE_VIEW (gtk_builder_get_object (builder, "names-tree"));
self->owner_photo_frame = GTK_WIDGET (gtk_builder_get_object (builder, "owner-photo-frame"));
self->owner_photo_add_button = GTK_WIDGET (gtk_builder_get_object (builder, "owner-photo-add-button"));
self->owner_photo_delete_button = GTK_WIDGET (gtk_builder_get_object (builder,
"owner-photo-delete-button"));
@@ -1704,7 +1036,6 @@ create_private_key_dialog (SeahorsePgpKeyProperties *self)
setup_trust_combobox (self);
do_owner (self);
- do_names (self);
do_details (self);
/* Allow DnD on the photo frame */
@@ -1715,17 +1046,13 @@ create_private_key_dialog (SeahorsePgpKeyProperties *self)
GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP,
target_list, G_N_ELEMENTS (target_list),
GDK_ACTION_COPY);
-
- /* Enable and disable buttons as UIDs are selected */
- selection = gtk_tree_view_get_selection (self->names_tree);
- g_signal_connect (selection, "changed", G_CALLBACK (update_names), self);
}
static void
-seahorse_pgp_key_properties_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
+seahorse_pgp_key_properties_get_property (GObject *object,
+ unsigned int prop_id,
+ GValue *value,
+ GParamSpec *pspec)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (object);
@@ -1740,10 +1067,10 @@ seahorse_pgp_key_properties_get_property (GObject *object,
}
static void
-seahorse_pgp_key_properties_set_property (GObject *object,
- guint prop_id,
+seahorse_pgp_key_properties_set_property (GObject *object,
+ unsigned int prop_id,
const GValue *value,
- GParamSpec *pspec)
+ GParamSpec *pspec)
{
SeahorsePgpKeyProperties *self = SEAHORSE_PGP_KEY_PROPERTIES (object);
@@ -1791,6 +1118,9 @@ static void
seahorse_pgp_key_properties_init (SeahorsePgpKeyProperties *self)
{
self->action_group = g_simple_action_group_new ();
+
+ gtk_window_set_default_size (GTK_WINDOW (self), 300, 600);
+ gtk_container_set_border_width (GTK_CONTAINER (self), 0);
}
static void
diff --git a/pgp/seahorse-pgp-private-key-properties.ui b/pgp/seahorse-pgp-private-key-properties.ui
index 7c2dba76..857012c9 100644
--- a/pgp/seahorse-pgp-private-key-properties.ui
+++ b/pgp/seahorse-pgp-private-key-properties.ui
@@ -24,116 +24,87 @@
</row>
</data>
</object>
- <menu id="export_menu">
+ <menu id="actions_menu">
<section>
<item>
- <attribute name="label" translatable="yes">Export _secret key</attribute>
- <attribute name="action">props.export-secret</attribute>
+ <attribute name="label" translatable="yes">Change _passphrase</attribute>
+ <attribute name="action">props.change-password</attribute>
</item>
+ </section>
+ <section>
<item>
<attribute name="label" translatable="yes">Export _public key</attribute>
<attribute name="action">props.export-public</attribute>
</item>
+ <item>
+ <attribute name="label" translatable="yes">Export _secret key</attribute>
+ <attribute name="action">props.export-secret</attribute>
+ </item>
</section>
</menu>
- <object class="GtkNotebook" id="window-content">
+ <object class="GtkBox" id="window_content">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkInfoBar" id="revoked_area">
<property name="visible">True</property>
- <property name="vexpand">True</property>
- <property name="can_focus">True</property>
- <child>
- <object class="GtkBox">
+ <property name="message-type">error</property>
+ <property name="spacing">6</property>
+ <child internal-child="content_area">
+ <object class="GtkContainer">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">12</property>
<child>
- <object class="GtkBox" id="revoked-area">
- <property name="spacing">12</property>
- <property name="orientation">horizontal</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon-name">dialog-error</property>
- <property name="icon-size">6</property>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">This key has been revoked</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">The owner of the key revoked the key.
It can no longer be used.</property>
- <property name="margin-start">12</property>
- </object>
- </child>
- </object>
- </child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">The owner of the key revoked the key. It
should no longer be used.</property>
+ <property name="margin-start">12</property>
</object>
</child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkInfoBar" id="expired_area">
+ <property name="spacing">12</property>
+ <property name="message-type">error</property>
+ <property name="orientation">horizontal</property>
+ <child internal-child="content_area">
+ <object class="GtkContainer">
+ <property name="visible">True</property>
<child>
- <object class="GtkBox" id="expired-area">
- <property name="spacing">12</property>
- <property name="orientation">horizontal</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon-name">dialog-error</property>
- <property name="icon-size">6</property>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">This key has expired</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="expired-message">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="margin-start">12</property>
- <property name="label">This key expired on: (placeholder)</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
+ <object class="GtkLabel" id="expired_message">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="margin-start">12</property>
+ <property name="label">This key expired on (placeholder)</property>
</object>
</child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="propagate-natural-height">True</property>
+ <property name="vscrollbar-policy">automatic</property>
+ <property name="hscrollbar-policy">never</property>
+ <child>
+ <object class="HdyClamp">
+ <property name="visible">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="spacing">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
<property name="margin">18</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">horizontal</property>
+ <property name="spacing">12</property>
<child>
<object class="GtkBox" id="owner-photo-frame">
<property name="visible">True</property>
@@ -211,7 +182,7 @@
</object>
</child>
<child>
- <object class="GtkButton" id="owner-photo-previous-button">
+ <object class="GtkButton" id="photo_previous_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
@@ -227,7 +198,7 @@
</object>
</child>
<child>
- <object class="GtkButton" id="owner-photo-next-button">
+ <object class="GtkButton" id="photo_next_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
@@ -245,13 +216,6 @@
</child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">12</property>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
@@ -265,7 +229,7 @@
<property name="spacing">3</property>
<property name="margin-bottom">12</property>
<child>
- <object class="GtkLabel" id="owner-name-label">
+ <object class="GtkLabel" id="name_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="xalign">0</property>
@@ -276,7 +240,7 @@
</object>
</child>
<child>
- <object class="GtkLabel" id="owner-email-label">
+ <object class="GtkLabel" id="email_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="xalign">0</property>
@@ -293,7 +257,7 @@
</child>
<child>
<object class="GtkLabel">
- <property name="visible">True</property>
+ <property name="visible" bind-source="comment_label" bind-property="visible"
bind-flags="sync-create" />
<property name="xalign">1</property>
<property name="label" translatable="yes">Comment</property>
<style>
@@ -306,7 +270,7 @@
</packing>
</child>
<child>
- <object class="GtkLabel" id="owner-comment-label">
+ <object class="GtkLabel" id="comment_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="xalign">0</property>
@@ -333,7 +297,7 @@
</packing>
</child>
<child>
- <object class="GtkLabel" id="owner-keyid-label">
+ <object class="GtkLabel" id="keyid_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="xalign">0</property>
@@ -344,591 +308,205 @@
<property name="left_attach">1</property>
</packing>
</child>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="passphrase-button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="halign">end</property>
- <property name="label" translatable="yes">Change _Passphrase</property>
- <property name="use_underline">True</property>
- <property name="action-name">props.change-password</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="margin-start">3</property>
- <property name="margin-end">3</property>
- <property name="label" translatable="yes">Owner</property>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="border_width">12</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Key Names and Signatures</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="border_width">6</property>
- <property name="margin">6</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkButton" id="names-primary-button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="border_width">6</property>
- <property name="action-name">props.uids.make-primary</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="halign">center</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="stock">gtk-go-up</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Primary</property>
- <property name="use_underline">True</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="names-sign-button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="border_width">6</property>
- <property name="action-name">props.uids.sign</property>
<child>
- <object class="GtkBox">
+ <object class="GtkLabel">
<property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="halign">center</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="stock">gtk-index</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Sign</property>
- <property name="use_underline">True</property>
- </object>
- </child>
+ <property name="xalign">1</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">Fingerprint</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
</object>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="left_attach">0</property>
+ </packing>
</child>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="names-delete-button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="border_width">6</property>
- <property name="action-name">props.uids.delete</property>
<child>
- <object class="GtkBox">
+ <object class="GtkLabel" id="fingerprint_label">
<property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="halign">center</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="stock">gtk-delete</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Delete</property>
- <property name="use_underline">True</property>
- </object>
- </child>
+ <property name="can_focus">True</property>
+ <property name="xalign">0</property>
+ <property name="selectable">True</property>
+ <property name="wrap">True</property>
+ <property name="wrap-mode">word</property>
+ <property name="max-width-chars">24</property>
+ <property name="width-chars">24</property>
+ <property name="lines">2</property>
</object>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="left_attach">1</property>
+ </packing>
</child>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="names-add-button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="border_width">6</property>
- <property name="action-name">props.uids.add</property>
<child>
- <object class="GtkBox">
+ <object class="GtkLabel">
<property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="halign">center</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="stock">gtk-add</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes" comments="Add another name to
the PGP key.">_Add Name</property>
- <property name="use_underline">True</property>
- </object>
- </child>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Expires</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
</object>
+ <packing>
+ <property name="top_attach">4</property>
+ <property name="left_attach">0</property>
+ </packing>
</child>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="names-revoke-button">
- <property name="visible">False</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="border_width">6</property>
- <property name="action-name">props.uids.revoke</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
- <property name="halign">center</property>
- <property name="orientation">horizontal</property>
- <property name="spacing">2</property>
+ <property name="spacing">6</property>
<child>
- <object class="GtkImage">
+ <object class="GtkLabel" id="expires_label">
<property name="visible">True</property>
- <property name="stock">gtk-cancel</property>
+ <property name="can_focus">True</property>
+ <property name="xalign">0</property>
</object>
</child>
<child>
- <object class="GtkLabel">
+ <object class="GtkButton" id="details_expires_button">
<property name="visible">True</property>
- <property name="label" translatable="yes">Revoke</property>
- <property name="use_underline">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="action-name">props.change-expires</property>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="icon_name">x-office-calendar-symbolic</property>
+ </object>
+ </child>
+ <style>
+ <class name="flat"/>
+ </style>
</object>
</child>
</object>
+ <packing>
+ <property name="top_attach">4</property>
+ <property name="left_attach">1</property>
+ </packing>
</child>
</object>
</child>
</object>
</child>
<child>
- <object class="GtkScrolledWindow">
- <property name="visible">True</property>
- <property name="hexpand">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">in</property>
- <child>
- <object class="GtkTreeView" id="names-tree">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="margin">6</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="labelsig">
- <property name="visible">True</property>
- <property name="margin-start">3</property>
- <property name="margin-end">3</property>
- <property name="label" translatable="yes" comments="List of names and signatures on the PGP
key.">Names and Signatures</property>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="border_width">12</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="spacing">12</property>
- <property name="homogeneous">True</property>
- <child>
- <object class="GtkBox">
+ <object class="GtkBox" id="uids_container">
<property name="visible">True</property>
<property name="orientation">vertical</property>
- <property name="spacing">12</property>
+ <property name="spacing">6</property>
<child>
- <object class="GtkFrame">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
+ <property name="orientation">horizontal</property>
<child>
- <object class="GtkGrid">
- <property name="visible">True</property>
- <property name="column_spacing">12</property>
- <property name="row_spacing">6</property>
- <property name="margin-top">6</property>
- <property name="margin-left">12</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Key ID:</property>
- </object>
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="details-id-label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="selectable">True</property>
- </object>
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Type:</property>
- </object>
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="details-algo-label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="selectable">True</property>
- </object>
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Strength:</property>
- </object>
- <packing>
- <property name="top_attach">2</property>
- <property name="left_attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="details-strength-label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="selectable">True</property>
- </object>
- <packing>
- <property name="top_attach">2</property>
- <property name="left_attach">1</property>
- </packing>
- </child>
- </object>
- </child>
- <child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
- <property name="label" translatable="yes">Technical Details</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">User IDs</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="GtkFrame">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
<child>
- <object class="GtkLabel" id="details-fingerprint-label">
+ <object class="GtkButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="margin-top">6</property>
- <property name="margin-left">12</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="use_markup">True</property>
- <property name="selectable">True</property>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Fingerprint</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
+ <property name="receives_default">False</property>
+ <property name="action-name">props.uids.add</property>
+ <property name="use-underline">True</property>
+ <property name="label" translatable="yes">Add user ID</property>
</object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
</child>
</object>
</child>
</object>
</child>
<child>
- <object class="GtkBox">
+ <object class="GtkBox" id="subkeys_container">
<property name="visible">True</property>
<property name="orientation">vertical</property>
- <property name="spacing">12</property>
+ <property name="spacing">6</property>
<child>
- <object class="GtkFrame">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
+ <property name="orientation">horizontal</property>
<child>
- <object class="GtkGrid">
- <property name="visible">True</property>
- <property name="column_spacing">12</property>
- <property name="row_spacing">6</property>
- <property name="margin-top">6</property>
- <property name="margin-start">12</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Created:</property>
- </object>
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="details-created-label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="xalign">0</property>
- <property name="selectable">True</property>
- </object>
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.25</property>
- <property name="label" translatable="yes">Expires:</property>
- </object>
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="details-expires-label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.25</property>
- <property name="selectable">True</property>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="details_expires_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="action-name">props.change-expires</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon_name">x-office-calendar</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">1</property>
- </packing>
- </child>
- </object>
- </child>
- <child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
- <property name="label" translatable="yes">Dates</property>
+ <property name="hexpand">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Subkeys</property>
<attributes>
- <attribute name="weight" value="bold"/>
+ <attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="GtkFrame">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
<child>
- <object class="GtkGrid">
- <property name="visible">True</property>
- <property name="column_spacing">12</property>
- <property name="row_spacing">6</property>
- <property name="margin-top">6</property>
- <property name="margin-start">12</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Override Owner
_Trust:</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="details-trust-combobox">
- <property name="visible">True</property>
- <property name="model">model1</property>
- <child>
- <object class="GtkCellRendererText"/>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
- </child>
- </object>
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkMenuButton">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Export to file</property>
- <property name="halign">start</property>
- <property name="use_underline">True</property>
- <property name="menu-model">export_menu</property>
- </object>
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">0</property>
- <property name="width">2</property>
- </packing>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel">
+ <object class="GtkButton">
<property name="visible">True</property>
- <property name="label" translatable="yes">Actions</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="action-name">props.subkeys.add</property>
+ <property name="use-underline">True</property>
+ <property name="label" translatable="yes">_Add subkey</property>
</object>
</child>
</object>
</child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="GtkSeparator">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- </object>
- </child>
- <child>
- <object class="GtkBox" id="subkeys_container">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
<child>
- <object class="GtkBox">
+ <object class="GtkBox" id="trust_section">
<property name="visible">True</property>
- <property name="orientation">horizontal</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
- <property name="hexpand">True</property>
+ <property name="can_focus">False</property>
<property name="xalign">0</property>
- <property name="label" translatable="yes">Subkeys</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">Trust</property>
+ <property name="tooltip-text" translatable="yes">Your trust of this
key</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
<child>
- <object class="GtkButton">
+ <object class="GtkListBox">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="action-name">props.subkeys.add</property>
- <property name="use-underline">True</property>
- <property name="label" translatable="yes">_Add subkey</property>
+ <property name="selection-mode">none</property>
+ <style>
+ <class name="content"/>
+ </style>
+ <child>
+ <object class="HdyActionRow" id="indicate_trust_row">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Override owner trust</property>
+ <child>
+ <object class="GtkComboBox" id="ownertrust_combobox">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <property name="can_focus">False</property>
+ <property name="model">model1</property>
+ <child>
+ <object class="GtkCellRendererText"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
</object>
</child>
</object>
@@ -937,17 +515,7 @@
</child>
</object>
</child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="margin-start">3</property>
- <property name="margin-end">3</property>
- <property name="label" translatable="yes">Details</property>
- </object>
- <packing>
- <property name="position">2</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
</object>
+ </child>
+ </object>
</interface>
diff --git a/pgp/seahorse-pgp-public-key-properties.ui b/pgp/seahorse-pgp-public-key-properties.ui
index 8c0bdbb5..18eec594 100644
--- a/pgp/seahorse-pgp-public-key-properties.ui
+++ b/pgp/seahorse-pgp-public-key-properties.ui
@@ -24,621 +24,236 @@
</row>
</data>
</object>
- <object class="GtkNotebook" id="window-content">
+ <object class="GtkBox" id="window_content">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkInfoBar" id="revoked_area">
<property name="visible">True</property>
- <property name="vexpand">True</property>
- <property name="can_focus">True</property>
- <child>
- <object class="GtkBox">
+ <property name="message-type">error</property>
+ <property name="spacing">6</property>
+ <child internal-child="content_area">
+ <object class="GtkContainer">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="can_focus">False</property>
- <property name="spacing">12</property>
<child>
- <object class="GtkBox" id="revoked-area">
- <property name="can_focus">False</property>
- <property name="orientation">horizontal</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="icon-name">dialog-error</property>
- <property name="icon_size">6</property>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">This key has been revoked</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="margin-start">12</property>
- <property name="label" translatable="yes">The owner of the key revoked the key.
It can no longer be used.</property>
- </object>
- </child>
- </object>
- </child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">The owner of the key revoked the key. It
should no longer be used.</property>
+ <property name="margin-start">12</property>
</object>
</child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkInfoBar" id="expired_area">
+ <property name="spacing">12</property>
+ <property name="message-type">error</property>
+ <property name="orientation">horizontal</property>
+ <child internal-child="content_area">
+ <object class="GtkContainer">
+ <property name="visible">True</property>
<child>
- <object class="GtkBox" id="expired-area">
- <property name="can_focus">False</property>
- <property name="orientation">horizontal</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="icon-name">dialog-error</property>
- <property name="icon_size">6</property>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">This key has expired</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="expired-message">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="margin-start">12</property>
- <property name="label">This key expired on: (placeholder)</property>
- </object>
- </child>
- </object>
- </child>
+ <object class="GtkLabel" id="expired_message">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="margin-start">12</property>
+ <property name="label">This key expired on (placeholder)</property>
</object>
</child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="propagate-natural-height">True</property>
+ <property name="vscrollbar-policy">automatic</property>
+ <property name="hscrollbar-policy">never</property>
+ <child>
+ <object class="HdyClamp">
+ <property name="visible">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="spacing">12</property>
+ <property name="orientation">vertical</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">18</property>
<property name="margin">18</property>
<child>
- <object class="GtkBox">
+ <object class="GtkBox" id="summary_container">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkEventBox" id="photo-event-box">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkImage" id="photoid">
- <property name="width_request">150</property>
- <property name="height_request">160</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="icon-name">avatar-default-symbolic</property>
- <property name="icon-size">6</property>
- </object>
- </child>
- </object>
- </child>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">12</property>
<child>
- <object class="GtkBox" id="key-controls">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="halign">center</property>
+ <property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
- <object class="GtkButton" id="owner-photo-previous-button">
+ <object class="GtkEventBox" id="photo-event-box">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="focus_on_click">False</property>
- <property name="action-name">props.photos.previous</property>
- <property name="tooltip-text" translatable="yes">Go to previous
photo</property>
+ <property name="can_focus">False</property>
<child>
- <object class="GtkImage">
+ <object class="GtkImage" id="photoid">
+ <property name="width_request">150</property>
+ <property name="height_request">160</property>
<property name="visible">True</property>
- <property name="icon-name">go-previous-symbolic</property>
+ <property name="can_focus">False</property>
+ <property name="icon-name">avatar-default-symbolic</property>
+ <property name="icon-size">6</property>
</object>
</child>
</object>
</child>
<child>
- <object class="GtkButton" id="owner-photo-next-button">
+ <object class="GtkBox" id="key-controls">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="action-name">props.photos.next</property>
+ <property name="orientation">horizontal</property>
+ <property name="halign">center</property>
+ <property name="spacing">6</property>
<child>
- <object class="GtkBox">
+ <object class="GtkButton" id="photo_previous_button">
<property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="can_focus">False</property>
- <property name="spacing">2</property>
- <property name="tooltip-text" translatable="yes">Go to next
photo</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="focus_on_click">False</property>
+ <property name="action-name">props.photos.previous</property>
+ <property name="tooltip-text" translatable="yes">Go to previous
photo</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
- <property name="icon-name">go-next-symbolic</property>
+ <property name="icon-name">go-previous-symbolic</property>
</object>
</child>
</object>
</child>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkGrid">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin">3</property>
- <property name="column_spacing">12</property>
- <property name="row_spacing">6</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">3</property>
- <property name="margin-bottom">12</property>
- <child>
- <object class="GtkLabel" id="owner-name-label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="halign">start</property>
- <property name="selectable">True</property>
- <attributes>
- <attribute name="scale" value="1.75"/>
- </attributes>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="owner-email-label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="halign">start</property>
- <property name="selectable">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">0</property>
- <property name="width">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">Comment</property>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="owner-comment-label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="xalign">0</property>
- <property name="selectable">True</property>
- </object>
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">1</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Key ID</property>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- <packing>
- <property name="top_attach">2</property>
- <property name="left_attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="owner-keyid-label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="xalign">0</property>
- <property name="selectable">True</property>
- </object>
- <packing>
- <property name="top_attach">2</property>
- <property name="left_attach">1</property>
- </packing>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkExpander" id="uids-area">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow1">
- <property name="height_request">130</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="shadow_type">in</property>
- <property name="margin-top">3</property>
<child>
- <object class="GtkTreeView" id="owner-userid-tree">
+ <object class="GtkButton" id="photo_next_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection1"/>
+ <property name="receives_default">False</property>
+ <property name="action-name">props.photos.next</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ <property name="tooltip-text" translatable="yes">Go to next
photo</property>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="icon-name">go-next-symbolic</property>
+ </object>
+ </child>
+ </object>
</child>
</object>
</child>
</object>
</child>
- <child type="label">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes" comments="Names set on the PGP
key.">_Other Names:</property>
- <property name="use_underline">True</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin-start">3</property>
- <property name="margin-end">3</property>
- <property name="label" translatable="yes">Owner</property>
- </object>
- </child>
- <child>
- <object class="GtkBox" id="trust-page">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="can_focus">False</property>
- <property name="margin">12</property>
- <property name="spacing">24</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Your trust of this key</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="manual-trust-area">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="margin-start">4</property>
- <property name="margin-end">4</property>
- <property name="label" translatable="yes">Your trust is manually specified on the
<i>Details</i> tab.</property>
- <property name="use_markup">True</property>
- </object>
- </child>
- <child>
- <object class="GtkBox" id="trust-marginal-area">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <child>
- <object class="GtkLabel" id="trust-marginal-label">
- <property name="visible">True</property>
- <property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="can_focus">True</property>
- <property name="wrap">True</property>
- <property name="max-width-chars">70</property>
- <property name="mnemonic-widget">trust-marginal-switch</property>
- </object>
- </child>
- <child>
- <object class="GtkSwitch" id="trust-marginal-switch">
- <property name="visible">True</property>
- <property name="halign">end</property>
- <property name="valign">center</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="action-name">props.trust-marginal</property>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkBox" id="sign-area">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="can_focus">False</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel" id="trust-sign-label">
- <property name="visible">True</property>
- <property name="hexpand">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="use_markup">True</property>
- <property name="wrap">True</property>
- <property name="max-width-chars">70</property>
</object>
</child>
<child>
- <object class="GtkButton" id="sign-button">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="halign">end</property>
- <property name="valign">center</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="action-name">props.sign-key</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
<child>
- <object class="GtkBox">
+ <object class="GtkGrid">
<property name="visible">True</property>
- <property name="orientation">horizontal</property>
<property name="can_focus">False</property>
- <property name="spacing">2</property>
+ <property name="margin">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
<child>
- <object class="GtkImage">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-index</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">3</property>
+ <property name="margin-bottom">12</property>
+ <child>
+ <object class="GtkLabel" id="name_label">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="halign">start</property>
+ <property name="selectable">True</property>
+ <attributes>
+ <attribute name="scale" value="1.75"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="email_label">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="halign">start</property>
+ <property name="selectable">True</property>
+ </object>
+ </child>
</object>
+ <packing>
+ <property name="top_attach">0</property>
+ <property name="left_attach">0</property>
+ <property name="width">2</property>
+ </packing>
</child>
<child>
<object class="GtkLabel">
- <property name="visible">True</property>
+ <property name="visible" bind-source="comment_label"
bind-property="visible" bind-flags="sync-create" />
<property name="can_focus">False</property>
- <property name="label" translatable="yes">_Sign this Key</property>
- <property name="use_underline">True</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkBox" id="revoke-area">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="can_focus">False</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel" id="trust-revoke-label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="use_markup">True</property>
- <property name="wrap">True</property>
- <property name="max-width-chars">70</property>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="revoke-button">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="can_focus">False</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-remove</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Comment</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
</object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="left_attach">0</property>
+ </packing>
</child>
<child>
- <object class="GtkLabel">
+ <object class="GtkLabel" id="comment_label">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">_Revoke Signature</property>
- <property name="use_underline">True</property>
+ <property name="can_focus">True</property>
+ <property name="xalign">0</property>
+ <property name="selectable">True</property>
</object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="left_attach">1</property>
+ </packing>
</child>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkBox" id="signatures-area">
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">_People who have signed this
key:</property>
- <property name="use_underline">True</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow4">
- <property name="visible">True</property>
- <property name="shadow_type">in</property>
- <child>
- <object class="GtkTreeView" id="signatures-tree">
- <property name="visible">True</property>
- <property name="vexpand">True</property>
- <property name="can_focus">True</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection2"/>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkCheckButton" id="signatures-toggle">
- <property name="label" translatable="yes">_Only display the signatures of people I
trust</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="xalign">0.5</property>
- <property name="draw_indicator">True</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin-start">3</property>
- <property name="margin-end">3</property>
- <property name="label" translatable="yes">Trust</property>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="can_focus">False</property>
- <property name="border_width">12</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="can_focus">False</property>
- <property name="spacing">12</property>
- <property name="homogeneous">True</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="can_focus">False</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Technical Details:</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- <child>
- <object class="GtkGrid">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="column_spacing">12</property>
- <property name="row_spacing">6</property>
- <property name="margin-start">12</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="xalign">0</property>
+ <property name="xalign">1</property>
<property name="yalign">0</property>
- <property name="label" translatable="yes">Key ID:</property>
+ <property name="label" translatable="yes">Key ID</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
</object>
<packing>
- <property name="top_attach">0</property>
+ <property name="top_attach">2</property>
<property name="left_attach">0</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="details-id-label">
+ <object class="GtkLabel" id="keyid_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="xalign">0</property>
- <property name="yalign">0</property>
<property name="selectable">True</property>
</object>
<packing>
- <property name="top_attach">0</property>
+ <property name="top_attach">2</property>
<property name="left_attach">1</property>
</packing>
</child>
@@ -646,25 +261,32 @@
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="xalign">0</property>
+ <property name="xalign">1</property>
<property name="yalign">0</property>
- <property name="label" translatable="yes">Type:</property>
+ <property name="label" translatable="yes">Fingerprint</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
</object>
<packing>
- <property name="top_attach">1</property>
+ <property name="top_attach">3</property>
<property name="left_attach">0</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="details-algo-label">
+ <object class="GtkLabel" id="fingerprint_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="xalign">0</property>
- <property name="yalign">0</property>
<property name="selectable">True</property>
+ <property name="wrap">True</property>
+ <property name="wrap-mode">word</property>
+ <property name="width-chars">24</property>
+ <property name="max-width-chars">24</property>
+ <property name="lines">2</property>
</object>
<packing>
- <property name="top_attach">1</property>
+ <property name="top_attach">3</property>
<property name="left_attach">1</property>
</packing>
</child>
@@ -672,25 +294,25 @@
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="xalign">0</property>
+ <property name="xalign">1</property>
<property name="yalign">0</property>
- <property name="label" translatable="yes">Strength:</property>
+ <property name="label" translatable="yes">Expires</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
</object>
<packing>
- <property name="top_attach">2</property>
+ <property name="top_attach">4</property>
<property name="left_attach">0</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="details-strength-label">
+ <object class="GtkLabel" id="expires_label">
<property name="visible">True</property>
- <property name="can_focus">True</property>
<property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="selectable">True</property>
</object>
<packing>
- <property name="top_attach">2</property>
+ <property name="top_attach">4</property>
<property name="left_attach">1</property>
</packing>
</child>
@@ -698,46 +320,55 @@
</child>
</object>
</child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="uids_container">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">User IDs</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="subkeys_container">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
+ <property name="orientation">horizontal</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
<property name="xalign">0</property>
- <property name="label" translatable="yes">Fingerprint:</property>
+ <property name="label" translatable="yes">Subkeys</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
- <child>
- <object class="GtkLabel" id="details-fingerprint-label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label">PLAC EHOL DER0 9023 435F
-B4C3 4349 0932 7854 3452</property>
- <property name="use_markup">True</property>
- <property name="selectable">True</property>
- <property name="margin-start">12</property>
- </object>
- </child>
</object>
</child>
</object>
</child>
<child>
- <object class="GtkBox">
+ <object class="GtkBox" id="trust-page">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="can_focus">False</property>
- <property name="spacing">18</property>
+ <property name="spacing">24</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
@@ -749,116 +380,92 @@ B4C3 4349 0932 7854 3452</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
- <property name="label" translatable="yes">Dates:</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">Trust</property>
+ <property name="tooltip-text" translatable="yes">Your trust of this
key</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
<child>
- <object class="GtkGrid">
+ <object class="GtkListBox">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="column_spacing">12</property>
- <property name="row_spacing">6</property>
- <property name="margin-start">12</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Created:</property>
- </object>
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="details-created-label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="xalign">0</property>
- <property name="selectable">True</property>
- </object>
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">1</property>
- </packing>
- </child>
+ <property name="selection-mode">none</property>
+ <style>
+ <class name="content"/>
+ </style>
<child>
- <object class="GtkLabel">
+ <object class="HdyActionRow">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Expires:</property>
+ <property name="title" translatable="yes">Signature trust</property>
+ <property name="subtitle" translatable="yes">I trust signatures from
this key on other keys</property>
+ <child>
+ <object class="GtkSwitch" id="trust-marginal-switch">
+ <property name="visible">True</property>
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="action-name">props.trust-marginal</property>
+ </object>
+ </child>
</object>
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">0</property>
- </packing>
</child>
<child>
- <object class="GtkLabel" id="details-expires-label">
+ <object class="HdyActionRow" id="trust_sign_row">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="xalign">0</property>
- <property name="selectable">True</property>
+ <property name="title" translatable="yes">Sign key</property>
+ <child>
+ <object class="GtkButton" id="sign-button">
+ <property name="visible">True</property>
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Sign key</property>
+ <property name="use_underline">True</property>
+ <property name="receives_default">False</property>
+ <property name="action-name">props.sign-key</property>
+ </object>
+ </child>
</object>
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">1</property>
- </packing>
</child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkBox" id="indicate_trust_box">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Indicate trust:</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="can_focus">False</property>
- <property name="spacing">12</property>
- <property name="margin-start">12</property>
<child>
- <object class="GtkLabel">
+ <object class="HdyActionRow" id="trust_revoke_row">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">You _trust the
owner:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic-widget">details-trust-combobox</property>
+ <property name="title" translatable="yes">Revoke key signature</property>
+ <child>
+ <object class="GtkButton" id="revoke-button">
+ <property name="visible">True</property>
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Revoke</property>
+ <property name="use_underline">True</property>
+ <property name="receives_default">False</property>
+ <property name="action-name">props.revoke-key</property>
+ </object>
+ </child>
</object>
</child>
<child>
- <object class="GtkComboBox" id="details-trust-combobox">
+ <object class="HdyActionRow" id="indicate_trust_row">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="model">model1</property>
+ <property name="title" translatable="yes">Owner trust</property>
+ <property name="subtitle" translatable="yes">Give a trust level to the
owner of this key</property>
<child>
- <object class="GtkCellRendererText"/>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
+ <object class="GtkComboBox" id="ownertrust_combobox">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <property name="can_focus">False</property>
+ <property name="model">model1</property>
+ <child>
+ <object class="GtkCellRendererText"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
</child>
</object>
</child>
@@ -870,40 +477,9 @@ B4C3 4349 0932 7854 3452</property>
</child>
</object>
</child>
- <child>
- <object class="GtkBox" id="subkeys_container">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Subkeys</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="tab">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin-start">3</property>
- <property name="margin-end">3</property>
- <property name="label" translatable="yes">Details</property>
</object>
</child>
</object>
+ </child>
+ </object>
</interface>
diff --git a/pgp/seahorse-pgp-uid-list-box.c b/pgp/seahorse-pgp-uid-list-box.c
index b05a7dab..de5fab10 100644
--- a/pgp/seahorse-pgp-uid-list-box.c
+++ b/pgp/seahorse-pgp-uid-list-box.c
@@ -131,6 +131,14 @@ seahorse_pgp_uid_list_box_class_init (SeahorsePgpUidListBoxClass *klass)
g_object_class_install_properties (gobject_class, N_PROPS, obj_props);
}
+/**
+ * seahorse_pgp_uid_list_box_new:
+ * @key: A PGP key
+ *
+ * Creates a new list box that shows the UIDs of @key
+ *
+ * Returns: (transfer floating): The new #SeahorsePgpUidListBox
+ */
GtkWidget *
seahorse_pgp_uid_list_box_new (SeahorsePgpKey *key)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]