2009-01-06 [colin] 3.7.0cvs15
[claws.git] / src / plugins / pgpcore / select-keys.c
index 5c4bf57703642e8b073688907079b2f93c62ba80..c2000358fefe6018ab064123a34dbba75cf49830 100644 (file)
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gdk/gdkkeysyms.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkwidget.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtkscrolledwindow.h>
-#include <gtk/gtkvbox.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtkclist.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtkhbbox.h>
-#include <gtk/gtkbutton.h>
-#include <gtk/gtkstock.h>
-
+#include <gtk/gtk.h>
 #include "select-keys.h"
 #include "utils.h"
 #include "gtkutils.h"
@@ -65,7 +53,7 @@ struct select_keys_s {
     int okay;
     GtkWidget *window;
     GtkLabel *toplabel;
-    GtkCList *clist;
+    GtkCMCList *clist;
     const char *pattern;
     unsigned int num_keys;
     gpgme_key_t *kset;
@@ -77,7 +65,7 @@ struct select_keys_s {
 };
 
 
-static void set_row (GtkCList *clist, gpgme_key_t key, gpgme_protocol_t proto);
+static void set_row (GtkCMCList *clist, gpgme_key_t key, gpgme_protocol_t proto);
 static gpgme_key_t fill_clist (struct select_keys_s *sk, const char *pattern,
                        gpgme_protocol_t proto);
 static void create_dialog (struct select_keys_s *sk);
@@ -138,7 +126,7 @@ gpgmegtk_recipient_selection (GSList *recp_names, SelectionResult *result,
     do {
         sk.pattern = recp_names? recp_names->data:NULL;
        sk.proto = proto;
-        gtk_clist_clear (sk.clist);
+        gtk_cmclist_clear (sk.clist);
         key = fill_clist (&sk, sk.pattern, proto);
         update_progress (&sk, 0, sk.pattern);
        if (!key) {
@@ -184,7 +172,7 @@ destroy_key (gpointer data)
 }
 
 static void
-set_row (GtkCList *clist, gpgme_key_t key, gpgme_protocol_t proto)
+set_row (GtkCMCList *clist, gpgme_key_t key, gpgme_protocol_t proto)
 {
     const char *s;
     const char *text[N_COL_TITLES];
@@ -195,8 +183,9 @@ set_row (GtkCList *clist, gpgme_key_t key, gpgme_protocol_t proto)
 
     /* first check whether the key is capable of encryption which is not
      * the case for revoked, expired or sign-only keys */
-    if (!key->can_encrypt)
+    if (!key->can_encrypt || key->revoked || key->expired)
         return;
+
     algo_buf = g_strdup_printf ("%du/%s", 
          key->subkeys->length,
          gpgme_pubkey_algo_name(key->subkeys->pubkey_algo) );
@@ -247,37 +236,37 @@ set_row (GtkCList *clist, gpgme_key_t key, gpgme_protocol_t proto)
     switch (key->uids->validity)
       {
       case GPGME_VALIDITY_UNDEFINED:
-        s = "q";
+        s = _("Undefined");
         break;
       case GPGME_VALIDITY_NEVER:
-        s = "n";
+        s = _("Never");
         break;
       case GPGME_VALIDITY_MARGINAL:
-        s = "m";
+        s = _("Marginal");
         break;
       case GPGME_VALIDITY_FULL:
-        s = "f";
+        s = _("Full");
         break;
       case GPGME_VALIDITY_ULTIMATE:
-        s = "u";
+        s = _("Ultimate");
         break;
       case GPGME_VALIDITY_UNKNOWN:
       default:
-        s = "?";
+        s = _("Unknown");
         break;
       }
     text[COL_VALIDITY] = s;
 
-    row = gtk_clist_append (clist, (gchar**)text);
+    row = gtk_cmclist_append (clist, (gchar**)text);
     g_free (algo_buf);
 
-    gtk_clist_set_row_data_full (clist, row, key, destroy_key);
+    gtk_cmclist_set_row_data_full (clist, row, key, destroy_key);
 }
 
 static gpgme_key_t 
 fill_clist (struct select_keys_s *sk, const char *pattern, gpgme_protocol_t proto)
 {
-    GtkCList *clist;
+    GtkCMCList *clist;
     gpgme_ctx_t ctx;
     gpgme_error_t err;
     gpgme_key_t key;
@@ -291,7 +280,7 @@ fill_clist (struct select_keys_s *sk, const char *pattern, gpgme_protocol_t prot
 
     debug_print ("select_keys:fill_clist:  pattern '%s' proto %d\n", pattern, proto);
 
-    /*gtk_clist_freeze (select_keys.clist);*/
+    /*gtk_cmclist_freeze (select_keys.clist);*/
     err = gpgme_new (&ctx);
     g_assert (!err);
 
@@ -313,7 +302,7 @@ fill_clist (struct select_keys_s *sk, const char *pattern, gpgme_protocol_t prot
     update_progress (sk, ++running, pattern);
     while ( !(err = gpgme_op_keylist_next ( ctx, &key )) ) {
        gpgme_user_id_t uid = key->uids;
-       if (!key->can_encrypt)
+       if (!key->can_encrypt || key->revoked || key->expired)
                continue;
         debug_print ("%% %s:%d:  insert\n", __FILE__ ,__LINE__ );
         set_row (clist, key, proto ); 
@@ -324,7 +313,7 @@ fill_clist (struct select_keys_s *sk, const char *pattern, gpgme_protocol_t prot
                        continue;
                raw_mail = g_strdup(uid->email);
                extract_address(raw_mail);
-               if (!strcmp(pattern, raw_mail)) {
+               if (!strcasecmp(pattern, raw_mail)) {
                        exact_match = TRUE;
                        g_free(raw_mail);
                        break;
@@ -355,7 +344,7 @@ fill_clist (struct select_keys_s *sk, const char *pattern, gpgme_protocol_t prot
            sk->select_ctx = NULL;
            gpgme_release (ctx);
     }
-    /*gtk_clist_thaw (select_keys.clist);*/
+    /*gtk_cmclist_thaw (select_keys.clist);*/
     return (exact_match == TRUE && num_results == 1 ? last_key:NULL);
 }
 
@@ -406,20 +395,20 @@ create_dialog (struct select_keys_s *sk)
     titles[COL_KEYID]    = _("Key ID");
     titles[COL_NAME]     = _("Name");
     titles[COL_EMAIL]    = _("Address");
-    titles[COL_VALIDITY] = _("Val");
+    titles[COL_VALIDITY] = _("Trust");
 
-    clist = gtk_clist_new_with_titles (N_COL_TITLES, (char**)titles);
+    clist = gtk_cmclist_new_with_titles (N_COL_TITLES, (char**)titles);
     gtk_container_add (GTK_CONTAINER (scrolledwin), clist);
-    gtk_clist_set_column_width (GTK_CLIST(clist), COL_ALGO,      72);
-    gtk_clist_set_column_width (GTK_CLIST(clist), COL_KEYID,     76);
-    gtk_clist_set_column_width (GTK_CLIST(clist), COL_NAME,     130);
-    gtk_clist_set_column_width (GTK_CLIST(clist), COL_EMAIL,    130);
-    gtk_clist_set_column_width (GTK_CLIST(clist), COL_VALIDITY,  20);
-    gtk_clist_set_selection_mode (GTK_CLIST(clist), GTK_SELECTION_BROWSE);
-    g_signal_connect (G_OBJECT(GTK_CLIST(clist)->column[COL_NAME].button),
+    gtk_cmclist_set_column_width (GTK_CMCLIST(clist), COL_ALGO,      72);
+    gtk_cmclist_set_column_width (GTK_CMCLIST(clist), COL_KEYID,     76);
+    gtk_cmclist_set_column_width (GTK_CMCLIST(clist), COL_NAME,     130);
+    gtk_cmclist_set_column_width (GTK_CMCLIST(clist), COL_EMAIL,    130);
+    gtk_cmclist_set_column_width (GTK_CMCLIST(clist), COL_VALIDITY,  20);
+    gtk_cmclist_set_selection_mode (GTK_CMCLIST(clist), GTK_SELECTION_BROWSE);
+    g_signal_connect (G_OBJECT(GTK_CMCLIST(clist)->column[COL_NAME].button),
                      "clicked",
                       G_CALLBACK(sort_keys_name), sk);
-    g_signal_connect (G_OBJECT(GTK_CLIST(clist)->column[COL_EMAIL].button),
+    g_signal_connect (G_OBJECT(GTK_CMCLIST(clist)->column[COL_EMAIL].button),
                      "clicked",
                       G_CALLBACK(sort_keys_email), sk);
 
@@ -427,9 +416,9 @@ create_dialog (struct select_keys_s *sk)
     gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
 
     gtkut_stock_button_set_create (&bbox, 
-                                   &select_btn, _("Select"),
-                                  &other_btn, _("Other"),
-                                  &dont_encrypt_btn, _("Don't encrypt"));
+                                   &select_btn, _("_Select"),
+                                  &other_btn, _("_Other"),
+                                  &dont_encrypt_btn, _("Do_n't encrypt"));
     
     cancel_btn = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
     GTK_WIDGET_SET_FLAGS(cancel_btn, GTK_CAN_DEFAULT);
@@ -452,7 +441,7 @@ create_dialog (struct select_keys_s *sk)
 
     sk->window = window;
     sk->toplabel = GTK_LABEL (label);
-    sk->clist  = GTK_CLIST (clist);
+    sk->clist  = GTK_CMCLIST (clist);
 }
 
 
@@ -517,7 +506,7 @@ select_btn_cb (GtkWidget *widget, gpointer data)
         return;
     }
     row = GPOINTER_TO_INT(sk->clist->selection->data);
-    key = gtk_clist_get_row_data(sk->clist, row);
+    key = gtk_cmclist_get_row_data(sk->clist, row);
     if (key) {
         if ( key->uids->validity < GPGME_VALIDITY_FULL ) {
             use_key = use_untrusted(key, sk->proto);
@@ -611,10 +600,10 @@ use_untrusted (gpgme_key_t key, gpgme_protocol_t proto)
 
 
 static gint 
-cmp_name (GtkCList *clist, gconstpointer pa, gconstpointer pb)
+cmp_name (GtkCMCList *clist, gconstpointer pa, gconstpointer pb)
 {
-    gpgme_key_t a = ((GtkCListRow *)pa)->data;
-    gpgme_key_t b = ((GtkCListRow *)pb)->data;
+    gpgme_key_t a = ((GtkCMCListRow *)pa)->data;
+    gpgme_key_t b = ((GtkCMCListRow *)pb)->data;
     const char *sa, *sb;
     
     sa = a? a->uids->name : NULL;
@@ -627,10 +616,10 @@ cmp_name (GtkCList *clist, gconstpointer pa, gconstpointer pb)
 }
 
 static gint 
-cmp_email (GtkCList *clist, gconstpointer pa, gconstpointer pb)
+cmp_email (GtkCMCList *clist, gconstpointer pa, gconstpointer pb)
 {
-    gpgme_key_t a = ((GtkCListRow *)pa)->data;
-    gpgme_key_t b = ((GtkCListRow *)pb)->data;
+    gpgme_key_t a = ((GtkCMCListRow *)pa)->data;
+    gpgme_key_t b = ((GtkCMCListRow *)pb)->data;
     const char *sa, *sb;
     
     sa = a? a->uids->email : NULL;
@@ -645,14 +634,14 @@ cmp_email (GtkCList *clist, gconstpointer pa, gconstpointer pb)
 static void
 sort_keys ( struct select_keys_s *sk, enum col_titles column)
 {
-    GtkCList *clist = sk->clist;
+    GtkCMCList *clist = sk->clist;
 
     switch (column) {
       case COL_NAME:
-        gtk_clist_set_compare_func (clist, cmp_name);
+        gtk_cmclist_set_compare_func (clist, cmp_name);
         break;
       case COL_EMAIL:
-        gtk_clist_set_compare_func (clist, cmp_email);
+        gtk_cmclist_set_compare_func (clist, cmp_email);
         break;
       default:
         return;
@@ -667,8 +656,8 @@ sort_keys ( struct select_keys_s *sk, enum col_titles column)
         sk->sort_type = GTK_SORT_ASCENDING;
 
     sk->sort_column = column;
-    gtk_clist_set_sort_type (clist, sk->sort_type);
-    gtk_clist_sort (clist);
+    gtk_cmclist_set_sort_type (clist, sk->sort_type);
+    gtk_cmclist_sort (clist);
 }
 
 static void