seahorse r2258 - in trunk: . libcryptui



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]