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 - jplack@suse.com + +- replaces outdated inttools@ mail adress by featureadmin@ (bug via email) + +------------------------------------------------------------------- +Sat Jan 28 00:00:58 UTC 2017 - jplack@suse.com + +- 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 - jplack@suse.com + +- 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 - jplack@suse.com + +- 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:inttools@suse.de\">Internal Tools Team</a>.</p>"; + t += "<a href=\"mailto:featureadmin@suse.de\">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 <cschum@suse.de> + Joachim Plack <jplack@suse.de> 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 <cschum@suse.de> + Joachim Plack <jplack@suse.de> 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 &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" - " inttools@suse.de.\n\nFailed resources:\n%1" + " featureadmin@suse.de.\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 <cschum@suse.de> + Olaf Kirch <okir@suse.de> + Joachim Plack <jplack@suse.de> 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 <cschum@suse.de> + Olaf Kirch <okir@suse.de> + Joachim Plack <jplack@suse.de> 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;
participants (1)
-
root@hilbertn.suse.de