[gcr] gcr: Add way to set the labels for the prompt buttons
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gcr] gcr: Add way to set the labels for the prompt buttons
- Date: Fri, 10 Feb 2012 15:14:50 +0000 (UTC)
commit 5306b977d1764adf2965baf17aaf4cd19de7935b
Author: Stef Walter <stefw gnome org>
Date: Fri Feb 10 13:52:36 2012 +0100
gcr: Add way to set the labels for the prompt buttons
* Add continue-label and cancel-label properties to GcrPrompt
* Implement in GcrSystemPrompt and in the mock prompter
https://bugzilla.gnome.org/show_bug.cgi?id=669793
docs/reference/gcr/gcr-sections.txt | 4 +
gcr/gcr-base.symbols | 4 +
gcr/gcr-mock-prompter.c | 14 +++-
gcr/gcr-prompt-dialog.c | 37 ++++++++--
gcr/gcr-prompt.c | 96 +++++++++++++++++++++++++-
gcr/gcr-prompt.h | 12 +++-
gcr/gcr-system-prompt.c | 22 +++++-
gcr/gcr-system-prompter.c | 2 +-
gcr/tests/files/prompt-tests/multiple.prompt | 2 +
gcr/tests/test-system-prompt.c | 10 +++
po/POTFILES.in | 1 +
11 files changed, 190 insertions(+), 14 deletions(-)
---
diff --git a/docs/reference/gcr/gcr-sections.txt b/docs/reference/gcr/gcr-sections.txt
index a71516a..129cfdc 100644
--- a/docs/reference/gcr/gcr-sections.txt
+++ b/docs/reference/gcr/gcr-sections.txt
@@ -731,6 +731,10 @@ gcr_prompt_get_description
gcr_prompt_set_description
gcr_prompt_get_warning
gcr_prompt_set_warning
+gcr_prompt_get_continue_label
+gcr_prompt_set_continue_label
+gcr_prompt_get_cancel_label
+gcr_prompt_set_cancel_label
gcr_prompt_get_choice_label
gcr_prompt_set_choice_label
gcr_prompt_get_choice_chosen
diff --git a/gcr/gcr-base.symbols b/gcr/gcr-base.symbols
index 5ca9cbd..8d101e7 100644
--- a/gcr/gcr-base.symbols
+++ b/gcr/gcr-base.symbols
@@ -157,8 +157,10 @@ gcr_prompt_confirm_async
gcr_prompt_confirm_finish
gcr_prompt_confirm_run
gcr_prompt_get_caller_window
+gcr_prompt_get_cancel_label
gcr_prompt_get_choice_chosen
gcr_prompt_get_choice_label
+gcr_prompt_get_continue_label
gcr_prompt_get_description
gcr_prompt_get_message
gcr_prompt_get_password_new
@@ -172,8 +174,10 @@ gcr_prompt_password_finish
gcr_prompt_password_run
gcr_prompt_reply_get_type
gcr_prompt_set_caller_window
+gcr_prompt_set_cancel_label
gcr_prompt_set_choice_chosen
gcr_prompt_set_choice_label
+gcr_prompt_set_continue_label
gcr_prompt_set_description
gcr_prompt_set_message
gcr_prompt_set_password_new
diff --git a/gcr/gcr-mock-prompter.c b/gcr/gcr-mock-prompter.c
index ccd6a4d..e506b3b 100644
--- a/gcr/gcr-mock-prompter.c
+++ b/gcr/gcr-mock-prompter.c
@@ -76,7 +76,9 @@ enum {
PROP_PASSWORD_STRENGTH,
PROP_CHOICE_LABEL,
PROP_CHOICE_CHOSEN,
- PROP_CALLER_WINDOW
+ PROP_CALLER_WINDOW,
+ PROP_CONTINUE_LABEL,
+ PROP_CANCEL_LABEL,
};
struct _GcrMockPrompt {
@@ -195,6 +197,8 @@ _gcr_mock_prompt_init (GcrMockPrompt *self)
blank_string_property (self->properties, "warning");
blank_string_property (self->properties, "choice-label");
blank_string_property (self->properties, "caller-window");
+ blank_string_property (self->properties, "continue-label");
+ blank_string_property (self->properties, "cancel-label");
blank_boolean_property (self->properties, "choice-chosen");
blank_boolean_property (self->properties, "password-new");
@@ -220,6 +224,8 @@ _gcr_mock_prompt_set_property (GObject *obj,
case PROP_CHOICE_LABEL:
case PROP_CHOICE_CHOSEN:
case PROP_CALLER_WINDOW:
+ case PROP_CONTINUE_LABEL:
+ case PROP_CANCEL_LABEL:
param = g_new0 (GParameter, 1);
param->name = pspec->name;
g_value_init (¶m->value, pspec->value_type);
@@ -252,6 +258,8 @@ _gcr_mock_prompt_get_property (GObject *obj,
case PROP_CHOICE_LABEL:
case PROP_CHOICE_CHOSEN:
case PROP_CALLER_WINDOW:
+ case PROP_CONTINUE_LABEL:
+ case PROP_CANCEL_LABEL:
param = g_hash_table_lookup (self->properties, pspec->name);
g_return_if_fail (param != NULL);
g_value_copy (¶m->value, value);
@@ -388,6 +396,8 @@ _gcr_mock_prompt_class_init (GcrMockPromptClass *klass)
g_object_class_override_property (gobject_class, PROP_CHOICE_CHOSEN, "choice-chosen");
g_object_class_override_property (gobject_class, PROP_PASSWORD_NEW, "password-new");
g_object_class_override_property (gobject_class, PROP_PASSWORD_STRENGTH, "password-strength");
+ g_object_class_override_property (gobject_class, PROP_CONTINUE_LABEL, "continue-label");
+ g_object_class_override_property (gobject_class, PROP_CANCEL_LABEL, "cancel-label");
}
static gboolean
@@ -453,7 +463,7 @@ gcr_mock_prompt_confirm_finish (GcrPrompt *prompt,
gcr_mock_prompt_confirm_async), GCR_PROMPT_REPLY_CANCEL);
return g_simple_async_result_get_op_res_gboolean (G_SIMPLE_ASYNC_RESULT (result)) ?
- GCR_PROMPT_REPLY_OK : GCR_PROMPT_REPLY_CANCEL;
+ GCR_PROMPT_REPLY_CONTINUE : GCR_PROMPT_REPLY_CANCEL;
}
static void
diff --git a/gcr/gcr-prompt-dialog.c b/gcr/gcr-prompt-dialog.c
index 9174904..3c4b331 100644
--- a/gcr/gcr-prompt-dialog.c
+++ b/gcr/gcr-prompt-dialog.c
@@ -78,6 +78,8 @@ enum {
PROP_PASSWORD_NEW,
PROP_PASSWORD_STRENGTH,
PROP_CALLER_WINDOW,
+ PROP_CONTINUE_LABEL,
+ PROP_CANCEL_LABEL,
PROP_PASSWORD_VISIBLE,
PROP_CONFIRM_VISIBLE,
@@ -95,6 +97,8 @@ struct _GcrPromptDialogPrivate {
gboolean password_new;
guint password_strength;
gchar *caller_window;
+ gchar *continue_label;
+ gchar *cancel_label;
GSimpleAsyncResult *async_result;
GcrPromptReply last_reply;
@@ -226,6 +230,16 @@ gcr_prompt_dialog_set_property (GObject *obj,
update_transient_for (self);
g_object_notify (obj, "caller-window");
break;
+ case PROP_CONTINUE_LABEL:
+ g_free (self->pv->continue_label);
+ self->pv->continue_label = g_value_dup_string (value);
+ g_object_notify (obj, "continue-label");
+ break;
+ case PROP_CANCEL_LABEL:
+ g_free (self->pv->cancel_label);
+ self->pv->cancel_label = g_value_dup_string (value);
+ g_object_notify (obj, "cancel-label");
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
break;
@@ -278,6 +292,12 @@ gcr_prompt_dialog_get_property (GObject *obj,
case PROP_CHOICE_VISIBLE:
g_value_set_boolean (value, self->pv->choice_label && self->pv->choice_label[0]);
break;
+ case PROP_CONTINUE_LABEL:
+ g_value_set_string (value, self->pv->continue_label);
+ break;
+ case PROP_CANCEL_LABEL:
+ g_value_set_string (value, self->pv->cancel_label);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
break;
@@ -466,15 +486,16 @@ gcr_prompt_dialog_constructed (GObject *obj)
GtkWidget *widget;
GtkWidget *entry;
GtkWidget *content;
+ GtkWidget *button;
GtkGrid *grid;
G_OBJECT_CLASS (gcr_prompt_dialog_parent_class)->constructed (obj);
dialog = GTK_DIALOG (self);
- gtk_dialog_add_buttons (dialog,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- _("Continue"), GTK_RESPONSE_OK,
- NULL);
+ button = gtk_dialog_add_button (dialog, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+ g_object_bind_property (self, "cancel-label", button, "label", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
+ button = gtk_dialog_add_button (dialog, GTK_STOCK_OK, GTK_RESPONSE_OK);
+ g_object_bind_property (self, "continue-label", button, "label", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
gtk_window_set_keep_above (GTK_WINDOW (dialog), TRUE);
@@ -656,7 +677,7 @@ gcr_prompt_dialog_response (GtkDialog *dialog,
default:
break;
}
- self->pv->last_reply = GCR_PROMPT_REPLY_OK;
+ self->pv->last_reply = GCR_PROMPT_REPLY_CONTINUE;
break;
default:
@@ -741,6 +762,10 @@ gcr_prompt_dialog_class_init (GcrPromptDialogClass *klass)
g_object_class_override_property (gobject_class, PROP_CALLER_WINDOW, "caller-window");
+ g_object_class_override_property (gobject_class, PROP_CONTINUE_LABEL, "continue-label");
+
+ g_object_class_override_property (gobject_class, PROP_CANCEL_LABEL, "cancel-label");
+
/**
* GcrPromptDialog:password-visible
*
@@ -829,7 +854,7 @@ gcr_prompt_dialog_password_finish (GcrPrompt *prompt,
if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
return NULL;
- if (self->pv->last_reply == GCR_PROMPT_REPLY_OK)
+ if (self->pv->last_reply == GCR_PROMPT_REPLY_CONTINUE)
return gtk_entry_buffer_get_text (self->pv->password_buffer);
return NULL;
}
diff --git a/gcr/gcr-prompt.c b/gcr/gcr-prompt.c
index df6629b..29d6492 100644
--- a/gcr/gcr-prompt.c
+++ b/gcr/gcr-prompt.c
@@ -25,6 +25,8 @@
#include "gcr-prompt.h"
+#include <glib/gi18n-lib.h>
+
/**
* SECTION:gcr-prompt
* @title: GcrPrompt
@@ -68,7 +70,7 @@
/**
* GcrPromptReply:
- * @GCR_PROMPT_REPLY_OK: the user replied with 'ok'
+ * @GCR_PROMPT_REPLY_CONTINUE: the user replied with 'ok'
* @GCR_PROMPT_REPLY_CANCEL: the prompt was cancelled
*
* Various replies returned by gcr_prompt_confirm() and friends.
@@ -206,6 +208,24 @@ gcr_prompt_default_init (GcrPromptIface *iface)
g_param_spec_string ("caller-window", "Caller window", "Window ID of application window requesting prompt",
NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * GcrPrompt:continue-label:
+ *
+ * The label for the continue button in the prompt.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string ("continue-label", "Continue label", "Continue button label",
+ _("Continue"), G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * GcrPrompt:cancel-label:
+ *
+ * The label for the cancel button in the prompt.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string ("cancel-label", "Cancel label", "Cancel button label",
+ _("Cancel"), G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
g_once_init_leave (&initialized, 1);
}
}
@@ -583,6 +603,80 @@ gcr_prompt_set_caller_window (GcrPrompt *prompt,
}
/**
+ * gcr_prompt_get_continue_label:
+ * @prompt: the prompt
+ *
+ * Get the label for the continue button.
+ *
+ * This is the button that results in a %GCR_PROMPT_REPLY_CONTINUE reply
+ * from the prompt.
+ *
+ * Returns: (transfer full): a newly allocated string containing the label
+ */
+gchar *
+gcr_prompt_get_continue_label (GcrPrompt *prompt)
+{
+ gchar *continue_label = NULL;
+ g_object_get (prompt, "continue-label", &continue_label, NULL);
+ return continue_label;
+}
+
+/**
+ * gcr_prompt_set_continue_label:
+ * @prompt: the prompt
+ * @continue_label: the label
+ *
+ * Set the label for the continue button.
+ *
+ * This is the button that results in a %GCR_PROMPT_REPLY_CONTINUE reply
+ * from the prompt.
+ */
+void
+gcr_prompt_set_continue_label (GcrPrompt *prompt,
+ const gchar *continue_label)
+{
+ g_return_if_fail (GCR_IS_PROMPT (prompt));
+ g_object_set (prompt, "continue-label", continue_label, NULL);
+}
+
+/**
+ * gcr_prompt_get_cancel_label:
+ * @prompt: the prompt
+ *
+ * Get the label for the cancel button.
+ *
+ * This is the button that results in a %GCR_PROMPT_REPLY_CANCEL reply
+ * from the prompt.
+ *
+ * Returns: (transfer full): a newly allocated string containing the label
+ */
+gchar *
+gcr_prompt_get_cancel_label (GcrPrompt *prompt)
+{
+ gchar *cancel_label = NULL;
+ g_object_get (prompt, "cancel-label", &cancel_label, NULL);
+ return cancel_label;
+}
+
+/**
+ * gcr_prompt_set_cancel_label:
+ * @prompt: the prompt
+ * @cancel_label: the label
+ *
+ * Set the label for the continue button.
+ *
+ * This is the button that results in a %GCR_PROMPT_REPLY_CANCEL reply
+ * from the prompt.
+ */
+void
+gcr_prompt_set_cancel_label (GcrPrompt *prompt,
+ const gchar *cancel_label)
+{
+ g_return_if_fail (GCR_IS_PROMPT (prompt));
+ g_object_set (prompt, "cancel-label", cancel_label, NULL);
+}
+
+/**
* gcr_prompt_password_async:
* @prompt: a prompt
* @cancellable: optional cancellation object
diff --git a/gcr/gcr-prompt.h b/gcr/gcr-prompt.h
index 5fa0055..e68982d 100644
--- a/gcr/gcr-prompt.h
+++ b/gcr/gcr-prompt.h
@@ -36,7 +36,7 @@ G_BEGIN_DECLS
typedef enum {
GCR_PROMPT_REPLY_CANCEL = 0,
- GCR_PROMPT_REPLY_OK = 1,
+ GCR_PROMPT_REPLY_CONTINUE = 1,
} GcrPromptReply;
#define GCR_TYPE_PROMPT (gcr_prompt_get_type ())
@@ -113,6 +113,16 @@ gchar * gcr_prompt_get_caller_window (GcrPrompt *prompt);
void gcr_prompt_set_caller_window (GcrPrompt *prompt,
const gchar *window_id);
+gchar * gcr_prompt_get_continue_label (GcrPrompt *prompt);
+
+void gcr_prompt_set_continue_label (GcrPrompt *prompt,
+ const gchar *continue_label);
+
+gchar * gcr_prompt_get_cancel_label (GcrPrompt *prompt);
+
+void gcr_prompt_set_cancel_label (GcrPrompt *prompt,
+ const gchar *cancel_label);
+
void gcr_prompt_password_async (GcrPrompt *prompt,
GCancellable *cancellable,
GAsyncReadyCallback callback,
diff --git a/gcr/gcr-system-prompt.c b/gcr/gcr-system-prompt.c
index cae19a6..08b2db5 100644
--- a/gcr/gcr-system-prompt.c
+++ b/gcr/gcr-system-prompt.c
@@ -101,7 +101,9 @@ enum {
PROP_PASSWORD_STRENGTH,
PROP_CHOICE_LABEL,
PROP_CHOICE_CHOSEN,
- PROP_CALLER_WINDOW
+ PROP_CALLER_WINDOW,
+ PROP_CONTINUE_LABEL,
+ PROP_CANCEL_LABEL
};
struct _GcrSystemPromptPrivate {
@@ -306,6 +308,12 @@ gcr_system_prompt_set_property (GObject *obj,
case PROP_CALLER_WINDOW:
prompt_set_string_property (self, "caller-window", g_value_get_string (value));
break;
+ case PROP_CONTINUE_LABEL:
+ prompt_set_string_property (self, "continue-label", g_value_get_string (value));
+ break;
+ case PROP_CANCEL_LABEL:
+ prompt_set_string_property (self, "cancel-label", g_value_get_string (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
break;
@@ -354,6 +362,12 @@ gcr_system_prompt_get_property (GObject *obj,
case PROP_CALLER_WINDOW:
g_value_set_string (value, prompt_get_string_property (self, "caller-window", TRUE));
break;
+ case PROP_CONTINUE_LABEL:
+ g_value_set_string (value, prompt_get_string_property (self, "continue-label", TRUE));
+ break;
+ case PROP_CANCEL_LABEL:
+ g_value_set_string (value, prompt_get_string_property (self, "cancel-label", TRUE));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
break;
@@ -460,6 +474,8 @@ gcr_system_prompt_class_init (GcrSystemPromptClass *klass)
g_object_class_override_property (gobject_class, PROP_CHOICE_LABEL, "choice-label");
g_object_class_override_property (gobject_class, PROP_CHOICE_CHOSEN, "choice-chosen");
g_object_class_override_property (gobject_class, PROP_CALLER_WINDOW, "caller-window");
+ g_object_class_override_property (gobject_class, PROP_CONTINUE_LABEL, "continue-label");
+ g_object_class_override_property (gobject_class, PROP_CANCEL_LABEL, "cancel-label");
}
/**
@@ -1020,7 +1036,7 @@ handle_last_response (GcrSystemPrompt *self)
GCR_PROMPT_REPLY_CANCEL);
if (g_str_equal (self->pv->last_response, GCR_DBUS_PROMPT_REPLY_YES)) {
- response = GCR_PROMPT_REPLY_OK;
+ response = GCR_PROMPT_REPLY_CONTINUE;
} else if (g_str_equal (self->pv->last_response, GCR_DBUS_PROMPT_REPLY_NO) ||
g_str_equal (self->pv->last_response, GCR_DBUS_PROMPT_REPLY_NONE)) {
@@ -1061,7 +1077,7 @@ gcr_system_prompt_password_finish (GcrPrompt *prompt,
if (g_simple_async_result_propagate_error (res, error))
return FALSE;
- if (handle_last_response (self) == GCR_PROMPT_REPLY_OK)
+ if (handle_last_response (self) == GCR_PROMPT_REPLY_CONTINUE)
return gcr_secret_exchange_get_secret (self->pv->exchange, NULL);
return NULL;
diff --git a/gcr/gcr-system-prompter.c b/gcr/gcr-system-prompter.c
index b094f01..49727ed 100644
--- a/gcr/gcr-system-prompter.c
+++ b/gcr/gcr-system-prompter.c
@@ -776,7 +776,7 @@ on_prompt_confirm (GObject *source,
}
switch (reply) {
- case GCR_PROMPT_REPLY_OK:
+ case GCR_PROMPT_REPLY_CONTINUE:
response = GCR_DBUS_PROMPT_REPLY_YES;
break;
case GCR_PROMPT_REPLY_CANCEL:
diff --git a/gcr/tests/files/prompt-tests/multiple.prompt b/gcr/tests/files/prompt-tests/multiple.prompt
index 29489c5..5f02425 100644
--- a/gcr/tests/files/prompt-tests/multiple.prompt
+++ b/gcr/tests/files/prompt-tests/multiple.prompt
@@ -5,6 +5,8 @@ message = Enter password for keyring 'sean' to unlock
description = An application wants access to the keyring 'sean', but it is locked
choice-label = Always unlock this keyring whenever I'm logged in.
password-new = false
+continue-label = Go
+cancel-label = Stop
[one]
type = password
diff --git a/gcr/tests/test-system-prompt.c b/gcr/tests/test-system-prompt.c
index 99344bf..96920c9 100644
--- a/gcr/tests/test-system-prompt.c
+++ b/gcr/tests/test-system-prompt.c
@@ -335,6 +335,8 @@ test_prompt_properties (Test *test,
"choice-chosen", TRUE,
"password-new", TRUE,
"password-strength", 0,
+ "continue-label", "My Continue",
+ "cancel-label", "My Cancel",
NULL);
prompt = gcr_system_prompt_open_for_prompter (test->prompter_name, 0, NULL, &error);
@@ -350,6 +352,8 @@ test_prompt_properties (Test *test,
"warning", "Other Warning",
"password-new", FALSE,
"choice-chosen", TRUE,
+ "continue-label", "Other Continue",
+ "cancel-label", "Other Cancel",
NULL);
g_assert_cmpstr (gcr_prompt_get_title (prompt), ==, "Other Title");
@@ -358,6 +362,8 @@ test_prompt_properties (Test *test,
g_assert_cmpstr (gcr_prompt_get_message (prompt), ==, "Other Message");
g_assert_cmpstr (gcr_prompt_get_caller_window (prompt), ==, "01012");
g_assert_cmpstr (gcr_prompt_get_warning (prompt), ==, "Other Warning");
+ g_assert_cmpstr (gcr_prompt_get_continue_label (prompt), ==, "Other Continue");
+ g_assert_cmpstr (gcr_prompt_get_cancel_label (prompt), ==, "Other Cancel");
g_assert (gcr_prompt_get_password_new (prompt) == FALSE);
g_assert (gcr_prompt_get_choice_chosen (prompt) == TRUE);
@@ -367,6 +373,8 @@ test_prompt_properties (Test *test,
gcr_prompt_set_message (prompt, "My Message");
gcr_prompt_set_caller_window (prompt, "01010");
gcr_prompt_set_warning (prompt, "My Warning");
+ gcr_prompt_set_continue_label (prompt, "My Continue");
+ gcr_prompt_set_cancel_label (prompt, "My Cancel");
gcr_prompt_set_password_new (prompt, TRUE);
gcr_prompt_set_choice_chosen (prompt, TRUE);
@@ -398,6 +406,8 @@ test_prompt_properties_unset (Test *test,
g_assert_cmpstr (gcr_prompt_get_message (prompt), ==, NULL);
g_assert_cmpstr (gcr_prompt_get_caller_window (prompt), ==, NULL);
g_assert_cmpstr (gcr_prompt_get_warning (prompt), ==, NULL);
+ g_assert_cmpstr (gcr_prompt_get_continue_label (prompt), ==, "Continue");
+ g_assert_cmpstr (gcr_prompt_get_cancel_label (prompt), ==, "Cancel");
g_assert (gcr_prompt_get_password_new (prompt) == FALSE);
g_assert (gcr_prompt_get_choice_chosen (prompt) == FALSE);
g_assert_cmpint (gcr_prompt_get_password_strength (prompt), ==, 0);
diff --git a/po/POTFILES.in b/po/POTFILES.in
index ec60cdd..c78d448 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -25,6 +25,7 @@ gcr/gcr-parser.c
gcr/gcr-pkcs11-import-dialog.c
[type: gettext/glade]gcr/gcr-pkcs11-import-dialog.ui
gcr/gcr-pkcs11-import-interaction.c
+gcr/gcr-prompt.c
gcr/gcr-prompt-dialog.c
gcr/gcr-subject-public-key.c
gcr/gcr-system-prompt.c
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]