seahorse r2258 - in trunk: . libcryptui
- From: sadam svn gnome org
- To: svn-commits-list gnome org
- Subject: seahorse r2258 - in trunk: . libcryptui
- Date: Sat, 5 Jul 2008 21:09:46 +0000 (UTC)
Author: sadam
Date: Sat Jul 5 21:09:46 2008
New Revision: 2258
URL: http://svn.gnome.org/viewvc/seahorse?rev=2258&view=rev
Log:
2008-07-05 Adam Schreiber <sadam clemson edu>
* libcryptui/cryptui-keyset.c:
* libcryptui/cryptui-key-store.c:
* libcryptui/cryptui-key-store.h:
* libcryptui/cryptui-key-chooser.c: Implement ToDo: replace signer
drop down
in chooser with check button when only one secret key
Modified:
trunk/ChangeLog
trunk/libcryptui/cryptui-key-chooser.c
trunk/libcryptui/cryptui-key-store.c
trunk/libcryptui/cryptui-key-store.h
trunk/libcryptui/cryptui-keyset.c
Modified: trunk/libcryptui/cryptui-key-chooser.c
==============================================================================
--- trunk/libcryptui/cryptui-key-chooser.c (original)
+++ trunk/libcryptui/cryptui-key-chooser.c Sat Jul 5 21:09:46 2008
@@ -50,6 +50,7 @@
CryptUIKeyStore *ckstore;
GtkTreeView *keylist;
GtkComboBox *keycombo;
+ GtkCheckButton *signercheck;
GtkComboBox *filtermode;
GtkEntry *filtertext;
@@ -140,6 +141,22 @@
g_signal_emit (chooser, signals[CHANGED], 0);
}
+
+static void
+signer_toggled (GtkWidget *widget, CryptUIKeyChooser *chooser)
+{
+ g_assert (chooser->priv->signercheck);
+
+ if (chooser->priv->enforce_prefs) {
+ set_keyset_value ((CryptUIKeyset *) g_object_get_data ((GObject*) (chooser->priv->signercheck), "ckset"),
+ SEAHORSE_LASTSIGNER_KEY,
+ (gchar*) g_object_get_data ((GObject*) (chooser->priv->signercheck), "key"));
+ }
+
+ g_signal_emit (chooser, signals[CHANGED], 0);
+
+}
+
static void
construct_recipients (CryptUIKeyChooser *chooser, GtkBox *box)
{
@@ -215,38 +232,67 @@
CryptUIKeyStore *ckstore;
GtkWidget *hbox;
GtkWidget *label;
+ guint count;
+ GList *keys;
+ gchar *keyname, *labelstr;
- /* Top filter box */
- hbox = gtk_hbox_new (FALSE, 12);
-
- /* Sign Label */
- label = gtk_label_new (_("_Sign message as:"));
- gtk_label_set_use_underline (GTK_LABEL (label), TRUE);
- gtk_container_add (GTK_CONTAINER (hbox), label);
- gtk_box_set_child_packing (GTK_BOX (hbox), label,
- FALSE, TRUE, 0, GTK_PACK_START);
/* TODO: HIG and beautification */
-
- /* TODO: When only one key is present this should be a checkbox
- ie: 'Sign this Message (as 'key name') */
-
+
if (!(chooser->priv->mode & CRYPTUI_KEY_CHOOSER_MUSTSIGN))
none_option = _("None (Don't Sign)");
/* The Sign combo */
ckstore = cryptui_key_store_new (chooser->priv->ckset, TRUE, none_option);
cryptui_key_store_set_filter (ckstore, signer_filter, NULL);
- chooser->priv->keycombo = cryptui_key_combo_new (ckstore);
+
+ count = cryptui_key_store_get_count (ckstore);
+
+ if (count == 1) {
+ keys = cryptui_key_store_get_all_keys (ckstore);
+
+ keyname = cryptui_keyset_key_display_name (ckstore->ckset, (gchar*) keys->data);
+ fprintf (stderr, "Display name is: %s\n", keyname);
+ labelstr = g_strdup_printf (_("Sign this message as %s"), keyname);
+ fprintf (stderr, "labelstr is: %s\nCreating check button", labelstr);
+
+ chooser->priv->signercheck = (GtkCheckButton*) gtk_check_button_new_with_label (labelstr);
+ g_object_set_data ((GObject*) (chooser->priv->signercheck), "ckset", ckstore->ckset);
+ g_object_set_data ((GObject*) (chooser->priv->signercheck), "key", keys->data);
+
+ g_signal_connect (chooser->priv->signercheck , "toggled", G_CALLBACK (signer_toggled), chooser);
+
+ /* Add it in */
+ gtk_container_add (GTK_CONTAINER (box), GTK_WIDGET (chooser->priv->signercheck));
+ gtk_box_set_child_packing (box, GTK_WIDGET (chooser->priv->signercheck), FALSE, TRUE, 0, GTK_PACK_START);
+
+
+ g_free (labelstr);
+ g_free (keyname);
+ g_list_free (keys);
+ } else if (count > 1) {
+ /* Top filter box */
+ hbox = gtk_hbox_new (FALSE, 12);
+
+ /* Sign Label */
+ label = gtk_label_new (_("_Sign message as:"));
+ gtk_label_set_use_underline (GTK_LABEL (label), TRUE);
+ gtk_container_add (GTK_CONTAINER (hbox), label);
+ gtk_box_set_child_packing (GTK_BOX (hbox), label,
+ FALSE, TRUE, 0, GTK_PACK_START);
+
+ chooser->priv->keycombo = cryptui_key_combo_new (ckstore);
+ g_signal_connect (chooser->priv->keycombo, "changed", G_CALLBACK (signer_changed), chooser);
+ gtk_container_add (GTK_CONTAINER (hbox), GTK_WIDGET (chooser->priv->keycombo));
+ gtk_box_set_child_packing (GTK_BOX (hbox), GTK_WIDGET (chooser->priv->keycombo),
+ TRUE, TRUE, 0, GTK_PACK_START);
+
+ /* Add it in */
+ gtk_container_add (GTK_CONTAINER (box), hbox);
+ gtk_box_set_child_packing (box, hbox, FALSE, TRUE, 0, GTK_PACK_START);
+ }
+
g_object_unref (ckstore);
- g_signal_connect (chooser->priv->keycombo, "changed", G_CALLBACK (signer_changed), chooser);
- gtk_container_add (GTK_CONTAINER (hbox), GTK_WIDGET (chooser->priv->keycombo));
- gtk_box_set_child_packing (GTK_BOX (hbox), GTK_WIDGET (chooser->priv->keycombo),
- TRUE, TRUE, 0, GTK_PACK_START);
-
- /* Add it in */
- gtk_container_add (GTK_CONTAINER (box), hbox);
- gtk_box_set_child_packing (box, hbox, FALSE, TRUE, 0, GTK_PACK_START);
}
/* -----------------------------------------------------------------------------
@@ -280,7 +326,7 @@
if (chooser->priv->mode & CRYPTUI_KEY_CHOOSER_SIGNER) {
construct_signer (chooser, GTK_BOX (obj));
- if (chooser->priv->enforce_prefs) {
+ if (chooser->priv->enforce_prefs && chooser->priv->keycombo) {
gchar *id = get_keyset_value (cryptui_key_combo_get_keyset (chooser->priv->keycombo),
SEAHORSE_LASTSIGNER_KEY);
cryptui_key_combo_set_key (chooser->priv->keycombo, id);
@@ -295,6 +341,8 @@
gtk_widget_grab_focus (GTK_WIDGET (chooser->priv->keylist));
else if (chooser->priv->keycombo)
gtk_widget_grab_focus (GTK_WIDGET (chooser->priv->keycombo));
+ else if (chooser->priv->signercheck)
+ gtk_widget_grab_focus (GTK_WIDGET (chooser->priv->signercheck));
chooser->priv->initialized = TRUE;
return obj;
@@ -488,8 +536,13 @@
const gchar*
cryptui_key_chooser_get_signer (CryptUIKeyChooser *chooser)
{
- g_return_val_if_fail (chooser->priv->keycombo != NULL, NULL);
- return cryptui_key_combo_get_key (chooser->priv->keycombo);
+ if (chooser->priv->keycombo != NULL)
+ return cryptui_key_combo_get_key (chooser->priv->keycombo);
+ else if (chooser->priv->signercheck != NULL)
+ return gtk_toggle_button_get_active (chooser->priv->signercheck) ?
+ (gchar*) g_object_get_data ((GObject*) (chooser->priv->signercheck), "key"):NULL;
+ else
+ return NULL;
}
void
Modified: trunk/libcryptui/cryptui-key-store.c
==============================================================================
--- trunk/libcryptui/cryptui-key-store.c (original)
+++ trunk/libcryptui/cryptui-key-store.c Sat Jul 5 21:09:46 2008
@@ -368,8 +368,11 @@
refilter_now (CryptUIKeyStore* ckstore)
{
cryptui_keyset_refresh (ckstore->ckset);
+
gtk_tree_model_filter_refilter (ckstore->priv->filter);
ckstore->priv->filter_stag = 0;
+
+ g_object_unref (ckstore);
return FALSE;
}
@@ -377,8 +380,12 @@
static void
refilter_later (CryptUIKeyStore* ckstore)
{
+ g_assert (ckstore->ckset != NULL);
+
if (ckstore->priv->filter_stag != 0)
g_source_remove (ckstore->priv->filter_stag);
+
+ g_object_ref (ckstore);
ckstore->priv->filter_stag = g_timeout_add (200, (GSourceFunc)refilter_now, ckstore);
}
@@ -826,6 +833,13 @@
return cryptui_keyset_get_keys (ckstore->ckset);
}
+guint
+cryptui_key_store_get_count (CryptUIKeyStore *ckstore)
+{
+ g_return_val_if_fail (CRYPTUI_KEY_STORE (ckstore), 0);
+ return cryptui_keyset_get_count (ckstore->ckset);
+}
+
gboolean
cryptui_key_store_have_selected_keys (CryptUIKeyStore *ckstore, GtkTreeView *view)
{
Modified: trunk/libcryptui/cryptui-key-store.h
==============================================================================
--- trunk/libcryptui/cryptui-key-store.h (original)
+++ trunk/libcryptui/cryptui-key-store.h Sat Jul 5 21:09:46 2008
@@ -106,6 +106,8 @@
GList* cryptui_key_store_get_all_keys (CryptUIKeyStore *ckstore);
+guint cryptui_key_store_get_count (CryptUIKeyStore *ckstore);
+
gboolean cryptui_key_store_have_selected_keys (CryptUIKeyStore *ckstore,
GtkTreeView *view);
Modified: trunk/libcryptui/cryptui-keyset.c
==============================================================================
--- trunk/libcryptui/cryptui-keyset.c (original)
+++ trunk/libcryptui/cryptui-keyset.c Sat Jul 5 21:09:46 2008
@@ -408,6 +408,8 @@
gchar **k, **keys = NULL;
GError *error = NULL;
+ g_assert (keyset != NULL);
+
/* Make note of all the keys we had prior to refresh */
check = g_hash_table_new (g_str_hash, g_str_equal);
g_hash_table_foreach (keyset->priv->keys, (GHFunc)keys_to_hash, check);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]