Hello community,

here is the log from the commit of package kgpg for openSUSE:Factory checked in 
at 2013-07-08 07:31:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kgpg (Old)
 and      /work/SRC/openSUSE:Factory/.kgpg.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kgpg"

Changes:
--------
--- /work/SRC/openSUSE:Factory/kgpg/kgpg.changes        2013-06-11 
09:32:04.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.kgpg.new/kgpg.changes   2013-07-08 
07:31:45.000000000 +0200
@@ -1,0 +2,14 @@
+Thu Jun 27 18:23:49 UTC 2013 - tittiatc...@gmail.com
+
+- Update to 4.10.90
+   * KDE 4.11 Beta 1 release
+   * See http://www.kde.org/announcements/announce-4.11-beta2.php
+
+-------------------------------------------------------------------
+Thu Jun 13 19:32:08 UTC 2013 - tittiatc...@gmail.com
+
+- Update to 4.10.80
+   * KDE 4.11 Beta 1 release
+   * See http://www.kde.org/announcements/announce-4.11-beta1.php
+
+-------------------------------------------------------------------

Old:
----
  kgpg-4.10.4.tar.xz

New:
----
  kgpg-4.10.90.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kgpg.spec ++++++
--- /var/tmp/diff_new_pack.M1DZnL/_old  2013-07-08 07:31:46.000000000 +0200
+++ /var/tmp/diff_new_pack.M1DZnL/_new  2013-07-08 07:31:46.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           kgpg
-Version:        4.10.4
+Version:        4.10.90
 Release:        0
 Summary:        Encryption Tool
 License:        GPL-2.0+

++++++ kgpg-4.10.4.tar.xz -> kgpg-4.10.90.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/conf_ui2.ui new/kgpg-4.10.90/conf_ui2.ui
--- old/kgpg-4.10.4/conf_ui2.ui 2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/conf_ui2.ui        2013-06-10 20:53:48.000000000 +0200
@@ -225,6 +225,69 @@
        <string>Editor Font</string>
       </attribute>
      </widget>
+     <widget class="QWidget" name="tabKeyList">
+      <attribute name="title">
+       <string>Key List</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout">
+       <item>
+        <widget class="QGroupBox" name="groupBoxSorting">
+         <property name="title">
+          <string>Sort Order</string>
+         </property>
+         <layout class="QFormLayout" name="formLayout">
+          <item row="0" column="0">
+           <widget class="QLabel" name="label_EmailSorting">
+            <property name="text">
+             <string>Email:</string>
+            </property>
+            <property name="buddy">
+             <cstring>kcfg_EmailSorting</cstring>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <widget class="KComboBox" name="kcfg_EmailSorting">
+            <item>
+             <property name="text">
+              <string>Left to right, account first</string>
+             </property>
+            </item>
+            <item>
+             <property name="text">
+              <string>Right to left, TLD first</string>
+             </property>
+            </item>
+            <item>
+             <property name="text">
+              <string>Right to left, domain first</string>
+             </property>
+            </item>
+            <item>
+             <property name="text">
+              <string>Right to left, FQDN first</string>
+             </property>
+            </item>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item>
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>351</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
     </widget>
    </item>
   </layout>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/core/KGpgSignNode.cpp 
new/kgpg-4.10.90/core/KGpgSignNode.cpp
--- old/kgpg-4.10.4/core/KGpgSignNode.cpp       2013-05-28 21:30:19.000000000 
+0200
+++ new/kgpg-4.10.90/core/KGpgSignNode.cpp      2013-06-10 20:53:48.000000000 
+0200
@@ -1,4 +1,4 @@
-/* Copyright 2008,2009,2010 Rolf Eike Beer <k...@opensource.sf-tec.de>
+/* Copyright 2008,2009,2010,2013 Rolf Eike Beer <k...@opensource.sf-tec.de>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -33,7 +33,9 @@
 };
 
 KGpgSignNodePrivate::KGpgSignNodePrivate(const QStringList &sl)
+       : m_local(false)
 {
+       Q_ASSERT(!sl.isEmpty());
        m_revocation = (sl.at(0) == QLatin1String("rev"));
        if (sl.count() < 6)
                return;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/core/convert.cpp 
new/kgpg-4.10.90/core/convert.cpp
--- old/kgpg-4.10.4/core/convert.cpp    2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/core/convert.cpp   2013-06-10 20:53:48.000000000 +0200
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2006 Jimmy Gilles <jimmygil...@gmail.com>
- * Copyright (C) 2010 Rolf Eike Beer <k...@opensource.sf-tec.de>
+ * Copyright (C) 2010,2013 Rolf Eike Beer <k...@opensource.sf-tec.de>
  */
 /***************************************************************************
  *   This program is free software; you can redistribute it and/or modify  *
@@ -30,7 +30,10 @@
 namespace KgpgCore
 {
 
-QString Convert::toString(const KgpgKeyAlgo algorithm)
+namespace Convert
+{
+
+QString toString(const KgpgKeyAlgo algorithm)
 {
     switch (algorithm)
     {
@@ -44,7 +47,7 @@
     }
 }
 
-QString Convert::toString(const KgpgKeyOwnerTrust ownertrust)
+QString toString(const KgpgKeyOwnerTrust ownertrust)
 {
     switch (ownertrust)
     {
@@ -58,7 +61,7 @@
     }
 }
 
-QString Convert::toString(const KgpgKeyTrust trust)
+QString toString(const KgpgKeyTrust trust)
 {
     switch (trust)
     {
@@ -76,30 +79,12 @@
     }
 }
 
-QColor Convert::toColor(const KgpgKeyTrust trust)
-{
-    switch (trust)
-    {
-        case TRUST_INVALID:
-        case TRUST_DISABLED:    return KGpgSettings::colorBad();
-        case TRUST_EXPIRED:     return KGpgSettings::colorExpired();
-        case TRUST_MARGINAL:    return KGpgSettings::colorMarginal();
-        case TRUST_REVOKED:     return KGpgSettings::colorRev();
-        case TRUST_UNDEFINED:
-        case TRUST_NONE:        return KGpgSettings::colorUnknown();
-        case TRUST_FULL:        return KGpgSettings::colorGood();
-        case TRUST_ULTIMATE:    return KGpgSettings::colorUltimate();
-        case TRUST_UNKNOWN:
-        default:                return KGpgSettings::colorUnknown();
-    }
-}
-
-QString Convert::toString(const QDate &date)
+QString toString(const QDate &date)
 {
     return KGlobal::locale()->formatDate(date, KLocale::ShortDate);
 }
 
-KgpgKeyAlgo Convert::toAlgo(const uint v)
+KgpgKeyAlgo toAlgo(const uint v)
 {
     switch (v)
     {
@@ -111,14 +96,14 @@
     }
 }
 
-KgpgKeyAlgo Convert::toAlgo(const QString &s)
+KgpgKeyAlgo toAlgo(const QString &s)
 {
     bool b;
     unsigned int u = s.toUInt(&b);
     return b ? toAlgo(u) : ALGO_UNKNOWN;
 }
 
-KgpgKeyTrust Convert::toTrust(const QChar &c)
+KgpgKeyTrust toTrust(const QChar &c)
 {
     switch (c.toAscii())
     {
@@ -136,12 +121,12 @@
     }
 }
 
-KgpgKeyTrust Convert::toTrust(const QString &s)
+KgpgKeyTrust toTrust(const QString &s)
 {
     return s.isEmpty() ? TRUST_UNKNOWN : toTrust(s[0]);
 }
 
-KgpgKeyOwnerTrust Convert::toOwnerTrust(const QChar &c)
+KgpgKeyOwnerTrust toOwnerTrust(const QChar &c)
 {
     switch (c.toAscii())
     {
@@ -153,30 +138,11 @@
     }
 }
 
-KgpgKeyOwnerTrust Convert::toOwnerTrust(const QString &s)
+KgpgKeyOwnerTrust toOwnerTrust(const QString &s)
 {
     return s.isEmpty() ? OWTRUST_UNDEFINED : toOwnerTrust(s[0]);
 }
 
-QPixmap Convert::toPixmap(const KgpgItemType t)
-{
-    switch (t)
-    {
-        case ITYPE_GROUP:      return Images::group();
-        case ITYPE_GSECRET:
-        case ITYPE_SECRET:     return Images::orphan();
-        case ITYPE_GPUBLIC:
-        case ITYPE_SUB:
-        case ITYPE_PUBLIC:     return Images::single();
-        case ITYPE_GPAIR:
-        case ITYPE_PAIR:       return Images::pair();
-        case ITYPE_UID:                return Images::userId();
-        case ITYPE_UAT:                return Images::photo();
-        case ITYPE_REVSIGN:    return Images::revoke();
-        case ITYPE_SIGN:       return Images::signature();
-       default:                Q_ASSERT(1);
-                               return NULL;
-    }
-}
+} // namespace Convert
 
 } // namespace KgpgCore
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/core/convert.h 
new/kgpg-4.10.90/core/convert.h
--- old/kgpg-4.10.4/core/convert.h      2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/core/convert.h     2013-06-10 20:53:48.000000000 +0200
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2006 Jimmy Gilles <jimmygil...@gmail.com>
- * Copyright (C) 2010 Rolf Eike Beer <k...@opensource.sf-tec.de>
+ * Copyright (C) 2010,2013 Rolf Eike Beer <k...@opensource.sf-tec.de>
  */
 /***************************************************************************
  *   This program is free software; you can redistribute it and/or modify  *
@@ -24,29 +24,25 @@
 
 #include "kgpgkey.h"
 
-class QColor;
 class QString;
 class QPixmap;
 
 namespace KgpgCore
 {
 
-class Convert
+namespace Convert
 {
-public:
-    static QString toString(const KgpgCore::KgpgKeyAlgo algorithm);
-    static QString toString(const KgpgCore::KgpgKeyOwnerTrust ownertrust);
-    static QString toString(const KgpgCore::KgpgKeyTrust trust);
-    static QString toString(const QDate &date);
-    static QColor toColor(const KgpgCore::KgpgKeyTrust trust);
-    static KgpgKeyAlgo toAlgo(const uint v);
-    static KgpgKeyAlgo toAlgo(const QString &s);
-    static KgpgKeyTrust toTrust(const QChar &c);
-    static KgpgKeyTrust toTrust(const QString &s);
-    static KgpgKeyOwnerTrust toOwnerTrust(const QChar &c);
-    static KgpgKeyOwnerTrust toOwnerTrust(const QString &s);
-    static QPixmap toPixmap(const KgpgCore::KgpgItemType t);
-};
+    QString toString(const KgpgCore::KgpgKeyAlgo algorithm);
+    QString toString(const KgpgCore::KgpgKeyOwnerTrust ownertrust);
+    QString toString(const KgpgCore::KgpgKeyTrust trust);
+    QString toString(const QDate &date);
+    KgpgKeyAlgo toAlgo(const uint v);
+    KgpgKeyAlgo toAlgo(const QString &s);
+    KgpgKeyTrust toTrust(const QChar &c);
+    KgpgKeyTrust toTrust(const QString &s);
+    KgpgKeyOwnerTrust toOwnerTrust(const QChar &c);
+    KgpgKeyOwnerTrust toOwnerTrust(const QString &s);
+}
 
 } // namespace KgpgCore
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/core/images.cpp 
new/kgpg-4.10.90/core/images.cpp
--- old/kgpg-4.10.4/core/images.cpp     2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/core/images.cpp    2013-06-10 20:53:48.000000000 +0200
@@ -1,7 +1,8 @@
+/*
+ * Copyright (C) 2006 Jimmy Gilles <jimmygil...@gmail.com>
+ * Copyright (C) 2013 Rolf Eike Beer <k...@opensource.sf-tec.de>
+ */
 /***************************************************************************
- *   Copyright (C) 2006 by Jimmy Gilles                                    *
- *   jimmygil...@gmail.com                                                 *
- *                                                                         *
  *   This program 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 2 of the License, or     *
@@ -25,7 +26,10 @@
 namespace KgpgCore
 {
 
-QPixmap Images::single()
+namespace Images
+{
+
+QPixmap single()
 {
     static QPixmap single;
     if (single.isNull())
@@ -33,7 +37,7 @@
     return single;
 }
 
-QPixmap Images::pair()
+QPixmap pair()
 {
     static QPixmap pair;
     if (pair.isNull())
@@ -41,7 +45,7 @@
     return pair;
 }
 
-QPixmap Images::group()
+QPixmap group()
 {
     static QPixmap group;
     if (group.isNull())
@@ -49,7 +53,7 @@
     return group;
 }
 
-QPixmap Images::orphan()
+QPixmap orphan()
 {
     static QPixmap oprpan;
     if (oprpan.isNull())
@@ -57,7 +61,7 @@
     return oprpan;
 }
 
-QPixmap Images::signature()
+QPixmap signature()
 {
     static QPixmap signature;
     if (signature.isNull())
@@ -65,7 +69,7 @@
     return signature;
 }
 
-QPixmap Images::userId()
+QPixmap userId()
 {
     static QPixmap userid;
     if (userid.isNull())
@@ -73,7 +77,7 @@
     return userid;
 }
 
-QPixmap Images::photo()
+QPixmap photo()
 {
     static QPixmap photo;
     if (photo.isNull())
@@ -81,7 +85,7 @@
     return photo;
 }
 
-QPixmap Images::revoke()
+QPixmap revoke()
 {
     static QPixmap revoke;
     if (revoke.isNull())
@@ -89,7 +93,7 @@
     return revoke;
 }
 
-QPixmap Images::kgpg()
+QPixmap kgpg()
 {
     static QPixmap kgpg;
     if (kgpg.isNull())
@@ -97,4 +101,6 @@
     return kgpg;
 }
 
+} // namespace Images
+
 } // namespace KgpgCore
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/core/images.h 
new/kgpg-4.10.90/core/images.h
--- old/kgpg-4.10.4/core/images.h       2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/core/images.h      2013-06-10 20:53:48.000000000 +0200
@@ -1,7 +1,8 @@
+/*
+ * Copyright (C) 2006 Jimmy Gilles <jimmygil...@gmail.com>
+ * Copyright (C) 2013 Rolf Eike Beer <k...@opensource.sf-tec.de>
+ */
 /***************************************************************************
- *   Copyright (C) 2006 by Jimmy Gilles                                    *
- *   jimmygil...@gmail.com                                                 *
- *                                                                         *
  *   This program 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 2 of the License, or     *
@@ -26,21 +27,20 @@
 namespace KgpgCore
 {
 
-class Images
+namespace Images
 {
-public:
-    static QPixmap single();
-    static QPixmap pair();
-    static QPixmap group();
-    static QPixmap orphan();
-    static QPixmap signature();
-    static QPixmap userId();
-    static QPixmap photo();
-    static QPixmap revoke();
+    QPixmap single();
+    QPixmap pair();
+    QPixmap group();
+    QPixmap orphan();
+    QPixmap signature();
+    QPixmap userId();
+    QPixmap photo();
+    QPixmap revoke();
 
     /* Desktop image */
-    static QPixmap kgpg();
-};
+    QPixmap kgpg();
+}
 
 } // namespace KgpgCore
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/core/kgpgkey.cpp 
new/kgpg-4.10.90/core/kgpgkey.cpp
--- old/kgpg-4.10.4/core/kgpgkey.cpp    2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/core/kgpgkey.cpp   2013-06-10 20:53:48.000000000 +0200
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2006,2007 Jimmy Gilles <jimmygil...@gmail.com>
- * Copyright (C) 2007,2008,2009,2010,2012 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
+ * Copyright (C) 2007,2008,2009,2010,2012,2013 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
  */
 
 /***************************************************************************
@@ -26,7 +26,8 @@
 //BEGIN KeySub
 KgpgKeySubPrivate::KgpgKeySubPrivate(const QString &id, const uint size, const 
KgpgKeyTrust trust, const KgpgKeyAlgo algo,
                                      const KgpgSubKeyType type, const 
QDateTime &date)
-    : gpgsubid(id),
+    : gpgsubvalid(false),
+    gpgsubid(id),
     gpgsubsize(size),
     gpgsubcreation(date),
     gpgsubtrust(trust),
@@ -50,9 +51,8 @@
 
 KgpgKeySub::KgpgKeySub(const QString &id, const uint size, const KgpgKeyTrust 
trust, const KgpgKeyAlgo algo, const KgpgSubKeyType type,
                        const QDateTime &date)
-    : d(new  KgpgKeySubPrivate(id, size, trust, algo, type, date))
+    : d(new KgpgKeySubPrivate(id, size, trust, algo, type, date))
 {
-    d->gpgsubvalid = false;
 }
 
 KgpgKeySub::KgpgKeySub(const KgpgKeySub &other)
Files old/kgpg-4.10.4/doc/index.cache.bz2 and 
new/kgpg-4.10.90/doc/index.cache.bz2 differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/doc/index.docbook 
new/kgpg-4.10.90/doc/index.docbook
--- old/kgpg-4.10.4/doc/index.docbook   2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/doc/index.docbook  2013-06-10 20:53:48.000000000 +0200
@@ -44,8 +44,8 @@
 
 <legalnotice>&FDLNotice;</legalnotice>
 
-<date>2010-05-14</date>
-<releaseinfo>0.06.00</releaseinfo>
+<date>2013-05-25</date>
+<releaseinfo>2.9.50 (&kde; 4.11)</releaseinfo>
 
 <abstract>
 <para>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/editor/kgpgmd5widget.cpp 
new/kgpg-4.10.90/editor/kgpgmd5widget.cpp
--- old/kgpg-4.10.4/editor/kgpgmd5widget.cpp    2013-05-28 21:30:19.000000000 
+0200
+++ new/kgpg-4.10.90/editor/kgpgmd5widget.cpp   2013-06-10 20:53:48.000000000 
+0200
@@ -31,14 +31,14 @@
     setButtonText(Apply, i18n("Compare MD5 with Clipboard"));
 
     QFile f(url.path());
-    f.open(QIODevice::ReadOnly);
-
     KMD5 checkfile;
-    checkfile.reset();
-    checkfile.update(f);
+
+    if (f.open(QIODevice::ReadOnly)) {
+       checkfile.update(f);
+       f.close();
+    }
 
     m_md5sum = QLatin1String( checkfile.hexDigest().constData() );
-    f.close();
 
     QWidget *page = new QWidget(this);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/foldercompressjob.cpp 
new/kgpg-4.10.90/foldercompressjob.cpp
--- old/kgpg-4.10.4/foldercompressjob.cpp       2013-05-28 21:30:19.000000000 
+0200
+++ new/kgpg-4.10.90/foldercompressjob.cpp      2013-06-10 20:53:48.000000000 
+0200
@@ -96,6 +96,7 @@
                break;
        default:
                Q_ASSERT(0);
+               return;
        }
 
        if (!arch->open(QIODevice::WriteOnly)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/gpgproc.cpp new/kgpg-4.10.90/gpgproc.cpp
--- old/kgpg-4.10.4/gpgproc.cpp 2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/gpgproc.cpp        2013-06-10 20:53:48.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007,2008,2009,2010,2011,2012 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
+ * Copyright (C) 2007,2008,2009,2010,2011,2012,2013 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
  */
 
 /***************************************************************************
@@ -40,7 +40,8 @@
 };
 
 GnupgBinary::GnupgBinary()
-       : m_useDebugLevel(false)
+       : m_version(0),
+       m_useDebugLevel(false)
 {
 }
 
@@ -205,7 +206,7 @@
        if (!readLineStandardOutput(&a))
                return -1;
 
-       line = recode(a, colons);
+       line = recode(a, colons, m_codec);
 
        return line.length();
 }
@@ -234,8 +235,9 @@
 }
 
 QString
-GPGProc::recode(QByteArray a, const bool colons)
+GPGProc::recode(QByteArray a, const bool colons, const QByteArray &codec)
 {
+       const char *textcodec = codec.isEmpty() ? "utf8" : codec.constData();
        int pos = 0;
 
        while ((pos = a.indexOf("\\x", pos)) >= 0) {
@@ -265,7 +267,19 @@
                } while ((npos = a.indexOf(pattern, npos)) >= 0);
        }
 
-       return QTextCodec::codecForName("utf8")->toUnicode(a);
+       return QTextCodec::codecForName(textcodec)->toUnicode(a);
+}
+
+bool
+GPGProc::setCodec(const QByteArray &codec)
+{
+       const QList<QByteArray> codecs = QTextCodec::availableCodecs();
+       if (!codecs.contains(codec))
+               return false;
+
+       m_codec = codec;
+
+       return true;
 }
 
 int GPGProc::gpgVersion(const QString &vstr)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/gpgproc.h new/kgpg-4.10.90/gpgproc.h
--- old/kgpg-4.10.4/gpgproc.h   2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/gpgproc.h  2013-06-10 20:53:48.000000000 +0200
@@ -91,7 +91,17 @@
      * @param colons recode also colons
      * @return recoded string
      */
-    static QString recode(QByteArray a, const bool colons = true);
+    static QString recode(QByteArray a, const bool colons = true, const 
QByteArray &codec = QByteArray());
+
+    /**
+     * @brief sets the codec used to translate the incoming data
+     * @param codec the name of the new codec
+     * @return if the new codec has been accepted
+     *
+     * The default codec is utf8. If the given codec is not known to
+     * QTextCodec the method will return false.
+     */
+    bool setCodec(const QByteArray &codec);
 
     /**
      * Reset the class to the state it had right after creation
@@ -133,7 +143,6 @@
      * @return the error message GnuPG gave out (if any)
      */
     static QString getGpgStartupError(const QString &binary);
-
 signals:
     /**
      * Emitted when the process is ready for reading.
@@ -151,6 +160,9 @@
 protected slots:
     void finished();
     void received();
+
+private:
+    QByteArray m_codec;
 };
 
 #endif // GPGPROC_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/groupedit.cpp 
new/kgpg-4.10.90/groupedit.cpp
--- old/kgpg-4.10.4/groupedit.cpp       2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/groupedit.cpp      2013-06-10 20:53:48.000000000 +0200
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2002 Jean-Baptiste Mardelle <b...@altern.org>
- * Copyright (C) 2007,2008,2012 Rolf Eike Beer <k...@opensource.sf-tec.de>
+ * Copyright (C) 2007,2008,2012,2013 Rolf Eike Beer <k...@opensource.sf-tec.de>
  */
 
 /***************************************************************************
@@ -24,11 +24,15 @@
 #include <QHeaderView>
 #include <QSortFilterProxyModel>
 
-groupEdit::groupEdit(QWidget *parent, QList<KGpgNode *> *ids)
+groupEdit::groupEdit(QWidget *parent, QList<KGpgNode *> *ids, KGpgItemModel 
*md)
        : QWidget(parent),
+       m_model(md),
        m_outFilter(new QSortFilterProxyModel(this)),
        members(ids)
 {
+       Q_ASSERT(ids != NULL);
+       Q_ASSERT(md != NULL);
+
        setupUi( this );
        KgpgCore::KgpgKeyTrust mintrust;
        if (KGpgSettings::allowUntrustedGroupMembers()) {
@@ -40,7 +44,9 @@
        }
 
        m_in = new GroupEditProxyModel(this, false, members, mintrust);
+       m_in->setKeyModel(md);
        m_out = new GroupEditProxyModel(this, true, members, mintrust);
+       m_out->setKeyModel(md);
 
        m_outFilter->setSourceModel(m_out);
        m_outFilter->setFilterCaseSensitivity(Qt::CaseInsensitive);
@@ -78,14 +84,6 @@
 }
 
 void
-groupEdit::setModel(KGpgItemModel *md)
-{
-       m_model = md;
-       m_in->setKeyModel(md);
-       m_out->setKeyModel(md);
-}
-
-void
 groupEdit::groupAdd()
 {
        QModelIndexList sel = 
availableKeys->selectionModel()->selectedIndexes();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/groupedit.h new/kgpg-4.10.90/groupedit.h
--- old/kgpg-4.10.4/groupedit.h 2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/groupedit.h        2013-06-10 20:53:48.000000000 +0200
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2002 Jean-Baptiste Mardelle <b...@altern.org>
- * Copyright (C) 2007,2008 Rolf Eike Beer <k...@opensource.sf-tec.de>
+ * Copyright (C) 2007,2008,2013 Rolf Eike Beer <k...@opensource.sf-tec.de>
  */
 
 /***************************************************************************
@@ -33,8 +33,8 @@
 private:
        GroupEditProxyModel *m_in;
        GroupEditProxyModel *m_out;
-       KGpgItemModel *m_model;
-       QSortFilterProxyModel *m_outFilter;
+       KGpgItemModel * const m_model;
+       QSortFilterProxyModel * const m_outFilter;
 
 public:
        QList<KGpgNode *> * const members;      ///< the list of keys that are 
members of the group
@@ -43,19 +43,14 @@
         * @brief constructor
         * @param parent parent widget
         * @param ids the members of the group
+        * @param md model to use
         */
-       explicit groupEdit(QWidget *parent, QList<KGpgNode *> *ids);
+       explicit groupEdit(QWidget *parent, QList<KGpgNode *> *ids, 
KGpgItemModel *md);
        /**
         * @brief destructor
         */
        ~groupEdit();
 
-       /**
-        * @brief set the model to select the keys from
-        * @param md model to use
-        */
-       void setModel(KGpgItemModel *md);
-
 private Q_SLOTS:
        /**
         * @brief called when the add button is clicked
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/keyexport.cpp 
new/kgpg-4.10.90/keyexport.cpp
--- old/kgpg-4.10.4/keyexport.cpp       2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/keyexport.cpp      2013-06-10 20:53:48.000000000 +0200
@@ -30,6 +30,7 @@
 
        if (!keyservers.isEmpty()) {
                checkServer->setEnabled(true);
+               checkServer->setToolTip(QString());
                destServer->addItems(keyservers);
        }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/keyexport.ui 
new/kgpg-4.10.90/keyexport.ui
--- old/kgpg-4.10.4/keyexport.ui        2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/keyexport.ui       2013-06-10 20:53:48.000000000 +0200
@@ -51,6 +51,9 @@
            <property name="enabled">
             <bool>false</bool>
            </property>
+           <property name="toolTip">
+            <string>You must define at least one keyserver in settings before 
you can export to one.</string>
+           </property>
            <property name="text">
             <string>Key server:</string>
            </property>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/keyinfodialog.cpp 
new/kgpg-4.10.90/keyinfodialog.cpp
--- old/kgpg-4.10.4/keyinfodialog.cpp   2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/keyinfodialog.cpp  2013-06-10 20:53:48.000000000 +0200
@@ -1,7 +1,7 @@
 /*
  * Copyright (C) 2002 Jean-Baptiste Mardelle <b...@altern.org>
  * Copyright (C) 2007 Jimmy Gilles <jimmygil...@gmail.com>
- * Copyright (C) 2008,2009,2010,2011,2012 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
+ * Copyright (C) 2008,2009,2010,2011,2012,2013 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
  * Copyright (C) 2011 Philip Greggory Lee <rocketman...@gmail.com>
  */
 
@@ -17,6 +17,7 @@
 #include "keyinfodialog.h"
 
 #include "kgpgchangekey.h"
+#include <kgpgsettings.h>
 #include "selectexpirydate.h"
 #include "core/convert.h"
 #include "core/images.h"
@@ -186,9 +187,17 @@
 
     const KgpgKey *key = m_node->getKey();
 
-    KgpgKeyTrust keytrust = key->valid() ? m_node->getTrust() : TRUST_DISABLED;
-    QString tr = Convert::toString(keytrust);
-    QColor trustcolor = Convert::toColor(keytrust);
+    QString trust;
+    QColor trustcolor;
+
+    if (key->valid()) {
+        QModelIndex idx = m_model->nodeIndex(m_node, KEYCOLUMN_TRUST);
+        trust = m_model->data(idx, Qt::AccessibleTextRole).toString();
+        trustcolor = m_model->data(idx, 
Qt::BackgroundColorRole).value<QColor>();
+    } else {
+        trust = Convert::toString(TRUST_DISABLED);
+        trustcolor = KGpgSettings::colorBad();
+    }
 
     m_id->setText(m_node->getId().right(16));
     m_algorithm->setText(Convert::toString(key->algorithm()) + QLatin1String( 
" / " ) + Convert::toString(key->encryptionAlgorithm()));
@@ -198,7 +207,7 @@
         m_expiration->setText(i18nc("Unlimited key lifetime", "Unlimited"));
     else
         
m_expiration->setText(Convert::toString(m_node->getExpiration().date()));
-    m_trust->setText(tr);
+    m_trust->setText(trust);
     m_trust->setColor(trustcolor);
     m_length->setText(m_node->getSize());
     m_length->setWhatsThis(i18n("<qt>The left part is the size of the 
<b>signature</b> key. The right part is the size of the <b>encryption</b> 
key.</qt>"));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/keyservers.cpp 
new/kgpg-4.10.90/keyservers.cpp
--- old/kgpg-4.10.4/keyservers.cpp      2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/keyservers.cpp     2013-06-10 20:53:48.000000000 +0200
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2002 Jean-Baptiste Mardelle <b...@altern.org>
- * Copyright (C) 2006,2007,2008,2009,2010,2012 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
+ * Copyright (C) 2006,2007,2008,2009,2010,2012,2013 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
  */
 
 /***************************************************************************
@@ -37,8 +37,10 @@
 
 KeyServer::KeyServer(QWidget *parent, KGpgItemModel *model, const bool 
autoclose)
        : KDialog(parent),
+       m_dialogserver(NULL),
        m_searchproc(NULL),
        page(new keyServerWidget()),
+       m_listpop(NULL),
        m_resultmodel(NULL),
        m_itemmodel(new KeyListProxyModel(this, 
KeyListProxyModel::SingleColumnIdFirst))
 {
@@ -224,7 +226,6 @@
 
        
m_listpop->kLVsearch->setSelectionMode(QAbstractItemView::ExtendedSelection);
 
-       m_count = 0;
        m_readmessage.clear();
 
        const QString keyserv(page->kCBimportks->currentText());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/keyservers.h 
new/kgpg-4.10.90/keyservers.h
--- old/kgpg-4.10.4/keyservers.h        2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/keyservers.h       2013-06-10 20:53:48.000000000 +0200
@@ -1,10 +1,7 @@
-/***************************************************************************
-                          keyservers.h  -  description
-                             -------------------
-    begin                : Tue Nov 26 2002
-    copyright          : (C) 2002 by Jean-Baptiste Mardelle
-    email                : b...@altern.org
- ***************************************************************************/
+/*
+ * Copyright (C) 2002 Jean-Baptiste Mardelle <b...@altern.org>
+ * Copyright (C) 2007,2008,2009,2010,2012,2013 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
+ */
 
 /***************************************************************************
  *                                                                         *
@@ -124,7 +121,6 @@
        keyServerWidget *page;
        searchRes *m_listpop;
 
-       int m_count;
        bool m_autoclose;
        QString expattr;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/keysmanager.cpp 
new/kgpg-4.10.90/keysmanager.cpp
--- old/kgpg-4.10.4/keysmanager.cpp     2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/keysmanager.cpp    2013-06-10 20:53:48.000000000 +0200
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2002 Jean-Baptiste Mardelle <b...@altern.org>
- * Copyright (C) 2007,2008,2009,2010,2011,2012
+ * Copyright (C) 2007,2008,2009,2010,2011,2012,2013
  *               Rolf Eike Beer <k...@opensource.sf-tec.de>
  * Copyright (C) 2011 Luis Ángel Fernández Fernández <laff...@gmail.com>
  */
@@ -592,7 +592,7 @@
                if (!email.isEmpty())
                        page->kURLRequester1->setUrl(QString(revurl + 
email.section(QLatin1Char( '@' ), 0, 0) + QLatin1String( ".revoke" )));
                else
-                       page->kURLRequester1->setUrl(QString(revurl + 
genkey->getName().section(QLatin1Char(' '), 0, 0) + QLatin1String(".revoke")));
+                       page->kURLRequester1->setUrl(QString(revurl + 
email.section(QLatin1Char( ' ' ), 0, 0) + QLatin1String( ".revoke" )));
 
                const QString fingerprint(genkey->getFingerprint());
                page->TLid->setText(QLatin1String( "<b>" ) + 
fingerprint.right(8) + QLatin1String( "</b>" ));
@@ -602,8 +602,11 @@
                keyCreated->setMainWidget(page);
 
                keyCreated->exec();
-               if (keyCreated.isNull())
+               if (keyCreated.isNull()) {
                        return;
+               } else {
+                       delete keyCreated;
+               }
 
                imodel->refreshKey(fingerprint);
                KGpgKeyNode *knode = 
imodel->getRootNode()->findKey(fingerprint);
@@ -627,7 +630,6 @@
 
                        genRev->start();
                }
-               delete keyCreated;
                break;
        }
        default:
@@ -1703,8 +1705,7 @@
 
        QList<KGpgNode *> members(gnd->getChildren());
 
-       groupEdit *gEdit = new groupEdit(dialogGroupEdit, &members);
-       gEdit->setModel(imodel);
+       groupEdit *gEdit = new groupEdit(dialogGroupEdit, &members, imodel);
 
        dialogGroupEdit->setMainWidget(gEdit);
 
@@ -2119,7 +2120,7 @@
                parentKey = parent->getParentKeyNode()->getId();
                break;
        default:
-               Q_ASSERT(1);
+               Q_ASSERT(0);
                return;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/kgpg.kcfg new/kgpg-4.10.90/kgpg.kcfg
--- old/kgpg-4.10.4/kgpg.kcfg   2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/kgpg.kcfg  2013-06-10 20:53:48.000000000 +0200
@@ -227,6 +227,18 @@
         </entry>
     </group>
 
+       <group name="Key List">
+               <entry name="EmailSorting" type="Enum" key="EmailSorting">
+                       <choices>
+                               <choice name="Alphabetical"/>
+                               <choice name="TLDfirst"/>
+                               <choice name="DomainFirst"/>
+                               <choice name="FQDNFirst"/>
+                       </choices>
+                       <default>Alphabetical</default>
+               </entry>
+       </group>
+
        <!-- 
                Should in future be merged with Key Servers, for compatibility 
reasons
                with kde 3.5 it is now in a separate group.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/kgpgoptions.cpp 
new/kgpg-4.10.90/kgpgoptions.cpp
--- old/kgpg-4.10.4/kgpgoptions.cpp     2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/kgpgoptions.cpp    2013-06-10 20:53:48.000000000 +0200
@@ -92,6 +92,12 @@
        m_fontchooser->setObjectName( QLatin1String("kcfg_Font" ));
        fontlayout->addWidget(m_fontchooser);
 
+       m_page3->kcfg_EmailSorting->addItem(i18n("Left to right, account 
first")); ///< KGpgSettings::EnumEmailSorting::Alphabetical
+       m_page3->kcfg_EmailSorting->addItem(i18n("Right to left, TLD first")); 
///< KGpgSettings::EnumEmailSorting::TLDfirst
+       m_page3->kcfg_EmailSorting->addItem(i18n("Right to left, domain 
first")); ///< KGpgSettings::EnumEmailSorting::DomainFirst
+       m_page3->kcfg_EmailSorting->addItem(i18n("Right to left, FQDN first")); 
///< KGpgSettings::EnumEmailSorting::FQDNFirst
+       m_emailSortingIndex = KGpgSettings::emailSorting();
+
        pixkeySingle = Images::single();
        pixkeyDouble = Images::pair();
        addPage(m_page1, i18n("Encryption"), QLatin1String( "document-encrypt" 
));
@@ -345,6 +351,9 @@
 
        m_page4->use_agent->setChecked(m_useagent);
 
+       m_emailSortingIndex = KGpgSettings::emailSorting();
+       m_page3->kcfg_EmailSorting->setCurrentIndex(m_emailSortingIndex);
+
        m_page6->ServerBox->clear();
        QStringList servers(serverList);
 
@@ -371,6 +380,8 @@
        m_page6->ServerBox->addItem(i18nc("Mark default keyserver in GUI", "%1 
(Default)", defaultKeyServer));
        m_page6->ServerBox->addItems(defaultServerList);
 
+       
m_page3->kcfg_EmailSorting->setCurrentIndex(KGpgSettings::EnumEmailSorting::Alphabetical);
+
        kDebug(2100) << "Finishing default options" ;
 }
 
@@ -484,6 +495,9 @@
        m_emailTemplate = m_page7->EmailTemplateEdit->toPlainText();
        KGpgSettings::setEmailTemplate(m_emailTemplate);
 
+       m_emailSortingIndex = m_page3->kcfg_EmailSorting->currentIndex();
+       KGpgSettings::setEmailSorting(m_emailSortingIndex);
+
        KGpgSettings::self()->writeConfig();
        m_config->sync();
 
@@ -595,6 +609,9 @@
        if (m_page7->kcfg_MailUats->currentIndex() != m_mailUats)
                return true;
 
+       if (m_page3->kcfg_EmailSorting->currentIndex() != m_emailSortingIndex)
+               return true;
+
        return false;
 }
 
@@ -634,6 +651,9 @@
        if (m_page7->kcfg_MailUats->currentIndex() != 
KGpgSettings::EnumMailUats::All)
                return false;
 
+       if (m_page3->kcfg_EmailSorting->currentIndex() != 
KGpgSettings::EnumEmailSorting::Alphabetical)
+               return false;
+
        return true;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/kgpgoptions.h 
new/kgpg-4.10.90/kgpgoptions.h
--- old/kgpg-4.10.4/kgpgoptions.h       2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/kgpgoptions.h      2013-06-10 20:53:48.000000000 +0200
@@ -168,6 +168,7 @@
     bool m_showsystray;
     int m_trayaction;
     int m_mailUats;
+    int m_emailSortingIndex;
     QString m_emailTemplate;
 
     KGpgItemModel * const m_model;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/main.cpp new/kgpg-4.10.90/main.cpp
--- old/kgpg-4.10.4/main.cpp    2013-05-28 21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/main.cpp   2013-06-26 21:26:03.000000000 +0200
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2002 Jean-Baptiste Mardelle <b...@altern.org>
- * Copyright (C) 2007,2008,2009,2010,2011,2012,2013
+ * Copyright (C) 2007,2008,2009,2010,2011,2012
  *               Rolf Eike Beer <k...@opensource.sf-tec.de>
  */
 
@@ -23,7 +23,7 @@
 static const char description[] =
         I18N_NOOP("KGpg - simple gui for gpg\n\nKGpg was designed to make gpg 
very easy to use.\nI tried to make it as secure as possible.\nHope you enjoy 
it.");
 
-static const char version[] = "2.9.1";
+static const char version[] = "2.9.90";
 
 int main(int argc, char *argv[])
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/model/keylistproxymodel.cpp 
new/kgpg-4.10.90/model/keylistproxymodel.cpp
--- old/kgpg-4.10.4/model/keylistproxymodel.cpp 2013-05-28 21:30:19.000000000 
+0200
+++ new/kgpg-4.10.90/model/keylistproxymodel.cpp        2013-06-10 
20:53:48.000000000 +0200
@@ -1,4 +1,4 @@
-/* Copyright 2008,2009,2010,2012 Rolf Eike Beer <k...@opensource.sf-tec.de>
+/* Copyright 2008,2009,2010,2012,2013 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -19,8 +19,9 @@
 #include "keylistproxymodel.h"
 #include "model/kgpgitemnode.h"
 #include "kgpgitemmodel.h"
+#include "kgpgsettings.h"
 #include "core/kgpgkey.h"
-#include "core/convert.h"
+#include "core/images.h"
 
 #include <KLocale>
 #include <QDate>
@@ -39,17 +40,18 @@
        KGpgItemModel *m_model;
        bool m_onlysecret;
        KgpgCore::KgpgKeyTrustFlag m_mintrust;
-       bool m_showexpired;
        int m_previewsize;
        int m_idLength;
        KeyListProxyModel::DisplayMode m_displaymode;
 
+       QString reorderEmailComponents(const QString &emailAddress) const;
        QVariant dataSingleColumn(const QModelIndex &index, int role, const 
KGpgNode *node) const;
        QVariant dataMultiColumn(const QModelIndex &index, int role, const 
KGpgNode *node) const;
 };
 
 KeyListProxyModelPrivate::KeyListProxyModelPrivate(KeyListProxyModel *parent, 
const KeyListProxyModel::DisplayMode mode)
        : q_ptr(parent),
+       m_model(NULL),
        m_onlysecret(false),
        m_mintrust(TRUST_UNKNOWN),
        m_previewsize(22),
@@ -58,6 +60,76 @@
 {
 }
 
+QString
+KeyListProxyModelPrivate::reorderEmailComponents(const QString &emailAddress) 
const
+{
+       if (emailAddress.isEmpty()) return QString();
+
+       switch (KGpgSettings::emailSorting()){
+       case KGpgSettings::EnumEmailSorting::TLDfirst:
+       {
+               /// split email addresses along @ and .
+               static const QRegExp emailSplitRegExp(QLatin1String("[@.]"));
+               /// get components of an email address
+               /// exam...@kde.org becomes [example, kde, org]
+               const QStringList emailComponents = 
emailAddress.split(emailSplitRegExp);
+               /// assemble result by joining components in reverse order,
+               /// separated by a dot
+               QString result;
+               foreach(const QString &component, emailComponents)
+                       result = 
result.prepend(component).prepend(QLatin1Char('.'));
+               /// convert result to lower case to make sorting 
case-insensitive
+               return result.toLower();
+       }
+       case KGpgSettings::EnumEmailSorting::DomainFirst:
+       {
+               /// split email addresses at @
+               static const QLatin1Char emailSplitAt('@');
+               /// split domain at .
+               static const QLatin1Char domainSplitDot('.');
+               /// get components of an email address
+               /// exam...@kde.org becomes [example, www.kde.org]
+               const QStringList emailComponents = 
emailAddress.split(emailSplitAt);
+               if (emailComponents.count() != 2) /// expect an email address 
to contain exactly one @
+                       return emailAddress.toLower();
+               /// get components of a domain
+               /// www.kde.org becomes [www, kde, org]
+               const QString fqdn = emailComponents.last();
+               const QStringList fqdnComponents = fqdn.split(domainSplitDot);
+               if (fqdnComponents.count() < 2) /// if domain consists of less 
than two components ...
+                       return fqdn + domainSplitDot + emailComponents.first(); 
/// ... take shortcut
+               /// reverse last two components of domain, becomes e.g. kde.org
+               QString result = fqdnComponents[fqdnComponents.count() - 2] + 
domainSplitDot + fqdnComponents[fqdnComponents.count() - 1];
+               /// append remaining components of domain, becomes e.g. 
kde.org.www
+               for (int i = 0; i < fqdnComponents.count() - 2; ++i)
+                       result = result.append(domainSplitDot + 
fqdnComponents[i]);
+               /// append user name component of email address, becomes e.g. 
kde.org.www.example
+               result = result.append(domainSplitDot + 
emailComponents.first());
+               /// convert result to lower case to make sorting 
case-insensitive
+               return result.toLower();
+       }
+       case KGpgSettings::EnumEmailSorting::FQDNFirst:
+       {
+               /// split email addresses at @
+               static const QLatin1Char emailSplitAt('@');
+               /// get components of an email address
+               /// exam...@kde.org becomes [example, kde.org]
+               const QStringList emailComponents = 
emailAddress.split(emailSplitAt);
+               /// assemble result by joining components in reverse order,
+               /// separated by a dot
+               QString result;
+               foreach(const QString &component, emailComponents)
+                       result = 
result.prepend(component).prepend(QLatin1Char('.'));
+               /// convert result to lower case to make sorting 
case-insensitive
+               return result.toLower();
+       }
+    default:
+        /// do not modify email address except for lower-case conversion
+        /// to make sorting case-insensitive
+        return emailAddress.toLower();
+    }
+}
+
 QVariant
 KeyListProxyModelPrivate::dataSingleColumn(const QModelIndex &index, int role, 
const KGpgNode *node) const
 {
@@ -73,7 +145,7 @@
                                const KGpgUatNode *nd = node->toUatNode();
                                return nd->getPixmap().scaled(m_previewsize + 
5, m_previewsize, Qt::KeepAspectRatio);
                        } else {
-                               return Convert::toPixmap(ITYPE_UAT);
+                               return Images::photo();
                        }
                } else {
                        return m_model->data(q->mapToSource(index), 
Qt::DecorationRole);
@@ -125,7 +197,7 @@
                        const KGpgUatNode *nd = node->toUatNode();
                        return nd->getPixmap().scaled(m_previewsize + 5, 
m_previewsize, Qt::KeepAspectRatio);
                } else {
-                       return Convert::toPixmap(ITYPE_UAT);
+                       return Images::photo();
                }
        } else if ((role == Qt::DisplayRole) && (index.column() == 
KEYCOLUMN_ID)) {
                QString id = m_model->data(q->mapToSource(index), 
Qt::DisplayRole).toString();
@@ -236,7 +308,8 @@
                }
                return (left->getName().compare(right->getName().toLower(), 
Qt::CaseInsensitive) < 0);
        case KEYCOLUMN_EMAIL:
-               return (left->getEmail() < right->getEmail());
+               /// reverse email address to sort by TLD first, then domain, 
and account name last
+               return (reorderEmailComponents(left->getEmail()) < 
reorderEmailComponents(right->getEmail()));
        case KEYCOLUMN_TRUST:
                return (left->getTrust() < right->getTrust());
        case KEYCOLUMN_EXPIR:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/model/kgpgitemmodel.cpp 
new/kgpg-4.10.90/model/kgpgitemmodel.cpp
--- old/kgpg-4.10.4/model/kgpgitemmodel.cpp     2013-05-28 21:30:19.000000000 
+0200
+++ new/kgpg-4.10.90/model/kgpgitemmodel.cpp    2013-06-10 20:53:48.000000000 
+0200
@@ -1,4 +1,4 @@
-/* Copyright 2008,2009,2010,2011,2012 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
+/* Copyright 2008,2009,2010,2011,2012,2013 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -20,6 +20,7 @@
 
 #include "kgpgsettings.h"
 #include "core/convert.h"
+#include "core/images.h"
 #include "model/kgpgitemnode.h"
 
 #include <KGlobal>
@@ -111,10 +112,30 @@
                case Qt::EditRole:
                        return node->getName();
                case Qt::DecorationRole:
-                       if (node->getType() == ITYPE_UAT) {
+                       switch (node->getType()) {
+                       case ITYPE_GROUP:
+                               return Images::group();
+                       case ITYPE_GSECRET:
+                       case ITYPE_SECRET:
+                               return Images::orphan();
+                       case ITYPE_GPUBLIC:
+                       case ITYPE_SUB:
+                       case ITYPE_PUBLIC:
+                               return Images::single();
+                       case ITYPE_GPAIR:
+                       case ITYPE_PAIR:
+                               return Images::pair();
+                       case ITYPE_UID:
+                               return Images::userId();
+                       case ITYPE_UAT:
                                return node->toUatNode()->getPixmap();
-                       } else {
-                               return Convert::toPixmap(node->getType());
+                       case ITYPE_REVSIGN:
+                               return Images::revoke();
+                       case ITYPE_SIGN:
+                               return Images::signature();
+                       default:
+                               Q_ASSERT(0);
+                               return QVariant();
                        }
                case Qt::ToolTipRole:
                        return node->getComment();
@@ -129,8 +150,30 @@
                KgpgKeyTrust t = node->getTrust();
 
                switch (role) {
-               case Qt::BackgroundColorRole:   return Convert::toColor(t);
-               case Qt::AccessibleTextRole:    return Convert::toString(t);
+               case Qt::BackgroundColorRole:
+                       switch (t) {
+                       case TRUST_INVALID:
+                       case TRUST_DISABLED:
+                               return KGpgSettings::colorBad();
+                       case TRUST_EXPIRED:
+                               return KGpgSettings::colorExpired();
+                       case TRUST_MARGINAL:
+                               return KGpgSettings::colorMarginal();
+                       case TRUST_REVOKED:
+                               return KGpgSettings::colorRev();
+                       case TRUST_UNDEFINED:
+                       case TRUST_NONE:
+                               return KGpgSettings::colorUnknown();
+                       case TRUST_FULL:
+                               return KGpgSettings::colorGood();
+                       case TRUST_ULTIMATE:
+                               return KGpgSettings::colorUltimate();
+                       case TRUST_UNKNOWN:
+                       default:
+                               return KGpgSettings::colorUnknown();
+                       }
+               case Qt::AccessibleTextRole:
+                       return Convert::toString(t);
                }
                break;
                }
@@ -180,7 +223,6 @@
                break;
        }
 
-       Q_ASSERT(1);
        return QVariant();
 }
 
@@ -360,15 +402,15 @@
 }
 
 QModelIndex
-KGpgItemModel::nodeIndex(KGpgNode *node)
+KGpgItemModel::nodeIndex(KGpgNode *node, const int column)
 {
        KGpgNode *p = node->getParentKeyNode();
 
        for (int i = 0; i < p->getChildCount(); i++)
                if (p->getChild(i) == node)
-                       return createIndex(i, 0, node);
+                       return createIndex(i, column, node);
 
-       Q_ASSERT(1);
+       Q_ASSERT(0);
        return QModelIndex();
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/model/kgpgitemmodel.h 
new/kgpg-4.10.90/model/kgpgitemmodel.h
--- old/kgpg-4.10.4/model/kgpgitemmodel.h       2013-05-28 21:30:19.000000000 
+0200
+++ new/kgpg-4.10.90/model/kgpgitemmodel.h      2013-06-10 20:53:48.000000000 
+0200
@@ -79,7 +79,7 @@
        void changeGroup(KGpgGroupNode *node, const KGpgNode::List &keys);
        void deleteFromGroup(KGpgGroupNode *group, KGpgGroupMemberNode *member);
        void setDefaultKey(KGpgKeyNode *def);
-       QModelIndex nodeIndex(KGpgNode *node);
+       QModelIndex nodeIndex(KGpgNode *node, const int column = 0);
        void refreshKey(const QString &id);
        void refreshKey(KGpgKeyNode *nd);
        void refreshKeys(const QStringList &ids = QStringList());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/model/kgpgsearchresultmodel.cpp 
new/kgpg-4.10.90/model/kgpgsearchresultmodel.cpp
--- old/kgpg-4.10.4/model/kgpgsearchresultmodel.cpp     2013-05-28 
21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/model/kgpgsearchresultmodel.cpp    2013-06-10 
20:53:48.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009,2010 Rolf Eike Beer <k...@opensource.sf-tec.de>
+ * Copyright (C) 2009,2010,2013 Rolf Eike Beer <k...@opensource.sf-tec.de>
  */
 
 /***************************************************************************
@@ -62,7 +62,9 @@
 
 SearchResult::SearchResult(const QString &line)
        : m_validPub(false),
-       m_uatCount(0)
+       m_uatCount(0),
+       m_revoked(false),
+       m_bits(0)
 {
        const QStringList parts(line.split(QLatin1Char( ':' )));
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/model/selectkeyproxymodel.cpp 
new/kgpg-4.10.90/model/selectkeyproxymodel.cpp
--- old/kgpg-4.10.4/model/selectkeyproxymodel.cpp       2013-05-28 
21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/model/selectkeyproxymodel.cpp      2013-06-10 
20:53:48.000000000 +0200
@@ -1,4 +1,4 @@
-/* Copyright 2008  Rolf Eike Beer <k...@opensource.sf-tec.de>
+/* Copyright 2008,2010,2012,2013  Rolf Eike Beer <k...@opensource.sf-tec.de>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -25,7 +25,9 @@
 using namespace KgpgCore;
 
 SelectKeyProxyModel::SelectKeyProxyModel(QObject *parent)
-       : QSortFilterProxyModel(parent), m_model(NULL)
+       : QSortFilterProxyModel(parent),
+       m_model(NULL),
+       m_showUntrusted(false)
 {
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/transactions/kgpgchangepass.cpp 
new/kgpg-4.10.90/transactions/kgpgchangepass.cpp
--- old/kgpg-4.10.4/transactions/kgpgchangepass.cpp     2013-05-28 
21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/transactions/kgpgchangepass.cpp    2013-06-10 
20:53:48.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008,2009,2010,2011,2012 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
+ * Copyright (C) 2008,2009,2010,2011,2012,2013 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
  */
 
 /***************************************************************************
@@ -16,7 +16,8 @@
 #include <KLocale>
 
 KGpgChangePass::KGpgChangePass(QObject *parent, const QString &keyid)
-       : KGpgTransaction(parent)
+       : KGpgTransaction(parent),
+       m_seenold(false)
 {
        addArgument(QLatin1String( "--status-fd=1" ));
        addArgument(QLatin1String( "--command-fd=0" ));
@@ -34,8 +35,6 @@
 {
        setSuccess(TS_MSG_SEQUENCE);
 
-       m_seenold = false;
-
        return true;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/transactions/kgpggeneratekey.cpp 
new/kgpg-4.10.90/transactions/kgpggeneratekey.cpp
--- old/kgpg-4.10.4/transactions/kgpggeneratekey.cpp    2013-05-28 
21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/transactions/kgpggeneratekey.cpp   2013-06-10 
20:53:48.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008,2009,2010,2011,2012 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
+ * Copyright (C) 2008,2009,2010,2011,2012,2013 Rolf Eike Beer 
<k...@opensource.sf-tec.de>
  */
 
 /***************************************************************************
@@ -54,7 +54,6 @@
        }
 
        m_fingerprint.clear();
-       m_namesent = false;
 
        setSuccess(TS_MSG_SEQUENCE);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/transactions/kgpggeneratekey.h 
new/kgpg-4.10.90/transactions/kgpggeneratekey.h
--- old/kgpg-4.10.4/transactions/kgpggeneratekey.h      2013-05-28 
21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/transactions/kgpggeneratekey.h     2013-06-10 
20:53:48.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008,2009,2012 Rolf Eike Beer <k...@opensource.sf-tec.de>
+ * Copyright (C) 2008,2009,2012,2013 Rolf Eike Beer <k...@opensource.sf-tec.de>
  */
 
 /***************************************************************************
@@ -92,7 +92,6 @@
        unsigned int m_expire;
        unsigned int m_expireunit;
        QString m_fingerprint;
-       bool m_namesent;
        QString m_errorOutput;
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kgpg-4.10.4/transactions/kgpgsigntransactionhelper.cpp 
new/kgpg-4.10.90/transactions/kgpgsigntransactionhelper.cpp
--- old/kgpg-4.10.4/transactions/kgpgsigntransactionhelper.cpp  2013-05-28 
21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/transactions/kgpgsigntransactionhelper.cpp 2013-06-10 
20:53:48.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009,2012 Rolf Eike Beer <k...@opensource.sf-tec.de>
+ * Copyright (C) 2009,2012,2013 Rolf Eike Beer <k...@opensource.sf-tec.de>
  */
 
 /***************************************************************************
@@ -17,7 +17,8 @@
 #include "model/kgpgitemnode.h"
 
 KGpgSignTransactionHelper::KGpgSignTransactionHelper(const QString &signer, 
const bool local, const carefulCheck checking)
-       : m_signer(signer),
+       : m_node(NULL),
+       m_signer(signer),
        m_local(local),
        m_checking(checking),
        m_signerPos(-1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kgpg-4.10.4/transactions/kgpgtextorfiletransaction.cpp 
new/kgpg-4.10.90/transactions/kgpgtextorfiletransaction.cpp
--- old/kgpg-4.10.4/transactions/kgpgtextorfiletransaction.cpp  2013-05-28 
21:30:19.000000000 +0200
+++ new/kgpg-4.10.90/transactions/kgpgtextorfiletransaction.cpp 2013-06-10 
20:53:48.000000000 +0200
@@ -15,13 +15,15 @@
 
 #include "gpgproc.h"
 
+#include <KDebug>
 #include <KIO/NetAccess>
 #include <KLocale>
+#include <QRegExp>
 
 KGpgTextOrFileTransaction::KGpgTextOrFileTransaction(QObject *parent, const 
QString &text, const bool allowChaining)
-       : KGpgTransaction(parent, allowChaining),
-       m_text(text)
+       : KGpgTransaction(parent, allowChaining)
 {
+       setText(text);
 }
 
 KGpgTextOrFileTransaction::KGpgTextOrFileTransaction(QObject *parent, const 
KUrl::List &files, const bool allowChaining)
@@ -40,6 +42,37 @@
 {
        m_text = text;
        cleanUrls();
+
+       int begin = text.indexOf(QRegExp(QLatin1String("^(.*\n)?-----BEGIN PGP 
[A-Z ]*-----\r?\n")));
+       if (begin < 0)
+               return;
+
+       // find the end of the BEGIN PGP ... line
+       static const QChar lf = QLatin1Char('\n');
+       begin = text.indexOf(lf, begin);
+       Q_ASSERT(begin > 0);
+
+       // now loop until either an empty line is found (end of header) or
+       // a line beginning with Charset is found. If the latter, use the
+       // charset found there as hint for the following operation
+       int nextlf;
+       begin++;
+       while ((nextlf = text.indexOf(lf, begin)) > 0) {
+               static const QChar cr = QLatin1Char('\r');
+               if ((nextlf == begin) || ((nextlf == begin + 1) && (text[begin] 
== cr)))
+                       break;
+
+               const QString charset = QLatin1String("Charset: ");
+               if (text.mid(begin, charset.length()) == charset) {
+                       QString cs = text.mid(begin + charset.length(), nextlf 
- begin - charset.length());
+                       if (!getProcess()->setCodec(cs.toAscii()))
+                               kDebug(2100) << "unsupported charset found in 
header" << cs;
+                       break;
+               }
+               begin = nextlf + 1;
+       }
+
+
 }
 
 void
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kgpg-4.10.4/transactions/kgpgverify.cpp 
new/kgpg-4.10.90/transactions/kgpgverify.cpp
--- old/kgpg-4.10.4/transactions/kgpgverify.cpp 2013-05-28 21:30:19.000000000 
+0200
+++ new/kgpg-4.10.90/transactions/kgpgverify.cpp        2013-06-10 
20:53:48.000000000 +0200
@@ -107,7 +107,7 @@
        // for a good signature. Since VALIDSIG has more information
        // we use that.
        const QRegExp validsig(QLatin1String("^\\[GNUPG:\\] VALIDSIG([ ]+[^ 
]+){10,}.*$"));
-       const bool useGoodSig = (model != NULL) && (log.indexOf(validsig) == 
-1);
+       const bool useGoodSig = (model == NULL) || (log.indexOf(validsig) == 
-1);
        QString sigtime;        // timestamp of signature creation
 
        foreach (const QString &line, log) {
@@ -116,7 +116,7 @@
 
                const QString msg = line.mid(9);
 
-               if (msg.startsWith(QLatin1String("VALIDSIG ")) && !useGoodSig) {
+               if (!useGoodSig && msg.startsWith(QLatin1String("VALIDSIG "))) {
                        // from GnuPG source, doc/DETAILS:
                        //   VALIDSIG    <fingerprint in hex> 
<sig_creation_date> <sig-timestamp>
                        //                <expire-timestamp> <sig-version> 
<reserved> <pubkey-algo>

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to