diff --git a/src/keyeditdlg.c b/src/keyeditdlg.c
index 425663a..b014726 100644
--- a/src/keyeditdlg.c
+++ b/src/keyeditdlg.c
@@ -1,354 +1,354 @@
/* keyeditdlg.c - The GNU Privacy Assistant
Copyright (C) 2000, 2001 G-N-U GmbH.
Copyright (C) 2003 Miguel Coca.
Copyright (C) 2008 g10 Code GmbH.
This file is part of GPA
GPA is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
GPA is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see . */
#ifdef HAVE_CONFIG_H
# include
#endif
#include
#include
#include
#include "gpa.h"
#include "keyeditdlg.h"
#include "gtktools.h"
#include "gpawidgets.h"
#include "convert.h"
#include "keytable.h"
#include "gpakeyexpireop.h"
#include "gpakeypasswdop.h"
/* Signals */
enum
{
KEY_MODIFIED,
LAST_SIGNAL
};
static guint signals [LAST_SIGNAL] = { 0 };
/* Properties */
enum
{
PROP_0,
PROP_WINDOW,
PROP_KEY,
};
static GObjectClass *parent_class = NULL;
/* internal API */
static void gpa_key_edit_change_expiry (GtkWidget *widget,
GpaKeyEditDialog *dialog);
static void gpa_key_edit_change_passphrase (GtkWidget *widget,
GpaKeyEditDialog *dialog);
static void
gpa_key_edit_dialog_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
GpaKeyEditDialog *dialog = GPA_KEY_EDIT_DIALOG (object);
switch (prop_id)
{
case PROP_WINDOW:
g_value_set_object (value,
gtk_window_get_transient_for (GTK_WINDOW (dialog)));
break;
case PROP_KEY:
g_value_set_pointer (value, dialog->key);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
gpa_key_edit_dialog_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
GpaKeyEditDialog *dialog = GPA_KEY_EDIT_DIALOG (object);
switch (prop_id)
{
case PROP_WINDOW:
gtk_window_set_transient_for (GTK_WINDOW (dialog),
g_value_get_object (value));
break;
case PROP_KEY:
dialog->key = (gpgme_key_t) g_value_get_pointer (value);
gpgme_key_ref (dialog->key);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
gpa_key_edit_dialog_finalize (GObject *object)
{
GpaKeyEditDialog *dialog = GPA_KEY_EDIT_DIALOG (object);
if (dialog->key)
{
gpgme_key_unref (dialog->key);
}
G_OBJECT_CLASS (parent_class)->finalize (object);
}
static GObject*
gpa_key_edit_dialog_constructor (GType type,
guint n_construct_properties,
GObjectConstructParam *construct_properties)
{
GObject *object;
GpaKeyEditDialog *dialog;
GtkWidget *vbox;
GtkWidget *frame;
GtkWidget *hbox;
GtkWidget *label;
GtkWidget *button;
GtkWidget *table;
gchar *date_string;
/* Invoke parent's constructor */
object = parent_class->constructor (type,
n_construct_properties,
construct_properties);
dialog = GPA_KEY_EDIT_DIALOG (object);
/* Initialize */
gpa_window_set_title (GTK_WINDOW (dialog), _("Edit Key"));
gtk_dialog_add_buttons (GTK_DIALOG (dialog),
_("_Close"),
GTK_RESPONSE_CLOSE,
NULL);
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE);
gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
- vbox = gtk_dialog_get_content_area(dialog);
+ vbox = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
/* info about the key */
table = gpa_key_info_new (dialog->key);
gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, TRUE, 0);
/* change passphrase */
button = gtk_button_new_with_mnemonic (_("Change _passphrase"));
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 5);
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (gpa_key_edit_change_passphrase), dialog);
/* change expiry date */
frame = gtk_frame_new (_("Expiry Date"));
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 5);
hbox = gtk_hbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (frame), hbox);
gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
gtk_box_set_spacing (GTK_BOX (hbox), 10);
date_string = gpa_expiry_date_string (dialog->key->subkeys->expires);
label = gtk_label_new (date_string);
g_free (date_string);
dialog->expiry = label;
gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
button = gtk_button_new_with_mnemonic (_("Change _expiration"));
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
gtk_widget_set_sensitive (button,(gpa_keytable_lookup_key
(gpa_keytable_get_secret_instance(),
dialog->key->subkeys->fpr) != NULL));
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (gpa_key_edit_change_expiry), dialog);
/* Close the dialog in response */
g_signal_connect (G_OBJECT (dialog), "response",
G_CALLBACK (gtk_widget_destroy), dialog);
return object;
}
static void
gpa_key_edit_dialog_init (GpaKeyEditDialog *dialog)
{
dialog->key = NULL;
dialog->expiry = NULL;
}
static void
gpa_key_edit_dialog_class_init (GpaKeyEditDialogClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
object_class->constructor = gpa_key_edit_dialog_constructor;
object_class->finalize = gpa_key_edit_dialog_finalize;
object_class->set_property = gpa_key_edit_dialog_set_property;
object_class->get_property = gpa_key_edit_dialog_get_property;
/* Properties */
g_object_class_install_property (object_class,
PROP_WINDOW,
g_param_spec_object
("window", "Parent window",
"Parent window", GTK_TYPE_WIDGET,
G_PARAM_WRITABLE|G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class,
PROP_KEY,
g_param_spec_pointer
("key", "Key",
"Key",
G_PARAM_WRITABLE|G_PARAM_CONSTRUCT_ONLY));
/* Signals */
signals[KEY_MODIFIED] =
g_signal_new ("key_modified",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GpaKeyEditDialogClass, key_modified),
NULL, NULL,
g_cclosure_marshal_VOID__POINTER,
G_TYPE_NONE, 1,
G_TYPE_POINTER);
}
GType
gpa_key_edit_dialog_get_type (void)
{
static GType dialog_type = 0;
if (!dialog_type)
{
static const GTypeInfo dialog_info =
{
sizeof (GpaKeyEditDialogClass),
(GBaseInitFunc) NULL,
(GBaseFinalizeFunc) NULL,
(GClassInitFunc) gpa_key_edit_dialog_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
sizeof (GpaKeyEditDialog),
0, /* n_preallocs */
(GInstanceInitFunc) gpa_key_edit_dialog_init,
};
dialog_type = g_type_register_static (GTK_TYPE_DIALOG,
"GpaKeyEditDialog",
&dialog_info, 0);
}
return dialog_type;
}
/* Internal functions */
static void
gpa_key_edit_dialog_new_expiration (GpaKeyOperation *op,
gpgme_key_t key,
GDate *new_date,
gpointer data)
{
GpaKeyEditDialog *dialog = GPA_KEY_EDIT_DIALOG (data);
struct tm tm;
gchar *date_string;
if (new_date)
{
g_date_to_struct_tm (new_date, &tm);
date_string = gpa_expiry_date_string (mktime(&tm));
}
else
{
date_string = gpa_expiry_date_string (0);
}
gtk_label_set_text (GTK_LABEL (dialog->expiry), date_string);
g_free (date_string);
}
static void
gpa_key_edit_dialog_changed_wot_cb (GpaKeyOperation *op, gpointer data)
{
GpaKeyEditDialog *dialog = GPA_KEY_EDIT_DIALOG (data);
g_signal_emit_by_name (dialog, "key_modified", dialog->key);
}
/* signal handler for the expiry date change button. */
static void
gpa_key_edit_change_expiry(GtkWidget * widget, GpaKeyEditDialog *dialog)
{
/* All key operations want a list of key, so we give them one */
GList *keys = g_list_append (NULL, dialog->key);
GpaKeyExpireOperation *op =
gpa_key_expire_operation_new (GTK_WIDGET (dialog), keys);
g_signal_connect (G_OBJECT (op), "new_expiration",
G_CALLBACK (gpa_key_edit_dialog_new_expiration),
dialog);
g_signal_connect (G_OBJECT (op), "changed_wot",
G_CALLBACK (gpa_key_edit_dialog_changed_wot_cb),
dialog);
g_signal_connect (G_OBJECT (op), "completed",
G_CALLBACK (g_object_unref), dialog);
}
/* signal handler for the change passphrase button. */
static void
gpa_key_edit_change_passphrase (GtkWidget *widget, GpaKeyEditDialog *dialog)
{
/* All key operations want a list of key, so we give them one */
GList *keys = g_list_append (NULL, dialog->key);
GpaKeyPasswdOperation *op =
gpa_key_passwd_operation_new (GTK_WIDGET (dialog), keys);
g_signal_connect (G_OBJECT (op), "changed_wot",
G_CALLBACK (gpa_key_edit_dialog_changed_wot_cb),
dialog);
g_signal_connect (G_OBJECT (op), "completed",
G_CALLBACK (g_object_unref), dialog);
}
/* API */
/* Create a new "edit key" dialog.
*/
GtkWidget*
gpa_key_edit_dialog_new (GtkWidget *parent, gpgme_key_t key)
{
GpaKeyEditDialog *dialog;
dialog = g_object_new (GPA_KEY_EDIT_DIALOG_TYPE,
"window", parent,
"key", key, NULL);
return GTK_WIDGET(dialog);
}