Add default-cacnel and default-ok to pinentry-qt(3)
authorWerner Koch <wk@gnupg.org>
Tue, 12 Oct 2010 15:58:19 +0000 (15:58 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 12 Oct 2010 15:58:19 +0000 (15:58 +0000)
ChangeLog
NEWS
autogen.sh
qt/main.cpp

index 04b7b01..b540824 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-10-12  Werner Koch  <wk@g10code.com>
+
+       * qt/main.cpp (escape_accel): New.  Adapt from from qt4/.
+       (qt_cmd_handler): Implement default-ok and default-cancel.  Escape
+       accelerators.
+
 2010-09-30  Werner Koch  <wk@g10code.com>
 
        * pinentry/pinentry.h (struct pinentry): Add CLOSE_BUTTON.
diff --git a/NEWS b/NEWS
index 3f4bb7a..2304fae 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -7,7 +7,8 @@ Noteworthy changes in version 0.8.1 (unreleased)
    the keyboard.
 
  * The protocol options default-cancel and default-ok now work for the
-   pinnetry-gtk2.
+   pinentry-gtk2 and pinentry-qt (that is QT3).
+
 
 Noteworthy changes in version 0.8.0 (2010-03-03)
 ------------------------------------------------
index cb320a7..0d23ad4 100755 (executable)
@@ -140,7 +140,7 @@ if [ "$myhost" = "w32" ]; then
         fi
     fi
 
-    ./configure --enable-maintainer-mode --prefix=${w32root} \
+    $tsdir/configure --enable-maintainer-mode --prefix=${w32root} \
                 --host=${host} --build=${build} \
                 --disable-pinentry-gtk \
                 --disable-pinentry-qt  \
index 95e8f7f..1f21c03 100644 (file)
 #include <pinentry-curses.h>
 #endif
 
+static QString escape_accel( const QString & s ) {
+
+  QString result;
+  result.reserve( 2 * s.length());
+
+  bool afterUnderscore = false;
+
+  for ( unsigned int i = 0, end = s.length() ; i != end ; ++i ) {
+    const QChar ch = s[i];
+    if ( ch == QChar ( '_' ) )
+      {
+        if ( afterUnderscore ) // escaped _
+          {
+            result += QChar ( '_' );
+            afterUnderscore = false;
+          }
+        else // accel
+          {
+            afterUnderscore = true;
+          }
+      }
+    else
+      {
+        if ( afterUnderscore || // accel
+             ch == QChar ( '&' ) ) // escape & from being interpreted by Qt
+          result += QChar ( '&' );
+        result += ch;
+        afterUnderscore = false;
+      }
+  }
+
+  if ( afterUnderscore )
+    // trailing single underscore: shouldn't happen, but deal with it robustly:
+    result += QChar ( '_' );
+
+  return result;
+}
+
+
 /* Hack for creating a QWidget with a "foreign" window ID */
 class ForeignWidget : public QWidget
 {
@@ -79,9 +118,16 @@ qt_cmd_handler (pinentry_t pe)
 #endif
 
       if (pe->ok)
-       pinentry.setOkText (QString::fromUtf8 (pe->ok));
+       pinentry.setOkText (escape_accel (QString::fromUtf8 (pe->ok)));
+      else if (pe->default_ok)
+       pinentry.setOkText (escape_accel (QString::fromUtf8 (pe->default_ok)));
+
       if (pe->cancel)
-       pinentry.setCancelText (QString::fromUtf8 (pe->cancel));
+       pinentry.setCancelText (escape_accel (QString::fromUtf8 (pe->cancel)));
+      else if (pe->default_cancel)
+       pinentry.setCancelText
+          (escape_accel (QString::fromUtf8 (pe->default_cancel)));
+
       if (pe->error)
        pinentry.setError (QString::fromUtf8 (pe->error));
       if (pe->quality_bar)
@@ -113,9 +159,13 @@ qt_cmd_handler (pinentry_t pe)
     }
   else
     {
-      QString desc = QString::fromUtf8 (pe->description? pe->description :"");
-      QString ok   = QString::fromUtf8 (pe->ok ? pe->ok : "OK");
-      QString can  = QString::fromUtf8 (pe->cancel ? pe->cancel : "Cancel");
+      QString desc = QString::fromUtf8 (pe->description? pe->description : "");
+      QString ok   = escape_accel
+        (QString::fromUtf8 (pe->ok ? pe->ok :
+                            pe->default_ok ? pe->default_ok : "&OK"));
+      QString can  = escape_accel
+        (QString::fromUtf8 (pe->cancel ? pe->cancel :
+                            pe->default_cancel? pe->default_cancel: "&Cancel"));
       bool ret;
       
       ret = QMessageBox::information (parent, "", desc, ok, can );
@@ -160,7 +210,7 @@ main (int argc, char *argv[])
       for (done=0,p=*new_argv,i=0; i < argc; i++)
         if (!done && !strcmp (argv[i], "--display"))
           {
-            new_argv[i] = "-display";
+            new_argv[i] = (char*)"-display";
             done = 1;
           }
         else