4.14.16 (kde-apps-15.12.1), drop pre-f22 support patches

This commit is contained in:
Rex Dieter 2016-01-08 16:12:19 -06:00
parent 45cd4cc3d0
commit 47244ebc84
13 changed files with 8 additions and 1439 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
/kdelibs-4.14.15.tar.xz
/kdelibs-4.14.16.tar.xz

View File

@ -1,58 +0,0 @@
From a02df05e4bd083f98147c86f88da2f818fc6c9f4 Mon Sep 17 00:00:00 2001
From: Alex Merry <alex.merry@kde.org>
Date: Tue, 15 Dec 2015 19:26:47 +0000
Subject: [PATCH 1/3] Revert "backport commit
b72fc5e56579035bf987075e16324ef95ef8e3d4"
This reverts commit 4f7ea2f770cf062ef22293fbb21a086f3e0cbfcb.
This change seems to be causing more problems than it fixes - it's
probably just too big of a behaviour change for kdelibs. Which means
that akregator will probably keep randomly crashing, but the alternative
seems to be various other applications consistently crashing at exit.
If we can fix those applications (Kopete in particular), we can consider
re-applying this afterwards.
BUG: 355275
---
kparts/part.cpp | 2 +-
kparts/tests/parttest.cpp | 2 --
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/kparts/part.cpp b/kparts/part.cpp
index 2cfee81..20089d4 100644
--- a/kparts/part.cpp
+++ b/kparts/part.cpp
@@ -350,7 +350,7 @@ void Part::slotWidgetDestroyed()
d->m_widget = 0;
if (d->m_autoDeletePart) {
kDebug(1000) << "deleting part" << objectName();
- this->deleteLater();
+ delete this; // ouch, this should probably be deleteLater()
}
}
diff --git a/kparts/tests/parttest.cpp b/kparts/tests/parttest.cpp
index 232aa07..e48b578 100644
--- a/kparts/tests/parttest.cpp
+++ b/kparts/tests/parttest.cpp
@@ -48,7 +48,6 @@ void PartTest::testAutoDeletePart()
KParts::Part* part = new TestPart(0, 0);
QPointer<KParts::Part> partPointer(part);
delete part->widget();
- QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
QVERIFY(partPointer.isNull());
}
@@ -58,7 +57,6 @@ void PartTest::testAutoDeleteWidget()
QPointer<KParts::Part> partPointer(part);
QPointer<QWidget> widgetPointer(part->widget());
delete part;
- QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
QVERIFY(widgetPointer.isNull());
}
--
2.5.0

View File

@ -1,97 +0,0 @@
From 94f1d2fa9582a2942d5154b85c849cc3c6140e31 Mon Sep 17 00:00:00 2001
From: Raphael Kubo da Costa <rakuco@FreeBSD.org>
Date: Wed, 16 Dec 2015 18:25:13 +0100
Subject: [PATCH 2/3] PythonMacros: specify destination directory in
byte-compiled files.
The PYTHON_INSTALL() macro is a wrapper around the py_compile Python
module that also installs the byte-code (.pyc) file it generates.
However, when a .py file is passed to py_compile without any additional
arguments, its full path is recorded in the .pyc file. This is
problematic, as most distributions install all files into a build root
instead of simply copying files to / as part of the packaging process.
In this case, the generated .pyc file will have something like
/wrkdir/buildroot/usr/lib/python2.7/site-packages/Foo/my_module.py
in it. Not only does this show up in exception tracebacks, but if the
user later invokes my_module.py and has write access to my_module's
directory, my_module.pyc will be rewritten with the right path to
my_module.py (without the build root). This can lead to uninstallation
errors if the package management system checks each file before removal,
for example.
Fix it by rewritting the PythonCompile.py script so that it takes a
--destination-dir argument that we use to pass the full path to
my_module.py instead of letting it be (wrongly) deduced.
It is important to note that PythonCompile.py now uses the argparse
module, which is not present in Python <= 2.6, Python 3.0 and Python
3.1.
REVIEW: 126345
---
cmake/modules/PythonCompile.py | 29 +++++++++++++++++++++++++++--
cmake/modules/PythonMacros.cmake | 4 ++--
2 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/cmake/modules/PythonCompile.py b/cmake/modules/PythonCompile.py
index 156fea2..d5f5ac4 100644
--- a/cmake/modules/PythonCompile.py
+++ b/cmake/modules/PythonCompile.py
@@ -1,4 +1,29 @@
# By Simon Edwards <simon@simonzone.com>
# This file is in the public domain.
-import py_compile, sys
-sys.exit(py_compile.main())
+
+"""
+Byte-compiles a given Python source file, generating a .pyc file or, if the
+Python executable was invoked with -O, a .pyo file from it.
+It uses the --destination-dir option to set the path to the source file (which
+will appear in tracebacks, for example), so that if the .py file was in a build
+root will appear with the right path.
+"""
+
+import argparse
+import os
+import py_compile
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser('Byte-compiles a Python source file.')
+ parser.add_argument('-d', '--destination-dir', required=True,
+ help='Location where the source file will be '
+ 'installed, without any build roots.')
+ parser.add_argument('source_file',
+ help='Source file to byte-compile.')
+
+ args = parser.parse_args()
+
+ dfile = os.path.join(args.destination_dir,
+ os.path.basename(args.source_file))
+ py_compile.compile(args.source_file, dfile=dfile)
diff --git a/cmake/modules/PythonMacros.cmake b/cmake/modules/PythonMacros.cmake
index 6a82d88..7e3cf40 100644
--- a/cmake/modules/PythonMacros.cmake
+++ b/cmake/modules/PythonMacros.cmake
@@ -60,7 +60,7 @@ macro(PYTHON_INSTALL SOURCE_FILE DESTINATION_DIR)
add_custom_command(
TARGET "${_rule_name}"
COMMAND "${CMAKE_COMMAND}" -E echo "${_message}"
- COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "${_bin_py}"
+ COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "--destination-dir" "${DESTINATION_DIR}" "${_bin_py}"
DEPENDS "${_absfilename}"
)
else()
@@ -68,7 +68,7 @@ macro(PYTHON_INSTALL SOURCE_FILE DESTINATION_DIR)
TARGET "${_rule_name}"
COMMAND "${CMAKE_COMMAND}" -E echo "${_message}"
COMMAND "${CMAKE_COMMAND}" -E copy "${_absfilename}" "${_bin_py}"
- COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "${_bin_py}"
+ COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "--destination-dir" "${DESTINATION_DIR}" "${_bin_py}"
DEPENDS "${_absfilename}"
)
endif()
--
2.5.0

View File

@ -1,140 +0,0 @@
diff -up kdelibs-4.8.90/plasma/package.cpp.libplasma-pk-0002 kdelibs-4.8.90/plasma/package.cpp
--- kdelibs-4.8.90/plasma/package.cpp.libplasma-pk-0002 2012-06-05 10:47:01.000000000 +0200
+++ kdelibs-4.8.90/plasma/package.cpp 2012-06-08 15:40:14.219728253 +0200
@@ -43,8 +43,11 @@
#include <kdebug.h>
#include "authorizationmanager.h"
+#include "dataenginemanager.h"
#include "packagemetadata.h"
+#include "scripting/scriptengine.h"
#include "private/authorizationmanager_p.h"
+#include "private/componentinstaller_p.h"
#include "private/package_p.h"
#include "private/plasmoidservice_p.h"
#include "private/service_p.h"
@@ -580,6 +583,42 @@ bool Package::installPackage(const QStri
// no need to remove the temp dir (which has been successfully moved if it's an archive)
tempdir.setAutoRemove(false);
}
+ // check for missing dependencies
+ QString requiredScriptEngine = meta.implementationApi();
+ if (!requiredScriptEngine.isEmpty()) {
+ // figure out the component type to query for
+ ComponentTypes componentTypes = static_cast<ComponentTypes>(0);
+ QStringList serviceTypes = meta.serviceType().split(',');
+ if (serviceTypes.contains("Plasma/Applet")) {
+ componentTypes |= AppletComponent;
+ }
+ if (serviceTypes.contains("Plasma/DataEngine")) {
+ componentTypes |= DataEngineComponent;
+ }
+ if (serviceTypes.contains("Plasma/Runner")) {
+ componentTypes |= RunnerComponent;
+ }
+ if (serviceTypes.contains("Plasma/Wallpaper")) {
+ componentTypes |= WallpaperComponent;
+ }
+ if (componentTypes // ignore non-Plasma/* components (e.g. KWin/Script)
+ && !knownLanguages(componentTypes).contains(requiredScriptEngine)) {
+ // install the missing script engine
+ // force prompting because the user has just explicitly installed a widget
+ ComponentInstaller::self()->installMissingComponent("scriptengine", requiredScriptEngine, 0, true);
+ }
+ }
+ QStringList requiredDataEngines = meta.requiredDataEngines();
+ if (!requiredDataEngines.isEmpty()) {
+ QStringList knownDataEngines = DataEngineManager::self()->listAllEngines(meta.application());
+ foreach (const QString &requiredDataEngine, requiredDataEngines) {
+ if (!knownDataEngines.contains(requiredDataEngine)) {
+ // install the missing data engine
+ // force prompting because the user has just explicitly installed a widget
+ ComponentInstaller::self()->installMissingComponent("dataengine", requiredDataEngine, 0, true);
+ }
+ }
+ }
if (!servicePrefix.isEmpty()) {
// and now we register it as a service =)
diff -up kdelibs-4.8.90/plasma/packagemetadata.cpp.libplasma-pk-0002 kdelibs-4.8.90/plasma/packagemetadata.cpp
--- kdelibs-4.8.90/plasma/packagemetadata.cpp.libplasma-pk-0002 2012-05-23 01:45:26.000000000 +0200
+++ kdelibs-4.8.90/plasma/packagemetadata.cpp 2012-06-08 15:24:24.439149182 +0200
@@ -52,6 +52,7 @@ class PackageMetadataPrivate
QString serviceType;
QString api;
KUrl location;
+ QStringList requiredDataEngines;
};
PackageMetadata::PackageMetadata(const PackageMetadata &other)
@@ -108,6 +109,7 @@ void PackageMetadata::write(const QStrin
config.writeEntry("X-KDE-ParentApp", d->app);
config.writeEntry("Type", d->type);
config.writeEntry("X-Plasma-RemoteLocation", d->location);
+ config.writeEntry("X-Plasma-RequiredDataEngines", d->requiredDataEngines);
}
void PackageMetadata::read(const QString &filename)
@@ -154,6 +156,7 @@ void PackageMetadata::read(const QString
d->app = config.readEntry("X-KDE-ParentApp", d->app);
d->type = config.readEntry("Type", d->type);
d->location = config.readEntry("X-Plasma-RemoteLocation", d->location);
+ d->requiredDataEngines = config.readEntry("X-Plasma-RequiredDataEngines", d->requiredDataEngines);
}
QString PackageMetadata::name() const
@@ -246,6 +249,11 @@ QString PackageMetadata::implementationA
return d->api;
}
+QStringList PackageMetadata::requiredDataEngines() const
+{
+ return d->requiredDataEngines;
+}
+
void PackageMetadata::setImplementationApi(const QString &api)
{
d->api = api;
@@ -321,6 +329,11 @@ void PackageMetadata::setRemoteLocation(
d->location = location;
}
+void PackageMetadata::setRequiredDataEngines(const QStringList &requiredDataEngines)
+{
+ d->requiredDataEngines = requiredDataEngines;
+}
+
void PackageMetadata::setType(const QString &type)
{
d->type = type;
diff -up kdelibs-4.8.90/plasma/packagemetadata.h.libplasma-pk-0002 kdelibs-4.8.90/plasma/packagemetadata.h
--- kdelibs-4.8.90/plasma/packagemetadata.h.libplasma-pk-0002 2012-05-23 01:45:26.000000000 +0200
+++ kdelibs-4.8.90/plasma/packagemetadata.h 2012-06-08 15:24:24.481149665 +0200
@@ -21,6 +21,7 @@
#define PLASMA_PACKAGEMETADATA_H
#include <QtCore/QString>
+#include <QtCore/QStringList>
#include <plasma/plasma_export.h>
@@ -92,6 +93,7 @@ public:
QString pluginName() const;
QString implementationApi() const;
KUrl remoteLocation() const;
+ QStringList requiredDataEngines() const;
QString type() const;
@@ -205,6 +207,11 @@ public:
*/
void setImplementationApi(const QString &api);
+ /**
+ * Set the required data engines for this package.
+ */
+ void setRequiredDataEngines(const QStringList &);
+
private:
PackageMetadataPrivate * const d;
};

View File

@ -1,85 +0,0 @@
From 016841aeb0b180981122085e9b1d49ae66951670 Mon Sep 17 00:00:00 2001
From: Raphael Kubo da Costa <rakuco@FreeBSD.org>
Date: Fri, 18 Dec 2015 13:35:35 +0100
Subject: [PATCH 3/3] FindPyKDE4: Make PYKDE4_INSTALL_PYTHON_FILES use
PYTHON_INSTALL.
Commit 94f1d2f ("PythonMacros: specify destination directory in
byte-compiled files") broke Kajongg's build because it uses the
PYKDE4_INSTALL_PYTHON_FILES() macro, whose use of PythonCompile.py had
not been updated.
Instead of just passing --destination-dir in FindPyKDE4.cmake, rewrite
the PYKDE4_INSTALL_PYTHON_FILES() macro to use PythonMacros's
PYTHON_INSTALL(). Not only does this fix Kajongg's build, but it also
removes a lot of code duplication and makes
PYKDE4_INSTALL_PYTHON_FILES() work with Python 3.2+'s different .pyc
location.
REVIEW: 126413
---
cmake/modules/FindPyKDE4.cmake | 40 ++--------------------------------------
1 file changed, 2 insertions(+), 38 deletions(-)
diff --git a/cmake/modules/FindPyKDE4.cmake b/cmake/modules/FindPyKDE4.cmake
index 3b87963..9b13794 100644
--- a/cmake/modules/FindPyKDE4.cmake
+++ b/cmake/modules/FindPyKDE4.cmake
@@ -9,6 +9,7 @@
# This file is in the public domain.
INCLUDE(FindPythonInterp)
+include(PythonMacros)
SET(PYKDE4_FOUND FALSE)
@@ -104,45 +105,8 @@ ENDIF(PYTHONINTERP_FOUND)
# project..
#
MACRO(PYKDE4_INSTALL_PYTHON_FILES)
-
- ADD_CUSTOM_TARGET(pysupport ALL)
FOREACH (_current_file ${ARGN})
-
- # Install the source file.
- INSTALL(FILES ${_current_file} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
-
- # Byte compile and install the .pyc file.
- GET_FILENAME_COMPONENT(_absfilename ${_current_file} ABSOLUTE)
- GET_FILENAME_COMPONENT(_filename ${_current_file} NAME)
- GET_FILENAME_COMPONENT(_filenamebase ${_current_file} NAME_WE)
- GET_FILENAME_COMPONENT(_basepath ${_current_file} PATH)
- SET(_bin_py ${CMAKE_BINARY_DIR}/${_basepath}/${_filename})
- SET(_bin_pyc ${CMAKE_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc)
-
- FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_basepath})
-
- SET(_message "-DMESSAGE=Byte-compiling ${_bin_py}")
-
- GET_FILENAME_COMPONENT(_abs_bin_py ${_bin_py} ABSOLUTE)
- IF(_abs_bin_py STREQUAL ${_absfilename}) # Don't copy the file onto itself.
- ADD_CUSTOM_COMMAND(
- TARGET pysupport
- COMMAND ${CMAKE_COMMAND} -E echo ${message}
- COMMAND ${PYTHON_EXECUTABLE} ${current_module_dir}/PythonCompile.py ${_bin_py}
- DEPENDS ${_absfilename}
- )
- ELSE(_abs_bin_py STREQUAL ${_absfilename})
- ADD_CUSTOM_COMMAND(
- TARGET pysupport
- COMMAND ${CMAKE_COMMAND} -E echo ${message}
- COMMAND ${CMAKE_COMMAND} -E copy ${_absfilename} ${_bin_py}
- COMMAND ${PYTHON_EXECUTABLE} ${current_module_dir}/PythonCompile.py ${_bin_py}
- DEPENDS ${_absfilename}
- )
- ENDIF(_abs_bin_py STREQUAL ${_absfilename})
-
- INSTALL(FILES ${_bin_pyc} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
-
+ python_install(${_current_file} ${DATA_INSTALL_DIR}/${PROJECT_NAME})
ENDFOREACH (_current_file)
ENDMACRO(PYKDE4_INSTALL_PYTHON_FILES)
--
2.5.0

View File

@ -1,346 +0,0 @@
From 89e4767148110a5566e463a03b3ed594276b7da0 Mon Sep 17 00:00:00 2001
Message-Id: <89e4767148110a5566e463a03b3ed594276b7da0.1317166378.git.kevin.kofler@chello.at>
From: Kevin Kofler <kevin.kofler@chello.at>
Date: Wed, 17 Aug 2011 04:54:37 +0200
Subject: [PATCH] Implement automatic scanning of source code for required
data engines.
For packages in scripting languages and distributed through OCS, this is fully
automatic and triggered from Package::installPackage. If an
X-Plasma-RequiredDataEngines entry is present in the .desktop file (even if
empty), the dependency extraction is not run and the explicitly provided
information is trusted instead.
For native distribution packages, we ship a tool called
plasma-dataengine-depextractor which can be run at any time during the build
process and which adds the dependency information to the relevant .desktop file.
Authors of plasmoids are encouraged to run plasma-dataengine-depextractor and/or
fill in X-Plasma-RequiredDataEngines manually. (Please note that the list is
expected to be comma-separated.)
---
plasma/CMakeLists.txt | 15 ++++
plasma/depextractor/depextractor.cpp | 125 +++++++++++++++++++++++++++++++++
plasma/package.cpp | 11 +++
plasma/private/componentinstaller.cpp | 71 +++++++++++++++++++
plasma/private/componentinstaller_p.h | 17 ++++-
5 files changed, 238 insertions(+), 1 deletions(-)
diff --git a/plasma/CMakeLists.txt b/plasma/CMakeLists.txt
index f929967..9a760ef 100644
--- a/plasma/CMakeLists.txt
+++ b/plasma/CMakeLists.txt
@@ -304,6 +304,18 @@ set_target_properties(plasma PROPERTIES
install(TARGETS plasma EXPORT kdelibsLibraryTargets ${INSTALL_TARGETS_DEFAULT_ARGS})
+if(NOT PLASMA_NO_PACKAGEKIT)
+ # we need a copy of the component installer because libplasma does not export it
+ # plus, this avoids depending on GUI stuff in this command-line utility
+ set(plasma_dataengine_depextractor_SRCS depextractor/depextractor.cpp
+ private/componentinstaller.cpp)
+ kde4_add_executable(plasma-dataengine-depextractor
+ ${plasma_dataengine_depextractor_SRCS})
+ set_target_properties(plasma-dataengine-depextractor PROPERTIES
+ COMPILE_FLAGS -DPLASMA_COMPONENTINSTALLER_NO_QWIDGET=1)
+ target_link_libraries(plasma-dataengine-depextractor ${KDE4_KDECORE_LIBS})
+endif(NOT PLASMA_NO_PACKAGEKIT)
+
########### install files ###############
@@ -460,3 +472,6 @@ install(FILES data/operations/dataengineservice.operations DESTINATION ${DATA_IN
install(FILES data/operations/plasmoidservice.operations DESTINATION ${DATA_INSTALL_DIR}/plasma/services)
install(FILES data/operations/storage.operations DESTINATION ${DATA_INSTALL_DIR}/plasma/services)
+if(NOT PLASMA_NO_PACKAGEKIT)
+ install(TARGETS plasma-dataengine-depextractor DESTINATION ${BIN_INSTALL_DIR})
+endif(NOT PLASMA_NO_PACKAGEKIT)
diff --git a/plasma/depextractor/depextractor.cpp b/plasma/depextractor/depextractor.cpp
new file mode 100644
index 0000000..c489de7
--- /dev/null
+++ b/plasma/depextractor/depextractor.cpp
@@ -0,0 +1,125 @@
+/* Plasma Data Engine dependency extractor
+ Copyright (C) 2011 Kevin Kofler <kevin.kofler@chello.at>
+
+ 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, see <http://www.gnu.org/licenses/>. */
+
+#include <QCoreApplication>
+#include <QTextStream>
+#include <QFileInfo>
+#include <QDir>
+
+#include <cstdio>
+
+#include <kaboutdata.h>
+#include <kcmdlineargs.h>
+#include <kdesktopfile.h>
+#include <kconfiggroup.h>
+
+#include "private/componentinstaller_p.h"
+
+static QString scriptingApi(const QString &desktopFile)
+{
+ KDesktopFile desktop(desktopFile);
+ KConfigGroup desktopGroup = desktop.desktopGroup();
+ if (desktopGroup.readEntry("X-KDE-ServiceTypes", QStringList())
+ .contains("Plasma/ScriptEngine")
+ || desktopGroup.readEntry("ServiceTypes", QStringList())
+ .contains("Plasma/ScriptEngine")) {
+ /* Script engines are always written in C++. Their X-Plasma-API is the
+ API they export, not the language they're written in. */
+ return QString();
+ }
+ return desktopGroup.readEntry("X-Plasma-API", QString());
+}
+
+static void writeDataEngineDependencies(const QStringList &deps,
+ const QString &desktopFile)
+{
+ if (!deps.isEmpty()) {
+ KDesktopFile desktop(desktopFile);
+ desktop.desktopGroup().writeEntry("X-Plasma-RequiredDataEngines", deps);
+ }
+}
+
+int main(int argc, char **argv)
+{
+ KAboutData aboutData("plasma-dataengine-depextractor", QByteArray(),
+ ki18n("Plasma Data Engine dependency extractor"),
+ "2",
+ ki18n("Plasma Data Engine dependency extractor"));
+ aboutData.addAuthor(ki18n("Kevin Kofler"), ki18n("Author"),
+ "kevin.kofler@chello.at");
+
+ KCmdLineArgs::init(argc, argv, &aboutData);
+ KCmdLineOptions options;
+ options.add("+[path]",
+ ki18n("Source path (default: .)"));
+ options.add("+[file]",
+ ki18n(".desktop rel. to path (default: metadata.desktop)")
+ );
+ KCmdLineArgs::addCmdLineOptions(options);
+
+ QCoreApplication *app = new QCoreApplication(KCmdLineArgs::qtArgc(),
+ KCmdLineArgs::qtArgv());
+
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+
+ int exitCode = 0;
+
+ QString path, desktopFile;
+ int argCount = args->count();
+ switch (argCount) {
+ case 0:
+ path = ".";
+ desktopFile = "metadata.desktop";
+ break;
+ case 1:
+ path = args->arg(0);
+ desktopFile = "metadata.desktop";
+ break;
+ case 2:
+ path = args->arg(0);
+ desktopFile = args->arg(1);
+ break;
+ default:
+ {
+ QTextStream err(stderr, QIODevice::WriteOnly | QIODevice::Text);
+ err << i18n("Expected at most 2 arguments, but %1 given", argCount)
+ << endl;
+ exitCode = 1;
+ break;
+ }
+ }
+
+ if (!exitCode) {
+ if (QFileInfo(desktopFile).isRelative())
+ desktopFile = QDir(path).absoluteFilePath(desktopFile);
+
+ if (QFileInfo(desktopFile).exists()) {
+ writeDataEngineDependencies(Plasma::ComponentInstaller::self()
+ ->extractDataEngineDependencies(
+ path,
+ scriptingApi(desktopFile)),
+ desktopFile);
+ } else {
+ QTextStream err(stderr, QIODevice::WriteOnly | QIODevice::Text);
+ err << i18n("Desktop file \"%1\" not found", desktopFile) << endl;
+ exitCode = 1;
+ }
+ }
+
+ args->clear();
+ delete app;
+ return exitCode;
+}
diff --git a/plasma/package.cpp b/plasma/package.cpp
index 0a45c87..131f204 100644
--- a/plasma/package.cpp
+++ b/plasma/package.cpp
@@ -631,6 +631,17 @@ bool Package::installPackage(const QString &package,
}
}
QStringList requiredDataEngines = meta.requiredDataEngines();
+ if (requiredDataEngines.isEmpty()) {
+ // check whether this was explicitly specified as empty
+ QString metaPath = targetName + "/metadata.desktop";
+ KDesktopFile df(metaPath);
+ KConfigGroup cg = df.desktopGroup();
+ if (!cg.hasKey("X-Plasma-RequiredDataEngines")) {
+ // not specified at all, try running the dependency extraction
+ requiredDataEngines = ComponentInstaller::self()->extractDataEngineDependencies(targetName,
+ requiredScriptEngine);
+ }
+ }
if (!requiredDataEngines.isEmpty()) {
QStringList knownDataEngines = DataEngineManager::self()->listAllEngines(meta.application());
foreach (const QString &requiredDataEngine, requiredDataEngines) {
diff --git a/plasma/private/componentinstaller.cpp b/plasma/private/componentinstaller.cpp
index 870667f..087d1c6 100644
--- a/plasma/private/componentinstaller.cpp
+++ b/plasma/private/componentinstaller.cpp
@@ -28,6 +28,10 @@
#include <QWidget>
#include <QLatin1String>
#include <QStringList>
+#include <QTextStream>
+#include <QFile>
+#include <QDirIterator>
+#include <QRegExp>
#endif
namespace Plasma
@@ -85,9 +89,13 @@ void ComponentInstaller::installMissingComponent(const QString &type,
// We don't check packageKit.isValid() because the service is activated on
// demand, so it will show up as "not valid".
WId wid = 0;
+#ifndef PLASMA_COMPONENTINSTALLER_NO_QWIDGET
if (parent) {
wid = parent->winId();
}
+#else
+ Q_UNUSED(parent);
+#endif
QStringList resources;
resources.append(searchString);
packageKit.asyncCall(QLatin1String("InstallResources"), (unsigned int) wid,
@@ -100,4 +108,67 @@ void ComponentInstaller::installMissingComponent(const QString &type,
#endif
}
+QStringList ComponentInstaller::extractDataEngineDependencies(const QString &path,
+ const QString &api)
+{
+ QStringList deps;
+
+#ifdef PLASMA_ENABLE_PACKAGEKIT_SUPPORT
+ QStringList nameFilters;
+ QRegExp searchRegExp("dataEngine *\\( *\"([^\"]+)\" *\\)");
+ if (api.isEmpty()) {
+ // no script engine API, this is native C++ code
+ nameFilters.append("*.cpp");
+ nameFilters.append("*.cxx");
+ nameFilters.append("*.cc");
+ nameFilters.append("*.C");
+ nameFilters.append("*.h");
+ nameFilters.append("*.hpp");
+ nameFilters.append("*.hxx");
+ nameFilters.append("*.hh");
+ nameFilters.append("*.H");
+ } else if (api == "declarativeappletscript") {
+ nameFilters.append("*.qml");
+ searchRegExp = QRegExp("(?:^\\s*engine:\\s*|dataEngine *\\( *)\"([^\"]+)\"");
+ } else if (api == "javascript") {
+ nameFilters.append("*.js");
+ } else if (api == "python") {
+ nameFilters.append("*.py");
+ searchRegExp = QRegExp("dataEngine *\\( *[\'\"]([^\'\"]+)[\'\"] *\\)");
+ } else if (api == "ruby-script") {
+ nameFilters.append("*.rb");
+ searchRegExp = QRegExp("dataEngine *\\( *[\'\"]([^\'\"]+)[\'\"] *\\)");
+ } else {
+ // dependency extraction not supported for this API
+ return deps;
+ }
+
+ QDirIterator it(path, nameFilters, QDir::Files | QDir::CaseSensitive,
+ QDirIterator::Subdirectories
+ | QDirIterator::FollowSymlinks);
+ while (it.hasNext()) {
+ QFile file(it.next());
+ file.open(QIODevice::ReadOnly | QIODevice::Text);
+ QTextStream stream(&file);
+ QString line;
+ while (!(line = stream.readLine()).isNull()) {
+ int column = 0;
+ while ((column = searchRegExp.indexIn(line, column)) != -1) {
+ QString dep = searchRegExp.cap(1);
+ if (!deps.contains(dep)) {
+ deps.append(dep);
+ }
+ column += searchRegExp.matchedLength();
+ }
+ }
+ file.close();
+ }
+#else
+ Q_UNUSED(path);
+ Q_UNUSED(api);
+#endif
+
+ return deps;
+}
+
} // namespace Plasma
diff --git a/plasma/private/componentinstaller_p.h b/plasma/private/componentinstaller_p.h
index f85cbb6..d0d9c75 100644
--- a/plasma/private/componentinstaller_p.h
+++ b/plasma/private/componentinstaller_p.h
@@ -20,7 +20,7 @@
#ifndef PLASMA_COMPONENTINSTALLER_H
#define PLASMA_COMPONENTINSTALLER_H
-class QString;
+#include <QStringList>
class QWidget;
namespace Plasma
@@ -76,6 +76,21 @@ class ComponentInstaller
void installMissingComponent(const QString &type, const QString &name,
QWidget *parent = 0, bool force = false);
+ /**
+ * Extracts the list of required data engines from source code.
+ *
+ * If the scripting API is not supported for dependency extraction or
+ * if Plasma was compiled without support for missing component
+ * installation, an empty list of dependencies is returned.
+ *
+ * @param path the path containing the source code
+ * @param api the scripting API used;
+ * if empty (the default), assumes the native C++ API
+ */
+ QStringList extractDataEngineDependencies(const QString &path,
+ const QString &api
+ = QString());
+
private:
/**
* Default constructor. The singleton method self() is the
--
1.7.6.2

View File

@ -1,474 +0,0 @@
From 5c0a31a2f2a46aa44b8c34baae67b6951b2abcaf Mon Sep 17 00:00:00 2001
From: Emmanuel Pescosta <emmanuelpescosta099@gmail.com>
Date: Wed, 29 Apr 2015 16:02:02 +0200
Subject: [PATCH 15/32] Remove bookmarks syncing from KFilePlacesModel and use
user-places.xbel only.
FIXED-IN: 4.14.8
BUG: 345174
REVIEW: 123568
---
kfile/CMakeLists.txt | 1 -
kfile/kfileplacesmodel.cpp | 21 +--
kfile/kfileplacessharedbookmarks.cpp | 276 -----------------------------------
kfile/kfileplacessharedbookmarks_p.h | 56 -------
4 files changed, 3 insertions(+), 351 deletions(-)
delete mode 100644 kfile/kfileplacessharedbookmarks.cpp
delete mode 100644 kfile/kfileplacessharedbookmarks_p.h
diff --git a/kfile/CMakeLists.txt b/kfile/CMakeLists.txt
index ceae140..e796908 100644
--- a/kfile/CMakeLists.txt
+++ b/kfile/CMakeLists.txt
@@ -22,7 +22,6 @@ set(kfile_LIB_SRCS
kfilewidget.cpp
kfileplacesitem.cpp
kfileplacesmodel.cpp
- kfileplacessharedbookmarks.cpp
kfileplacesview.cpp
kfileplaceeditdialog.cpp
kfilepreviewgenerator.cpp
diff --git a/kfile/kfileplacesmodel.cpp b/kfile/kfileplacesmodel.cpp
index 24f95ad..a3ac9fb 100644
--- a/kfile/kfileplacesmodel.cpp
+++ b/kfile/kfileplacesmodel.cpp
@@ -19,7 +19,6 @@
*/
#include "kfileplacesmodel.h"
#include "kfileplacesitem_p.h"
-#include "kfileplacessharedbookmarks_p.h"
#ifdef _WIN32_WCE
#include "Windows.h"
@@ -61,10 +60,9 @@
class KFilePlacesModel::Private
{
public:
- Private(KFilePlacesModel *self) : q(self), bookmarkManager(0), sharedBookmarks(0) {}
+ Private(KFilePlacesModel *self) : q(self), bookmarkManager(0) {}
~Private()
{
- delete sharedBookmarks;
qDeleteAll(items);
}
@@ -76,7 +74,6 @@ public:
Solid::Predicate predicate;
KBookmarkManager *bookmarkManager;
- KFilePlacesSharedBookmarks * sharedBookmarks;
void reloadAndSignal();
QList<KFilePlacesItem *> loadBookmarkList();
@@ -93,8 +90,8 @@ public:
KFilePlacesModel::KFilePlacesModel(QObject *parent)
: QAbstractItemModel(parent), d(new Private(this))
{
- const QString file = KStandardDirs::locateLocal("data", "kfileplaces/bookmarks.xml");
- d->bookmarkManager = KBookmarkManager::managerForFile(file, "kfilePlaces");
+ const QString file = KStandardDirs().localxdgdatadir() + "user-places.xbel";
+ d->bookmarkManager = KBookmarkManager::managerForExternalFile(file);
// Let's put some places in there if it's empty. We have a corner case here:
// Given you have bookmarked some folders (which have been saved on
@@ -146,9 +143,6 @@ KFilePlacesModel::KFilePlacesModel(QObject *parent)
d->bookmarkManager->saveAs(file);
}
- // create after, so if we have own places, they are added afterwards, in case of equal priorities
- d->sharedBookmarks = new KFilePlacesSharedBookmarks(d->bookmarkManager);
-
QString predicate("[[[[ StorageVolume.ignored == false AND [ StorageVolume.usage == 'FileSystem' OR StorageVolume.usage == 'Encrypted' ]]"
" OR "
"[ IS StorageAccess AND StorageDrive.driveType == 'Floppy' ]]"
@@ -632,8 +626,6 @@ bool KFilePlacesModel::dropMimeData(const QMimeData *data, Qt::DropAction action
return false;
}
- d->sharedBookmarks->updateSharedBookmarks();
-
d->reloadAndSignal();
return true;
@@ -661,8 +653,6 @@ void KFilePlacesModel::addPlace(const QString &text, const KUrl &url,
d->bookmarkManager->root().moveBookmark(bookmark, item->bookmark());
}
- d->sharedBookmarks->updateSharedBookmarks();
-
d->reloadAndSignal();
}
@@ -684,8 +674,6 @@ void KFilePlacesModel::editPlace(const QModelIndex &index, const QString &text,
bookmark.setIcon(iconName);
bookmark.setMetaDataItem("OnlyInApp", appName);
- d->sharedBookmarks->updateSharedBookmarks();
-
d->reloadAndSignal();
emit dataChanged(index, index);
}
@@ -703,7 +691,6 @@ void KFilePlacesModel::removePlace(const QModelIndex &index) const
if (bookmark.isNull()) return;
d->bookmarkManager->root().deleteBookmark(bookmark);
- d->sharedBookmarks->updateSharedBookmarks();
d->reloadAndSignal();
}
@@ -719,8 +706,6 @@ void KFilePlacesModel::setPlaceHidden(const QModelIndex &index, bool hidden)
bookmark.setMetaDataItem("IsHidden", (hidden ? "true" : "false"));
- d->sharedBookmarks->updateSharedBookmarks();
-
d->reloadAndSignal();
emit dataChanged(index, index);
}
diff --git a/kfile/kfileplacessharedbookmarks.cpp b/kfile/kfileplacessharedbookmarks.cpp
deleted file mode 100644
index 5385d42..0000000
--- a/kfile/kfileplacessharedbookmarks.cpp
+++ /dev/null
@@ -1,276 +0,0 @@
-/* This file is part of the KDE project
- Copyright (C) 2008 Norbert Frese <nf2@scheinwelt.at>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-
-*/
-
-#include "kfileplacessharedbookmarks_p.h"
-
-#include <QtCore/QObject>
-#include <QtCore/QTextStream>
-#include <QtCore/QFile>
-#include <kstandarddirs.h>
-#include <kbookmarkmanager.h>
-#include <kbookmark.h>
-#include <kdebug.h>
-
-//////////////// utility functions
-
-static bool compareBookmarks(const KBookmark & bookmark1, const KBookmark & bookmark2)
-{
- return (bookmark1.url() == bookmark2.url() || bookmark1.text() == bookmark2.text());
-}
-
-static bool deepCompareDomNodes(const QDomNode & node1, const QDomNode & node2)
-{
-
- // compare name and value
- if (node1.nodeName() != node2.nodeName() || node1.nodeValue() != node2.nodeValue())
- return false;
-
- // recursively compare children
- const QDomNodeList node1Children = node1.childNodes();
- const QDomNodeList node2Children = node2.childNodes();
-
- if (node1Children.count () != node2Children.count ())
- return false;
-
- for (int i=0; i<node1Children.count ();i++) {
- if (!deepCompareDomNodes(node1Children.at(i), node2Children.at(i) ))
- return false;
- }
- return true;
-}
-
-/*
-static QString nodeAsString(const QDomNode & node1)
-{
- QString str;
- QTextStream ts( &str, QIODevice::WriteOnly );
- ts << node1;
- return str;
-}
-*/
-
-static bool exactCompareBookmarks(const KBookmark & bookmark1, const KBookmark & bookmark2)
-{
- //kDebug() << "excat comparing:\n" << nodeAsString(bookmark1.internalElement()) << "\nwith:\n" << nodeAsString(bookmark2.internalElement());
- return deepCompareDomNodes(bookmark1.internalElement(), bookmark2.internalElement());
-}
-
-static void cloneBookmarkContents(const KBookmark & target, const KBookmark & source)
-{
- const QDomElement targetEl = target.internalElement();
- QDomNode parent = targetEl.parentNode ();
- QDomNode clonedNode = source.internalElement().cloneNode(true);
- parent.replaceChild (clonedNode , targetEl );
-}
-
-static KBookmark cloneBookmark(const KBookmark & toClone)
-{
- const QDomNode cloned = toClone.internalElement().cloneNode(true);
- return KBookmark(cloned.toElement ());
-}
-
-
-static void emptyBookmarkGroup(KBookmarkGroup & root)
-{
- KBookmark bookmark = root.first();
- while (!bookmark.isNull()) {
- KBookmark bookmarkToRemove = bookmark;
- bookmark = root.next(bookmark);
- root.deleteBookmark(bookmarkToRemove);
- }
-}
-
-static int bookmarkGroupSize(KBookmarkGroup & root)
-{
- int count=0;
- KBookmark bookmark = root.first();
- while (!bookmark.isNull()) {
- count++;
- bookmark = root.next(bookmark);
- }
- return count;
-}
-
-//////////////// class KFilePlacesSharedBookmarks
-
-KFilePlacesSharedBookmarks::KFilePlacesSharedBookmarks(KBookmarkManager * mgr)
-{
- m_placesBookmarkManager = mgr;
-
- // we check later if the directory exists
- KStandardDirs::makeDir(KStandardDirs().localxdgdatadir());
- const QString file = KStandardDirs().localxdgdatadir() + "user-places.xbel";
- m_sharedBookmarkManager = KBookmarkManager::managerForExternalFile(file);
-
- connect(m_sharedBookmarkManager, SIGNAL(changed(QString,QString)),
- this, SLOT(slotSharedBookmarksChanged()));
- connect(m_sharedBookmarkManager, SIGNAL(bookmarksChanged(QString)),
- this, SLOT(slotSharedBookmarksChanged()));
-
- integrateSharedBookmarks();
-}
-
-bool KFilePlacesSharedBookmarks::integrateSharedBookmarks()
-{
- KBookmarkGroup root = m_placesBookmarkManager->root();
- KBookmark bookmark = root.first();
-
- KBookmarkGroup sharedRoot = m_sharedBookmarkManager->root();
- KBookmark sharedBookmark = sharedRoot.first();
-
- bool dirty = false;
-
- while (!bookmark.isNull()) {
- //kDebug() << "importing" << bookmark.text();
-
- // skip over system items
- if (bookmark.metaDataItem("isSystemItem") == "true") {
- bookmark = root.next(bookmark);
- continue;
- }
-
- // do the bookmarks match?
- if (!sharedBookmark.isNull() && compareBookmarks(bookmark, sharedBookmark)) {
- //kDebug() << "excat comparing: targetbk:\n" << nodeAsString(bookmark.internalElement()) << "\nsourcbk:\n" << nodeAsString(sharedBookmark.internalElement());
-
- if (!exactCompareBookmarks(bookmark, sharedBookmark)) {
- KBookmark cloneTarget=bookmark;
- KBookmark cloneSource = sharedBookmark;
-
- sharedBookmark = sharedRoot.next(sharedBookmark);
- bookmark = root.next(bookmark);
-
- //kDebug() << "cloning" << cloneSource.text();
- //kDebug() << "cloning: target=\n" << nodeAsString(cloneTarget.internalElement()) << "\n source:\n" << nodeAsString(cloneSource.internalElement());
-
- cloneBookmarkContents(cloneTarget, cloneSource);
- dirty = true;
- continue;
- } else {
- //kDebug() << "keeping" << bookmark.text();
- }
- sharedBookmark = sharedRoot.next(sharedBookmark);
- bookmark = root.next(bookmark);
- continue;
- }
-
- // they don't match -> remove
- //kDebug() << "removing" << bookmark.text();
- KBookmark bookmarkToRemove = bookmark;
- bookmark = root.next(bookmark);
- root.deleteBookmark(bookmarkToRemove);
-
- dirty = true;
- }
-
- // append the remaining shared bookmarks
- while(!sharedBookmark.isNull()) {
- root.addBookmark(cloneBookmark(sharedBookmark));
- sharedBookmark = sharedRoot.next(sharedBookmark);
- dirty = true;
- }
-
- return dirty;
-}
-
-bool KFilePlacesSharedBookmarks::exportSharedBookmarks()
-{
- KBookmarkGroup root = m_placesBookmarkManager->root();
- KBookmark bookmark = root.first();
-
- KBookmarkGroup sharedRoot = m_sharedBookmarkManager->root();
- KBookmark sharedBookmark = sharedRoot.first();
-
- bool dirty = false;
-
- // first check if they are the same
- int count=0;
- while (!bookmark.isNull()) {
- //kDebug() << "exporting..." << bookmark.text();
-
- // skip over system items
- if (bookmark.metaDataItem("isSystemItem") == "true") {
- bookmark = root.next(bookmark);
- continue;
- }
- count++;
-
- // end of sharedBookmarks?
- if (sharedBookmark.isNull()) {
- dirty=true;
- break;
- }
-
- // do the bookmarks match?
- if (compareBookmarks(bookmark, sharedBookmark)) {
- if (!exactCompareBookmarks(bookmark, sharedBookmark)) {
- dirty = true;
- break;
- }
- } else {
- dirty=true;
- break;
- }
- sharedBookmark = sharedRoot.next(sharedBookmark);
- bookmark = root.next(bookmark);
- }
-
- //kDebug() << "dirty=" << dirty << " oldsize=" << bookmarkGroupSize(sharedRoot) << " count=" << count;
-
- if (bookmarkGroupSize(sharedRoot) != count)
- dirty=true;
-
- if (dirty) {
- emptyBookmarkGroup(sharedRoot);
-
- // append all bookmarks
- KBookmark bookmark = root.first();
-
- while(!bookmark.isNull()) {
-
- if (bookmark.metaDataItem("isSystemItem") == "true") {
- bookmark = root.next(bookmark);
- continue;
- }
-
- sharedRoot.addBookmark(cloneBookmark(bookmark));
- bookmark = root.next(bookmark);
- dirty = true;
- }
- }
-
- return dirty;
-
-}
-
-void KFilePlacesSharedBookmarks::slotSharedBookmarksChanged()
-{
- //kDebug() << "shared bookmarks changed";
- bool dirty = integrateSharedBookmarks();
- if (dirty) m_placesBookmarkManager->emitChanged();
-}
-
-void KFilePlacesSharedBookmarks::updateSharedBookmarks()
-{
- //kDebug() << "places bookmarks changed";
- bool dirty = exportSharedBookmarks();
- if (dirty) m_sharedBookmarkManager->emitChanged();
-}
-
-#include "kfileplacessharedbookmarks_p.moc"
diff --git a/kfile/kfileplacessharedbookmarks_p.h b/kfile/kfileplacessharedbookmarks_p.h
deleted file mode 100644
index 654fe18..0000000
--- a/kfile/kfileplacessharedbookmarks_p.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* This file is part of the KDE project
- Copyright (C) 2008 Norbert Frese <nf2@scheinwelt.at>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-
-*/
-
-#ifndef KFILEPLACESSHAREDBOOKMARKS_P_H
-#define KFILEPLACESSHAREDBOOKMARKS_P_H
-
-#include <QtCore/QObject>
-#include <kbookmarkmanager.h>
-
-/**
- * keeps the KFilePlacesModel bookmarks and the shared bookmark spec
- * shortcuts in sync
- */
-class KFilePlacesSharedBookmarks : public QObject
-{
- Q_OBJECT
-public:
-
- KFilePlacesSharedBookmarks(KBookmarkManager * mgr);
- ~KFilePlacesSharedBookmarks() { /* delete m_sharedBookmarkManager; */}
-
- void updateSharedBookmarks();
-
-private:
-
- bool integrateSharedBookmarks();
- bool exportSharedBookmarks();
-
- KBookmarkManager *m_placesBookmarkManager;
- KBookmarkManager *m_sharedBookmarkManager;
-
-private Q_SLOTS:
-
- void slotSharedBookmarksChanged();
-};
-
-
-
-
-#endif /*KFILEPLACESSHARED_P_H_*/
--
2.4.2

View File

@ -1,61 +0,0 @@
From 2173580f070e806d4715e13048c697c49ec262e2 Mon Sep 17 00:00:00 2001
From: Aaron Seigo <aseigo@kde.org>
Date: Thu, 21 Feb 2013 17:59:58 +0100
Subject: [PATCH 047/111] coding style fixes
---
kdeui/icons/kiconloader.cpp | 27 ++++++++++++---------------
1 file changed, 12 insertions(+), 15 deletions(-)
diff --git a/kdeui/icons/kiconloader.cpp b/kdeui/icons/kiconloader.cpp
index 6fed667..dba474d 100644
--- a/kdeui/icons/kiconloader.cpp
+++ b/kdeui/icons/kiconloader.cpp
@@ -938,32 +938,29 @@ K3Icon KIconLoaderPrivate::findMatchingIcon(const QString& name, int size) const
}
}
- foreach (KIconThemeNode *themeNode, links)
- {
+ foreach (KIconThemeNode *themeNode, links) {
QString currentName = name;
- while (!currentName.isEmpty())
- {
-
+ while (!currentName.isEmpty()) {
//kDebug(264) << "Looking up" << currentName;
-// The following code has been commented out because the Qt SVG renderer needs
-// to be improved. If you are going to change/remove some code from this part,
-// please contact me before (ereslibre@kde.org), or kde-core-devel@kde.org. (ereslibre)
- for (int i = 0 ; i < 4 ; i++)
- {
+ for (int i = 0 ; i < 4 ; i++) {
icon = themeNode->theme->iconPath(currentName + ext[i], size, KIconLoader::MatchExact);
- if (icon.isValid())
- return icon;
+ if (icon.isValid()) {
+ break;
+ }
icon = themeNode->theme->iconPath(currentName + ext[i], size, KIconLoader::MatchBest);
- if (icon.isValid())
- return icon;
+ if (icon.isValid()) {
+ break;
+ }
}
+ //kDebug(264) << "Looking up" << currentName;
- if (genericFallback)
+ if (genericFallback) {
// we already tested the base name
break;
+ }
int rindex = currentName.lastIndexOf('-');
if (rindex > 1) { // > 1 so that we don't split x-content or x-epoc
--
1.8.1.4

View File

@ -31,10 +31,6 @@
%else
%define upower 1
%endif
# enable plasma/packagekit feature
%if 0%{?fedora} < 22
%define plasma_packagekit 1
%endif
# enable tests (disabled by default)
#global tests 1
@ -50,9 +46,9 @@
Summary: KDE Libraries
# shipped with kde applications, version...
%global apps_version 15.12.0
Version: 4.14.15
Release: 3%{?dist}
%global apps_version 15.12.1
Version: 4.14.16
Release: 1%{?dist}
Name: kdelibs
Epoch: 6
@ -136,15 +132,6 @@ Patch20: kdelibs-4.10.0-cmake.patch
# -DCMAKE_SKIP_RPATH:BOOL=ON (finally)
Patch27: kdelibs-4.10.0-no_rpath.patch
## libplasma PackageKit integration
# Trigger installation of missing components when installing a package.
# https://git.reviewboard.kde.org/r/102291/
Patch41: 0002-Trigger-installation-of-missing-components-when-inst.patch
# Implement automatic scanning of source code for required data engines.
# https://git.reviewboard.kde.org/r/102350/
Patch42: 0003-Implement-automatic-scanning-of-source-code-for-requ.patch
# kbuildsycoca4 VFolderMenu::loadDoc spam, always complains about
# ~/.config/menus/applications-merged/xdg-desktop-menu-dummy.menu
# unexpected EOF
@ -194,23 +181,6 @@ Patch64: kdelibs-4.13.2-invokeTerminal.patch
## upstream
# 4.14 branch
Patch101: 0001-Revert-backport-commit-b72fc5e56579035bf987075e16324.patch
Patch102: 0002-PythonMacros-specify-destination-directory-in-byte-c.patch
Patch103: 0003-FindPyKDE4-Make-PYKDE4_INSTALL_PYTHON_FILES-use-PYTH.patch
# revert these commits for
#https://bugs.kde.org/315578
# for now, causes regression,
#https://bugs.kde.org/317138
Patch090: return-not-break.-copy-paste-error.patch
Patch091: coding-style-fixes.patch
Patch092: return-application-icons-properly.patch
# revert disabling of packagekit
Patch093: turn-the-packagekit-support-feature-off-by-default.patch
# plasma5 places syncing problems
Patch094: 0015-Remove-bookmarks-syncing-from-KFilePlacesModel-and-u.patch
## security fix
@ -449,10 +419,6 @@ sed -i -e "s|@@VERSION_RELEASE@@|%{version}-%{release}|" kio/kio/kprotocolmanage
%patch20 -p1 -b .xxcmake
%patch27 -p1 -b .no_rpath
# libplasma PackageKit integration
%patch41 -p1 -b .libplasma-pk-0002
%patch42 -p1 -b .libplasma-pk-0003
%patch48 -p1 -b .vfolder_spam
%if "%{?udisks}" == "udisks2"
%patch49 -p1 -b .solid_qt_no_debug_output
@ -472,21 +438,6 @@ sed -i -e "s|@@VERSION_RELEASE@@|%{version}-%{release}|" kio/kio/kprotocolmanage
%patch64 -p1 -b .invokeTerminal
# upstream patches
%patch101 -p1 -b .0001
%patch102 -p1 -b .0002
%patch103 -p1 -b .0003
%if 0%{?fedora} < 22
%patch090 -p1 -R -b .return-not-break.-copy-paste-error
%patch091 -p1 -R -b .coding-style-fixes.patch
%patch092 -p1 -R -b .return-application-icons-properly
%endif
%if 0%{?plasma_packagekit}
%patch093 -p1 -R -b .turn-the-packagekit-support-feature-off-by-default
%endif
%if 0%{?fedora} < 22
%patch094 -p1 -R -b .0015
%endif
# security fixes
@ -795,9 +746,6 @@ update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || :
%{_mandir}/man1/preparetips.1*
%{_kde4_bindir}/kconfig_compiler4
%{_kde4_bindir}/makekdewidgets4
%if 0%{?plasma_packagekit}
%{_kde4_bindir}/plasma-dataengine-depextractor
%endif
%{_kde4_bindir}/kde4-doxygen.sh
%{_kde4_appsdir}/cmake/
%{_kde4_includedir}/*
@ -844,6 +792,9 @@ update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || :
%changelog
* Fri Jan 08 2016 Rex Dieter <rdieter@fedoraproject.org> 6:4.14.16-1
- 4.14.16 (kde-apps-15.12.1), drop pre-f22 support patches
* Mon Dec 21 2015 Rex Dieter <rdieter@fedoraproject.org> - 6:4.14.15-3
- move dbus xml interface files to -devel

View File

@ -1,55 +0,0 @@
From 613c951a1157df0d8a907a155a5eaa706816d5f9 Mon Sep 17 00:00:00 2001
From: Aaron Seigo <aseigo@kde.org>
Date: Thu, 21 Feb 2013 17:58:11 +0100
Subject: return application icons properly
BUG:315578
---
kdeui/icons/kiconloader.cpp | 31 ++++++++++++++++++++++++++++++-
1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/kdeui/icons/kiconloader.cpp b/kdeui/icons/kiconloader.cpp
index f65e941..6fed667 100644
--- a/kdeui/icons/kiconloader.cpp
+++ b/kdeui/icons/kiconloader.cpp
@@ -909,7 +909,36 @@ K3Icon KIconLoaderPrivate::findMatchingIcon(const QString& name, int size) const
const char * const ext[4] = { ".png", ".svgz", ".svg", ".xpm" };
bool genericFallback = name.endsWith(QLatin1String("-x-generic"));
- foreach(KIconThemeNode *themeNode, links)
+ // Do two passes through themeNodes.
+ //
+ // The first pass looks for an exact match in each themeNode one after the other.
+ // If one is found and it is an app icon then return that icon.
+ //
+ // In the next pass (assuming the first pass failed), it looks for exact matches
+ // and then generic fallbacks in each themeNode one after the other
+ //
+ // The reasoning is that application icons should always match exactly, all other
+ // icons may fallback. Since we do not know what the context is here when we start
+ // looking for it, we can only go by the path found.
+ foreach (KIconThemeNode *themeNode, links) {
+ for (int i = 0 ; i < 4 ; i++) {
+ icon = themeNode->theme->iconPath(name + ext[i], size, KIconLoader::MatchExact);
+ if (icon.isValid()) {
+ break;
+ }
+
+ icon = themeNode->theme->iconPath(name + ext[i], size, KIconLoader::MatchBest);
+ if (icon.isValid()) {
+ break;
+ }
+ }
+
+ if (icon.isValid() && icon.path.contains("/apps/")) {
+ return icon;
+ }
+ }
+
+ foreach (KIconThemeNode *themeNode, links)
{
QString currentName = name;
--
1.8.1.4

View File

@ -1,31 +0,0 @@
From 0edfd42151ad57322a10a24ab4971b638e220e6e Mon Sep 17 00:00:00 2001
From: Aaron Seigo <aseigo@kde.org>
Date: Thu, 21 Feb 2013 18:14:54 +0100
Subject: [PATCH 049/111] return, not break. copy/paste error
---
kdeui/icons/kiconloader.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kdeui/icons/kiconloader.cpp b/kdeui/icons/kiconloader.cpp
index dba474d..ce6aeea 100644
--- a/kdeui/icons/kiconloader.cpp
+++ b/kdeui/icons/kiconloader.cpp
@@ -947,12 +947,12 @@ K3Icon KIconLoaderPrivate::findMatchingIcon(const QString& name, int size) const
for (int i = 0 ; i < 4 ; i++) {
icon = themeNode->theme->iconPath(currentName + ext[i], size, KIconLoader::MatchExact);
if (icon.isValid()) {
- break;
+ return icon;
}
icon = themeNode->theme->iconPath(currentName + ext[i], size, KIconLoader::MatchBest);
if (icon.isValid()) {
- break;
+ return icon;
}
}
//kDebug(264) << "Looking up" << currentName;
--
1.8.1.4

View File

@ -1 +1 @@
9baf72bc13c7a97eb6a0c153c916a3fb kdelibs-4.14.15.tar.xz
0b5d055290b5d3506f9ae2ef1ac4bef3 kdelibs-4.14.16.tar.xz

View File

@ -1,35 +0,0 @@
From e87117d7074b112f46a7c9ebc66422c581c64fc1 Mon Sep 17 00:00:00 2001
From: Aaron Seigo <aseigo@kde.org>
Date: Wed, 5 Jun 2013 15:26:47 +0200
Subject: [PATCH] turn the packagekit support feature off by default
it only works on fedora, there is no way to tell the dialog to not show
again. these are fixable, but they aren't fixed yet and may not be for
a while and i'd rather not annoy people for the lifetime of 4.11
---
plasma/CMakeLists.txt | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/plasma/CMakeLists.txt b/plasma/CMakeLists.txt
index 674550d..eeda974 100644
--- a/plasma/CMakeLists.txt
+++ b/plasma/CMakeLists.txt
@@ -6,14 +6,11 @@ if(KDE_PLATFORM_FEATURE_BINARY_COMPATIBLE_FEATURE_REDUCTION)
set(PLASMA_NO_KNEWSTUFF TRUE)
set(PLASMA_NO_SOLID TRUE)
set(PLASMA_NO_KIO TRUE)
- set(PLASMA_NO_PACKAGEKIT TRUE)
set(PLASMA_NO_KUTILS TRUE)
set(PLASMA_NO_GLOBAL_SHORTCUTS TRUE)
endif(KDE_PLATFORM_FEATURE_BINARY_COMPATIBLE_FEATURE_REDUCTION)
-if(NOT Q_WS_X11)
- set(PLASMA_NO_PACKAGEKIT TRUE)
-endif(NOT Q_WS_X11)
+set(PLASMA_NO_PACKAGEKIT TRUE)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}
${KDE4_KDECORE_INCLUDES}
--
1.8.3.1