Return a bit of button info.
authorWerner Koch <wk@gnupg.org>
Thu, 30 Sep 2010 15:17:08 +0000 (15:17 +0000)
committerWerner Koch <wk@gnupg.org>
Thu, 30 Sep 2010 15:17:08 +0000 (15:17 +0000)
ChangeLog
gtk+-2/pinentry-gtk-2.c
pinentry/pinentry.c
pinentry/pinentry.h

index 65fed65..04b7b01 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2010-09-30  Werner Koch  <wk@g10code.com>
+
+       * pinentry/pinentry.h (struct pinentry): Add CLOSE_BUTTON.
+       * pinentry/pinentry.c (cmd_getpin, cmd_confirm, cmd_message): Send
+       BUTTON_INFO.
+       * gtk+-2/pinentry-gtk-2.c (delete_event): Set close_button.
+
 2010-09-22  Werner Koch  <wk@g10code.com>
 
        * gtk+-2/pinentry-gtk-2.c (create_window): Make use of
index 4cf34d9..232b4c7 100644 (file)
@@ -1,7 +1,7 @@
 /* pinentry-gtk-2.c
    Copyright (C) 1999 Robert Bihlmeyer <robbe@orcus.priv.at>
    Copyright (C) 2001, 2002, 2007 g10 Code GmbH
-   Copyright (C) 2004 by Albrecht Dreß <albrecht.dress@arcor.de>
+   Copyright (C) 2004 by Albrecht Dreß <albrecht.dress@arcor.de>
 
    pinentry-gtk-2 is a pinentry application for the Gtk+-2 widget set.
    It tries to follow the Gnome Human Interface Guide as close as
@@ -161,6 +161,7 @@ ungrab_keyboard (GtkWidget *win, GdkEvent *event, gpointer data)
 static int
 delete_event (GtkWidget *widget, GdkEvent *event, gpointer data)
 {
+  pinentry->close_button = 1;
   gtk_main_quit ();
   return TRUE;
 }
index a66f4be..3eb7d5b 100644 (file)
@@ -80,7 +80,8 @@ struct pinentry pinentry =
     0,         /* Parent Window ID.  */
     NULL,       /* Touch file.  */
     0,         /* Result.  */
-    0,         /* Result Not-OK.  */
+    0,         /* Canceled.  */
+    0,         /* Close button flag.  */
     0,          /* Locale error flag. */
     0,          /* One-button flag.  */
     NULL,       /* Quality-Bar flag and description.  */
@@ -890,6 +891,7 @@ cmd_getpin (ASSUAN_CONTEXT ctx, char *line)
       set_prompt = 1;
     }
   pinentry.locale_err = 0;
+  pinentry.close_button = 0;
   pinentry.one_button = 0;
   pinentry.ctx_assuan = ctx;
   result = (*pinentry_cmd_handler) (&pinentry);
@@ -904,6 +906,9 @@ cmd_getpin (ASSUAN_CONTEXT ctx, char *line)
 
   pinentry.quality_bar = 0;  /* Reset it after the command.  */
 
+  if (pinentry.close_button)
+    assuan_write_status (ctx, "BUTTON_INFO", "close");
+
   if (result < 0)
     {
       if (pinentry.pin)
@@ -945,6 +950,7 @@ cmd_confirm (ASSUAN_CONTEXT ctx, char *line)
 
   pinentry.one_button = !!strstr (line, "--one-button");
   pinentry.quality_bar = 0;
+  pinentry.close_button = 0;
   pinentry.locale_err = 0;
   pinentry.canceled = 0;
   result = (*pinentry_cmd_handler) (&pinentry);
@@ -954,6 +960,9 @@ cmd_confirm (ASSUAN_CONTEXT ctx, char *line)
       pinentry.error = NULL;
     }
 
+  if (pinentry.close_button)
+    assuan_write_status (ctx, "BUTTON_INFO", "close");
+
   return result ? 0
                 : (pinentry.locale_err? ASSUAN_Locale_Problem
                                       : (pinentry.one_button 
@@ -971,6 +980,7 @@ cmd_message (ASSUAN_CONTEXT ctx, char *line)
 
   pinentry.one_button = 1;
   pinentry.quality_bar = 0;
+  pinentry.close_button = 0;
   pinentry.locale_err = 0;
   result = (*pinentry_cmd_handler) (&pinentry);
   if (pinentry.error)
@@ -979,6 +989,9 @@ cmd_message (ASSUAN_CONTEXT ctx, char *line)
       pinentry.error = NULL;
     }
 
+  if (pinentry.close_button)
+    assuan_write_status (ctx, "BUTTON_INFO", "close");
+
   return result ? 0 
                 : (pinentry.locale_err? ASSUAN_Locale_Problem
                                       : 0);
index b34d796..30452f5 100644 (file)
@@ -98,6 +98,11 @@ struct pinentry
      conversion occured. */
   int locale_err;
 
+  /* The user should set this to true if the window close button has
+     been used.  This flag is used in addition to a regular return
+     value.  */
+  int close_button;
+
   /* The caller should set this to true if only one button is
      required.  This is useful for notification dialogs where only a
      dismiss button is required. */