[git] GPA - branch, master, updated. gpa-0.9.0-22-g02fd01c

by Werner Koch cvs at cvs.gnupg.org
Thu Dec 15 22:33:13 CET 2011


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "The GNU Privacy Assistant".

The branch, master has been updated
       via  02fd01cf81e39394d9529096e4882deb69db8f83 (commit)
       via  4e7f73636b63f50d02d682e5e059e95924cb7871 (commit)
       via  7ad794d2f37897156da6f69f37e3f8c6c90316f2 (commit)
      from  30752eb091f9005c36f90780e50336cddd8a4e93 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 02fd01cf81e39394d9529096e4882deb69db8f83
Author: Werner Koch <wk at gnupg.org>
Date:   Thu Dec 15 21:40:13 2011 +0100

    Show the ATR for an unknown card.
    
    * src/cm-unknown.c, src/cm-unknown.h: New files.
    * src/Makefile.am: Add them.
    * NEWS: Update.

diff --git a/NEWS b/NEWS
index 38471be..e38baae 100644
--- a/NEWS
+++ b/NEWS
@@ -3,14 +3,18 @@ Noteworthy changes in version 0.9.1 (not released)
 
  * The key selection dialogs for encryption and signing do not anymore
    list expired, revoked or otherwise invalid keys.
- 
+
  * If no recipients are given to the server, a generic key selection
    dialog is now used.
 
+ * Now works with Libassuan 2.x.
+
+ * The card manager now displays the ATR for an unknown card.
+
 
 Noteworthy changes in version 0.9.0 (2009-06-20)
 ------------------------------------------------
- 
+
  * Added a smartcard manager.
 
  * GPA now requires GnuPG-2.
@@ -140,7 +144,7 @@ Noteworthy changes in version 0.7.0 (2003-10-22)
  * Cosmetical and minor fixes to the file manager window.
 
  * GPA now remembers the brief/detailed setting view and restores it
- when GPA is started. 
+ when GPA is started.
 
  * Removed all deprecated widgets. GPA is now pure GTK+ 2.2.
 
@@ -258,7 +262,7 @@ Noteworthy changes in version 0.5.0 (2002-02-25)
 
  * There now is an icon in the tool bar to switch from the keyring
    manager to the file manager.
- 
+
  * GPA can now be compiled using a standard GNU toolchain.
    In particular it can be cross-compiled from GNU/Linux to
    mingw32/MS-Windows (which is what we did for the GnuPP CD),
diff --git a/src/Makefile.am b/src/Makefile.am
index f0d1e0d..a695e07 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -2,19 +2,19 @@
 # Copyright (C) 2000, 2001  Werner Koch
 # Copyright (C) 2002, 2003, 2004  Miguel Coca
 # Copyright (C) 2005, 2006, 2007, 2008, 2009  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 <http://www.gnu.org/licenses/>.
 
@@ -22,7 +22,7 @@
 
 localedir = $(datadir)/locale
 
-logo = gpa-logo.ppm 
+logo = gpa-logo.ppm
 
 pkgdata_DATA = $(logo)
 
@@ -59,8 +59,8 @@ endif
 bin_PROGRAMS = gpa
 noinst_PROGRAMS = dndtest
 
-AM_CPPFLAGS = -I$(top_srcdir)/intl -I$(top_srcdir)/pixmaps 
-AM_CPPFLAGS += -DLOCALEDIR=\"$(localedir)\" 
+AM_CPPFLAGS = -I$(top_srcdir)/intl -I$(top_srcdir)/pixmaps
+AM_CPPFLAGS += -DLOCALEDIR=\"$(localedir)\"
 
 AM_CFLAGS = $(GPGME_CFLAGS) $(LIBASSUAN_CFLAGS) $(GPG_ERROR_CFLAGS) \
 	    $(GTK_CFLAGS)
@@ -76,7 +76,8 @@ gpa_cardman_sources = \
                 cm-openpgp.c cm-openpgp.h \
 		cm-geldkarte.c cm-geldkarte.h \
 		cm-netkey.c cm-netkey.h \
-		cm-dinsig.c cm-dinsig.h
+		cm-dinsig.c cm-dinsig.h \
+		cm-unknown.c cm-unknown.h
 
 
 gpa_SOURCES = get-path.h get-path.c \
diff --git a/src/cardman.c b/src/cardman.c
index 65788fe..c3779e4 100644
--- a/src/cardman.c
+++ b/src/cardman.c
@@ -29,7 +29,7 @@
 #include <assert.h>
 #include <time.h>
 
-#include "gpa.h"   
+#include "gpa.h"
 
 #include "gtktools.h"
 #include "gpawidgets.h"
@@ -47,11 +47,12 @@
 #include "cm-geldkarte.h"
 #include "cm-netkey.h"
 #include "cm-dinsig.h"
+#include "cm-unknown.h"
 
 
 
 /* Object's class definition.  */
-struct _GpaCardManagerClass 
+struct _GpaCardManagerClass
 {
   GtkWindowClass parent_class;
 };
@@ -66,7 +67,7 @@ struct _GpaCardManager
 
 
   GtkWidget *app_selector;    /* Combo Box to select the application.  */
-  
+
   GtkWidget *card_container;  /* The container holding the card widget.  */
   GtkWidget *card_widget;     /* The widget to display a card applciation.  */
 
@@ -90,7 +91,7 @@ struct _GpaCardManager
 
   struct {
     int card_any;           /* Any card event counter seen.  */
-    unsigned int card;      /* Last seen card event counter.  */      
+    unsigned int card;      /* Last seen card event counter.  */
   } eventcounter;
 
 };
@@ -108,7 +109,7 @@ static void gpa_card_manager_finalize (GObject *object);
 
 
 
-/************************************************************ 
+/************************************************************
  *******************   Implementation   *********************
  ************************************************************/
 
@@ -122,7 +123,7 @@ statusbar_new (GpaCardManager *cardman)
   GtkWidget *label;
 
   hbox = gtk_hbox_new (FALSE, 0);
- 
+
   label = gtk_label_new (NULL);
   cardman->status_label = label;
   gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
@@ -130,7 +131,7 @@ statusbar_new (GpaCardManager *cardman)
   label = gtk_label_new ("");
   cardman->status_text = label;
   gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 5);
-  
+
   align = gtk_alignment_new (0, 1, 1, 0);
   gtk_container_add (GTK_CONTAINER (align), hbox);
 
@@ -170,7 +171,7 @@ update_title (GpaCardManager *cardman)
   else
     {
       char *tmp;
-      
+
       tmp = g_strdup_printf ("%s (%s)", title, cardman->cardtypename);
       gtk_window_set_title (GTK_WINDOW (cardman), tmp);
       xfree (tmp);
@@ -202,7 +203,7 @@ scd_data_cb (void *opaque, const void *data, size_t datalen)
 {
 /*   g_debug ("DATA_CB: datalen=%d", (int)datalen); */
   return 0;
-}     
+}
 
 
 static gpg_error_t
@@ -212,7 +213,7 @@ scd_inq_cb (void *opaque, const char *name, const char *args,
 /*   g_debug ("INQ_CB: name=`%s' args=`%s'", name, args); */
 
   return 0;
-}     
+}
 
 
 static gpg_error_t
@@ -247,6 +248,11 @@ scd_status_cb (void *opaque, const char *status, const char *args)
           cardman->cardtype = GPA_CM_GELDKARTE_TYPE;
           cardman->cardtypename = "Geldkarte";
         }
+      else if (!strcmp (args, "UNDEFINED"))
+        {
+          cardman->cardtype = GPA_CM_UNKNOWN_TYPE;
+          cardman->cardtypename = "UNKNOWN";
+        }
       else
         cardman->cardtypename = "Unknown";
 
@@ -263,7 +269,7 @@ scd_status_cb (void *opaque, const char *status, const char *args)
     }
 
   return 0;
-}     
+}
 
 
 /* Idle queue callback to mark a relaod operation finished.  */
@@ -271,7 +277,7 @@ static gboolean
 card_reload_finish_idle_cb (void *user_data)
 {
   GpaCardManager *cardman = user_data;
-  
+
   cardman->in_card_reload--;
   g_object_unref (cardman);
 
@@ -288,6 +294,7 @@ card_reload (GpaCardManager *cardman)
   char *command_buf = NULL;
   const char *command;
   const char *err_desc = NULL;
+  char *err_desc_buffer = NULL;
   int auto_app;
 
   if (!cardman->gpgagent)
@@ -298,7 +305,7 @@ card_reload (GpaCardManager *cardman)
   if (!cardman->in_card_reload)
     {
       cardman->in_card_reload++;
-      
+
       update_info_visibility (cardman);
 
       cardman->cardtype = G_TYPE_NONE;
@@ -308,8 +315,8 @@ card_reload (GpaCardManager *cardman)
          command; this makes sure that scdaemon initalizes the card if
          that has not yet been done.  */
       command = "SCD SERIALNO";
-      if (cardman->app_selector 
-          && (gtk_combo_box_get_active 
+      if (cardman->app_selector
+          && (gtk_combo_box_get_active
               (GTK_COMBO_BOX (cardman->app_selector)) > 0)
           && (application = gtk_combo_box_get_active_text
               (GTK_COMBO_BOX (cardman->app_selector))))
@@ -374,19 +381,26 @@ card_reload (GpaCardManager *cardman)
                && gpg_err_source (err) == GPG_ERR_SOURCE_SCD
                && gpg_err_code (err) == GPG_ERR_NOT_SUPPORTED)
         {
-          err_desc = 
+          err_desc =
             _("The selected card application is not available.");
         }
       else if (err)
         {
-          g_debug ("assuan command `%s' failed: %s <%s>\n", 
+          g_debug ("assuan command `%s' failed: %s <%s>\n",
                    command, gpg_strerror (err), gpg_strsource (err));
-          err_desc = _("Error accessing the card.");
-          statusbar_update (cardman, _("Error accessing card"));
+          if (!gpgme_op_assuan_transact (cardman->gpgagent,
+                                         "SCD SERIALNO undefined",
+                                         NULL, NULL, NULL, NULL, NULL, NULL))
+            err = 0;
+          else
+            {
+              err_desc = _("Error accessing the card.");
+              statusbar_update (cardman, _("Error accessing card"));
+            }
         }
       g_free (command_buf);
 
- 
+
       if (!err)
         {
           /* Get the event counter to avoid a duplicate reload due to
@@ -407,22 +421,25 @@ card_reload (GpaCardManager *cardman)
                                           scd_status_cb, cardman);
           if (!err)
             err = gpgme_op_assuan_result (cardman->gpgagent)->err;
-          
+
           if (gpg_err_code (err) == GPG_ERR_CARD_NOT_PRESENT
               || gpg_err_code (err) == GPG_ERR_CARD_REMOVED)
             statusbar_update (cardman, _("No card"));
           else if (err)
             {
-              g_debug ("assuan command `%s' failed: %s <%s>\n", 
+              g_debug ("assuan command `%s' failed: %s <%s>\n",
                        command, gpg_strerror (err), gpg_strsource (err));
               statusbar_update (cardman, _("Error accessing card"));
             }
         }
 
-      
+
       update_card_widget (cardman, err_desc);
+      g_free (err_desc_buffer);
+      err_desc_buffer = NULL;
+      err_desc = NULL;
       update_title (cardman);
-      
+
       update_info_visibility (cardman);
       /* We decrement our lock using a idle handler with lo priority.
          This gives us a better chance not to do a reload a second
@@ -449,7 +466,7 @@ static gboolean
 card_reload_idle_cb (void *user_data)
 {
   GpaCardManager *cardman = user_data;
-  
+
   card_reload (cardman);
   g_object_unref (cardman);
 
@@ -501,7 +518,7 @@ ticker_cb (gpointer user_data)
   if (!cardman || !cardman->ticker_timeout_id || !cardman->gpgagent
       || cardman->in_card_reload)
     return TRUE;  /* Keep on ticking.  */
-  
+
   /* Note that we are single threaded and thus there is no need to
      lock the assuan context.  */
 
@@ -526,9 +543,9 @@ start_ticker (GpaCardManager *cardman)
     {
 #if GTK_CHECK_VERSION (2, 14, 0)
       cardman->ticker_timeout_id = g_timeout_add_seconds (1,
-                                                          ticker_cb, cardman); 
+                                                          ticker_cb, cardman);
 #else
-      cardman->ticker_timeout_id = g_timeout_add (1000, ticker_cb, cardman); 
+      cardman->ticker_timeout_id = g_timeout_add (1000, ticker_cb, cardman);
 #endif
     }
 }
@@ -569,7 +586,7 @@ card_genkey (GpaCardManager *cardman)
   if (!err)
     {
       gpa_window_error ("Admin commands are disabled in scdamon.\n"
-                        "Key generation is not possible.", NULL); 
+                        "Key generation is not possible.", NULL);
       return;
     }
 
@@ -750,6 +767,10 @@ update_card_widget (GpaCardManager *cardman, const char *error_description)
     {
       cardman->card_widget = gpa_cm_dinsig_new ();
     }
+  else if (cardman->cardtype == GPA_CM_UNKNOWN_TYPE)
+    {
+      cardman->card_widget = gpa_cm_unknown_new ();
+    }
   else
     {
       if (!error_description)
@@ -757,7 +778,7 @@ update_card_widget (GpaCardManager *cardman, const char *error_description)
       cardman->card_widget = gtk_label_new (error_description);
     }
 
-  gtk_scrolled_window_add_with_viewport 
+  gtk_scrolled_window_add_with_viewport
     (GTK_SCROLLED_WINDOW (cardman->card_container), cardman->card_widget);
 
   gtk_widget_show_all (cardman->card_widget);
@@ -779,6 +800,7 @@ update_card_widget (GpaCardManager *cardman, const char *error_description)
       gpa_cm_geldkarte_reload (cardman->card_widget, cardman->gpgagent);
       gpa_cm_netkey_reload (cardman->card_widget, cardman->gpgagent);
       gpa_cm_dinsig_reload (cardman->card_widget, cardman->gpgagent);
+      gpa_cm_unknown_reload (cardman->card_widget, cardman->gpgagent);
     }
 }
 
@@ -843,7 +865,7 @@ setup_app_selector (GpaCardManager *cardman)
           p1 = strchr (p0, ':');
           if (p1)
             *p1 = 0;
-          gtk_combo_box_append_text 
+          gtk_combo_box_append_text
             (GTK_COMBO_BOX (cardman->app_selector), p0);
           if (p[1])
             p0 = p+1;
@@ -882,7 +904,7 @@ construct_widgets (GpaCardManager *cardman)
 
   /* Add a fancy label that tells us: This is the card manager.  */
   hbox1 = gtk_hbox_new (FALSE, 0);
-  
+
   icon = gtk_image_new_from_stock (GPA_STOCK_CARDMAN, GTK_ICON_SIZE_DND);
   gtk_box_pack_start (GTK_BOX (hbox1), icon, FALSE, TRUE, 0);
 
@@ -916,7 +938,7 @@ construct_widgets (GpaCardManager *cardman)
      card widget.  This container is required so that we can easily
      change to a differet card widget. */
   cardman->card_container = gtk_scrolled_window_new (NULL, NULL);
-  gtk_scrolled_window_set_policy 
+  gtk_scrolled_window_set_policy
     (GTK_SCROLLED_WINDOW (cardman->card_container),
      GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
   gtk_box_pack_start (GTK_BOX (vbox), cardman->card_container, TRUE, TRUE, 0);
@@ -932,7 +954,7 @@ construct_widgets (GpaCardManager *cardman)
 }
 
 
-/************************************************************ 
+/************************************************************
  ******************   Object Management  ********************
  ************************************************************/
 
@@ -996,7 +1018,7 @@ gpa_card_manager_init (GTypeInstance *instance, void *class_ptr)
 
 static void
 gpa_card_manager_finalize (GObject *object)
-{  
+{
   GpaCardManager *cardman = GPA_CARD_MANAGER (object);
 
   if (cardman->gpgagent)
@@ -1004,7 +1026,7 @@ gpa_card_manager_finalize (GObject *object)
       gpgme_release (cardman->gpgagent);
       cardman->gpgagent = NULL;
     }
-  
+
   if (cardman->ticker_timeout_id)
     {
       g_source_remove (cardman->ticker_timeout_id);
@@ -1013,7 +1035,7 @@ gpa_card_manager_finalize (GObject *object)
 
   /* FIXME: Remove the watch object and all other resources.  */
 
-  G_OBJECT_CLASS (g_type_class_peek_parent 
+  G_OBJECT_CLASS (g_type_class_peek_parent
                   (GPA_CM_OPENPGP_GET_CLASS (cardman)))->finalize (object);
 }
 
@@ -1022,7 +1044,7 @@ GType
 gpa_card_manager_get_type (void)
 {
   static GType this_type = 0;
-  
+
   if (!this_type)
     {
       static const GTypeInfo this_info =
@@ -1037,17 +1059,17 @@ gpa_card_manager_get_type (void)
 	  0,    /* n_preallocs */
 	  gpa_card_manager_init,
 	};
-      
+
       this_type = g_type_register_static (GTK_TYPE_WINDOW,
                                           "GpaCardManager",
                                           &this_info, 0);
     }
-  
+
   return this_type;
 }
 
 
-/************************************************************ 
+/************************************************************
  **********************  Public API  ************************
  ************************************************************/
 GtkWidget *
@@ -1055,14 +1077,14 @@ gpa_card_manager_get_instance (void)
 {
   if (!this_instance)
     {
-      this_instance = g_object_new (GPA_CARD_MANAGER_TYPE, NULL);  
+      this_instance = g_object_new (GPA_CARD_MANAGER_TYPE, NULL);
       card_reload (this_instance);
     }
   return GTK_WIDGET (this_instance);
 }
 
 
-gboolean 
+gboolean
 gpa_card_manager_is_open (void)
 {
   return !!this_instance;
diff --git a/src/cm-unknown.c b/src/cm-unknown.c
new file mode 100644
index 0000000..70ac99e
--- /dev/null
+++ b/src/cm-unknown.c
@@ -0,0 +1,253 @@
+/* cm-unknown.c  -  Widget to show information about an unknown card
+ * Copyright (C) 2009, 2011 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 <http://www.gnu.org/licenses/>.
+ */
+
+/* UNKNOWN is a dummy application used for, weel, unknown cards.  It
+   does only print the the ATR of the card.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include "gpa.h"
+#include "gtktools.h"
+#include "convert.h"
+#include "membuf.h"
+
+#include "cm-object.h"
+#include "cm-unknown.h"
+
+
+
+
+
+/* Object's class definition.  */
+struct _GpaCMUnknownClass
+{
+  GpaCMObjectClass parent_class;
+};
+
+
+/* Object definition.  */
+struct _GpaCMUnknown
+{
+  GpaCMObject  parent_instance;
+
+  GtkWidget *label;
+
+  int  reloading;   /* Sentinel to avoid recursive reloads.  */
+};
+
+/* The parent class.  */
+static GObjectClass *parent_class;
+
+
+
+/* Local prototypes */
+static void gpa_cm_unknown_finalize (GObject *object);
+
+
+
+/************************************************************
+ *******************   Implementation   *********************
+ ************************************************************/
+
+static gpg_error_t
+scd_atr_data_cb (void *opaque, const void *data, size_t datalen)
+{
+  membuf_t *mb = opaque;
+
+  put_membuf (mb, data, datalen);
+  return 0;
+}
+
+
+/* Use the assuan machinery to read the ATR.  */
+static void
+reload_data (GpaCMUnknown *card)
+{
+  gpg_error_t err;
+  char command[100];
+  gpgme_ctx_t gpgagent;
+  membuf_t mb;
+  char *buf;
+
+  gpgagent = GPA_CM_OBJECT (card)->agent_ctx;
+  g_return_if_fail (gpgagent);
+
+  card->reloading++;
+
+  init_membuf (&mb, 512);
+
+  err = gpgme_op_assuan_transact (gpgagent,
+                                  "SCD APDU --dump-atr",
+                                  scd_atr_data_cb, &mb,
+                                  NULL, NULL, NULL, NULL);
+  if (!err)
+    err = gpgme_op_assuan_result (gpgagent)->err;
+
+  if (!err)
+    {
+      put_membuf (&mb, "", 1);
+      buf = get_membuf (&mb, NULL);
+      if (buf)
+        {
+          buf = g_strdup_printf ("\n%s\n%s",
+                                 _("The ATR of the card is:"),
+                                 buf);
+          gtk_label_set_text (GTK_LABEL (card->label), buf);
+          g_free (buf);
+        }
+      else
+        gtk_label_set_text (GTK_LABEL (card->label), "");
+    }
+  else
+    {
+      g_free (get_membuf (&mb, NULL));
+
+      if (gpg_err_code (err) == GPG_ERR_CARD_NOT_PRESENT)
+        ; /* Lost the card.  */
+      else
+        g_debug ("assuan command `%s' failed: %s <%s>\n",
+                 command, gpg_strerror (err), gpg_strsource (err));
+      gtk_label_set_text (GTK_LABEL (card->label), "");
+    }
+  card->reloading--;
+}
+
+
+
+
+/* This function constructs the container holding all widgets making
+   up this data widget.  It is called during instance creation.  */
+static void
+construct_data_widget (GpaCMUnknown *card)
+{
+  GtkWidget *frame;
+  GtkWidget *vbox;
+  GtkWidget *label;
+
+  frame = gtk_frame_new (NULL);
+  gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);
+  label = gtk_label_new (_("<b>Unknown Card</b>"));
+  gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
+  gtk_frame_set_label_widget (GTK_FRAME (frame), label);
+  gtk_box_pack_start (GTK_BOX (card), frame, FALSE, TRUE, 0);
+
+  frame = gtk_frame_new (NULL);
+  gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);
+  vbox = gtk_vbox_new (FALSE, 5);
+  card->label = gtk_label_new (NULL);
+  gtk_box_pack_start (GTK_BOX (vbox), card->label, TRUE, TRUE, 0);
+  gtk_container_add (GTK_CONTAINER (frame), vbox);
+  gtk_box_pack_start (GTK_BOX (card), frame, FALSE, TRUE, 0);
+}
+
+
+
+/************************************************************
+ ******************   Object Management  ********************
+ ************************************************************/
+
+static void
+gpa_cm_unknown_class_init (void *class_ptr, void *class_data)
+{
+  GpaCMUnknownClass *klass = class_ptr;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  G_OBJECT_CLASS (klass)->finalize = gpa_cm_unknown_finalize;
+}
+
+
+static void
+gpa_cm_unknown_init (GTypeInstance *instance, void *class_ptr)
+{
+  GpaCMUnknown *card = GPA_CM_UNKNOWN (instance);
+
+  construct_data_widget (card);
+
+}
+
+
+static void
+gpa_cm_unknown_finalize (GObject *object)
+{
+/*   GpaCMUnknown *card = GPA_CM_UNKNOWN (object); */
+
+  parent_class->finalize (object);
+}
+
+
+/* Construct the class.  */
+GType
+gpa_cm_unknown_get_type (void)
+{
+  static GType this_type = 0;
+
+  if (!this_type)
+    {
+      static const GTypeInfo this_info =
+	{
+	  sizeof (GpaCMUnknownClass),
+	  (GBaseInitFunc) NULL,
+	  (GBaseFinalizeFunc) NULL,
+	  gpa_cm_unknown_class_init,
+	  (GClassFinalizeFunc) NULL,
+	  NULL, /* class_data */
+	  sizeof (GpaCMUnknown),
+	  0,    /* n_preallocs */
+	  gpa_cm_unknown_init
+	};
+
+      this_type = g_type_register_static (GPA_CM_OBJECT_TYPE,
+                                          "GpaCMUnknown",
+                                          &this_info, 0);
+    }
+
+  return this_type;
+}
+
+
+/************************************************************
+ **********************  Public API  ************************
+ ************************************************************/
+GtkWidget *
+gpa_cm_unknown_new ()
+{
+  return GTK_WIDGET (g_object_new (GPA_CM_UNKNOWN_TYPE, NULL));
+}
+
+
+/* If WIDGET is of Type GpaCMUnknown do a data reload through the
+   assuan connection.  */
+void
+gpa_cm_unknown_reload (GtkWidget *widget, gpgme_ctx_t gpgagent)
+{
+  if (GPA_IS_CM_UNKNOWN (widget))
+    {
+      GPA_CM_OBJECT (widget)->agent_ctx = gpgagent;
+      if (gpgagent)
+        reload_data (GPA_CM_UNKNOWN (widget));
+    }
+}
diff --git a/src/cm-unknown.h b/src/cm-unknown.h
new file mode 100644
index 0000000..41f44ff
--- /dev/null
+++ b/src/cm-unknown.h
@@ -0,0 +1,57 @@
+/* cm-unknown.h  -  Widget to show information about an unknown card.
+ * Copyright (C) 2009, 2011 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef CM_UNKNOWN_H
+#define CM_UNKNOWN_H
+
+#include <gtk/gtk.h>
+
+/* Declare the Object. */
+typedef struct _GpaCMUnknown      GpaCMUnknown;
+typedef struct _GpaCMUnknownClass GpaCMUnknownClass;
+
+GType gpa_cm_unknown_get_type (void) G_GNUC_CONST;
+
+#define GPA_CM_UNKNOWN_TYPE   (gpa_cm_unknown_get_type ())
+
+#define GPA_CM_UNKNOWN(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GPA_CM_UNKNOWN_TYPE, GpaCMUnknown))
+
+#define GPA_CM_UNKNOWN_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass),  \
+                            GPA_CM_UNKNOWN_TYPE, GpaCMUnknownClass))
+
+#define GPA_IS_CM_UNKNOWN(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GPA_CM_UNKNOWN_TYPE))
+
+#define GPA_IS_CM_UNKNOWN_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GPA_CM_UNKNOWN_TYPE))
+
+#define GPA_CM_UNKNOWN_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj),    \
+                              GPA_CM_UNKNOWN_TYPE, GpaCMUnknownClass))
+
+
+/* The class specific API.  */
+GtkWidget *gpa_cm_unknown_new (void);
+void gpa_cm_unknown_reload (GtkWidget *widget, gpgme_ctx_t gpgagent);
+
+
+
+#endif /*CM_UNKNOWN_H*/

commit 4e7f73636b63f50d02d682e5e059e95924cb7871
Author: Werner Koch <wk at gnupg.org>
Date:   Mon Dec 12 11:47:12 2011 +0100

    po: auto update of po files.

diff --git a/po/ar.po b/po/ar.po
index 864f216..6823814 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GPA\n"
 "Report-Msgid-Bugs-To: gpa-dev at gnupg.org\n"
-"PO-Revision-Date: 2008-03-17 13:05+0100\n"
+"PO-Revision-Date: 2011-12-12 10:14+0100\n"
 "Last-Translator: \n"
 "Language-Team: Arabic <doc at arabeyes.org>\n"
 "MIME-Version: 1.0\n"
@@ -299,6 +299,9 @@ msgstr "يفتح حوار التفضيلات"
 msgid "Enable the UI server"
 msgstr "ابدأ فقط خادوم واجهة المستخدم (يفترض ‪--cms‬ أيضا)"
 
+msgid "Disable support for X.509"
+msgstr ""
+
 msgid "Read options from file"
 msgstr "اقرأ الخيارات من ملفّ"
 
@@ -1402,6 +1405,15 @@ msgid "Sign only _locally"
 msgstr "وقّع _محليّا فقط"
 
 msgid ""
+"It seems that GPGSM is not installed.\n"
+"\n"
+"Temporary disabling support for X.509.\n"
+"\n"
+"Please install GPGSM or invoke this program\n"
+"with the option --disable-x509 ."
+msgstr ""
+
+msgid ""
 "The private key you selected as default is no longer available.\n"
 "GPA will try to choose a new default key automatically."
 msgstr ""
diff --git a/po/cs.po b/po/cs.po
index 28767d5..c131808 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -316,6 +316,9 @@ msgstr "Otevřít dialog Nastavení"
 msgid "Enable the UI server"
 msgstr ""
 
+msgid "Disable support for X.509"
+msgstr ""
+
 #, fuzzy
 msgid "Read options from file"
 msgstr "číst možnosti ze souboru"
@@ -1107,7 +1110,7 @@ msgid ""
 "\n"
 "Your email address will be part of the new key to make it easier for others "
 "to identify keys. If you have several email addresses, you can add further "
-"email adresses later."
+"email addresses later."
 msgstr ""
 "Vložte prosím svoji e-mailovou adresu.\n"
 "\n"
@@ -1436,6 +1439,15 @@ msgid "Sign only _locally"
 msgstr "Podepsat pouze _lokálně"
 
 msgid ""
+"It seems that GPGSM is not installed.\n"
+"\n"
+"Temporary disabling support for X.509.\n"
+"\n"
+"Please install GPGSM or invoke this program\n"
+"with the option --disable-x509 ."
+msgstr ""
+
+msgid ""
 "The private key you selected as default is no longer available.\n"
 "GPA will try to choose a new default key automatically."
 msgstr ""
diff --git a/po/de.po b/po/de.po
index 5498861..dc5534b 100644
--- a/po/de.po
+++ b/po/de.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gpa\n"
 "Report-Msgid-Bugs-To: gpa-dev at gnupg.org\n"
-"PO-Revision-Date: 2010-05-06 13:13+0200\n"
+"PO-Revision-Date: 2011-12-12 10:11+0100\n"
 "Last-Translator: Werner Koch <wk at gnupg.org>\n"
 "Language-Team: German <de at li.org>\n"
 "MIME-Version: 1.0\n"
@@ -277,6 +277,9 @@ msgstr "Öffne den Dialog für die Einstellungen"
 msgid "Enable the UI server"
 msgstr "Den UI Server aktivieren"
 
+msgid "Disable support for X.509"
+msgstr ""
+
 msgid "Read options from file"
 msgstr "Optionen aus einer Datei lesen"
 
@@ -1361,6 +1364,15 @@ msgid "Sign only _locally"
 msgstr "Nur _lokal signieren"
 
 msgid ""
+"It seems that GPGSM is not installed.\n"
+"\n"
+"Temporary disabling support for X.509.\n"
+"\n"
+"Please install GPGSM or invoke this program\n"
+"with the option --disable-x509 ."
+msgstr ""
+
+msgid ""
 "The private key you selected as default is no longer available.\n"
 "GPA will try to choose a new default key automatically."
 msgstr ""
diff --git a/po/es.po b/po/es.po
index 0e0e6d8..9100165 100644
--- a/po/es.po
+++ b/po/es.po
@@ -302,6 +302,9 @@ msgstr "Abrir la ventana de preferencias"
 msgid "Enable the UI server"
 msgstr "Iniciar solo el servicio de interface de usuario (implica --cms)"
 
+msgid "Disable support for X.509"
+msgstr ""
+
 msgid "Read options from file"
 msgstr "Leer opciones desde un archivo"
 
@@ -440,7 +443,8 @@ msgstr "Clave Revocada"
 msgid "_Close"
 msgstr "_Cerrar"
 
-msgid "The following key has been revoked by it's owner:"
+#, fuzzy
+msgid "The following key has been revoked by its owner:"
 msgstr "Esta clave ha sido revocada por su propietario:"
 
 msgid "And can not be used for encryption."
@@ -1084,7 +1088,7 @@ msgid ""
 "\n"
 "Your email address will be part of the new key to make it easier for others "
 "to identify keys. If you have several email addresses, you can add further "
-"email adresses later."
+"email addresses later."
 msgstr ""
 "Por favor, introduzca su dirección de correo electrónico.\n"
 "\n"
@@ -1425,6 +1429,15 @@ msgid "Sign only _locally"
 msgstr "Firmar solo _localmente"
 
 msgid ""
+"It seems that GPGSM is not installed.\n"
+"\n"
+"Temporary disabling support for X.509.\n"
+"\n"
+"Please install GPGSM or invoke this program\n"
+"with the option --disable-x509 ."
+msgstr ""
+
+msgid ""
 "The private key you selected as default is no longer available.\n"
 "GPA will try to choose a new default key automatically."
 msgstr ""
diff --git a/po/fr.po b/po/fr.po
index a080387..5520a94 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GPA 0.8.0\n"
 "Report-Msgid-Bugs-To: gpa-dev at gnupg.org\n"
-"PO-Revision-Date: 2008-11-25 13:40+0100\n"
+"PO-Revision-Date: 2011-12-12 10:12+0100\n"
 "Last-Translator: Eric Lassauge <lassauge at users.sf.net>\n"
 "Language-Team:  <fr at li.org>\n"
 "MIME-Version: 1.0\n"
@@ -286,6 +286,9 @@ msgid "Enable the UI server"
 msgstr ""
 "Démarrer seulement le serveur d'interface graphique (implique « --cms »)"
 
+msgid "Disable support for X.509"
+msgstr ""
+
 msgid "Read options from file"
 msgstr "Lire les options depuis le fichier"
 
@@ -1387,6 +1390,15 @@ msgid "Sign only _locally"
 msgstr "Signer seulement en _local"
 
 msgid ""
+"It seems that GPGSM is not installed.\n"
+"\n"
+"Temporary disabling support for X.509.\n"
+"\n"
+"Please install GPGSM or invoke this program\n"
+"with the option --disable-x509 ."
+msgstr ""
+
+msgid ""
 "The private key you selected as default is no longer available.\n"
 "GPA will try to choose a new default key automatically."
 msgstr ""
diff --git a/po/ja.po b/po/ja.po
index 34129a6..62eb49b 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -313,6 +313,9 @@ msgstr "
 msgid "Enable the UI server"
 msgstr ""
 
+msgid "Disable support for X.509"
+msgstr ""
+
 #, fuzzy
 msgid "Read options from file"
 msgstr "¥Õ¥¡¥¤¥ë¤«¤é¥ª¥×¥·¥ç¥óÆɹþ"
@@ -458,7 +461,8 @@ msgstr "
 msgid "_Close"
 msgstr "ÊĤ¸¤ë (_C)"
 
-msgid "The following key has been revoked by it's owner:"
+#, fuzzy
+msgid "The following key has been revoked by its owner:"
 msgstr "°Ê²¼¤Î¸°¤Ï½êÍ­¼Ô¤Ë¤è¤Ã¤ÆÇË´þ¤µ¤ì¤Æ¤¤¤Þ¤¹:"
 
 msgid "And can not be used for encryption."
@@ -1091,7 +1095,7 @@ msgid ""
 "\n"
 "Your email address will be part of the new key to make it easier for others "
 "to identify keys. If you have several email addresses, you can add further "
-"email adresses later."
+"email addresses later."
 msgstr ""
 "E ¥á¡¼¥ë¥¢¥É¥ì¥¹¤ò¤Ò¤È¤Äµ­Æþ¤·¤Æ²¼¤µ¤¤¡£\n"
 "\n"
@@ -1417,6 +1421,15 @@ msgid "Sign only _locally"
 msgstr "¥í¡¼¥«¥ë¤Ç¤À¤±½ð̾ (_L)"
 
 msgid ""
+"It seems that GPGSM is not installed.\n"
+"\n"
+"Temporary disabling support for X.509.\n"
+"\n"
+"Please install GPGSM or invoke this program\n"
+"with the option --disable-x509 ."
+msgstr ""
+
+msgid ""
 "The private key you selected as default is no longer available.\n"
 "GPA will try to choose a new default key automatically."
 msgstr ""
diff --git a/po/nl.po b/po/nl.po
index 59c72be..252f273 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -310,6 +310,9 @@ msgstr "Open de voorkeuren dialoog"
 msgid "Enable the UI server"
 msgstr ""
 
+msgid "Disable support for X.509"
+msgstr ""
+
 #, fuzzy
 msgid "Read options from file"
 msgstr "lees opties van bestand"
@@ -455,7 +458,8 @@ msgstr "Teruggetrokken sleutel"
 msgid "_Close"
 msgstr "_Sluiten"
 
-msgid "The following key has been revoked by it's owner:"
+#, fuzzy
+msgid "The following key has been revoked by its owner:"
 msgstr "De volgende sleutel is gerevoceerd door de eigenaar:"
 
 msgid "And can not be used for encryption."
@@ -1096,7 +1100,7 @@ msgid ""
 "\n"
 "Your email address will be part of the new key to make it easier for others "
 "to identify keys. If you have several email addresses, you can add further "
-"email adresses later."
+"email addresses later."
 msgstr ""
 "Geef aub uw E-mail adress in.\n"
 "\n"
@@ -1426,6 +1430,15 @@ msgid "Sign only _locally"
 msgstr "Onderteken alleen _lokaal"
 
 msgid ""
+"It seems that GPGSM is not installed.\n"
+"\n"
+"Temporary disabling support for X.509.\n"
+"\n"
+"Please install GPGSM or invoke this program\n"
+"with the option --disable-x509 ."
+msgstr ""
+
+msgid ""
 "The private key you selected as default is no longer available.\n"
 "GPA will try to choose a new default key automatically."
 msgstr ""
diff --git a/po/pl.po b/po/pl.po
index ed860eb..1c86852 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -306,6 +306,9 @@ msgstr "Otwiera okno dialogowe z ustawieniami"
 msgid "Enable the UI server"
 msgstr ""
 
+msgid "Disable support for X.509"
+msgstr ""
+
 #, fuzzy
 msgid "Read options from file"
 msgstr "odczytuje opcje z podanego pliku"
@@ -452,7 +455,8 @@ msgstr "Unieważniony klucz"
 msgid "_Close"
 msgstr "Z_amknij"
 
-msgid "The following key has been revoked by it's owner:"
+#, fuzzy
+msgid "The following key has been revoked by its owner:"
 msgstr "Ten klucz został unieważniony przez swojego właściciela:"
 
 msgid "And can not be used for encryption."
@@ -1097,7 +1101,7 @@ msgid ""
 "\n"
 "Your email address will be part of the new key to make it easier for others "
 "to identify keys. If you have several email addresses, you can add further "
-"email adresses later."
+"email addresses later."
 msgstr ""
 "Proszę wprowadzić swój adres email.\n"
 "\n"
@@ -1429,6 +1433,15 @@ msgid "Sign only _locally"
 msgstr "Podpisz tylko _lokalnie"
 
 msgid ""
+"It seems that GPGSM is not installed.\n"
+"\n"
+"Temporary disabling support for X.509.\n"
+"\n"
+"Please install GPGSM or invoke this program\n"
+"with the option --disable-x509 ."
+msgstr ""
+
+msgid ""
 "The private key you selected as default is no longer available.\n"
 "GPA will try to choose a new default key automatically."
 msgstr ""
diff --git a/po/pt_BR.po b/po/pt_BR.po
index f41716d..7bc095a 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -309,6 +309,9 @@ msgstr "Abrir caixa de di
 msgid "Enable the UI server"
 msgstr ""
 
+msgid "Disable support for X.509"
+msgstr ""
+
 #, fuzzy
 msgid "Read options from file"
 msgstr "ler as preferências do arquivo"
@@ -455,7 +458,8 @@ msgstr "Chave revogada"
 msgid "_Close"
 msgstr "_Fechar"
 
-msgid "The following key has been revoked by it's owner:"
+#, fuzzy
+msgid "The following key has been revoked by its owner:"
 msgstr "A seguinte chave foi revogada pelo seu proprietário:"
 
 msgid "And can not be used for encryption."
@@ -1093,7 +1097,7 @@ msgid ""
 "\n"
 "Your email address will be part of the new key to make it easier for others "
 "to identify keys. If you have several email addresses, you can add further "
-"email adresses later."
+"email addresses later."
 msgstr ""
 "Por favor indique o seu e-mail.\n"
 "\n"
@@ -1427,6 +1431,15 @@ msgid "Sign only _locally"
 msgstr "Assinar apenas _localmente"
 
 msgid ""
+"It seems that GPGSM is not installed.\n"
+"\n"
+"Temporary disabling support for X.509.\n"
+"\n"
+"Please install GPGSM or invoke this program\n"
+"with the option --disable-x509 ."
+msgstr ""
+
+msgid ""
 "The private key you selected as default is no longer available.\n"
 "GPA will try to choose a new default key automatically."
 msgstr ""
diff --git a/po/ru.po b/po/ru.po
index e76c4bd..2352273 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GPA 0.8\n"
 "Report-Msgid-Bugs-To: gpa-dev at gnupg.org\n"
-"PO-Revision-Date: 2008-03-18 20:12+0300\n"
+"PO-Revision-Date: 2011-12-12 10:17+0100\n"
 "Last-Translator: Sergei Smirnov <moscow at hro.org>\n"
 "Language-Team: Russian <moscow at hro.org>\n"
 "MIME-Version: 1.0\n"
@@ -300,6 +300,9 @@ msgstr "Открыть окно настроек"
 msgid "Enable the UI server"
 msgstr "Стартовать только сервер UI"
 
+msgid "Disable support for X.509"
+msgstr ""
+
 msgid "Read options from file"
 msgstr "Получить настройки из файла"
 
@@ -1082,7 +1085,7 @@ msgid ""
 "\n"
 "Your email address will be part of the new key to make it easier for others "
 "to identify keys. If you have several email addresses, you can add further "
-"email adresses later."
+"email addresses later."
 msgstr ""
 "Введите свой адрес email.\n"
 "\n"
@@ -1417,6 +1420,15 @@ msgid "Sign only _locally"
 msgstr "Подписать только локально"
 
 msgid ""
+"It seems that GPGSM is not installed.\n"
+"\n"
+"Temporary disabling support for X.509.\n"
+"\n"
+"Please install GPGSM or invoke this program\n"
+"with the option --disable-x509 ."
+msgstr ""
+
+msgid ""
 "The private key you selected as default is no longer available.\n"
 "GPA will try to choose a new default key automatically."
 msgstr ""
diff --git a/po/sv.po b/po/sv.po
index 84a62f9..e45a02b 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gpa\n"
 "Report-Msgid-Bugs-To: gpa-dev at gnupg.org\n"
-"PO-Revision-Date: 2008-09-12 18:01+0100\n"
+"PO-Revision-Date: 2011-12-12 10:13+0100\n"
 "Last-Translator: Daniel Nylander <po at danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv at listor.tp-sv.se>\n"
 "MIME-Version: 1.0\n"
@@ -283,6 +283,9 @@ msgstr "Öppna inställningsdialogen"
 msgid "Enable the UI server"
 msgstr "Aktivera användargränssnittsservern (innebär --cms)"
 
+msgid "Disable support for X.509"
+msgstr ""
+
 msgid "Read options from file"
 msgstr "Läs flaggor från fil"
 
@@ -1365,6 +1368,15 @@ msgid "Sign only _locally"
 msgstr "Signera endast _lokalt"
 
 msgid ""
+"It seems that GPGSM is not installed.\n"
+"\n"
+"Temporary disabling support for X.509.\n"
+"\n"
+"Please install GPGSM or invoke this program\n"
+"with the option --disable-x509 ."
+msgstr ""
+
+msgid ""
 "The private key you selected as default is no longer available.\n"
 "GPA will try to choose a new default key automatically."
 msgstr ""
diff --git a/po/tr.po b/po/tr.po
index 6549dbb..e17c285 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gpa 0.7.0\n"
 "Report-Msgid-Bugs-To: gpa-dev at gnupg.org\n"
-"PO-Revision-Date: 2004-06-20 14:42+0300\n"
+"PO-Revision-Date: 2011-12-12 10:14+0100\n"
 "Last-Translator: Mert Çetin <mertc at su.sabanciuniv.edu>\n"
 "Language-Team: xTc & Déjà Vu\n"
 "MIME-Version: 1.0\n"
@@ -306,6 +306,9 @@ msgstr "Tercihler penceresini a
 msgid "Enable the UI server"
 msgstr ""
 
+msgid "Disable support for X.509"
+msgstr ""
+
 #, fuzzy
 msgid "Read options from file"
 msgstr "seçenekleri dosyadan oku"
@@ -1084,13 +1087,12 @@ msgstr ""
 msgid "Your Name:"
 msgstr "Ýsminiz:"
 
-#, fuzzy
 msgid ""
 "Please insert your email address.\n"
 "\n"
 "Your email address will be part of the new key to make it easier for others "
 "to identify keys. If you have several email addresses, you can add further "
-"email adresses later."
+"email addresses later."
 msgstr ""
 "Lütfen email adresinizi girin.\n"
 "\n"
@@ -1421,6 +1423,15 @@ msgid "Sign only _locally"
 msgstr "Sadece _yerel olarak imzala"
 
 msgid ""
+"It seems that GPGSM is not installed.\n"
+"\n"
+"Temporary disabling support for X.509.\n"
+"\n"
+"Please install GPGSM or invoke this program\n"
+"with the option --disable-x509 ."
+msgstr ""
+
+msgid ""
 "The private key you selected as default is no longer available.\n"
 "GPA will try to choose a new default key automatically."
 msgstr ""
diff --git a/po/zh_TW.Big5.po b/po/zh_TW.Big5.po
index d587978..9ed7ca6 100644
--- a/po/zh_TW.Big5.po
+++ b/po/zh_TW.Big5.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gpa-0.7.0\n"
 "Report-Msgid-Bugs-To: gpa-dev at gnupg.org\n"
-"POT-Creation-Date: 2011-08-26 10:32+0200\n"
+"POT-Creation-Date: 2011-12-12 10:10+0100\n"
 "PO-Revision-Date: 2003-10-20 11:55+0200\n"
 "Last-Translator: Shell Hung <shell at linux.org.hk>\n"
 "Language-Team: Hong Kong Linux User Group <info at linux.org.hk>\n"
@@ -362,56 +362,60 @@ msgstr "
 msgid "_Detached signature"
 msgstr "¯Â¤å¦rñ¸p (&C)"
 
-#: src/gpa.c:96
+#: src/gpa.c:97
 #, fuzzy
 msgid "Output version information and exit"
 msgstr "Åã¥Üª©¥»¸ê®Æ¤ÎÂ÷¶}"
 
-#: src/gpa.c:98
+#: src/gpa.c:99
 #, fuzzy
 msgid "Open key manager (default)"
 msgstr "¶}±ÒÆ_°é½s¿è¾¹ (¹w³])"
 
-#: src/gpa.c:100
+#: src/gpa.c:101
 #, fuzzy
 msgid "Open file manager"
 msgstr "¶}±ÒÀɮ׺޲z­û"
 
-#: src/gpa.c:102 src/gpa.h:80
+#: src/gpa.c:103 src/gpa.h:80
 #, fuzzy
 msgid "Open the card manager"
 msgstr "¶}±ÒÀɮ׺޲z­û"
 
-#: src/gpa.c:104
+#: src/gpa.c:105
 msgid "Open clipboard"
 msgstr ""
 
-#: src/gpa.c:106
+#: src/gpa.c:107
 #, fuzzy
 msgid "Open the settings dialog"
 msgstr "¶}±Ò³]©wµøµ¡"
 
-#: src/gpa.c:108
+#: src/gpa.c:109
 msgid "Enable the UI server"
 msgstr ""
 
-#: src/gpa.c:110
+#: src/gpa.c:111
+msgid "Disable support for X.509"
+msgstr ""
+
+#: src/gpa.c:113
 #, fuzzy
 msgid "Read options from file"
 msgstr "¥ÑÀɮפ¤Åª¨ú¿ï¶µ"
 
-#: src/gpa.c:314
+#: src/gpa.c:317
 msgid "[FILE...]"
 msgstr ""
 
-#: src/gpa.c:316
+#: src/gpa.c:319
 #, fuzzy
 msgid "Graphical frontend to GnuPG"
 msgstr ""
 "»yªk: gpa [¿ï¶µ]\n"
 "GnuPGªº¹Ï¹³¤¶­±\n"
 
-#: src/gpa.c:317
+#: src/gpa.c:320
 msgid "Please report bugs to <"
 msgstr "¦^³ø¯äÂÎ¦Ü <"
 
@@ -584,7 +588,8 @@ msgid "_Close"
 msgstr "Ãö³¬ (&C)"
 
 #: src/gpafileencryptop.c:540
-msgid "The following key has been revoked by it's owner:"
+#, fuzzy
+msgid "The following key has been revoked by its owner:"
 msgstr "³o¤½Æ_¤w³Q¹ï¤è¨ú®ø¤F:"
 
 #: src/gpafileencryptop.c:545 src/gpafileencryptop.c:588
@@ -1380,7 +1385,7 @@ msgid ""
 "\n"
 "Your email address will be part of the new key to make it easier for others "
 "to identify keys. If you have several email addresses, you can add further "
-"email adresses later."
+"email addresses later."
 msgstr ""
 "½Ð¿é¤J±zªº¹q¶l.\n"
 "\n"
@@ -1783,6 +1788,16 @@ msgstr "
 msgid "Sign only _locally"
 msgstr "¥u¬O¥»¦a¤WªºÃ±¸p (&l)"
 
+#: src/keytable.c:217
+msgid ""
+"It seems that GPGSM is not installed.\n"
+"\n"
+"Temporary disabling support for X.509.\n"
+"\n"
+"Please install GPGSM or invoke this program\n"
+"with the option --disable-x509 ."
+msgstr ""
+
 #: src/options.c:329
 msgid ""
 "The private key you selected as default is no longer available.\n"

commit 7ad794d2f37897156da6f69f37e3f8c6c90316f2
Author: Werner Koch <wk at gnupg.org>
Date:   Mon Dec 12 11:43:17 2011 +0100

    Fix indentation.
    
    * src/keytable.c: Fix function name indentation.

diff --git a/src/keytable.c b/src/keytable.c
index 438f0f3..a8198df 100644
--- a/src/keytable.c
+++ b/src/keytable.c
@@ -313,10 +313,11 @@ GpaKeyTable *gpa_keytable_get_secret_instance ()
  * This function MAY not do anything until the application goes back into
  * the GLib main loop.
  */
-void gpa_keytable_list_keys (GpaKeyTable *keytable,
-			     GpaKeyTableNextFunc next,
-			     GpaKeyTableEndFunc end,
-			     gpointer data)
+void
+gpa_keytable_list_keys (GpaKeyTable *keytable,
+                        GpaKeyTableNextFunc next,
+                        GpaKeyTableEndFunc end,
+                        gpointer data)
 {
   g_return_if_fail (keytable != NULL);
   g_return_if_fail (GPA_IS_KEYTABLE (keytable));
@@ -339,10 +340,11 @@ void gpa_keytable_list_keys (GpaKeyTable *keytable,
 
 /* Same as list_keys, but forces the internal cache to be rebuilt.
  */
-void gpa_keytable_force_reload (GpaKeyTable *keytable,
-				GpaKeyTableNextFunc next,
-				GpaKeyTableEndFunc end,
-				gpointer data)
+void
+gpa_keytable_force_reload (GpaKeyTable *keytable,
+                           GpaKeyTableNextFunc next,
+                           GpaKeyTableEndFunc end,
+                           gpointer data)
 {
   g_return_if_fail (keytable != NULL);
   g_return_if_fail (GPA_IS_KEYTABLE (keytable));
@@ -358,11 +360,12 @@ void gpa_keytable_force_reload (GpaKeyTable *keytable,
 /* Load the key with the given fingerprint from GnuPG, replacing it in the
  * keytable if needed.
  */
-void gpa_keytable_load_new (GpaKeyTable *keytable,
-			    const char *fpr,
-			    GpaKeyTableNextFunc next,
-			    GpaKeyTableEndFunc end,
-			    gpointer data)
+void
+gpa_keytable_load_new (GpaKeyTable *keytable,
+                       const char *fpr,
+                       GpaKeyTableNextFunc next,
+                       GpaKeyTableEndFunc end,
+                       gpointer data)
 {
   g_return_if_fail (keytable != NULL);
   g_return_if_fail (GPA_IS_KEYTABLE (keytable));

-----------------------------------------------------------------------

Summary of changes:
 NEWS             |   12 ++-
 po/ar.po         |   14 +++-
 po/cs.po         |   14 +++-
 po/de.po         |   14 +++-
 po/es.po         |   17 +++-
 po/fr.po         |   14 +++-
 po/ja.po         |   17 +++-
 po/nl.po         |   17 +++-
 po/pl.po         |   17 +++-
 po/pt_BR.po      |   17 +++-
 po/ru.po         |   16 +++-
 po/sv.po         |   14 +++-
 po/tr.po         |   17 +++-
 po/zh_TW.Big5.po |   43 ++++++---
 src/Makefile.am  |   17 ++--
 src/cardman.c    |  108 ++++++++++++++---------
 src/cm-unknown.c |  253 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/cm-unknown.h |   57 ++++++++++++
 src/keytable.c   |   29 ++++---
 19 files changed, 605 insertions(+), 102 deletions(-)
 create mode 100644 src/cm-unknown.c
 create mode 100644 src/cm-unknown.h


hooks/post-receive
-- 
The GNU Privacy Assistant
http://git.gnupg.org




More information about the Gnupg-commits mailing list