Hello community,

here is the log from the commit of package fate for openSUSE:Factory checked in 
at 2017-02-01 09:53:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fate (Old)
 and      /work/SRC/openSUSE:Factory/.fate.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fate"

Changes:
--------
--- /work/SRC/openSUSE:Factory/fate/fate.changes        2017-01-24 
10:40:15.563975534 +0100
+++ /work/SRC/openSUSE:Factory/.fate.new/fate.changes   2017-02-03 
17:36:40.393430377 +0100
@@ -1,0 +2,30 @@
+Tue Jan 31 11:49:34 UTC 2017 - [email protected]
+
+- replaces outdated inttools@ mail adress by featureadmin@ (bug via email)
+
+-------------------------------------------------------------------
+Sat Jan 28 00:00:58 UTC 2017 - [email protected]
+
+- more fixes:
+  * bsc#837526: fix filter in productviewer, rearrange columns and layout,
+    also show feature open dates and deadlines
+  * bsc#964882: fix crash, QList::first() returns undefined on empty list, so
+    check first
+
+-------------------------------------------------------------------
+Thu Jan 26 15:59:16 UTC 2017 - [email protected]
+
+- update to version 1.5.5.7
+  * make comments always editable by original author
+  * bsc#1006192: have UTC time stamps in comments as in openfate
+  * bsc#940928: fix formatting and limit comment threads
+  * bsc#967367: remove bookmarks feature which is currently broken
+  * bsc#1004536 : create an extra list for ECO stakeholders in feature view
+
+-------------------------------------------------------------------
+Tue Jan 24 14:15:11 UTC 2017 - [email protected]
+
+- removed old style 'norootforbuild'
+- require oxygen-icon-theme instead of oxygen5-icon-theme (bsc#1015881)
+
+-------------------------------------------------------------------

Old:
----
  fate-20170120-10cb902.tar.bz2

New:
----
  fate-20170131-27be067.tar.bz2

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

Other differences:
------------------
++++++ fate.spec ++++++
--- /var/tmp/diff_new_pack.Cm9uTO/_old  2017-02-03 17:36:40.805372071 +0100
+++ /var/tmp/diff_new_pack.Cm9uTO/_new  2017-02-03 17:36:40.809371505 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package fate
 #
-# Copyright (c) 2008-2017 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,12 +16,11 @@
 #
 
 
-# norootforbuild
-%define baseversion 1.5.5.6
-%define patchlevel 0
-%define snapshot 20170120-10cb902
+%define baseversion 1.5.5.7
+%define patchlevel .1
+%define snapshot 20170131-27be067
 Name:           fate
-Version:        %{baseversion}.%{patchlevel}
+Version:        %{baseversion}%{patchlevel}
 Release:        0
 Summary:        SUSE Feature Management Tool
 License:        GPL-2.0 or GPL-3.0 or LGPL-2.1+
@@ -39,7 +38,7 @@
 BuildRequires:  pkgconfig
 BuildRequires:  sqlite-devel
 Requires:       kdebase4-runtime
-Requires:       oxygen5-icon-theme
+Requires:       oxygen-icon-theme
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 %if 0%{?suse_version} > 1010
 Recommends:     diffutils
@@ -67,7 +66,7 @@
 
 %install
 export SUSE_ASNEEDED=0
-make DESTDIR=%{buildroot} install
+%make_install
 
 %files
 %defattr(-,root,root)

++++++ fate-20170120-10cb902.tar.bz2 -> fate-20170131-27be067.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/meta/xslt-html 
new/fate-20170131-27be067/meta/xslt-html
--- old/fate-20170120-10cb902/meta/xslt-html    2017-01-20 19:36:04.234520490 
+0100
+++ new/fate-20170131-27be067/meta/xslt-html    2017-01-31 12:42:53.872633342 
+0100
@@ -20,6 +20,8 @@
   <xsl:param name="user"/>
   <xsl:param name="roles-sort-order"/>
   <xsl:param name="parts-sort-order" 
select="'category|partnercontext|productcontext|description|actor|documentationstatus|usecase|testcase|relations|references|eco|feature'"/>
+  <xsl:param name="max-comments" select="30"/>
+  <xsl:param name="max-threadsize" select="8"/>
 
   <xsl:template match="//feature">
     <div class="feature">
@@ -121,31 +123,59 @@
     <div class="rbroundbox_blue">
       <div class="rbtop_blue"><div></div></div>
         <div class="rbcontent">
-         <h3>Persons<xsl:comment>actors_hook</xsl:comment></h3>
          <span id="actors_container">
-          <table class="persons" style="width: 100%;">
-            <tr>
-              <td>
-                <xsl:for-each select="//actor[role != 'interested']">
-                  <xsl:sort 
select="string-length(substring-before($roles-sort-order, role))" 
data-type="number" order="ascending"/>
-                  <xsl:if test="(position() mod 2) = 1">
-                    <xsl:call-template name="actor"/>
-                  </xsl:if>
-                </xsl:for-each>
-              </td>
-              <td>
-                <xsl:for-each select="//actor[role != 'interested']">
-                  <xsl:sort 
select="string-length(substring-before($roles-sort-order, role))" 
data-type="number" order="ascending"/>
-                  <xsl:if test="(position() mod 2) = 0">
-                    <xsl:call-template name="actor"/>
-                  </xsl:if>
-                </xsl:for-each>
-              </td>
-            </tr>
-          </table>
+           <h3>Contributors<xsl:comment>actors_hook</xsl:comment></h3>
+            <table class="persons" style="width: 100%;">
+              <tr>
+               <td style="width: 50%;">
+                  <xsl:for-each select="/feature/actor[role != 'interested']">
+                    <xsl:sort 
select="string-length(substring-before($roles-sort-order, role))"
+                             data-type="number" order="ascending"/>
+                    <xsl:if test="(position() mod 2) = 1">
+                      <xsl:call-template name="actor"/>
+                    </xsl:if>
+                  </xsl:for-each>
+               </td>
+               <td>
+                  <xsl:for-each select="/feature/actor[role != 'interested']">
+                    <xsl:sort 
select="string-length(substring-before($roles-sort-order, role))"
+                             data-type="number" order="ascending"/>
+                    <xsl:if test="(position() mod 2) = 0">
+                      <xsl:call-template name="actor"/>
+                    </xsl:if>
+                  </xsl:for-each>
+               </td>
+              </tr>
+            </table>
+           <xsl:if test="/feature/eco">
+             <h3 style="margin-top:10px;">ECO 
Stakeholders<xsl:comment>approvers_hook</xsl:comment></h3>
+              <table class="persons" style="width: 100%;">
+               <tr>
+                 <td style="width: 50%;">
+                    <xsl:for-each select="/feature/eco/approval/actor">
+                      <xsl:sort 
select="string-length(substring-before($roles-sort-order, role))"
+                               data-type="number" order="ascending"/>
+                      <xsl:if test="(position() mod 2) = 1">
+                       <xsl:call-template name="actor"/>
+                      </xsl:if>
+                    </xsl:for-each>
+                 </td>
+                 <td>
+                    <xsl:for-each select="/feature/eco/approval/actor">
+                      <xsl:sort 
select="string-length(substring-before($roles-sort-order, role))"
+                               data-type="number" order="ascending"/>
+                      <xsl:if test="(position() mod 2) = 0">
+                       <xsl:call-template name="actor"/>
+                      </xsl:if>
+                    </xsl:for-each>
+                 </td>
+               </tr>
+              </table>
+            </xsl:if>
           </span>
         </div><!-- /rbcontent -->
-        <xsl:if test="//actor[role = 'interested']">
+
+        <xsl:if test="/feature/actor[role = 'interested']">
           <xsl:call-template name="intactorbox" />
         </xsl:if>
       <div class="rbbot_blue"><div></div></div>
@@ -160,7 +190,7 @@
             <tr><th colspan="2">
               <xsl:element name="span">
               <xsl:attribute name="style">float: left;</xsl:attribute>
-                <xsl:text>Interested Persons (</xsl:text><xsl:value-of 
select="count(//actor[role = 
'interested'])"/><xsl:text>)</xsl:text><xsl:comment>intactors_hook</xsl:comment>
+                <xsl:text>Interested Persons (</xsl:text><xsl:value-of 
select="count(/feature/actor[role = 
'interested'])"/><xsl:text>)</xsl:text><xsl:comment>intactors_hook</xsl:comment>
               </xsl:element>
 
               <xsl:element name="span">
@@ -170,16 +200,17 @@
               </xsl:element>
             </th></tr>
             <tr class="dropmenu" id="interestdrop">
-              <td>
-                <xsl:for-each select="//actor[role = 'interested']">
-                  <xsl:sort 
select="string-length(substring-before($roles-sort-order, role))" 
data-type="number" order="ascending"/>
+              <td style="width: 50%;">
+                <xsl:for-each select="/feature/actor[role = 'interested']">
+                  <xsl:sort 
select="string-length(substring-before($roles-sort-order, role))"
+                           data-type="number" order="ascending"/>
                   <xsl:if test="(position() mod 2) = 1">
                     <xsl:call-template name="intactor"/>
                   </xsl:if>
                 </xsl:for-each>
               </td>
               <td>
-                <xsl:for-each select="//actor[role = 'interested']">
+                <xsl:for-each select="/feature/actor[role = 'interested']">
                   <xsl:sort 
select="string-length(substring-before($roles-sort-order, role))" 
data-type="number" order="ascending"/>
                   <xsl:if test="(position() mod 2) = 0">
                     <xsl:call-template name="intactor"/>
@@ -431,7 +462,9 @@
                      <xsl:when test="($client='partnerfate' or 
$client='openfate' or $client='openfate_readonly') and @private = 'true'">
                      </xsl:when>
                      <xsl:otherwise>
-                       <xsl:call-template name="comment"/>
+                       <xsl:call-template name="comment">
+                         <xsl:with-param name="depth" select="0"/>
+                       </xsl:call-template>
                      </xsl:otherwise>
                    </xsl:choose>
                  </xsl:for-each>
@@ -457,6 +490,9 @@
       </xsl:when>
       <xsl:when test="$client='openfate_readonly'">
       </xsl:when>
+      <xsl:when test="count(discussion/comment) >= $max-comments">
+       Maximum number of comment reached, please talk to each other
+      </xsl:when>
       <xsl:otherwise>
        <div class="action" style="float:left;">[<a href="fate:comment/0">add 
comment</a>]</div>
       </xsl:otherwise>
@@ -474,6 +510,8 @@
   </xsl:template>
 
   <xsl:template name="reply_link">
+    <xsl:param name="depth"/>
+    <xsl:if test="$max-threadsize >= $depth">
     <xsl:choose>
       <xsl:when test="$client='openfate' or $client='partnerfate' or 
$client='webfate'">
         <span class="action"> [<xsl:element name='a'>
@@ -492,11 +530,15 @@
           [<a name="comment{@id}" class="action" 
href="fate:comment/{@id}">reply</a>]
       </xsl:otherwise>
     </xsl:choose>
+    </xsl:if>
+    <xsl:if test="$depth+3 >= $max-threadsize and author/person/email">
+      [ <a href="mailto:{author/person/email}"; title="discuss 
offline">email</a> ]
+    </xsl:if>
   </xsl:template>
 
   <xsl:template name="edit_link">
     <xsl:choose>
-      <xsl:when test="@editable='true'">
+      <xsl:when test="@editable='true' or author/person/userid = $user">
         [<a href="fate:editcomment/{@id}">edit</a>]
       </xsl:when>
     </xsl:choose>
@@ -528,6 +570,7 @@
 
 
   <xsl:template name="comment">
+    <xsl:param name="depth"/> 
     <li>
       <xsl:choose>
       <xsl:when test="@private='true'">
@@ -546,12 +589,17 @@
       <xsl:choose>
       <xsl:when test="//comment/@id > @id">
         <span class="header">
-        <xsl:call-template name="comment_header"/>
-        </span>
+          <xsl:call-template name="comment_header">
+            <xsl:with-param name="depth" select="$depth"/>
+          </xsl:call-template>
+       </span>
       </xsl:when>
       <xsl:otherwise>
         <span class="header headerlatest">
-        <xsl:call-template name="comment_header"/> (latest comment)
+          <xsl:call-template name="comment_header">
+           <xsl:with-param name="depth" select="$depth"/>
+          </xsl:call-template>
+         (latest comment)
         </span>
       </xsl:otherwise>
       </xsl:choose>
@@ -567,7 +615,9 @@
       <xsl:if test="../comment[@inreplyto = $id]">
         <ul>
           <xsl:for-each select="../comment[@inreplyto = $id]">
-            <xsl:call-template name="comment"/>
+            <xsl:call-template name="comment">
+             <xsl:with-param name="depth" select="$depth+1"/>
+           </xsl:call-template>
           </xsl:for-each>
         </ul>
       </xsl:if>
@@ -576,6 +626,7 @@
 
 
   <xsl:template name="comment_header">
+    <xsl:param name="depth"/>
     <span class="id">#<xsl:value-of select="@id"/>: </span>
       <span class="author">
           <xsl:apply-templates select="author/person" />
@@ -588,7 +639,9 @@
         <xsl:call-template name="toggle_private_link"/>
       </span>
       <span class="reply">
-        <xsl:call-template name="reply_link"/>
+        <xsl:call-template name="reply_link">
+         <xsl:with-param name="depth" select="$depth"/>
+        </xsl:call-template>
         <xsl:call-template name="edit_link"/>
       </span>
   </xsl:template>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/cache/sqlitecache.cpp 
new/fate-20170131-27be067/src/cache/sqlitecache.cpp
--- old/fate-20170120-10cb902/src/cache/sqlitecache.cpp 2017-01-20 
19:36:04.238520508 +0100
+++ new/fate-20170131-27be067/src/cache/sqlitecache.cpp 2017-01-31 
12:42:53.876633353 +0100
@@ -69,7 +69,7 @@
   const char* pszUnused;
   query = QString( "SELECT id FROM modified_items" );
 
-  sqlite3_prepare( db, query.toAscii(), -1, &pStmt, &pszUnused );
+  sqlite3_prepare( db, query.toLatin1().constData(), -1, &pStmt, &pszUnused );
 
   rc = sqlite3_step(pStmt);
   while( rc != SQLITE_DONE ) {
@@ -112,7 +112,7 @@
   }
   query = QString( "SELECT data FROM %1 WHERE id='%2'" ).arg(table).arg( id );
 
-  sqlite3_prepare( db, query.toAscii(), -1, &pStmt, &pszUnused );
+  sqlite3_prepare( db, query.toLatin1().constData(), -1, &pStmt, &pszUnused );
 
   rc = sqlite3_step(pStmt);
   if( rc != SQLITE_ROW ){
@@ -160,7 +160,7 @@
   }
   query += ")";
 
-  rc = sqlite3_prepare( db, query.toAscii(), -1, &pStmt, &pszUnused );
+  rc = sqlite3_prepare( db, query.toLatin1().constData(), -1, &pStmt, 
&pszUnused );
   if( rc != SQLITE_OK ){
     kDebug() << k_funcinfo << "SQL error: " << rc;
     return items;
@@ -225,7 +225,7 @@
   query = "INSERT INTO items (id, revision, data ) VALUES ( '" +
                                   id + "','" + rev +  "',?)";
 
-  rc =sqlite3_prepare( db, query.toAscii(), -1, &pStmt, &pszUnused );
+  rc =sqlite3_prepare( db, query.toLatin1().constData(), -1, &pStmt, 
&pszUnused );
   if( rc != SQLITE_OK ){
     kDebug() << k_funcinfo << "SQL error: " << rc;
   }
@@ -248,7 +248,7 @@
   char *zErrMsg = 0;
   QString query;
 
-  rc = sqlite3_open( databaseFile().toAscii(), &db );
+  rc = sqlite3_open( databaseFile().toLatin1().constData(), &db );
 
   if( rc != SQLITE_OK ){
     KMessageBox::error( 0, i18n("Could not initialize cache database:\n%1")
@@ -260,14 +260,14 @@
 
     // Initialize main table
     query = QString("SELECT name FROM sqlite_master WHERE type='table' AND 
name='items'" );
-    rc = sqlite3_get_table( db, query.toAscii(), &result, &nRow, &nCol, 
&zErrMsg);
+    rc = sqlite3_get_table( db, query.toLatin1().constData(), &result, &nRow, 
&nCol, &zErrMsg);
     if( rc != SQLITE_OK ){
       kDebug() << k_funcinfo << "SQL error: " << zErrMsg;
       sqlite3_free(zErrMsg);
     } else {
       // settings, see http://www.sqlite.org/pragma.html
       query = QString("PRAGMA synchronous = OFF;"); 
-      rc = sqlite3_exec( db, query.toAscii(), 0, 0, &zErrMsg );
+      rc = sqlite3_exec( db, query.toLatin1().constData(), 0, 0, &zErrMsg );
       if( rc != SQLITE_OK ){
         kDebug() << k_funcinfo << "SQL error: " << zErrMsg;
         sqlite3_free(zErrMsg);
@@ -278,13 +278,13 @@
             "id string primary key not null,"
             "revision integer not null,"
             "data blob)");
-        sqlite3_exec( db, query.toAscii(), 0, 0, &zErrMsg );
+        sqlite3_exec( db, query.toLatin1().constData(), 0, 0, &zErrMsg );
         if( rc != SQLITE_OK ){
           kDebug() << k_funcinfo << "SQL error: " << zErrMsg;
           sqlite3_free(zErrMsg);
         }
         query = QString("CREATE INDEX id_index ON items( id )");
-        sqlite3_exec( db, query.toAscii(), 0, 0, &zErrMsg );
+        sqlite3_exec( db, query.toLatin1().constData(), 0, 0, &zErrMsg );
         if( rc != SQLITE_OK ){
           kDebug() << k_funcinfo << "SQL error: " << zErrMsg;
           sqlite3_free(zErrMsg);
@@ -294,7 +294,7 @@
 
     // Initialize modified items table
     query = QString("SELECT name FROM sqlite_master WHERE type='table' AND 
name='modified_items'" );
-    rc = sqlite3_get_table( db, query.toAscii(), &result, &nRow, &nCol, 
&zErrMsg);
+    rc = sqlite3_get_table( db, query.toLatin1().constData(), &result, &nRow, 
&nCol, &zErrMsg);
     if( rc != SQLITE_OK ){
       kDebug() << k_funcinfo << "SQL error: " << zErrMsg;
       sqlite3_free(zErrMsg);
@@ -304,7 +304,7 @@
         query = QString("CREATE TABLE modified_items ("
             "id string primary key not null,"
             "data blob)");
-        sqlite3_exec( db, query.toAscii(), 0, 0, &zErrMsg );
+        sqlite3_exec( db, query.toLatin1().constData(), 0, 0, &zErrMsg );
         if( rc != SQLITE_OK ){
           kDebug() << k_funcinfo << "SQL error: " << zErrMsg;
           sqlite3_free(zErrMsg);
@@ -314,7 +314,7 @@
 
     // Initialize new items table
     query = QString("SELECT name FROM sqlite_master WHERE type='table' AND 
name='new_items'" );
-    rc = sqlite3_get_table( db, query.toAscii(), &result, &nRow, &nCol, 
&zErrMsg);
+    rc = sqlite3_get_table( db, query.toLatin1().constData(), &result, &nRow, 
&nCol, &zErrMsg);
     if( rc != SQLITE_OK ){
       kDebug() << k_funcinfo << "SQL error: " << zErrMsg;
       sqlite3_free(zErrMsg);
@@ -323,7 +323,7 @@
         kDebug() << k_funcinfo << "Need to initialize database";
         query = QString("CREATE TABLE new_items ("
             "data blob)");
-        sqlite3_exec( db, query.toAscii(), 0, 0, &zErrMsg );
+        sqlite3_exec( db, query.toLatin1().constData(), 0, 0, &zErrMsg );
         if( rc != SQLITE_OK ){
           kDebug() << k_funcinfo << "SQL error: " << zErrMsg;
           sqlite3_free(zErrMsg);
@@ -354,7 +354,7 @@
   char *zErrMsg = 0;
 
   query = QString( "DELETE FROM items where id='%1'" ).arg( id );
-  rc = sqlite3_exec( db, query.toAscii(), 0, 0, &zErrMsg);
+  rc = sqlite3_exec( db, query.toLatin1().constData(), 0, 0, &zErrMsg);
   if( rc != SQLITE_OK ){
     kDebug() << k_funcinfo << "SQL error: " << zErrMsg;
     sqlite3_free(zErrMsg);
@@ -382,7 +382,7 @@
   query += ")";
 
 
-  rc = sqlite3_exec( db, query.toAscii(), 0, 0, &zErrMsg);
+  rc = sqlite3_exec( db, query.toLatin1().constData(), 0, 0, &zErrMsg);
   if( rc != SQLITE_OK ){
     kDebug() << k_funcinfo << "SQL error: " << zErrMsg;
     sqlite3_free(zErrMsg);
@@ -408,7 +408,7 @@
   query = "BEGIN TRANSACTION;";
 
 
-  rc = sqlite3_exec( db, query.toAscii(), 0, 0, &zErrMsg);
+  rc = sqlite3_exec( db, query.toLatin1().constData(), 0, 0, &zErrMsg);
   if( rc != SQLITE_OK ){
     kDebug() << k_funcinfo << "SQL error: " << zErrMsg;
     sqlite3_free(zErrMsg);
@@ -428,7 +428,7 @@
   query = "END TRANSACTION;";
 
 
-  rc = sqlite3_exec( db, query.toAscii(), 0, 0, &zErrMsg);
+  rc = sqlite3_exec( db, query.toLatin1().constData(), 0, 0, &zErrMsg);
   if( rc != SQLITE_OK ){
     kDebug() << k_funcinfo << "SQL error: " << zErrMsg;
     sqlite3_free(zErrMsg);
@@ -451,7 +451,7 @@
   query = "DELETE FROM items;";
 
 
-  rc = sqlite3_exec( db, query.toAscii(), 0, 0, &zErrMsg);
+  rc = sqlite3_exec( db, query.toLatin1().constData(), 0, 0, &zErrMsg);
   if( rc != SQLITE_OK ){
     kDebug() << k_funcinfo << "SQL error: " << zErrMsg;
     sqlite3_free(zErrMsg);
@@ -479,7 +479,7 @@
   query = "INSERT INTO modified_items (id, data ) VALUES ( '" +
       id + "',?)";
 
-  rc =sqlite3_prepare( db, query.toAscii(), -1, &pStmt, &pszUnused );
+  rc =sqlite3_prepare( db, query.toLatin1().constData(), -1, &pStmt, 
&pszUnused );
   if( rc != SQLITE_OK ){
     kDebug() << k_funcinfo << "SQL error: " << rc;
   }
@@ -514,7 +514,7 @@
   const char* pszUnused;
   query = QString( "SELECT data FROM modified_items WHERE id='%1'" ).arg( id );
 
-  sqlite3_prepare( db, query.toAscii(), -1, &pStmt, &pszUnused );
+  sqlite3_prepare( db, query.toLatin1().constData(), -1, &pStmt, &pszUnused );
 
   rc = sqlite3_step(pStmt);
   if( rc != SQLITE_ROW ){
@@ -548,7 +548,7 @@
   char *zErrMsg = 0;
 
   query = QString( "DELETE FROM modified_items where id='%1'" ).arg( id );
-  rc = sqlite3_exec( db, query.toAscii(), 0, 0, &zErrMsg);
+  rc = sqlite3_exec( db, query.toLatin1().constData(), 0, 0, &zErrMsg);
   if( rc != SQLITE_OK ){
     kDebug() << k_funcinfo << "SQL error: " << zErrMsg;
     sqlite3_free(zErrMsg);
@@ -575,7 +575,7 @@
   const char* pszUnused;
   query = QString( "SELECT data FROM modified_items" );
 
-  sqlite3_prepare( db, query.toAscii(), -1, &pStmt, &pszUnused );
+  sqlite3_prepare( db, query.toLatin1().constData(), -1, &pStmt, &pszUnused );
 
   rc = sqlite3_step(pStmt);
   while( rc != SQLITE_DONE ) {
@@ -613,7 +613,7 @@
   bool hasItems;
 
   query = QString( "SELECT COUNT(*) FROM modified_items" );
-  sqlite3_prepare( db, query.toAscii(), -1, &pStmt, &pszUnused );
+  sqlite3_prepare( db, query.toLatin1().constData(), -1, &pStmt, &pszUnused );
 
   rc = sqlite3_step(pStmt);
   if( rc != SQLITE_ROW ){
@@ -643,7 +643,7 @@
   bool hasItem;
 
   query = QString( "SELECT COUNT(*) FROM modified_items WHERE id='%1'" ).arg( 
id );
-  sqlite3_prepare( db, query.toAscii(), -1, &pStmt, &pszUnused );
+  sqlite3_prepare( db, query.toLatin1().constData(), -1, &pStmt, &pszUnused );
 
   rc = sqlite3_step(pStmt);
   if( rc != SQLITE_ROW ){
@@ -682,7 +682,7 @@
 
   query = "INSERT INTO new_items ( data ) VALUES ( ? )";
 
-  rc =sqlite3_prepare( db, query.toAscii(), -1, &pStmt, &pszUnused );
+  rc =sqlite3_prepare( db, query.toLatin1().constData(), -1, &pStmt, 
&pszUnused );
   if( rc != SQLITE_OK ){
     kDebug() << k_funcinfo << "SQL error: " << rc;
   }
@@ -715,7 +715,7 @@
   const char* pszUnused;
   query = QString( "SELECT data FROM new_items" );
 
-  sqlite3_prepare( db, query.toAscii(), -1, &pStmt, &pszUnused );
+  sqlite3_prepare( db, query.toLatin1().constData(), -1, &pStmt, &pszUnused );
   rc = sqlite3_step(pStmt);
   while( rc != SQLITE_DONE ) {
     if( rc == SQLITE_BUSY )
@@ -750,7 +750,7 @@
   char *zErrMsg = 0;
 
   query = QString( "DELETE FROM new_items" );
-  rc = sqlite3_exec( db, query.toAscii(), 0, 0, &zErrMsg);
+  rc = sqlite3_exec( db, query.toLatin1().constData(), 0, 0, &zErrMsg);
   if( rc != SQLITE_OK ){
     kDebug() << k_funcinfo << "SQL error: " << zErrMsg;
     sqlite3_free(zErrMsg);
@@ -770,7 +770,7 @@
   const char* pszUnused;
 
   query = QString( "SELECT COUNT(*) FROM new_items" );
-  sqlite3_prepare( db, query.toAscii(), -1, &pStmt, &pszUnused );
+  sqlite3_prepare( db, query.toLatin1().constData(), -1, &pStmt, &pszUnused );
 
   rc = sqlite3_step(pStmt);
   if( rc != SQLITE_ROW ){
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fate-20170120-10cb902/src/fate/core/fatebookmarkmanager.h 
new/fate-20170131-27be067/src/fate/core/fatebookmarkmanager.h
--- old/fate-20170120-10cb902/src/fate/core/fatebookmarkmanager.h       
2017-01-20 19:36:04.238520508 +0100
+++ new/fate-20170131-27be067/src/fate/core/fatebookmarkmanager.h       
1970-01-01 01:00:00.000000000 +0100
@@ -1,25 +0,0 @@
-#ifndef FATEBOOKMARKMANAGER_H
-#define FATEBOOKMARKMANAGER_H
-
-#include <kbookmarkmanager.h>
-#include <kstandarddirs.h>
-
-class FateBookmarkManager
-{
-public:
-    static KBookmarkManager * self() {
-        if ( !s_bookmarkManager )
-        {
-            QString bookmarksFile = KStandardDirs::locateLocal("data", 
QString::fromLatin1("fate/bookmarks.xml"));
-            s_bookmarkManager = KBookmarkManager::managerForFile( 
bookmarksFile, QString::null );
-        }
-        return s_bookmarkManager;
-    }
-
-
-    static KBookmarkManager *s_bookmarkManager;
-};
-
-KBookmarkManager* FateBookmarkManager::s_bookmarkManager;
-
-#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fate-20170120-10cb902/src/fate/core/openproductscheck.cpp 
new/fate-20170131-27be067/src/fate/core/openproductscheck.cpp
--- old/fate-20170120-10cb902/src/fate/core/openproductscheck.cpp       
2017-01-20 19:36:04.238520508 +0100
+++ new/fate-20170131-27be067/src/fate/core/openproductscheck.cpp       
2017-01-31 12:42:53.876633353 +0100
@@ -27,9 +27,9 @@
 #include "metavaluelist.h"
 #include "productmap.h"
 
-#include <qstringlist.h>
+#include <QStringList>
+#include <QMessageBox>
 
-#include <kmessagebox.h>
 #include <klocale.h>
 
 bool OpenProductsCheck::checkProducts( const QStringList &list, QWidget 
*widget, 
@@ -83,13 +83,13 @@
 
   if( !warnings.isEmpty() ) {
     if( !critical ) {
-      if( KMessageBox::warningContinueCancel( widget,
+      if( QMessageBox::warning( widget, QString(),
           i18n("<qt>Some of the chosen products are not opened yet, closed or 
passed the deadline:\n\n"
-          "<ul>%1</ul>\n\nContinue anyway?</qt>").arg(warnings) ) == 
KMessageBox::Cancel )
+          "<ul>%1</ul>\n\nContinue anyway?</qt>").arg(warnings), 
QMessageBox::Ok|QMessageBox::Cancel, QMessageBox::Ok ) == QMessageBox::Cancel )
         return false;
     }
     else {
-     KMessageBox::error( widget,
+     QMessageBox::critical( widget, QString(),
           i18n("<qt>Some of the chosen products are not opened yet, closed or 
passed the deadline:\n\n"
           "<ul>%1</ul></qt>").arg(warnings) );
      return false;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fate-20170120-10cb902/src/fate/editor/actoreditor.cpp 
new/fate-20170131-27be067/src/fate/editor/actoreditor.cpp
--- old/fate-20170120-10cb902/src/fate/editor/actoreditor.cpp   2017-01-20 
19:36:04.238520508 +0100
+++ new/fate-20170131-27be067/src/fate/editor/actoreditor.cpp   2017-01-31 
12:42:53.876633353 +0100
@@ -39,7 +39,6 @@
 #include <klocale.h>
 #include <kdebug.h>
 #include <kaction.h>
-#include <kstdaccel.h>
 #include <kactioncollection.h>
 #include <kdeversion.h>
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fate-20170120-10cb902/src/fate/editor/commentdialog.cpp 
new/fate-20170131-27be067/src/fate/editor/commentdialog.cpp
--- old/fate-20170120-10cb902/src/fate/editor/commentdialog.cpp 2017-01-20 
19:36:04.242520526 +0100
+++ new/fate-20170131-27be067/src/fate/editor/commentdialog.cpp 2017-01-31 
12:42:53.880633363 +0100
@@ -190,6 +190,7 @@
       mPrivate->setChecked( com.isPrivate );
       kDebug() << k_funcinfo << "Setting in reply to auf " << com.inReplyTo;
       inReplyTo = com.inReplyTo;
+      mAuthor = com.author;
       break;
     }
   }
@@ -259,15 +260,23 @@
 FeatureData::Comment CommentDialog::comment( )
 {
   FeatureData::Comment comment;
-  FeatureData::Actor actor;
-  comment.author.userid = Prefs::self()->serverUser();
-  comment.author.roleId = Prefs::self()->stakeholderFunction();
+
+  if (mCommentId==-1) {
+    comment.author.userid = Prefs::self()->serverUser();
+  } else {
+    comment.author = mAuthor;
+  }
   comment.id = mCommentId;
   comment.theComment = mEditor->richtextifiedText();
   comment.isPrivate = mPrivate->isChecked();
   comment.isEditable = true;
   comment.inReplyTo = 0;
-  comment.created = QDateTime::currentDateTime();
+#if QT_VERSION >= 0x040700
+  comment.created = QDateTime::currentDateTimeUtc();
+#else
+  // SLES 11 SP4 still sits on Qt-4.6
+  comment.created = QDateTime::currentDateTime().toUTC();
+#endif
   
   QString inRepString = mInReplyCombo->currentText();
   if( inRepString == INITIAL_DESC ) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fate-20170120-10cb902/src/fate/editor/commentdialog.h 
new/fate-20170131-27be067/src/fate/editor/commentdialog.h
--- old/fate-20170120-10cb902/src/fate/editor/commentdialog.h   2017-01-20 
19:36:04.242520526 +0100
+++ new/fate-20170131-27be067/src/fate/editor/commentdialog.h   2017-01-31 
12:42:53.880633363 +0100
@@ -83,6 +83,7 @@
     KPassivePopup *mPassivePop;
     QLabel     *mWarnDetailLabel;
     int        mCommentId;
+    FeatureData::Actor mAuthor;
     Feature   *mFeature;
     bool       mActorsChanged;
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/fate/editor/htmlview.cpp 
new/fate-20170131-27be067/src/fate/editor/htmlview.cpp
--- old/fate-20170120-10cb902/src/fate/editor/htmlview.cpp      2017-01-20 
19:36:04.242520526 +0100
+++ new/fate-20170131-27be067/src/fate/editor/htmlview.cpp      2017-01-31 
12:42:53.880633363 +0100
@@ -290,7 +290,7 @@
   t += "standardized query language for XML.</p>";
   
   t += "<p>In case of questions or comments please contact the ";
-  t += "<a href=\"mailto:[email protected]\";>Internal Tools Team</a>.</p>";
+  t += "<a href=\"mailto:[email protected]\";>Internal Tools Team</a>.</p>";
   
   t += "<p>For bugreports, please use the ";
   t += "<a href=\"http://bugzilla.suse.com\";>SUSE Bugzilla</a>.</p>";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fate-20170120-10cb902/src/fate/editor/prioritytable.cpp 
new/fate-20170131-27be067/src/fate/editor/prioritytable.cpp
--- old/fate-20170120-10cb902/src/fate/editor/prioritytable.cpp 2017-01-20 
19:36:04.242520526 +0100
+++ new/fate-20170131-27be067/src/fate/editor/prioritytable.cpp 2017-01-31 
12:42:53.880633363 +0100
@@ -33,7 +33,6 @@
 
 #include <QComboBox>
 #include <QHeaderView>
-#include <QLayout>
 #include <QString>
 #include <QTableWidget>
 #include <QVBoxLayout>
@@ -917,15 +916,6 @@
   delete dlg;
 }
 
-static inline void
-swap(QString &a, QString &b)
-{
-  QString tmp = a;
-
-  a = b;
-  b = tmp;
-}
-
 void PriorityTable::sort()
 {
 #if 0
@@ -936,8 +926,8 @@
       if( mProductIdList[col] == p ) {
         mTable->swapColumns( i, col, true );
 
-       swap(mProductIdList[i], mProductIdList[col]);
-       swap(mProductNameList[i], mProductNameList[col]);
+    mProductIdList[i].swap(mProductIdList[col]));
+    mProductNameList[i].swap(mProductNameList[col]));
 
         Entry old = mEntries[i];
         mEntries[i] = mEntries[col];
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fate-20170120-10cb902/src/fate/editor/prioritytable.h 
new/fate-20170131-27be067/src/fate/editor/prioritytable.h
--- old/fate-20170120-10cb902/src/fate/editor/prioritytable.h   2017-01-20 
19:36:04.242520526 +0100
+++ new/fate-20170131-27be067/src/fate/editor/prioritytable.h   2017-01-31 
12:42:53.880633363 +0100
@@ -25,7 +25,6 @@
 #include "productlisteditorbase.h"
 #include "featuredata.h"
 
-#include <QDateTime>
 #include <QMap>
 #include <QMenu>
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fate-20170120-10cb902/src/fate/editor/productselectorwidget.cpp 
new/fate-20170131-27be067/src/fate/editor/productselectorwidget.cpp
--- old/fate-20170120-10cb902/src/fate/editor/productselectorwidget.cpp 
2017-01-20 19:36:04.242520526 +0100
+++ new/fate-20170131-27be067/src/fate/editor/productselectorwidget.cpp 
2017-01-31 12:42:53.880633363 +0100
@@ -39,7 +39,6 @@
 #include <qtimer.h>
 #include <qtreewidget.h>
 #include <qlistwidget.h>
-#include <QVBoxLayout>
 
 QuickProductSelectorWidget::QuickProductSelectorWidget(QWidget *parent)
 : QWidget(parent), mSingleSelection(false)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fate-20170120-10cb902/src/fate/editor/richtexteditor.cpp 
new/fate-20170131-27be067/src/fate/editor/richtexteditor.cpp
--- old/fate-20170120-10cb902/src/fate/editor/richtexteditor.cpp        
2017-01-20 19:36:04.242520526 +0100
+++ new/fate-20170131-27be067/src/fate/editor/richtexteditor.cpp        
2017-01-31 12:42:53.880633363 +0100
@@ -30,7 +30,6 @@
 #include <QBoxLayout>
 #include <QHeaderView>
 #include <QLabel>
-#include <QLayout>
 #include <QRegExp>
 #include <QSplitter>
 #include <QTableWidget>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/fate/inexcheckbox.cpp 
new/fate-20170131-27be067/src/fate/inexcheckbox.cpp
--- old/fate-20170120-10cb902/src/fate/inexcheckbox.cpp 2017-01-20 
19:36:04.242520526 +0100
+++ new/fate-20170131-27be067/src/fate/inexcheckbox.cpp 2017-01-31 
12:42:53.880633363 +0100
@@ -29,8 +29,6 @@
 #include <kicon.h>
 
 #include <qlayout.h>
-#include <QVBoxLayout>
-#include <QBoxLayout>
 
 InExCheckBox::InExCheckBox( QWidget *parent, const char *text )
   : QCheckBox(text, parent)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/fate/mainview.cpp 
new/fate-20170131-27be067/src/fate/mainview.cpp
--- old/fate-20170120-10cb902/src/fate/mainview.cpp     2017-01-20 
19:36:04.246520544 +0100
+++ new/fate-20170131-27be067/src/fate/mainview.cpp     2017-01-31 
12:42:53.884633376 +0100
@@ -59,7 +59,6 @@
 #include "processhelpdialog.h"
 #include "featurerelationdialog.h"
 #include "sendmaildialog.h"
-#include "metamanager.h"
 #include "keeperjob.h"
 #include "texttemplate.h"
 #include "odtfile.h"
@@ -95,9 +94,7 @@
 #include <qtimer.h>
 #include <qcursor.h>
 #include <qapplication.h>
-#include <qlabel.h>
 #include <qsignalmapper.h>
-#include <qapplication.h>
 #include <QDBusConnection>
 
 #define BULK_FEATURE_UPDATES
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/fate/mainwindow.cpp 
new/fate-20170131-27be067/src/fate/mainwindow.cpp
--- old/fate-20170120-10cb902/src/fate/mainwindow.cpp   2017-01-20 
19:36:04.246520544 +0100
+++ new/fate-20170131-27be067/src/fate/mainwindow.cpp   2017-01-31 
12:42:53.884633376 +0100
@@ -32,7 +32,6 @@
 #include "startupsequenceview.h"
 #include "progressmanager.h"
 #include "version.h"
-#include "fatebookmarkmanager.h"
 #include "dialogsize.h"
 
 #include <kdeversion.h>
@@ -47,7 +46,6 @@
 #include <kdebug.h>
 #include <kmessagebox.h>
 #include <kedittoolbar.h>
-#include <kstdaccel.h>
 #include <kaction.h>
 #include <kstandardaction.h>
 #include <kinputdialog.h>
@@ -55,12 +53,11 @@
 #include <qpushbutton.h>
 #include <qtooltip.h>
 #include <klineedit.h>
-#include <kbookmarkmenu.h>
 #include <kactioncollection.h>
 
 MainWindow::MainWindow( bool quietStartup )
   : KXmlGuiWindow( 0  ), mOnlineModePending( false ),
-    mQueryFeatureLabel( 0 ), mQueryFeatureEdit( 0 ), mBookmarksActionMenu(0)
+    mQueryFeatureLabel( 0 ), mQueryFeatureEdit( 0 )
 {
   setObjectName( "MainWindow" );
   mStartupSequenceView = new StartupSequenceView( StartupSequence::self(),
@@ -149,7 +146,6 @@
   DialogSize::remember(this);
   delete mQueryFeatureLabel;
   delete mQueryFeatureEdit;
-  delete mBookmarksActionMenu;
 }
 
 void MainWindow::setupActions()
@@ -268,14 +264,6 @@
   KStandardAction::preferences( this, SLOT( preferences() ),
                                actionCollection() );
 
-  mBookmarksActionMenu = new KActionMenu( this );
-     mBookmarksActionMenu->setText( i18n( "Bookmarks" ) );
-  // mBookmarksActionMenu->setIcon( KIcon("bookmarks") );
-  actionCollection()->addAction(  "bookmarks", mBookmarksActionMenu );
-
-  mBookmarkMenu = new KBookmarkMenu( FateBookmarkManager::self(), this,
-                    mBookmarksActionMenu->menu(), actionCollection() );
-
   mView->setupActions( actionCollection() );
 }
 
@@ -284,17 +272,6 @@
   mView->queryFeature( mQueryFeatureEdit->text() );
 }
 
-
-void MainWindow::openBookmark( const KBookmark& bookmark, Qt::MouseButtons,
-                              Qt::KeyboardModifiers  )
-{
-  QString url = bookmark.url().url();
-  if ( url.left(7) == "fate://" ) {
-    QString id = url.mid(7);
-    mView->queryFeature( id );
-  }
-}
-
 QString MainWindow::currentURL() const
 {
   return mView->currentURL();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/fate/mainwindow.h 
new/fate-20170131-27be067/src/fate/mainwindow.h
--- old/fate-20170120-10cb902/src/fate/mainwindow.h     2017-01-20 
19:36:04.246520544 +0100
+++ new/fate-20170131-27be067/src/fate/mainwindow.h     2017-01-31 
12:42:53.884633376 +0100
@@ -25,7 +25,6 @@
 #include <kapplication.h>
 #include <kmainwindow.h>
 #include <kxmlguiwindow.h>
-#include <kbookmarkmanager.h>
 
 #include "mainview.h"
 #include <QLabel>
@@ -37,9 +36,8 @@
 class QPushButton;
 class StartupSequenceView;
 class KLineEdit;
-class KBookmarkMenu;
 
-class MainWindow : public KXmlGuiWindow, virtual public KBookmarkOwner
+class MainWindow : public KXmlGuiWindow
 {
     Q_OBJECT
   public:
@@ -50,8 +48,6 @@
 
     MainView *view() { return mView; }
 
-    virtual void openBookmark( const KBookmark&,
-                              Qt::MouseButtons, Qt::KeyboardModifiers );
     virtual QString currentTitle() const;
     virtual QString currentURL() const;
 
@@ -96,9 +92,6 @@
 
     QLabel *mQueryFeatureLabel;
     KLineEdit *mQueryFeatureEdit;
-
-    KActionMenu *mBookmarksActionMenu;
-    KBookmarkMenu *mBookmarkMenu;
 };
 
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/fate/productviewer.cpp 
new/fate-20170131-27be067/src/fate/productviewer.cpp
--- old/fate-20170120-10cb902/src/fate/productviewer.cpp        2017-01-20 
19:36:04.246520544 +0100
+++ new/fate-20170131-27be067/src/fate/productviewer.cpp        2017-01-31 
12:42:53.884633376 +0100
@@ -2,8 +2,10 @@
     This file is part of Fate.
 
     Copyright (c) 2007 SUSE LINUX Products GmbH
+                  2017 SUSE Linux GmbH
 
     Author: Cornelius Schumacher <[email protected]>
+            Joachim Plack <[email protected]>
 
     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
@@ -25,6 +27,7 @@
 #include "productmap.h"
 #include "listviewtooltip.h"
 #include "filterheader.h"
+#include "dialogsize.h"
 
 #include <klocale.h>
 
@@ -37,7 +40,7 @@
 {
   QFrame *topFrame = new QFrame( this );
   setMainWidget( topFrame );
-  setModal( true );
+  setModal( false );
   setCaption( i18n("Select Products") );
   setButtons( Ok | Cancel | User1 );
   setDefaultButton( Ok );
@@ -47,36 +50,38 @@
   
   mListView = new QTreeWidget( topFrame );
   mListView->setHeaderLabels(QStringList() <<
-                       i18n("Id") <<
                        i18n("Name") <<
+                       i18n("Opened at") <<
+                       i18n("ext.Deadline") <<
+                       i18n("Deadline") <<
                        i18n("Product Line") <<
+                       i18n("Id") <<
                        i18n("Short") <<
                        i18n("Long") <<
                        i18n("Bugzilla"));
   mListView->setRootIsDecorated(true);
 
   mToolTips = new TreeViewToolTip(mListView);
-
-  TreeFilterHeader *filterHeader = new TreeFilterHeader(mListView, 1, 
topFrame);
-  filterHeader->setItemNames(i18n("No Product"), i18n("1 Product"), i18n("%1 
of %2 Products"));
-  topLayout->addWidget(filterHeader);
-
+  mFilterHeader = new TreeFilterHeader(mListView, 0, topFrame);
+  mFilterHeader->setItemNames(i18n("No Product"), i18n("1 Product"), i18n("%1 
of %2 Products"));
+  topLayout->addWidget(mFilterHeader);
   topLayout->addWidget(mListView);
 
   init();
-
-  filterHeader->setTitleLabel();
-
   connect( mProductMap, SIGNAL( changed() ), SLOT( init() ) );
+  connect( this, SIGNAL(user1Clicked()), SLOT(slotUser1()));
+  DialogSize::restore(this);
 }
 
 ProductViewer::~ProductViewer()
 {
+  DialogSize::remember(this);
 }
 
 void ProductViewer::init()
 {
   mToolTips->clearAll();
+  mListView->setSortingEnabled(false);
   mListView->clear();
 
   const Product::List &products = mProductMap->products();
@@ -84,12 +89,15 @@
   for( it = products.begin(); it != products.end(); ++it ) {
     Product *p = *it;
     QTreeWidgetItem *item = new QTreeWidgetItem( mListView );
-    item->setText( 0, p->id() );
-    item->setText( 1, p->fateName() );
-    item->setText( 2, p->productLine() );
-    item->setText( 3, p->shortName() );
-    item->setText( 4, p->longName() );
-    item->setText( 5, p->bugzillaName() );
+    item->setText( 0, p->fateName() );
+    item->setData( 1, 0, p->featureOpen() );
+    item->setData( 2, 0, p->featureDeadlineExt() );
+    item->setData( 3, 0, p->featureDeadline() );
+    item->setText( 4, p->productLine() );
+    item->setText( 5, p->id() );
+    item->setText( 6, p->shortName() );
+    item->setText( 7, p->longName() );
+    item->setText( 8, p->bugzillaName() );
 
     QString txt;
     txt += "<b>Milestones:</b><br/>";
@@ -112,6 +120,11 @@
       mToolTips->addDescription( item2, c.description() );
     }
   }
+  for (int i=0; i<5; i++) {
+    mListView->resizeColumnToContents(i);
+  }
+  mListView->setSortingEnabled(true);
+  mFilterHeader->updateView();
 }
 
 void ProductViewer::slotUser1()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/fate/productviewer.h 
new/fate-20170131-27be067/src/fate/productviewer.h
--- old/fate-20170120-10cb902/src/fate/productviewer.h  2017-01-20 
19:36:04.246520544 +0100
+++ new/fate-20170131-27be067/src/fate/productviewer.h  2017-01-31 
12:42:53.884633376 +0100
@@ -2,8 +2,9 @@
     This file is part of Fate.
 
     Copyright (c) 2007 SUSE LINUX Products GmbH
-
+                  2017 SUSE LINUX GmbH
     Author: Cornelius Schumacher <[email protected]>
+            Joachim Plack <[email protected]>
 
     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
@@ -26,6 +27,7 @@
 
 class ProductMap;
 class TreeViewToolTip;
+class TreeFilterHeader;
 class QTreeWidget;
 
 class ProductViewer : public KDialog
@@ -35,16 +37,15 @@
     ProductViewer( ProductMap *, QWidget *parent );
     ~ProductViewer();
 
-  protected:
-    void slotUser1();
-
   protected slots:
+    void slotUser1();
     void init();
 
   private:
     ProductMap *mProductMap;
     
     QTreeWidget *mListView;
+    TreeFilterHeader *mFilterHeader;
     TreeViewToolTip *mToolTips;
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/fate/querydialogbase.ui 
new/fate-20170131-27be067/src/fate/querydialogbase.ui
--- old/fate-20170120-10cb902/src/fate/querydialogbase.ui       2017-01-20 
19:36:04.246520544 +0100
+++ new/fate-20170131-27be067/src/fate/querydialogbase.ui       2017-01-31 
12:42:53.884633376 +0100
@@ -65,7 +65,7 @@
         </spacer>
        </item>
        <item>
-        <widget class="KLineEdit" name="leProducts">
+        <widget class="QLineEdit" name="leProducts">
          <property name="readOnly">
           <bool>true</bool>
          </property>
@@ -457,11 +457,6 @@
  <layoutdefault spacing="6" margin="11"/>
  <customwidgets>
   <customwidget>
-   <class>KLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>klineedit.h</header>
-  </customwidget>
-  <customwidget>
    <class>RoleCombo</class>
    <extends>QWidget</extends>
    <header>rolecombo.h</header>
@@ -481,7 +476,6 @@
   <include location="local">rolecombo.h</include>
   <include location="local">inexcheckbox.h</include>
   <include location="local">qxtcheckcombobox.h</include>
-  <include location="local">klineedit.h</include>
  </includes>
  <resources/>
  <connections/>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/fate/relationtreeview.cpp 
new/fate-20170131-27be067/src/fate/relationtreeview.cpp
--- old/fate-20170120-10cb902/src/fate/relationtreeview.cpp     2017-01-20 
19:36:04.246520544 +0100
+++ new/fate-20170131-27be067/src/fate/relationtreeview.cpp     2017-01-31 
12:42:53.884633376 +0100
@@ -27,7 +27,6 @@
 #include "relationtreelistview.h"
 #include "feature.h"
 #include "filterheader.h"
-#include "relationtreelistview.h"
 #include "featuremap.h"
 #include "fatecombobox.h"
 #include "actorlistedit.h"
@@ -42,7 +41,7 @@
 #include <krun.h>
 #include <kconfig.h>
 #include <kmessagebox.h>
-#include <kpushbutton.h>
+#include <QPushButton>
 
 #include <qlayout.h>
 #include <qcheckbox.h>
@@ -50,7 +49,6 @@
 #include <qlabel.h>
 #include <qheaderview.h>
 #include <QHBoxLayout>
-#include <QDropEvent>
 #include <QVBoxLayout>
 #include <QBoxLayout>
 #include <QLabel>
@@ -138,20 +136,20 @@
   buttonLayout->setSpacing(KDialog::spacingHint());
   buttonLayout->addStretch(1);
 
-  mEditButton = new KPushButton( this );
+  mEditButton = new QPushButton( this );
   mEditButton->setIcon( KIcon( "document-edit" ) );
   mEditButton->setText( i18n("Edit tree") );
   mEditButton->setEnabled( false );
   connect( mEditButton, SIGNAL( clicked() ), SIGNAL( editButtonClicked() ) );
   buttonLayout->addWidget(mEditButton);
 
-  mNewButton = new KPushButton( this );
+  mNewButton = new QPushButton( this );
   mNewButton->setIcon( KIcon( "document-new" ) );
   mNewButton->setText( i18n("Create new tree") );
   connect( mNewButton, SIGNAL( clicked() ), SIGNAL( newButtonClicked() ) );
   buttonLayout->addWidget(mNewButton);
 
-  mDeleteButton = new KPushButton( this );
+  mDeleteButton = new QPushButton( this );
   mDeleteButton->setIcon( KIcon( "edit-delete" ) );
   mDeleteButton->setText( i18n("Delete tree") );
   connect(mDeleteButton, SIGNAL(clicked()), SLOT(slotDeleteButtonClicked()));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/fate/relationtreeview.h 
new/fate-20170131-27be067/src/fate/relationtreeview.h
--- old/fate-20170120-10cb902/src/fate/relationtreeview.h       2017-01-20 
19:36:04.246520544 +0100
+++ new/fate-20170131-27be067/src/fate/relationtreeview.h       2017-01-31 
12:42:53.884633376 +0100
@@ -24,7 +24,6 @@
 
 #include <qwidget.h>
 #include <QPixmap>
-#include <QDropEvent>
 #include <qpoint.h>
 
 #include "relationtree.h"
@@ -34,7 +33,7 @@
 class TreeFilterHeader;
 class RelationTreeListView;
 class QPushButton;
-class KPushButton;
+class QPushButton;
 class QComboBox;
 class QLabel;
 class RelationTreeMap;
@@ -120,9 +119,9 @@
     RelationTreeListView *mListView;
     QComboBox *mProductCombo;
     QLabel *mDescriptionLabel;
-    KPushButton *mEditButton;
-    KPushButton *mDeleteButton;
-    KPushButton *mNewButton;
+    QPushButton *mEditButton;
+    QPushButton *mDeleteButton;
+    QPushButton *mNewButton;
     FateComboBox *mTreeCombo;
     RelationTreeMap *mRelationTreeMap;
     FeatureMap *mFeatureMap;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/fate/rolecombo.cpp 
new/fate-20170131-27be067/src/fate/rolecombo.cpp
--- old/fate-20170120-10cb902/src/fate/rolecombo.cpp    2017-01-20 
19:36:04.246520544 +0100
+++ new/fate-20170131-27be067/src/fate/rolecombo.cpp    2017-01-31 
12:42:53.888633387 +0100
@@ -29,8 +29,6 @@
 
 #include <qlayout.h>
 #include <qcombobox.h>
-#include <QVBoxLayout>
-#include <QBoxLayout>
 
 RoleCombo::RoleCombo( QWidget *parent, const char *name )
   : QComboBox(parent)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/fate/sendmaildialogbase.ui 
new/fate-20170131-27be067/src/fate/sendmaildialogbase.ui
--- old/fate-20170120-10cb902/src/fate/sendmaildialogbase.ui    2017-01-20 
19:36:04.246520544 +0100
+++ new/fate-20170131-27be067/src/fate/sendmaildialogbase.ui    2017-01-31 
12:42:53.888633387 +0100
@@ -113,7 +113,7 @@
                 </widget>
               </item>
               <item>
-                <widget class="KPushButton" name="btnSelectProduct">
+                <widget class="QPushButton" name="btnSelectProduct">
                   <property name="text">
                     <string>Select &amp;Product...</string>
                   </property>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fate-20170120-10cb902/src/fate/storedqueriesdialog.cpp 
new/fate-20170131-27be067/src/fate/storedqueriesdialog.cpp
--- old/fate-20170120-10cb902/src/fate/storedqueriesdialog.cpp  2017-01-20 
19:36:04.250520562 +0100
+++ new/fate-20170131-27be067/src/fate/storedqueriesdialog.cpp  2017-01-31 
12:42:53.888633387 +0100
@@ -131,11 +131,18 @@
   }
 }
 
+QListWidgetItem *StoredQueriesDialog::selectedItem()
+{
+  QList<QListWidgetItem *>items = mListView->selectedItems();
+  
+  return items.isEmpty() ? NULL : items.first();
+}
+
 Query StoredQueriesDialog::selectedQuery()
 {
   Query query;
 
-  QListWidgetItem *item = mListView->selectedItems().first();
+  QListWidgetItem *item = selectedItem();
   if( item ) {
     Query::List::Iterator it;
     Query::List queries = mQueries->queries();
@@ -150,7 +157,7 @@
 
 void StoredQueriesDialog::slotRenameQuery()
 {
-  QListWidgetItem *item = mListView->selectedItems().first();
+  QListWidgetItem *item = selectedItem();
   if( !item )
     return;
 
@@ -176,7 +183,7 @@
 
 void StoredQueriesDialog::slotDeleteQuery()
 {
-  QListWidgetItem *item = mListView->selectedItems().first();
+  QListWidgetItem *item = selectedItem();
   if( !item )
     return;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/fate/storedqueriesdialog.h 
new/fate-20170131-27be067/src/fate/storedqueriesdialog.h
--- old/fate-20170120-10cb902/src/fate/storedqueriesdialog.h    2017-01-20 
19:36:04.250520562 +0100
+++ new/fate-20170131-27be067/src/fate/storedqueriesdialog.h    2017-01-31 
12:42:53.888633387 +0100
@@ -27,7 +27,7 @@
 #include <QLabel>
 
 class QListWidget;
-
+class QListWidgetItem;
 
 class StoredQueriesDialog : public KDialog
 {
@@ -50,6 +50,7 @@
 
   private:
     void fillQueries();
+    QListWidgetItem *selectedItem();
 
   private:
     StoredQueries *mQueries;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/fate/xquerydialog.cpp 
new/fate-20170131-27be067/src/fate/xquerydialog.cpp
--- old/fate-20170120-10cb902/src/fate/xquerydialog.cpp 2017-01-20 
19:36:04.250520562 +0100
+++ new/fate-20170131-27be067/src/fate/xquerydialog.cpp 2017-01-31 
12:42:53.888633387 +0100
@@ -27,7 +27,6 @@
 #include <qsizepolicy.h>
 #include <qgroupbox.h>
 
-#include <kactivelabel.h>
 #include <klineedit.h>
 #include <ktextedit.h>
 #include <kdialog.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/fateui.rc 
new/fate-20170131-27be067/src/fateui.rc
--- old/fate-20170120-10cb902/src/fateui.rc     2017-01-20 19:36:04.250520562 
+0100
+++ new/fate-20170131-27be067/src/fateui.rc     2017-01-31 12:42:53.888633387 
+0100
@@ -63,7 +63,6 @@
     <Action name="new_tree"/>
     <Action name="stock_tree"/>
   </Menu>
-  <Action name="bookmarks"/>
   <Menu name="settings">
     <text>Settings</text>
     <Action name="show_query_log"/>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/libfate/metamanager.cpp 
new/fate-20170131-27be067/src/libfate/metamanager.cpp
--- old/fate-20170120-10cb902/src/libfate/metamanager.cpp       2017-01-20 
19:36:04.254520580 +0100
+++ new/fate-20170131-27be067/src/libfate/metamanager.cpp       2017-01-31 
12:42:53.892633399 +0100
@@ -409,7 +409,7 @@
          i18n(
               "The MD5 sums did not match although the metadata was reloaded"
               " from the keeper. If this happens permanently, please contact"
-              " [email protected].\n\nFailed resources:\n%1"
+              " [email protected].\n\nFailed resources:\n%1"
               ).arg(failedFiles.join("\n")) ,
          i18n("Metadata error") 
          );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/libfate/product.cpp 
new/fate-20170131-27be067/src/libfate/product.cpp
--- old/fate-20170120-10cb902/src/libfate/product.cpp   2017-01-20 
19:36:04.254520580 +0100
+++ new/fate-20170131-27be067/src/libfate/product.cpp   2017-01-31 
12:42:53.892633399 +0100
@@ -267,6 +267,16 @@
   return mFeatureDeadline;
 }
 
+void Product::setFeatureDeadlineExt( const QDate &fde )
+{
+  mFeatureDeadlineExt = fde;
+}
+
+QDate Product::featureDeadlineExt() const
+{
+  return mFeatureDeadlineExt;
+}
+
 void Product::setProductReleased( const QDate &pr )
 {
   mProductReleased = pr;
@@ -294,6 +304,7 @@
   out << p.featureOpen();
   out << p.featureDeadline();
   out << p.productReleased();
+  out << p.featureDeadlineExt();
 
   return out;
 }
@@ -328,6 +339,8 @@
   in >> fd; p.setFeatureDeadline( fd );
   QDate pr;
   in >> pr; p.setProductReleased( pr );
+  QDate fde;
+  in >> fde; p.setFeatureDeadline( fde );
 
   return in;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/libfate/product.h 
new/fate-20170131-27be067/src/libfate/product.h
--- old/fate-20170120-10cb902/src/libfate/product.h     2017-01-20 
19:36:04.254520580 +0100
+++ new/fate-20170131-27be067/src/libfate/product.h     2017-01-31 
12:42:53.892633399 +0100
@@ -120,6 +120,9 @@
     QDate featureDeadline() const;
     void setFeatureDeadline( const QDate & );
 
+    QDate featureDeadlineExt() const;
+    void setFeatureDeadlineExt( const QDate & );
+
     QDate productReleased() const;
     void setProductReleased( const QDate & );
 
@@ -140,6 +143,7 @@
     Component::List mComponents;
     QDate mFeatureOpen;
     QDate mFeatureDeadline;
+    QDate mFeatureDeadlineExt;
     QDate mProductReleased;
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/libfate/productmap.cpp 
new/fate-20170131-27be067/src/libfate/productmap.cpp
--- old/fate-20170120-10cb902/src/libfate/productmap.cpp        2017-01-20 
19:36:04.254520580 +0100
+++ new/fate-20170131-27be067/src/libfate/productmap.cpp        2017-01-31 
12:42:53.892633399 +0100
@@ -25,7 +25,6 @@
 #include "keeper.h"
 #include "prefs.h"
 #include "productparser.h"
-#include "keeper.h"
 #include "metamanager.h"
 #include "metavaluelist.h"
 #include "startupsequence.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/libfate/productparser.cpp 
new/fate-20170131-27be067/src/libfate/productparser.cpp
--- old/fate-20170120-10cb902/src/libfate/productparser.cpp     2017-01-20 
19:36:04.254520580 +0100
+++ new/fate-20170131-27be067/src/libfate/productparser.cpp     2017-01-31 
12:42:53.892633399 +0100
@@ -198,6 +198,8 @@
         mProduct->setFeatureOpen( QDate::fromString( mText, Qt::ISODate ) );
       } else if( mDateType == "featureDeadline" ) {
         mProduct->setFeatureDeadline( QDate::fromString( mText, Qt::ISODate ) 
);
+      } else if( mDateType == "featureDeadlineExt" ) {
+        mProduct->setFeatureDeadlineExt( QDate::fromString( mText, Qt::ISODate 
) );
       } else if( mDateType == "productReleased" ) {
         mProduct->setProductReleased( QDate::fromString( mText, Qt::ISODate ) 
);
       }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/libfate/ui/fatewidgets.h 
new/fate-20170131-27be067/src/libfate/ui/fatewidgets.h
--- old/fate-20170120-10cb902/src/libfate/ui/fatewidgets.h      2017-01-20 
19:36:04.254520580 +0100
+++ new/fate-20170131-27be067/src/libfate/ui/fatewidgets.h      2017-01-31 
12:42:53.896633410 +0100
@@ -26,7 +26,6 @@
 #include <qtextbrowser.h>
 #include <qtextedit.h>
 #include <kdebug.h>
-#include <kactivelabel.h>
 
 // These classes work around a Qt bug, where
 // widgets break the parent's layout system
@@ -37,7 +36,7 @@
 class FateLabel : public QLabel
 {
   public:
-    FateLabel( const QString &t, QWidget *p ) : QLabel( t, p ) {}
+    FateLabel( const QString &t, QWidget *p = 0) : QLabel( t, p ) {}
     FateLabel( QWidget *p) : QLabel( p ) {}
 
     QSize minimumSizeHint() const { return sizeHint(); }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fate-20170120-10cb902/src/libfate/ui/filterheader.cpp 
new/fate-20170131-27be067/src/libfate/ui/filterheader.cpp
--- old/fate-20170120-10cb902/src/libfate/ui/filterheader.cpp   2017-01-20 
19:36:04.254520580 +0100
+++ new/fate-20170131-27be067/src/libfate/ui/filterheader.cpp   2017-01-31 
12:42:53.896633410 +0100
@@ -1,9 +1,12 @@
 /*
     This file is part of Fate.
 
-    Copyright (c) 2005 SUSE LINUX Products GmbH
+    Copyright (c) 2005,2013 SUSE LINUX Products GmbH
+                  2017 SUSE Linux GmbH
     
     Author: Cornelius Schumacher <[email protected]>
+            Olaf Kirch <[email protected]>
+            Joachim Plack <[email protected]>
 
     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
@@ -97,14 +100,15 @@
 {
   if (mCheckBox)
     mCheckBox->setChecked(false);
-  mSearchLine->setText(QString::null);
-  updateSearch(QString::null);
+  mSearchLine->clear();
+  updateView();
 }
 
 void FilterHeaderBase::updateSearch(const QString &search)
 {
   mVisibleItems = mTotalItems = 0;
   (void) search;
+  kWarning() << "This should never been called";
 }
 
 void FilterHeaderBase::setTitleLabel()
@@ -146,7 +150,7 @@
 TreeFilterHeader::TreeFilterHeader(QTreeWidget *treeView, unsigned int 
matchLevel, QWidget *parent)
 : FilterHeaderBase(parent), mTreeView(treeView), mMatchLevel(matchLevel), 
mAutoExpand(12)
 {
-  updateSearch("");
+  clear();
 }
 
 void
@@ -185,11 +189,13 @@
       if (item->childCount() != 0 && visibleChildren == 0)
         hideItem = true;
     } else {
-       if (!search.isEmpty())
-         hideItem = !item->text(0).contains(search, Qt::CaseInsensitive);
-       if (!hideItem)
-         mVisibleItems++;
-       mTotalItems++;
+      hideItem = !search.isEmpty();
+      for (int i=item->columnCount(); i-- && hideItem;) {
+       hideItem = !item->text(i).contains(search, Qt::CaseInsensitive);
+      }
+      if (!hideItem)
+       mVisibleItems++;
+      mTotalItems++;
     }
 
     item->setHidden(hideItem);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fate-20170120-10cb902/src/libfate/ui/filterheader.h 
new/fate-20170131-27be067/src/libfate/ui/filterheader.h
--- old/fate-20170120-10cb902/src/libfate/ui/filterheader.h     2017-01-20 
19:36:04.254520580 +0100
+++ new/fate-20170131-27be067/src/libfate/ui/filterheader.h     2017-01-31 
12:42:53.896633410 +0100
@@ -1,9 +1,12 @@
 /*
     This file is part of Fate.
 
-    Copyright (c) 2005 SUSE LINUX Products GmbH
+    Copyright (c) 2005,2013 SUSE LINUX Products GmbH
+                  2017 SUSE Linux GmbH
     
     Author: Cornelius Schumacher <[email protected]>
+            Olaf Kirch <[email protected]>
+            Joachim Plack <[email protected]>
 
     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
@@ -22,10 +25,9 @@
 #ifndef FILTERHEADER_H
 #define FILTERHEADER_H
 
-#include <qwidget.h>
+#include <QWidget>
 #include <QLabel>
 
-class QLabel;
 class QCheckBox;
 class QBoxLayout;
 class QTreeWidget;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fate-20170120-10cb902/src/libxclvalidator/dtdvalidator.cpp 
new/fate-20170131-27be067/src/libxclvalidator/dtdvalidator.cpp
--- old/fate-20170120-10cb902/src/libxclvalidator/dtdvalidator.cpp      
2017-01-20 19:36:04.258520598 +0100
+++ new/fate-20170131-27be067/src/libxclvalidator/dtdvalidator.cpp      
2017-01-31 12:42:53.896633410 +0100
@@ -77,7 +77,7 @@
   int len = base.length();
 
 #ifndef NDEBUG
-  qDebug( "Checking the base string |%s| of size %i", checkStr.ascii(), len );
+  qDebug( "Checking the base string |%s| of size %i", 
checkStr.toLatin1().constData(), len );
 #endif
   ::mXmlErrorList.clear();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/fate-20170120-10cb902/src/libxclvalidator/xclvalidator.cpp 
new/fate-20170131-27be067/src/libxclvalidator/xclvalidator.cpp
--- old/fate-20170120-10cb902/src/libxclvalidator/xclvalidator.cpp      
2017-01-20 19:36:04.258520598 +0100
+++ new/fate-20170131-27be067/src/libxclvalidator/xclvalidator.cpp      
2017-01-31 12:42:53.896633410 +0100
@@ -24,6 +24,7 @@
 #include "dtdvalidator.h"
 
 #include <QTextStream>
+#include <QDebug>
 
 #include <qstringlist.h>
 #include <qregexp.h>
@@ -61,7 +62,7 @@
     if( n.nodeName() == "xcl:constraint" ) {
       QDomElement constraint = n.toElement();
 #ifndef NDEBUG
-      qDebug( "::::Got a constraint for %s mandatory: %s", 
constraint.attribute( "object" ).ascii(), constraint.attribute( "mandatory" 
).ascii() );
+      qDebug( "::::Got a constraint for %s mandatory: %s", 
constraint.attribute( "object" ).toLatin1().constData(), constraint.attribute( 
"mandatory" ).toLatin1().constData() );
 #endif
 
       mBasePath = constraint.attribute( "object" );
@@ -99,7 +100,7 @@
       QDomElement e = n.toElement();
       mVariables[e.attribute( "name" )] = e.text();
 #ifndef NDEBUG
-      qDebug( "Got a variable %s : %s", e.attribute( "name" ).ascii(), 
e.text().ascii() );
+      qDebug( "Got a variable %s : %s", e.attribute( "name" 
).toLatin1().constData(), e.text().toLatin1().constData() );
 #endif
     }
   }
@@ -144,14 +145,9 @@
     }
     qDebug( "::::Claim met: %i", claimMet );
 
-    qDebug( QString("\n\nConstraint 
result:\n------------------\nDescription:\t%1\nCondition:\t%2\nClaim:\t\t%3").arg(
 description ).arg( conditionMet ).arg( claimMet ) );
+    qDebug() << QString("\n\nConstraint 
result:\n------------------\nDescription:\t%1\nCondition:\t%2\nClaim:\t\t%3").arg(
 description ).arg( conditionMet ).arg( claimMet );
 #endif
 
-
-
-
-
-
     if( conditionMet && !claimMet )     // This check failed here, there's no 
reason to 
       return false;                   // check the other nodes.
   }
@@ -195,7 +191,7 @@
       if( testNode.nodeName() == "xcl:test" ) {
         QString testString = testNode.toElement().text();
 #ifndef NDEBUG
-        qDebug( "Got a constraint test: %s", testString.ascii() );
+        qDebug( "Got a constraint test: %s", testString.toLatin1().constData() 
);
 #endif
   
         result = performTest( testNode, e );
@@ -204,7 +200,7 @@
       } else if( testNode.nodeName() == "xcl:hasElement" ) {
         QString path = testNode.toElement().attribute( "path" );
 #ifndef NDEBUG
-        qDebug( "Got a claim hasElement test: %s", path.ascii() );
+        qDebug( "Got a claim hasElement test: %s", path.toLatin1().constData() 
);
 #endif
   
         result = performHasElement( testNode, e );
@@ -212,7 +208,7 @@
       } else if( testNode.nodeName() == "xcl:validDTD" ) {
         QString path = testNode.toElement().attribute( "path" );
 #ifndef NDEBUG
-        qDebug( "Got a claim validDTD test: %s", path.ascii() );
+        qDebug( "Got a claim validDTD test: %s", path.toLatin1().constData() );
 #endif
   
         result = performValidDTD( testNode, e );
@@ -263,7 +259,7 @@
   QDomElement testNode = t.cloneNode().toElement();
   QString dtd = getValue( e, testNode.text() );
 #ifndef NDEBUG
-  qDebug( "DTD: %s", dtd.ascii() );
+  qDebug( "DTD: %s", dtd.toLatin1().constData() );
 #endif
   bool conditionMet = true;
 


Reply via email to