Hello community, here is the log from the commit of package kdeutils4 for openSUSE:Factory checked in at Wed Jun 8 17:31:05 CEST 2011.
-------- --- KDE/kdeutils4/kdeutils4.changes 2011-05-10 13:03:47.000000000 +0200 +++ /mounts/work_src_done/STABLE/kdeutils4/kdeutils4.changes 2011-06-03 15:38:54.000000000 +0200 @@ -1,0 +2,8 @@ +Fri Jun 3 15:38:53 CEST 2011 - dmuel...@suse.de + +- update to 4.6.4 + * Bugfixes over KDE 4.6.3 + * see http://kde.org/announcements/changelogs/changelog4_6_3to4_6_4.php for details + + +------------------------------------------------------------------- calling whatdependson for head-i586 Old: ---- 4_5_BRANCH.diff ark-use-libarchive-r1230916.diff kdeutils-4.6.3.tar.bz2 New: ---- 4_6_BRANCH.diff kdeutils-4.6.4.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kdeutils4.spec ++++++ --- /var/tmp/diff_new_pack.dpgr26/_old 2011-06-08 17:30:45.000000000 +0200 +++ /var/tmp/diff_new_pack.dpgr26/_new 2011-06-08 17:30:45.000000000 +0200 @@ -30,16 +30,15 @@ Group: Productivity/Other Summary: Base Package of KDE Utility Programs Url: http://www.kde.org -Version: 4.6.3 +Version: 4.6.4 Release: 1 BuildRequires: gmp-devel kdebase4-workspace-devel >= %version libqimageblitz-devel net-snmp-devel pcsc-lite python-devel BuildRequires: libkdepimlibs4-devel libkonq-devel libqca2-devel libzip-devel oxygen-icon-theme-large BuildRequires: libarchive-devel libknotificationitem-devel libqjson-devel xz-devel Source0: kdeutils-%version.tar.bz2 -Patch: 4_5_BRANCH.diff +Patch: 4_6_BRANCH.diff Patch1: desktop-files.diff Patch2: kgpg-autostart.diff -Patch3: ark-use-libarchive-r1230916.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build %kde4_runtime_requires Suggests: ark @@ -74,7 +73,6 @@ %patch %patch1 %patch2 -%patch3 %build %cmake_kde4 -d build ++++++ 4_5_BRANCH.diff -> 4_6_BRANCH.diff ++++++ ++++++ kdeutils-4.6.3.tar.bz2 -> kdeutils-4.6.4.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/CMakeLists.txt new/kdeutils-4.6.4/ark/CMakeLists.txt --- old/kdeutils-4.6.3/ark/CMakeLists.txt 2011-01-18 22:25:04.000000000 +0100 +++ new/kdeutils-4.6.4/ark/CMakeLists.txt 2011-06-02 12:04:31.000000000 +0200 @@ -1,5 +1,8 @@ project(ark) +macro_optional_find_package(LibArchive) +macro_log_feature(LIBARCHIVE_FOUND "LibArchive" "A library for dealing with a wide variety of archive file formats" "http://code.google.com/p/libarchive/" FALSE "" "Required for among others tar, tar.gz, tar.bz2 formats in Ark.") + configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) add_subdirectory(part) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/app/batchextract.cpp new/kdeutils-4.6.4/ark/app/batchextract.cpp --- old/kdeutils-4.6.3/ark/app/batchextract.cpp 2011-01-18 22:25:03.000000000 +0100 +++ new/kdeutils-4.6.4/ark/app/batchextract.cpp 2011-06-02 12:04:29.000000000 +0200 @@ -47,9 +47,10 @@ #include <QWeakPointer> BatchExtract::BatchExtract() - : m_autoSubfolder(false), - m_preservePaths(true), - m_openDestinationAfterExtraction(false) + : KCompositeJob(0), + m_autoSubfolder(false), + m_preservePaths(true), + m_openDestinationAfterExtraction(false) { setCapabilities(KJob::Killable); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/kerfuffle/CMakeLists.txt new/kdeutils-4.6.4/ark/kerfuffle/CMakeLists.txt --- old/kdeutils-4.6.3/ark/kerfuffle/CMakeLists.txt 2011-01-18 22:25:04.000000000 +0100 +++ new/kdeutils-4.6.4/ark/kerfuffle/CMakeLists.txt 2011-06-02 12:04:31.000000000 +0200 @@ -27,6 +27,9 @@ kde4_add_library(kerfuffle SHARED ${kerfuffle_SRCS}) target_link_libraries(kerfuffle ${KDE4_KFILE_LIBS} ${KDE4_KPARTS_LIBS}) +if (NOT WIN32) + target_link_libraries(kerfuffle ${KDE4_KPTY_LIBS}) +endif (NOT WIN32) set_target_properties(kerfuffle PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION ${GENERIC_LIB_SOVERSION}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/kerfuffle/adddialog.cpp new/kdeutils-4.6.4/ark/kerfuffle/adddialog.cpp --- old/kdeutils-4.6.3/ark/kerfuffle/adddialog.cpp 2011-01-18 22:25:04.000000000 +0100 +++ new/kdeutils-4.6.4/ark/kerfuffle/adddialog.cpp 2011-06-02 12:04:31.000000000 +0200 @@ -2,7 +2,7 @@ * ark -- archiver for the KDE project * * Copyright (C) 2008 Harald Hvaal <haral...@stud.ntnu.no> - * Copyright (C) 2009 Raphael Kubo da Costa <kub...@gmail.com> + * Copyright (C) 2009,2011 Raphael Kubo da Costa <kub...@gmail.com> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,6 +58,7 @@ { setOperationMode(KFileDialog::Saving); setMode(KFile::File | KFile::LocalOnly); + setConfirmOverwrite(true); setCaption(i18n("Compress to Archive")); loadConfiguration(); @@ -71,7 +72,11 @@ // Set up a default name if there's only one file to compress if (itemsToAdd.size() == 1) { - setSelection(QFileInfo(itemsToAdd.first()).baseName()); + // #272914: Add an extension when it is present, otherwise KFileDialog + // will not automatically add it as baseFileName is a file which + // already exists. + const QString baseFileName = QFileInfo(itemsToAdd.first()).baseName(); + setSelection(baseFileName + currentFilterMimeType()->mainExtension()); } //These extra options will be implemented in a 4.2+ version of diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/kerfuffle/archivebase.cpp new/kdeutils-4.6.4/ark/kerfuffle/archivebase.cpp --- old/kdeutils-4.6.3/ark/kerfuffle/archivebase.cpp 2011-01-18 22:25:04.000000000 +0100 +++ new/kdeutils-4.6.4/ark/kerfuffle/archivebase.cpp 2011-06-02 12:04:31.000000000 +0200 @@ -156,6 +156,9 @@ if (!m_hasBeenListed) { KJob *job = list(); + connect(job, SIGNAL(userQuery(Kerfuffle::Query*)), + SLOT(onUserQuery(Kerfuffle::Query*))); + QEventLoop loop(this); connect(job, SIGNAL(result(KJob*)), @@ -165,6 +168,11 @@ } } +void ArchiveBase::onUserQuery(Query* query) +{ + query->execute(); +} + bool ArchiveBase::isSingleFolderArchive() { listIfNotListed(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/kerfuffle/archivebase.h new/kdeutils-4.6.4/ark/kerfuffle/archivebase.h --- old/kdeutils-4.6.3/ark/kerfuffle/archivebase.h 2011-01-18 22:25:04.000000000 +0100 +++ new/kdeutils-4.6.4/ark/kerfuffle/archivebase.h 2011-06-02 12:04:31.000000000 +0200 @@ -65,6 +65,7 @@ private slots: void onListFinished(KJob*); void onAddFinished(KJob*); + void onUserQuery(Kerfuffle::Query*); private: void listIfNotListed(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/kerfuffle/cliinterface.cpp new/kdeutils-4.6.4/ark/kerfuffle/cliinterface.cpp --- old/kdeutils-4.6.3/ark/kerfuffle/cliinterface.cpp 2011-01-18 22:25:04.000000000 +0100 +++ new/kdeutils-4.6.4/ark/kerfuffle/cliinterface.cpp 2011-06-02 12:04:31.000000000 +0200 @@ -28,7 +28,13 @@ #include "cliinterface.h" #include "queries.h" -#include <KProcess> +#ifdef Q_OS_WIN +# include <KProcess> +#else +# include <KPtyDevice> +# include <KPtyProcess> +#endif + #include <KStandardDirs> #include <KDebug> #include <KLocale> @@ -38,6 +44,7 @@ #include <QDir> #include <QEventLoop> #include <QFile> +#include <QProcess> #include <QThread> #include <QTimer> @@ -49,6 +56,10 @@ { //because this interface uses the event loop setWaitForFinishedSignal(true); + + if (QMetaType::type("QProcess::ExitStatus") == 0) { + qRegisterMetaType<QProcess::ExitStatus>("QProcess::ExitStatus"); + } } void CliInterface::cacheParameterList() @@ -63,8 +74,7 @@ CliInterface::~CliInterface() { - delete m_process; - m_process = 0; + Q_ASSERT(!m_process); } bool CliInterface::list() @@ -72,15 +82,13 @@ cacheParameterList(); m_operationMode = List; - if (!findProgramAndCreateProcess(m_param.value(ListProgram).toString())) { - failOperation(); - return false; - } - QStringList args = m_param.value(ListArgs).toStringList(); substituteListVariables(args); - executeProcess(m_program, args); + if (!runProcess(m_param.value(ListProgram).toString(), args)) { + failOperation(); + return false; + } return true; } @@ -92,11 +100,6 @@ m_operationMode = Copy; - if (!findProgramAndCreateProcess(m_param.value(ExtractProgram).toString())) { - failOperation(); - return false; - } - //start preparing the argument list QStringList args = m_param.value(ExtractArgs).toStringList(); @@ -221,7 +224,10 @@ kDebug() << "Setting current dir to " << destinationDirectory; QDir::setCurrent(destinationDirectory); - executeProcess(m_program, args); + if (!runProcess(m_param.value(ExtractProgram).toString(), args)) { + failOperation(); + return false; + } return true; } @@ -232,11 +238,6 @@ m_operationMode = Add; - if (!findProgramAndCreateProcess(m_param.value(AddProgram).toString())) { - failOperation(); - return false; - } - const QString globalWorkDir = options.value(QLatin1String( "GlobalWorkDir" )).toString(); const QDir workDir = globalWorkDir.isEmpty() ? QDir::current() : QDir(globalWorkDir); if (!globalWorkDir.isEmpty()) { @@ -273,7 +274,10 @@ } } - executeProcess(m_program, args); + if (!runProcess(m_param.value(AddProgram).toString(), args)) { + failOperation(); + return false; + } return true; } @@ -283,11 +287,6 @@ cacheParameterList(); m_operationMode = Delete; - if (!findProgramAndCreateProcess(m_param.value(DeleteProgram).toString())) { - failOperation(); - return false; - } - //start preparing the argument list QStringList args = m_param.value(DeleteArgs).toStringList(); @@ -310,47 +309,57 @@ m_removedFiles = files; - executeProcess(m_program, args); + if (!runProcess(m_param.value(DeleteProgram).toString(), args)) { + failOperation(); + return false; + } return true; } -bool CliInterface::createProcess() +bool CliInterface::runProcess(const QString& programName, const QStringList& arguments) { - kDebug(); - - if (m_process) { - delete m_process; - m_process = 0; + const QString programPath(KStandardDirs::findExe(programName)); + if (programPath.isEmpty()) { + error(i18nc("@info", "Failed to locate program <filename>%1</filename> in PATH.", programName)); + return false; } - m_stdOutData.clear(); + Q_ASSERT(!m_process); + + kDebug() << "Executing" << programPath << arguments; +#ifdef Q_OS_WIN m_process = new KProcess(); +#else + m_process = new KPtyProcess(); + m_process->setPtyChannels(KPtyProcess::StdinChannel); +#endif + m_process->setTextModeEnabled(true); m_process->setOutputChannelMode(KProcess::MergedChannels); - - if (QMetaType::type("QProcess::ExitStatus") == 0) { - qRegisterMetaType<QProcess::ExitStatus>("QProcess::ExitStatus"); - } + m_process->setNextOpenMode(QIODevice::ReadWrite | QIODevice::Unbuffered); + m_process->setProgram(programPath, arguments); connect(m_process, SIGNAL(started()), SLOT(started()), Qt::DirectConnection); connect(m_process, SIGNAL(readyReadStandardOutput()), SLOT(readStdout()), Qt::DirectConnection); connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(processFinished(int, QProcess::ExitStatus)), Qt::DirectConnection); - return true; -} - -bool CliInterface::executeProcess(const QString& path, const QStringList & args) -{ - kDebug() << "Executing " << path << args; - Q_ASSERT(!path.isEmpty()); + m_stdOutData.clear(); - m_process->setProgram(path, args); - m_process->setNextOpenMode(QIODevice::ReadWrite | QIODevice::Unbuffered); m_process->start(); - return true; +#ifdef Q_OS_WIN + bool ret = m_process->waitForFinished(-1); +#else + QEventLoop loop; + bool ret = (loop.exec(QEventLoop::WaitForMoreEvents | QEventLoop::ExcludeUserInputEvents) == 0); +#endif + + delete m_process; + m_process = 0; + + return ret; } void CliInterface::started() @@ -435,6 +444,7 @@ bool foundErrorMessage = (checkForErrorMessage(QLatin1String( lines.last() ), WrongPasswordPatterns) || checkForErrorMessage(QLatin1String( lines.last() ), ExtractionFailedPatterns) || + checkForPasswordPromptMessage(QLatin1String(lines.last())) || checkForFileExistsMessage(QLatin1String( lines.last() ))); if (foundErrorMessage) { @@ -482,7 +492,6 @@ if (checkForErrorMessage(line, WrongPasswordPatterns)) { kDebug() << "Wrong password!"; error(i18n("Incorrect password.")); - setPassword(QString()); failOperation(); return; } @@ -500,10 +509,29 @@ } if (m_operationMode == List) { + if (checkForPasswordPromptMessage(line)) { + kDebug() << "Found a password prompt"; + + Kerfuffle::PasswordNeededQuery query(filename()); + userQuery(&query); + query.waitForResponse(); + + if (query.responseCancelled()) { + failOperation(); + return; + } + + setPassword(query.password()); + + const QString response(password() + QLatin1Char('\n')); + writeToProcess(response.toLocal8Bit()); + + return; + } + if (checkForErrorMessage(line, WrongPasswordPatterns)) { kDebug() << "Wrong password!"; error(i18n("Incorrect password.")); - setPassword(QString()); failOperation(); return; } @@ -524,21 +552,22 @@ } } -bool CliInterface::findProgramAndCreateProcess(const QString& program) +bool CliInterface::checkForPasswordPromptMessage(const QString& line) { - m_program = KStandardDirs::findExe(program); + const QString passwordPromptPattern(m_param.value(PasswordPromptPattern).toString()); - if (m_program.isEmpty()) { - error(i18nc("@info", "Failed to locate program <filename>%1</filename> in PATH.", program)); + if (passwordPromptPattern.isEmpty()) return false; + + if (m_passwordPromptPattern.isEmpty()) { + m_passwordPromptPattern.setPattern(m_param.value(PasswordPromptPattern).toString()); } - if (!createProcess()) { - error(i18nc("@info", "Found program <filename>%1</filename>, but failed to initialize the process.", program)); - return false; + if (m_passwordPromptPattern.indexIn(line) != -1) { + return true; } - return true; + return false; } bool CliInterface::checkForFileExistsMessage(const QString& line) @@ -589,9 +618,7 @@ responseToProcess += QLatin1Char( '\n' ); - kDebug() << "Writing " << responseToProcess; - - m_process->write(responseToProcess.toLocal8Bit()); + writeToProcess(responseToProcess.toLocal8Bit()); return true; } @@ -625,14 +652,11 @@ bool CliInterface::doKill() { if (m_process) { - m_process->terminate(); - - if (!m_process->waitForFinished()) { + // Give some time for the application to finish gracefully + if (!m_process->waitForFinished(5)) { m_process->kill(); } - m_process->waitForFinished(); - return true; } @@ -660,32 +684,23 @@ } } -QString CliInterface::escapedCharacters() -{ - return m_escapedCharacters; -} - -void CliInterface::setEscapedCharacters(const QString& characters) +QString CliInterface::escapeFileName(const QString& fileName) const { - m_escapedCharacters = characters; + return fileName; } -QString CliInterface::escapeFileName(const QString& fileName) +void CliInterface::writeToProcess(const QByteArray& data) { - QString quoted; - const int len = fileName.length(); - const QLatin1Char backslash('\\'); - quoted.reserve(len * 2); - - for (int i = 0; i < len; ++i) { - if (m_escapedCharacters.contains(fileName.at(i))) { - quoted.append(backslash); - } + Q_ASSERT(m_process); + Q_ASSERT(!data.isNull()); - quoted.append(fileName.at(i)); - } + kDebug() << "Writing" << data << "to the process"; - return quoted; +#ifdef Q_OS_WIN + m_process->write(data); +#else + m_process->pty()->write(data); +#endif } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/kerfuffle/cliinterface.h new/kdeutils-4.6.4/ark/kerfuffle/cliinterface.h --- old/kdeutils-4.6.3/ark/kerfuffle/cliinterface.h 2011-01-18 22:25:04.000000000 +0100 +++ new/kdeutils-4.6.4/ark/kerfuffle/cliinterface.h 2011-06-02 12:04:31.000000000 +0200 @@ -33,6 +33,7 @@ #include <QtCore/QRegExp> class KProcess; +class KPtyProcess; namespace Kerfuffle { @@ -48,6 +49,13 @@ */ CaptureProgress = 0, + /** + * QString + * Default: empty + * A regexp pattern that matches the program's password prompt. + */ + PasswordPromptPattern, + ///////////////[ LIST ]///////////// /** @@ -255,12 +263,24 @@ void setEscapedCharacters(const QString& characters); private: - bool findProgramAndCreateProcess(const QString& program); void substituteListVariables(QStringList& params); - bool createProcess(); - bool executeProcess(const QString& path, const QStringList & args); void cacheParameterList(); + + /** + * Checks whether a line of the program's output is a password prompt. + * + * It uses the regular expression in the @c PasswordPromptPattern parameter + * for the check. + * + * @param line A line of the program's output. + * + * @return @c true if the given @p line is a password prompt, @c false + * otherwise. + */ + + bool checkForPasswordPromptMessage(const QString& line); + bool checkForFileExistsMessage(const QString& line); bool handleFileExistsMessage(const QString& filename); bool checkForErrorMessage(const QString& line, int parameterIndex); @@ -269,24 +289,47 @@ void failOperation(); /** - * Precedes the characters returned by escapedCharacters() with a - * backslash in @p fileName. + * Run @p programName with the given @p arguments. + * The method waits until @p programName is finished to exit. + * + * @param programName The program that will be run (not the whole path). + * @param arguments A list of arguments that will be passed to the program. + * + * @return @c true if the program was found and the process ran correctly, + * @c false otherwise. + */ + bool runProcess(const QString& programName, const QStringList& arguments); + + /** + * Performs any additional escaping and processing on @p fileName + * before passing it to the underlying process. + * + * The default implementation returns @p fileName unchanged. * * @param fileName String to escape. */ - QString escapeFileName(const QString& fileName); + virtual QString escapeFileName(const QString &fileName) const; + + /** + * Wrapper around KProcess::write() or KPtyDevice::write(), depending on + * the platform. + */ + void writeToProcess(const QByteArray& data); QByteArray m_stdOutData; bool m_userCancelled; QRegExp m_existsPattern; + QRegExp m_passwordPromptPattern; +#ifdef Q_OS_WIN KProcess *m_process; - QString m_program; +#else + KPtyProcess *m_process; +#endif + ParameterList m_param; QVariantList m_removedFiles; - QString m_escapedCharacters; - private slots: void started(); void readStdout(bool handleAll = false); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/part/archivemodel.cpp new/kdeutils-4.6.4/ark/part/archivemodel.cpp --- old/kdeutils-4.6.3/ark/part/archivemodel.cpp 2011-01-18 22:25:04.000000000 +0100 +++ new/kdeutils-4.6.4/ark/part/archivemodel.cpp 2011-06-02 12:04:31.000000000 +0200 @@ -60,8 +60,10 @@ static bool compareAscending(const QPair<ArchiveNode*,int> &a, const QPair<ArchiveNode*,int> &b) { // #234373: sort folders before files - if (a.first->isDir() != b.first->isDir()) { - return a.first->isDir(); + if ((a.first->isDir()) && (!b.first->isDir())) { + return true; + } else if ((!a.first->isDir()) && (b.first->isDir())) { + return false; } if (currentSortColumn == FileName) { @@ -76,8 +78,10 @@ static bool compareDescending(const QPair<ArchiveNode*,int> &a, const QPair<ArchiveNode*,int> &b) { // #234373: sort folders before files - if (a.first->isDir() != b.first->isDir()) { - return !(a.first->isDir()); + if ((a.first->isDir()) && (!b.first->isDir())) { + return true; + } else if ((!a.first->isDir()) && (b.first->isDir())) { + return false; } if (currentSortColumn == FileName) { @@ -435,9 +439,9 @@ } if (order == Qt::AscendingOrder) { - qSort(sorting.begin(), sorting.end(), ArchiveNode::compareAscending); + qStableSort(sorting.begin(), sorting.end(), ArchiveNode::compareAscending); } else { - qSort(sorting.begin(), sorting.end(), ArchiveNode::compareDescending); + qStableSort(sorting.begin(), sorting.end(), ArchiveNode::compareDescending); } QModelIndexList fromIndexes; @@ -480,28 +484,15 @@ QMimeData * ArchiveModel::mimeData(const QModelIndexList & indexes) const { kDebug(); - //prepare the fallback kio_slave filenames QStringList files; - bool noFallback = false; QString archiveName = m_archive->fileName(); - QString ext = QFileInfo(archiveName).suffix().toUpper(); - if (ext == QLatin1String( "TAR" )) { - archiveName.prepend(QLatin1String( "tar:" )); - } else if (ext == QLatin1String( "ZIP" )) { - archiveName.prepend(QLatin1String( "zip:" )); - } else if (archiveName.right(6).toUpper() == QLatin1String( "TAR.GZ" )) { - archiveName.prepend(QLatin1String( "tar:" )); - } else - noFallback = true; - - if (!archiveName.endsWith(QLatin1Char( '/' ))) { - archiveName.append(QLatin1Char( '/' )); + if (!archiveName.endsWith(QLatin1Char('/'))) { + archiveName.append(QLatin1Char('/')); } //Populate the internal list of files foreach(const QModelIndex &index, indexes) { - //to limit only one index per row if (index.column() != 0) { continue; @@ -511,18 +502,12 @@ files << file; } - KUrl::List kiolist(files); - //prepare the dbus-based drag/drop mimedata QMimeData *data = new QMimeData(); - data->setData(QLatin1String( "application/x-kde-dndextract" ), + data->setData(QLatin1String("application/x-kde-dndextract"), QDBusConnection::sessionBus().baseService().toUtf8() ); - - if (!noFallback) { - kiolist.populateMimeData(data); - } return data; } @@ -568,16 +553,14 @@ // For a rationale, see bugs #194241 and #241967 QString ArchiveModel::cleanFileName(const QString& fileName) { - QString cleanName(fileName); - - if ((cleanName == QLatin1String("/")) || - (cleanName == QLatin1String("."))) { // "." is present in ISO files - cleanName.clear(); - } else if (cleanName.startsWith(QLatin1String("./"))) { - cleanName.remove(0, 2); + if ((fileName == QLatin1String("/")) || + (fileName == QLatin1String("."))) { // "." is present in ISO files + return QString(); + } else if (fileName.startsWith(QLatin1String("./"))) { + return fileName.mid(2); } - return cleanName; + return fileName; } ArchiveDirNode* ArchiveModel::parentFor(const ArchiveEntry& entry) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/part/part.cpp new/kdeutils-4.6.4/ark/part/part.cpp --- old/kdeutils-4.6.3/ark/part/part.cpp 2011-02-25 22:47:49.000000000 +0100 +++ new/kdeutils-4.6.4/ark/part/part.cpp 2011-06-02 12:04:31.000000000 +0200 @@ -88,8 +88,11 @@ m_splitter = new QSplitter(Qt::Horizontal, parentWidget); setWidget(m_splitter); - m_view = new ArchiveView(m_splitter); - m_infoPanel = new InfoPanel(m_model, m_splitter); + m_view = new ArchiveView; + m_infoPanel = new InfoPanel(m_model); + + m_splitter->addWidget(m_view); + m_splitter->addWidget(m_infoPanel); QList<int> splitterSizes = ArkSettings::splitterSizes(); if (splitterSizes.isEmpty()) { @@ -148,6 +151,9 @@ connect(job, SIGNAL(result(KJob*)), this, SIGNAL(ready())); } +// TODO: One should construct a KUrl out of localPath in order to be able to handle +// non-local destinations (ie. trash:/ or a remote location) +// See bugs #189322 and #204323. void Part::extractSelectedFilesTo(const QString& localPath) { kDebug() << "Extract to " << localPath; @@ -749,7 +755,20 @@ void Part::slotAddFiles() { kDebug(); - const QStringList filesToAdd = KFileDialog::getOpenFileNames(KUrl("kfiledialog:///ArkAddFiles"), QString(), widget(), i18nc("@title:window", "Add Files")); + + // #264819: passing widget() as the parent will not work as expected. + // KFileDialog will create a KFileWidget, which runs an internal + // event loop to stat the given directory. This, in turn, leads to + // events being delivered to widget(), which is a QSplitter, which + // in turn reimplements childEvent() and will end up calling + // QWidget::show() on the KFileDialog (thus showing it in a + // non-modal state). + // When KFileDialog::exec() is called, the widget is already shown + // and nothing happens. + const QStringList filesToAdd = + KFileDialog::getOpenFileNames(KUrl("kfiledialog:///ArkAddFiles"), + QString(), widget()->parentWidget(), + i18nc("@title:window", "Add Files")); slotAddFiles(filesToAdd); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/plugins/CMakeLists.txt new/kdeutils-4.6.4/ark/plugins/CMakeLists.txt --- old/kdeutils-4.6.3/ark/plugins/CMakeLists.txt 2011-01-18 22:25:03.000000000 +0100 +++ new/kdeutils-4.6.4/ark/plugins/CMakeLists.txt 2011-06-02 12:04:31.000000000 +0200 @@ -1,5 +1,3 @@ -macro_optional_find_package(LibArchive) - if (LIBARCHIVE_FOUND) if( HAVE_LIBARCHIVE_READ_DISK_API ) if( NOT HAVE_LIBARCHIVE_LZMA_SUPPORT OR NOT HAVE_LIBARCHIVE_XZ_SUPPORT ) @@ -15,8 +13,6 @@ endif( HAVE_LIBARCHIVE_READ_DISK_API ) endif (LIBARCHIVE_FOUND) -macro_log_feature(LIBARCHIVE_FOUND "LibArchive" "A library for dealing with a wide variety of archive file formats" "http://code.google.com/p/libarchive/" FALSE "" "Required for among others tar, tar.gz, tar.bz2 formats in Ark.") - add_subdirectory( clirarplugin ) add_subdirectory( cli7zplugin ) add_subdirectory( clizipplugin ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/plugins/cli7zplugin/cliplugin.cpp new/kdeutils-4.6.4/ark/plugins/cli7zplugin/cliplugin.cpp --- old/kdeutils-4.6.3/ark/plugins/cli7zplugin/cliplugin.cpp 2011-01-18 22:25:03.000000000 +0100 +++ new/kdeutils-4.6.4/ark/plugins/cli7zplugin/cliplugin.cpp 2011-06-02 12:04:30.000000000 +0200 @@ -69,6 +69,8 @@ << QLatin1String( "S" ) //autoskip << QLatin1String( "Q" ) //cancel ; + + p[PasswordPromptPattern] = QLatin1String("Enter password \\(will not be echoed\\) :"); } return p; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/plugins/clirarplugin/cliplugin.cpp new/kdeutils-4.6.4/ark/plugins/clirarplugin/cliplugin.cpp --- old/kdeutils-4.6.3/ark/plugins/clirarplugin/cliplugin.cpp 2011-02-25 22:47:49.000000000 +0100 +++ new/kdeutils-4.6.4/ark/plugins/clirarplugin/cliplugin.cpp 2011-06-02 12:04:31.000000000 +0200 @@ -45,6 +45,18 @@ { } +// #272281: the proprietary unrar program does not like trailing '/'s +// in directories passed to it when extracting only part of +// the files in an archive. +QString CliPlugin::escapeFileName(const QString &fileName) const +{ + if (fileName.endsWith(QLatin1Char('/'))) { + return fileName.left(fileName.length() - 1); + } + + return fileName; +} + ParameterList CliPlugin::parameterList() const { static ParameterList p; @@ -78,6 +90,8 @@ p[AddArgs] = QStringList() << QLatin1String( "a" ) << QLatin1String( "$Archive" ) << QLatin1String( "$Files" ); + p[PasswordPromptPattern] = QLatin1String("Enter password \\(will not be echoed\\) for"); + p[WrongPasswordPatterns] = QStringList() << QLatin1String("password incorrect") << QLatin1String("wrong password"); p[ExtractionFailedPatterns] = QStringList() << QLatin1String( "CRC failed" ) << QLatin1String( "Cannot find volume" ); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/plugins/clirarplugin/cliplugin.h new/kdeutils-4.6.4/ark/plugins/clirarplugin/cliplugin.h --- old/kdeutils-4.6.3/ark/plugins/clirarplugin/cliplugin.h 2011-01-18 22:25:03.000000000 +0100 +++ new/kdeutils-4.6.4/ark/plugins/clirarplugin/cliplugin.h 2011-06-02 12:04:31.000000000 +0200 @@ -34,6 +34,8 @@ virtual ~CliPlugin(); + virtual QString escapeFileName(const QString &fileName) const; + virtual Kerfuffle::ParameterList parameterList() const; virtual bool readListLine(const QString &line); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/plugins/clizipplugin/cliplugin.cpp new/kdeutils-4.6.4/ark/plugins/clizipplugin/cliplugin.cpp --- old/kdeutils-4.6.3/ark/plugins/clizipplugin/cliplugin.cpp 2011-01-18 22:25:03.000000000 +0100 +++ new/kdeutils-4.6.4/ark/plugins/clizipplugin/cliplugin.cpp 2011-06-02 12:04:30.000000000 +0200 @@ -2,6 +2,7 @@ * ark -- archiver for the KDE project * * Copyright (C) 2009 Harald Hvaal <haral...@stud.ntnu.no> + * Copyright (C) 2009-2011 Raphael Kubo da Costa <kub...@gmail.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -16,9 +17,9 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * */ +#include "cliplugin.h" #include "kerfuffle/cliinterface.h" #include "kerfuffle/kerfuffle_export.h" @@ -33,96 +34,106 @@ using namespace Kerfuffle; -class CliPlugin: public CliInterface +CliPlugin::CliPlugin(QObject *parent, const QVariantList & args) + : CliInterface(parent, args) + , m_status(Header) { -public: - explicit CliPlugin(QObject *parent, const QVariantList & args) - : CliInterface(parent, args), - m_status(Header) { - // #208091: infozip applies special meanings to some characters - // see match.c in infozip's source code - setEscapedCharacters(QLatin1String("[]*?^-\\!")); - } +} - virtual ~CliPlugin() { - } - - virtual ParameterList parameterList() const { - static ParameterList p; - if (p.isEmpty()) { - p[CaptureProgress] = false; - p[ListProgram] = QLatin1String( "zipinfo" ); - p[ExtractProgram] = QLatin1String( "unzip" ); - p[DeleteProgram] = p[AddProgram] = QLatin1String( "zip" ); - - p[ListArgs] = QStringList() << QLatin1String( "-l" ) << QLatin1String( "-T" ) << QLatin1String( "$Archive" ); - p[ExtractArgs] = QStringList() << QLatin1String( "$PreservePathSwitch" ) << QLatin1String( "$PasswordSwitch" ) << QLatin1String( "$Archive" ) << QLatin1String( "$Files" ); - p[PreservePathSwitch] = QStringList() << QLatin1String( "" ) << QLatin1String( "-j" ); - p[PasswordSwitch] = QStringList() << QLatin1String( "-P$Password" ); - - p[DeleteArgs] = QStringList() << QLatin1String( "-d" ) << QLatin1String( "$Archive" ) << QLatin1String( "$Files" ); - - p[FileExistsExpression] = QLatin1String( "^replace (.+)\\?" ); - p[FileExistsInput] = QStringList() - << QLatin1String( "y" ) //overwrite - << QLatin1String( "n" ) //skip - << QLatin1String( "A" ) //overwrite all - << QLatin1String( "N" ) //autoskip - << QLatin1String( "N" ) //cancel - ; +CliPlugin::~CliPlugin() +{ +} - p[AddArgs] = QStringList() << QLatin1String( "-r" ) << QLatin1String( "$Archive" ) << QLatin1String( "$Files" ); +// #208091: infozip applies special meanings to some characters, so we +// need to escape them with backslashes.see match.c in +// infozip's source code +QString CliPlugin::escapeFileName(const QString &fileName) const +{ + const QString escapedCharacters(QLatin1String("[]*?^-\\!")); - p[WrongPasswordPatterns] = QStringList() << QLatin1String( "incorrect password" ); - //p[ExtractionFailedPatterns] = QStringList() << "CRC failed"; + QString quoted; + const int len = fileName.length(); + const QLatin1Char backslash('\\'); + quoted.reserve(len * 2); + + for (int i = 0; i < len; ++i) { + if (escapedCharacters.contains(fileName.at(i))) { + quoted.append(backslash); } - return p; + + quoted.append(fileName.at(i)); } - QString m_entryFilename, m_internalId; - ArchiveEntry m_currentEntry; + return quoted; +} + +ParameterList CliPlugin::parameterList() const +{ + static ParameterList p; - enum ReadStatus { - Header = 0, - Entry - }; - - ReadStatus m_status; - - bool readListLine(const QString &line) { - static QRegExp entryPattern(QLatin1String( - "^(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\d{8}).(\\d{6})\\s+(.+)$") ); - - int i; - switch (m_status) { - case Header: - m_status = Entry; - break; - case Entry: - i = entryPattern.indexIn(line); - if (i != -1) { - ArchiveEntry e; - e[Permissions] = entryPattern.cap(1); - e[IsDirectory] = (entryPattern.cap(1).at(0) == QLatin1Char( 'd' )); - e[Size] = entryPattern.cap(4).toInt(); - QString status = entryPattern.cap(5); - if (status[0].isUpper()) { - e[IsPasswordProtected] = true; - } - e[CompressedSize] = entryPattern.cap(6).toInt(); - - const QDateTime ts(QDate::fromString(entryPattern.cap(8), QLatin1String( "yyyyMMdd" )), - QTime::fromString(entryPattern.cap(9), QLatin1String( "hhmmss" ))); - e[Timestamp] = ts; + if (p.isEmpty()) { + p[CaptureProgress] = false; + p[ListProgram] = QLatin1String( "zipinfo" ); + p[ExtractProgram] = QLatin1String( "unzip" ); + p[DeleteProgram] = p[AddProgram] = QLatin1String( "zip" ); + + p[ListArgs] = QStringList() << QLatin1String( "-l" ) << QLatin1String( "-T" ) << QLatin1String( "$Archive" ); + p[ExtractArgs] = QStringList() << QLatin1String( "$PreservePathSwitch" ) << QLatin1String( "$PasswordSwitch" ) << QLatin1String( "$Archive" ) << QLatin1String( "$Files" ); + p[PreservePathSwitch] = QStringList() << QLatin1String( "" ) << QLatin1String( "-j" ); + p[PasswordSwitch] = QStringList() << QLatin1String( "-P$Password" ); + + p[DeleteArgs] = QStringList() << QLatin1String( "-d" ) << QLatin1String( "$Archive" ) << QLatin1String( "$Files" ); + + p[FileExistsExpression] = QLatin1String( "^replace (.+)\\?" ); + p[FileExistsInput] = QStringList() + << QLatin1String( "y" ) //overwrite + << QLatin1String( "n" ) //skip + << QLatin1String( "A" ) //overwrite all + << QLatin1String( "N" ) //autoskip + << QLatin1String( "N" ) //cancel + ; - e[FileName] = e[InternalID] = entryPattern.cap(10); - entry(e); + p[AddArgs] = QStringList() << QLatin1String( "-r" ) << QLatin1String( "$Archive" ) << QLatin1String( "$Files" ); + + p[WrongPasswordPatterns] = QStringList() << QLatin1String( "incorrect password" ); + //p[ExtractionFailedPatterns] = QStringList() << "CRC failed"; + } + return p; +} + +bool CliPlugin::readListLine(const QString &line) +{ + static const QRegExp entryPattern(QLatin1String( + "^(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\d{8}).(\\d{6})\\s+(.+)$") ); + + switch (m_status) { + case Header: + m_status = Entry; + break; + case Entry: + if (entryPattern.indexIn(line) != -1) { + ArchiveEntry e; + e[Permissions] = entryPattern.cap(1); + e[IsDirectory] = (entryPattern.cap(1).at(0) == QLatin1Char( 'd' )); + e[Size] = entryPattern.cap(4).toInt(); + QString status = entryPattern.cap(5); + if (status[0].isUpper()) { + e[IsPasswordProtected] = true; } - break; + e[CompressedSize] = entryPattern.cap(6).toInt(); + + const QDateTime ts(QDate::fromString(entryPattern.cap(8), QLatin1String( "yyyyMMdd" )), + QTime::fromString(entryPattern.cap(9), QLatin1String( "hhmmss" ))); + e[Timestamp] = ts; + + e[FileName] = e[InternalID] = entryPattern.cap(10); + entry(e); } - return true; + break; } -}; + + return true; +} KERFUFFLE_EXPORT_PLUGIN(CliPlugin) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/ark/plugins/clizipplugin/cliplugin.h new/kdeutils-4.6.4/ark/plugins/clizipplugin/cliplugin.h --- old/kdeutils-4.6.3/ark/plugins/clizipplugin/cliplugin.h 1970-01-01 01:00:00.000000000 +0100 +++ new/kdeutils-4.6.4/ark/plugins/clizipplugin/cliplugin.h 2011-06-02 12:04:30.000000000 +0200 @@ -0,0 +1,47 @@ +/* + * ark -- archiver for the KDE project + * + * Copyright (C) 2011 Raphael Kubo da Costa <kub...@gmail.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef CLIPLUGIN_H +#define CLIPLUGIN_H + +#include "kerfuffle/cliinterface.h" + +class CliPlugin : public Kerfuffle::CliInterface +{ + Q_OBJECT + +public: + explicit CliPlugin(QObject *parent, const QVariantList &args); + virtual ~CliPlugin(); + + virtual QString escapeFileName(const QString &fileName) const; + + virtual Kerfuffle::ParameterList parameterList() const; + + virtual bool readListLine(const QString &line); + +private: + enum { + Header = 0, + Entry + } m_status; +}; + +#endif // CLIPLUGIN_H Files old/kdeutils-4.6.3/doc/ark/index.cache.bz2 and new/kdeutils-4.6.4/doc/ark/index.cache.bz2 differ Files old/kdeutils-4.6.3/doc/filelight/index.cache.bz2 and new/kdeutils-4.6.4/doc/filelight/index.cache.bz2 differ Files old/kdeutils-4.6.3/doc/kcalc/index.cache.bz2 and new/kdeutils-4.6.4/doc/kcalc/index.cache.bz2 differ Files old/kdeutils-4.6.3/doc/kcharselect/index.cache.bz2 and new/kdeutils-4.6.4/doc/kcharselect/index.cache.bz2 differ Files old/kdeutils-4.6.3/doc/kcontrol/blockdevices/index.cache.bz2 and new/kdeutils-4.6.4/doc/kcontrol/blockdevices/index.cache.bz2 differ Files old/kdeutils-4.6.3/doc/kcontrol/kremotecontrol/index.cache.bz2 and new/kdeutils-4.6.4/doc/kcontrol/kremotecontrol/index.cache.bz2 differ Files old/kdeutils-4.6.3/doc/kdf/index.cache.bz2 and new/kdeutils-4.6.4/doc/kdf/index.cache.bz2 differ Files old/kdeutils-4.6.3/doc/kfloppy/index.cache.bz2 and new/kdeutils-4.6.4/doc/kfloppy/index.cache.bz2 differ Files old/kdeutils-4.6.3/doc/kgpg/index.cache.bz2 and new/kdeutils-4.6.4/doc/kgpg/index.cache.bz2 differ Files old/kdeutils-4.6.3/doc/ktimer/index.cache.bz2 and new/kdeutils-4.6.4/doc/ktimer/index.cache.bz2 differ Files old/kdeutils-4.6.3/doc/kwallet/index.cache.bz2 and new/kdeutils-4.6.4/doc/kwallet/index.cache.bz2 differ Files old/kdeutils-4.6.3/doc/printer-applet/index.cache.bz2 and new/kdeutils-4.6.4/doc/printer-applet/index.cache.bz2 differ Files old/kdeutils-4.6.3/doc/sweeper/index.cache.bz2 and new/kdeutils-4.6.4/doc/sweeper/index.cache.bz2 differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/filelight/misc/filelight.desktop new/kdeutils-4.6.4/filelight/misc/filelight.desktop --- old/kdeutils-4.6.3/filelight/misc/filelight.desktop 2011-04-01 13:00:15.000000000 +0200 +++ new/kdeutils-4.6.4/filelight/misc/filelight.desktop 2011-06-02 12:04:28.000000000 +0200 @@ -12,6 +12,7 @@ Name[eu]=Filelight Name[fi]=Filelight Name[fr]=Filelight +Name[hu]=Filelight Name[it]=Filelight Name[kk]=Filelight Name[km]=Filelight @@ -23,6 +24,7 @@ Name[pa]=ਫਾਇਲਲਾਈਟ Name[pt]=Filelight Name[pt_BR]=Filelight +Name[ro]=Filelight Name[ru]=Filelight Name[sk]=Filelight Name[sl]=Filelight @@ -52,6 +54,7 @@ GenericName[eu]=Diskoen erabilerari buruzko estatistikak GenericName[fi]=Levynkäyttötilastot GenericName[fr]=Statistiques d'utilisation de disque +GenericName[hu]=Lemezhasználati statisztika GenericName[it]=Statistiche uso del disco GenericName[kk]=Дискінің статистикасы GenericName[km]=ស្ថិតិប្រើប្រាស់ថាស @@ -63,6 +66,7 @@ GenericName[pa]=ਡਿਸਕ ਵਰਤੋਂ ਅੰਕੜੇ GenericName[pt]=Estatísticas de Utilização do Disco GenericName[pt_BR]=Estatísticas do uso do disco +GenericName[ro]=Statistici utilizare disc GenericName[ru]=Использование дисков GenericName[sk]=Štatistiky využitia disku GenericName[sl]=Statistika porabe diska @@ -93,6 +97,7 @@ Comment[eu]=Erakutsi diskoen erabilerari buruzko informazioa Comment[fi]=Näytä levynkäyttö Comment[fr]=Afficher l'information d'utilisation de disque +Comment[hu]=Lemezhasználati információk megjelenítése Comment[it]=Mostra l'uso del disco Comment[kk]=Дискідегі орынды көрсету Comment[km]=មើលព័ត៌មានអំពីការប្រើប្រាស់ថាស @@ -104,6 +109,7 @@ Comment[pa]=ਡਿਸਕ ਵਰਤੋਂ ਬਾਰੇ ਜਾਣਕਾਰੀ ਵੇਖੋ Comment[pt]=Ver a informação de utilização do disco Comment[pt_BR]=Exibe as informações de utilização do disco +Comment[ro]=Vezi informații despre utilizarea discului Comment[ru]=Наглядное представление файловой системы Comment[sk]=Zobrazenie informácií o využití disku Comment[sl]=Oglejte si statistiko porabe diska diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/filelight/misc/filelightpart.desktop new/kdeutils-4.6.4/filelight/misc/filelightpart.desktop --- old/kdeutils-4.6.3/filelight/misc/filelightpart.desktop 2011-04-01 13:00:15.000000000 +0200 +++ new/kdeutils-4.6.4/filelight/misc/filelightpart.desktop 2011-06-02 12:04:28.000000000 +0200 @@ -22,6 +22,7 @@ Name[pa]=ਰੇਡੀਅਨ ਮੈਪ Name[pt]=Mapa Radial Name[pt_BR]=Mapa radial +Name[ro]=Hartă radială Name[ru]=Радиальная карта Name[sk]=Radiálna mapa Name[sl]=Krožen prikaz diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/kdeutils-version.h new/kdeutils-4.6.4/kdeutils-version.h --- old/kdeutils-4.6.3/kdeutils-version.h 2011-04-01 13:00:16.000000000 +0200 +++ new/kdeutils-4.6.4/kdeutils-version.h 2011-06-02 12:04:31.000000000 +0200 @@ -58,6 +58,6 @@ 3.2 alpha1 */ -#define KDEUTILS_VERSION_STRING "4.6.2" +#define KDEUTILS_VERSION_STRING "4.6.4" #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/kgpg/Messages.sh new/kdeutils-4.6.4/kgpg/Messages.sh --- old/kdeutils-4.6.3/kgpg/Messages.sh 2011-01-18 22:24:55.000000000 +0100 +++ new/kdeutils-4.6.4/kgpg/Messages.sh 2011-06-02 12:04:28.000000000 +0200 @@ -1,5 +1,5 @@ #! /bin/sh $PREPARETIPS > tips.cpp $EXTRACTRC `find . -name \*.rc -o -name \*.ui -o -name \*.kcfg` >> rc.cpp -$XGETTEXT *.cpp core/*.cpp editor/*.cpp model/*.cpp transactions/*.cpp -o $podir/kgpg.pot +$XGETTEXT *.h *.cpp core/*.cpp editor/*.cpp model/*.cpp transactions/*.cpp -o $podir/kgpg.pot rm -f tips.cpp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/kgpg/editor/kgpgeditor.cpp new/kdeutils-4.6.4/kgpg/editor/kgpgeditor.cpp --- old/kdeutils-4.6.3/kgpg/editor/kgpgeditor.cpp 2011-02-25 22:47:49.000000000 +0100 +++ new/kdeutils-4.6.4/kgpg/editor/kgpgeditor.cpp 2011-06-02 12:04:28.000000000 +0200 @@ -169,7 +169,7 @@ KStandardAction::find(this, SLOT(slotFind()), actionCollection()); KStandardAction::findNext(this, SLOT(slotFindNext()), actionCollection()); KStandardAction::findPrev(this, SLOT(slotFindPrev()), actionCollection()); - actionCollection()->addAction(KStandardAction::Preferences, QLatin1String( "kgpg_config" ), + actionCollection()->addAction(KStandardAction::Preferences, QLatin1String( "options_configure" ), this, SLOT(slotOptions())); m_editundo = KStandardAction::undo(this, SLOT(slotundo()), actionCollection()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/kgpg/editor/kgpgeditor.rc new/kdeutils-4.6.4/kgpg/editor/kgpgeditor.rc --- old/kdeutils-4.6.3/kgpg/editor/kgpgeditor.rc 2011-01-18 22:24:55.000000000 +0100 +++ new/kdeutils-4.6.4/kgpg/editor/kgpgeditor.rc 2011-06-02 12:04:28.000000000 +0200 @@ -20,11 +20,6 @@ <Action name="sign_verify"/> <Action name="sign_check"/> </Menu> - - <Menu name="settings"> - <text>&Settings</text> - <Action name="kgpg_config" /> - </Menu> </MenuBar> <ToolBar name="gpgToolBar"> <Action name="text_sign_verify"/> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/kgpg/keysmanager.cpp new/kdeutils-4.6.4/kgpg/keysmanager.cpp --- old/kdeutils-4.6.3/kgpg/keysmanager.cpp 2011-02-25 22:47:49.000000000 +0100 +++ new/kdeutils-4.6.4/kgpg/keysmanager.cpp 2011-06-02 19:35:41.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright (C) 2002 Jean-Baptiste Mardelle <b...@altern.org> - * Copyright (C) 2007,2008,2009,2010 Rolf Eike Beer <k...@opensource.sf-tec.de> + * Copyright (C) 2007,2008,2009,2010,2011 Rolf Eike Beer <k...@opensource.sf-tec.de> */ /*************************************************************************** @@ -159,11 +159,7 @@ if (showTipOfDay) installEventFilter(this); - KAction *action = 0; - - action = actionCollection()->addAction( QLatin1String( "default" ) ); - connect(action, SIGNAL(triggered(bool)), SLOT(slotDefaultAction())); - action->setShortcut(QKeySequence(Qt::Key_Return)); + KAction *action; action = actionCollection()->addAction( QLatin1String( "help_tipofday" )); action->setIcon( KIcon( QLatin1String( "help-hint" )) ); @@ -248,6 +244,7 @@ deleteKey->setIcon(KIcon( QLatin1String( "edit-delete" ))); connect(deleteKey, SIGNAL(triggered(bool)), SLOT(confirmdeletekey())); deleteKey->setShortcut(QKeySequence(Qt::Key_Delete)); + deleteKey->setEnabled(false); setDefaultKey = actionCollection()->addAction(QLatin1String( "key_default" )); setDefaultKey->setText(i18n("Set as De&fault Key")); @@ -288,6 +285,7 @@ delSignKey = actionCollection()->addAction(QLatin1String( "key_delsign" )); delSignKey->setIcon(KIcon( QLatin1String( "edit-delete" ))); connect(delSignKey, SIGNAL(triggered(bool)), SLOT(delsignkey())); + delSignKey->setEnabled(false); importAllSignKeys = actionCollection()->addAction(QLatin1String( "key_importallsign" )); importAllSignKeys->setIcon(KIcon( QLatin1String( "document-import" ))); @@ -361,6 +359,8 @@ iview->setContextMenuPolicy(Qt::CustomContextMenu); connect(iview->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(checkList())); + connect (iview, SIGNAL(returnPressed()), SLOT(slotDefaultAction())); + int psize = KGpgSettings::photoProperties(); photoProps->setCurrentItem(psize); slotSetPhotoSize(psize); @@ -500,6 +500,7 @@ connect(m_netnote, SIGNAL(shouldDisconnect()), SLOT(slotNetworkDown())); toggleNetworkActions(Solid::Networking::status() == Solid::Networking::Unknown || Solid::Networking::status() == Solid::Networking::Connected); + importSignatureKey->setEnabled(false); QTimer::singleShot(0, this, SLOT(refreshkey())); } @@ -1337,6 +1338,9 @@ createGroup->setText(i18np("&Create Group with Selected Key...", "&Create Group with Selected Keys...", cnt)); signKey->setText(i18np("&Sign Key...", "&Sign Keys...", cnt)); delUid->setText(i18np("&Delete User ID", "&Delete User IDs", cnt)); + delSignKey->setText(i18np("Delete Sign&ature", "Delete Sign&atures", cnt)); + importSignatureKey->setText(i18np("Import Key From Keyserver", "Import Keys From Keyserver", cnt)); + deleteKey->setText(i18np("&Delete Key", "&Delete Keys", cnt)); } void @@ -1383,9 +1387,7 @@ } importSignatureKey->setEnabled(allunksig && m_online); - importSignatureKey->setText(i18np("Import Key From Keyserver", "Import Keys From Keyserver", cnt)); delSignKey->setEnabled( (cnt == 1) ); - delSignKey->setText(i18np("Delete Sign&ature", "Delete Sign&atures", cnt)); m_popupsig->exec(globpos); } else if (itype == ITYPE_UID) { if (cnt == 1) { @@ -1407,7 +1409,6 @@ } else if (!(itype & ~(ITYPE_PAIR | ITYPE_GROUP))) { signKey->setEnabled(!(itype & ITYPE_GROUP)); deleteKey->setEnabled(!(itype & ITYPE_GROUP)); - deleteKey->setText(i18np("&Delete Key", "&Delete Keys", cnt)); setDefaultKey->setEnabled( (cnt == 1) ); m_popuppub->exec(globpos); } else if (!(itype & ~(ITYPE_UID | ITYPE_PAIR | ITYPE_UAT))) { @@ -2238,7 +2239,7 @@ QStringList idlist; if (exportList.empty()) - return; + return; foreach (const KGpgNode *nd, exportList) idlist << nd->getId(); @@ -2286,7 +2287,8 @@ void KeysManager::delsignkey() { KGpgNode *nd = iview->selectedNode(); - Q_ASSERT(nd != NULL); + if (nd == NULL) + return; QString uid; QString parentKey; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/kgpg/keytreeview.cpp new/kdeutils-4.6.4/kgpg/keytreeview.cpp --- old/kdeutils-4.6.3/kgpg/keytreeview.cpp 2011-01-18 22:24:55.000000000 +0100 +++ new/kdeutils-4.6.4/kgpg/keytreeview.cpp 2011-06-02 19:35:41.000000000 +0200 @@ -210,4 +210,16 @@ resizeColumnToContents(i); } +void +KeyTreeView::keyPressEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Return) { + if (!event->isAutoRepeat()) + emit returnPressed(); + + return; + } + QTreeView::keyPressEvent(event); +} + #include "keytreeview.moc" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/kgpg/keytreeview.h new/kdeutils-4.6.4/kgpg/keytreeview.h --- old/kdeutils-4.6.3/kgpg/keytreeview.h 2011-01-18 22:24:55.000000000 +0100 +++ new/kdeutils-4.6.4/kgpg/keytreeview.h 2011-06-02 19:35:41.000000000 +0200 @@ -49,6 +49,7 @@ signals: void importDrop(const KUrl::List &urls); + void returnPressed(); public slots: void selectNode(KGpgNode *nd); @@ -58,6 +59,7 @@ virtual void contentsDragMoveEvent(QDragMoveEvent *e); virtual void contentsDropEvent(QDropEvent *e); virtual void startDrag(Qt::DropActions); + virtual void keyPressEvent(QKeyEvent *event); }; #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/kgpg/kgpg.h new/kdeutils-4.6.4/kgpg/kgpg.h --- old/kdeutils-4.6.3/kgpg/kgpg.h 2011-01-18 22:24:55.000000000 +0100 +++ new/kdeutils-4.6.4/kgpg/kgpg.h 2011-06-02 12:04:28.000000000 +0200 @@ -21,12 +21,24 @@ #include <KUniqueApplication> #include <KShortcut> #include <KUrl> +#include <klocale.h> class KCmdLineArgs; class KeysManager; class KGpgExternalActions; class QString; +static const char * const EMailTemplateText=I18N_NOOP( + "Hi,\n\nplease find attached the user id '%UIDNAME%' of your key %KEYID% signed by me. " + "This mail is encrypted with that key to make sure you control both the email address and the key.\n\n" + "If you have multiple user ids, I sent the signature for each user id separately to that user id's associated email address. " + "You can import the signatures by running each through `gpg --import` after you have decrypted them with `gpg --decrypt`.\n\n" + "If you are using KGpg store the attachment to disk and then import it. Just select `Import Key...` from `Keys` menu and open the file.\n\n" + "Note that I did not upload your key to any keyservers. If you want this new signature to be available to others, please upload it yourself. " + "With GnuPG this can be done using gpg --keyserver subkeys.pgp.net --send-key %KEYID%.\n\n" + "With KGpg you can right click on the key once you imported all user ids and choose `Export Public Key...`.\n\n" + "If you have any questions, don't hesitate to ask.\n"); + class KGpgApp : public KUniqueApplication { Q_OBJECT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/kgpg/kgpg.kcfg new/kdeutils-4.6.4/kgpg/kgpg.kcfg --- old/kdeutils-4.6.3/kgpg/kgpg.kcfg 2011-01-18 22:24:55.000000000 +0100 +++ new/kdeutils-4.6.4/kgpg/kgpg.kcfg 2011-06-02 12:04:28.000000000 +0200 @@ -5,6 +5,7 @@ http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > <include>kglobalsettings.h</include> + <include>kgpg.h</include> <kcfgfile name="kgpgrc"/> <group name="Decryption"> @@ -250,21 +251,7 @@ <group name="Key Signing"> <entry name="EmailTemplate" type="String" key="Email_Template"> <label>This is the text of the email sent by the "Sign and Mail User ID" action.</label> - <default>Hi, - -please find attached the user id "%UIDNAME%" of your key %KEYID% signed by me. This mail is encrypted with that key to make sure you control both the email address and the key. - -If you have multiple user ids, I sent the signature for each user id separately to that user id's associated email address. You can import the signatures by running each through `gpg --import` after you have decrypted them with `gpg --decrypt`. - -If you are using KGpg store the attachment to disk and then import it. Just select `Import Key...` from `Keys` menu and open the file. - -Note that I did not upload your key to any keyservers. If you want this new signature to be available to others, please upload it yourself. With GnuPG this can be done using - gpg --keyserver subkeys.pgp.net --send-key %KEYID% - -With KGpg you can right click on the key once you imported all user ids and choose `Export Public Key...`. - -If you have any questions, don't hesitate to ask. -</default> + <default code="true">i18n(EMailTemplateText)</default> </entry> <entry name="MailUats" type="Enum" key="Mail_Uats"> <choices> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kdeutils-4.6.3/printer-applet/printer-applet.notifyrc new/kdeutils-4.6.4/printer-applet/printer-applet.notifyrc --- old/kdeutils-4.6.3/printer-applet/printer-applet.notifyrc 2011-01-18 22:24:59.000000000 +0100 +++ new/kdeutils-4.6.4/printer-applet/printer-applet.notifyrc 2011-06-02 12:04:28.000000000 +0200 @@ -159,7 +159,7 @@ Comment[ca@valencia]=S'està configurant la impressora nova Comment[cs]=Probíhá nastavení nové tiskárny Comment[da]=Indstilling af ny printer -Comment[de]=Neuen Drucker einrichten +Comment[de]=Neuer Drucker wird eingerichtet Comment[el]=Ρύθμιση νέου εκτυπωτή Comment[en_GB]=Configuring New Printer Comment[es]=Configuración de la nueva impresora ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org