backport a few upstream fixes

This commit is contained in:
Rex Dieter 2013-10-18 08:48:35 -05:00
parent 9942ba96bf
commit a4e7e17e68
4 changed files with 290 additions and 1 deletions

View File

@ -0,0 +1,98 @@
From c0af4b9506e4bacd4e70342d5668ccb9c8a7203c Mon Sep 17 00:00:00 2001
From: David Faure <faure@kde.org>
Date: Sun, 29 Sep 2013 11:57:32 +0200
Subject: [PATCH 02/12] Improve error handling when writing to the kdeinit4
socket.
Loop on EINTR, and print out an error message on failure.
---
kinit/klauncher.cpp | 31 ++++++++++++++++++++++++-------
1 file changed, 24 insertions(+), 7 deletions(-)
diff --git a/kinit/klauncher.cpp b/kinit/klauncher.cpp
index 0e055f5..6c71e99 100644
--- a/kinit/klauncher.cpp
+++ b/kinit/klauncher.cpp
@@ -38,6 +38,7 @@
#endif
#include <QtCore/QFile>
+#include <qplatformdefs.h>
#include <kconfig.h>
#include <kdebug.h>
@@ -171,6 +172,22 @@ IdleSlave::age(time_t now) const
static KLauncher* g_klauncher_self;
+
+// From qcore_unix_p.h. We could also port to QLocalSocket :)
+#define K_EINTR_LOOP(var, cmd) \
+ do { \
+ var = cmd; \
+ } while (var == -1 && errno == EINTR)
+
+ssize_t kde_safe_write(int fd, const void *buf, size_t count)
+{
+ ssize_t ret = 0;
+ K_EINTR_LOOP(ret, QT_WRITE(fd, buf, count));
+ if (ret < 0)
+ qWarning() << "write failed:" << strerror(errno);
+ return ret;
+}
+
#ifndef USE_KPROCESS_FOR_KIOSLAVES
KLauncher::KLauncher(int _kdeinitSocket)
: QObject(0),
@@ -232,7 +249,7 @@ KLauncher::KLauncher()
klauncher_header request_header;
request_header.cmd = LAUNCHER_OK;
request_header.arg_length = 0;
- write(kdeinitSocket, &request_header, sizeof(request_header));
+ kde_safe_write(kdeinitSocket, &request_header, sizeof(request_header));
#endif
}
@@ -270,8 +287,8 @@ void KLauncher::setLaunchEnv(const QString &name, const QString &value)
requestData.append(name.toLocal8Bit()).append('\0').append(value.toLocal8Bit()).append('\0');
request_header.cmd = LAUNCHER_SETENV;
request_header.arg_length = requestData.size();
- write(kdeinitSocket, &request_header, sizeof(request_header));
- write(kdeinitSocket, requestData.data(), request_header.arg_length);
+ kde_safe_write(kdeinitSocket, &request_header, sizeof(request_header));
+ kde_safe_write(kdeinitSocket, requestData.data(), request_header.arg_length);
#else
Q_UNUSED(name);
Q_UNUSED(value);
@@ -694,8 +711,8 @@ KLauncher::requestStart(KLaunchRequest *request)
<< "cmd=" << commandToString(request_header.cmd);
#endif
- write(kdeinitSocket, &request_header, sizeof(request_header));
- write(kdeinitSocket, requestData.data(), requestData.length());
+ kde_safe_write(kdeinitSocket, &request_header, sizeof(request_header));
+ kde_safe_write(kdeinitSocket, requestData.data(), requestData.length());
// Wait for pid to return.
lastRequest = request;
@@ -1161,7 +1178,7 @@ KLauncher::requestSlave(const QString &protocol,
klauncher_header request_header;
request_header.cmd = LAUNCHER_DEBUG_WAIT;
request_header.arg_length = 0;
- write(kdeinitSocket, &request_header, sizeof(request_header));
+ kde_safe_write(kdeinitSocket, &request_header, sizeof(request_header));
#else
name = QString::fromLatin1("gdb");
#endif
@@ -1343,7 +1360,7 @@ void KLauncher::terminate_kdeinit()
klauncher_header request_header;
request_header.cmd = LAUNCHER_TERMINATE_KDEINIT;
request_header.arg_length = 0;
- write(kdeinitSocket, &request_header, sizeof(request_header));
+ kde_safe_write(kdeinitSocket, &request_header, sizeof(request_header));
#endif
}
--
1.8.3.1

View File

@ -0,0 +1,39 @@
From 61c81131867af964496780cbc0adda4bfc55c7cf Mon Sep 17 00:00:00 2001
From: Luigi Toscano <luigi.toscano@tiscali.it>
Date: Mon, 14 Oct 2013 19:36:20 +0200
Subject: [PATCH 10/12] Enable translation functions for js/QScriptEngine
scripts
REVIEW: 113218
---
kross/qts/main.cpp | 1 +
kross/qts/script.cpp | 1 +
2 files changed, 2 insertions(+)
diff --git a/kross/qts/main.cpp b/kross/qts/main.cpp
index 041c306..f40c044 100644
--- a/kross/qts/main.cpp
+++ b/kross/qts/main.cpp
@@ -83,6 +83,7 @@ int main(int argc, char **argv)
app = new KApplication( /* GUIenabled */ true );
QScriptEngine* engine = new QScriptEngine();
+ engine->installTranslatorFunctions();
QScriptValue global = engine->globalObject();
//qDebug()<<"QLibraryInfo::PluginsPath="<<QLibraryInfo::location(QLibraryInfo::PluginsPath);
diff --git a/kross/qts/script.cpp b/kross/qts/script.cpp
index 41d46b2..1cee907 100644
--- a/kross/qts/script.cpp
+++ b/kross/qts/script.cpp
@@ -48,6 +48,7 @@ namespace Kross {
delete m_engine;
m_engine = new QScriptEngine();
+ m_engine->installTranslatorFunctions();
// load the Kross QScriptExtensionPlugin plugin that provides
// us a bridge between Kross and QtScript. See here plugin.h
--
1.8.3.1

View File

@ -0,0 +1,141 @@
From f723e2e7d36b597c5262bf63dde380d89ec6bfcb Mon Sep 17 00:00:00 2001
From: David Faure <faure@kde.org>
Date: Fri, 18 Oct 2013 09:44:17 +0200
Subject: [PATCH 12/12] Fix association-with-derived-mimetype again.
871cccc8a88a made it impossible to re-order file type associations.
7f42bf253009 fixed that, but changed the value of KService::mimeTypes(), which
broke okular. This new fix works the same way, but only inside kbuildsycoca
when it processes the mimetypes. The value of KService::mimeTypes() is now
restored to be exactly what's in the desktop file.
CCBUG: 321706
FIXED-IN: 4.11.3
---
kdecore/services/kservice.cpp | 45 +++++++++---------------------------------
kdecore/tests/kservicetest.cpp | 7 ++++---
kded/kbuildservicefactory.cpp | 11 ++++++++++-
3 files changed, 23 insertions(+), 40 deletions(-)
diff --git a/kdecore/services/kservice.cpp b/kdecore/services/kservice.cpp
index d7945bf..8e81929 100644
--- a/kdecore/services/kservice.cpp
+++ b/kdecore/services/kservice.cpp
@@ -227,44 +227,17 @@ void KServicePrivate::init( const KDesktopFile *config, KService* q )
<< "has an empty mimetype!";
continue;
}
-
- // The following searches through the list for duplicate, inherited mimetypes
- // For example, if application/rtf and text/plain are both listed application/rtf is removed
- // since it is inherited from text/plain
- // This is a reworked fix for revision 871cccc8a88a600c8f850a020d44bfc5f5858caa
- bool shouldAdd = true;
- KMimeType::Ptr mimeType1 = KMimeTypeRepository::self()->findMimeTypeByName(st);
- if (mimeType1) {
- foreach(const QString mime2, lstServiceTypes) {
- // Don't compare the mimetype with itself
- if (st == mime2) {
- continue;
- }
-
- // is checks for inheritance and aliases, so this should suffice
- if (mimeType1->is(mime2)) {
- shouldAdd = false;
- break;
- }
+ int initialPreference = m_initialPreference;
+ if ( st_it.hasNext() ) {
+ // TODO better syntax - separate group with mimetype=number entries?
+ bool isNumber;
+ const int val = st_it.peekNext().toInt(&isNumber);
+ if (isNumber) {
+ initialPreference = val;
+ st_it.next();
}
}
-
- // Only add unique mimetypes
- if (shouldAdd) {
- int initialPreference = m_initialPreference;
- if (st_it.hasNext()) {
- // TODO better syntax - separate group with mimetype=number entries?
- bool isNumber;
- const int val = st_it.peekNext().toInt(&isNumber);
- if (isNumber) {
- initialPreference = val;
- st_it.next();
- }
- }
- m_serviceTypes.push_back(KService::ServiceTypeAndPreference(initialPreference, st));
- } else {
- //kDebug(servicesDebugArea())<<"Not adding"<<st<<"from"<<entryPath;
- }
+ m_serviceTypes.push_back(KService::ServiceTypeAndPreference(initialPreference, st));
}
if (entryMap.contains(QLatin1String("Actions"))) {
diff --git a/kdecore/tests/kservicetest.cpp b/kdecore/tests/kservicetest.cpp
index 0dba8d9..7371475 100644
--- a/kdecore/tests/kservicetest.cpp
+++ b/kdecore/tests/kservicetest.cpp
@@ -91,7 +91,7 @@ void KServiceTest::initTestCase()
group.writeEntry("X-KDE-Library", "fakepart");
group.writeEntry("X-KDE-Protocols", "http,ftp");
group.writeEntry("X-KDE-ServiceTypes", "KParts/ReadOnlyPart,Browser/View,KParts/ReadWritePart");
- group.writeEntry("MimeType", "text/plain;");
+ group.writeEntry("MimeType", "text/plain;text/html;");
}
// faketextplugin: a ktexteditor plugin
@@ -168,6 +168,7 @@ void KServiceTest::testProperty()
KService::Ptr fakePart = KService::serviceByDesktopPath("fakepart.desktop");
QVERIFY(fakePart); // see initTestCase; it should be found.
QVERIFY(fakePart->propertyNames().contains("X-KDE-Protocols"));
+ QCOMPARE(fakePart->mimeTypes(), QStringList() << "text/plain" << "text/html"); // okular relies on subclasses being kept here
const QStringList protocols = fakePart->property("X-KDE-Protocols").toStringList();
QCOMPARE(protocols, QStringList() << "http" << "ftp");
}
@@ -356,7 +357,7 @@ void KServiceTest::testHasServiceType1() // with services constructed with a ful
KService fakepart( fakepartPath );
QVERIFY( fakepart.hasServiceType( "KParts/ReadOnlyPart" ) );
QVERIFY( fakepart.hasServiceType( "KParts/ReadWritePart" ) );
- QCOMPARE(fakepart.mimeTypes(), QStringList() << "text/plain");
+ QCOMPARE(fakepart.mimeTypes(), QStringList() << "text/plain" << "text/html");
QString faketextPluginPath = KStandardDirs::locate( "services", "faketextplugin.desktop" );
QVERIFY( !faketextPluginPath.isEmpty() );
@@ -371,7 +372,7 @@ void KServiceTest::testHasServiceType2() // with services coming from ksycoca
QVERIFY( !fakepart.isNull() );
QVERIFY( fakepart->hasServiceType( "KParts/ReadOnlyPart" ) );
QVERIFY( fakepart->hasServiceType( "KParts/ReadWritePart" ) );
- QCOMPARE(fakepart->mimeTypes(), QStringList() << "text/plain");
+ QCOMPARE(fakepart->mimeTypes(), QStringList() << "text/plain" << "text/html");
KService::Ptr faketextPlugin = KService::serviceByDesktopPath( "faketextplugin.desktop" );
QVERIFY( !faketextPlugin.isNull() );
diff --git a/kded/kbuildservicefactory.cpp b/kded/kbuildservicefactory.cpp
index 5fb091b..b4564bd 100644
--- a/kded/kbuildservicefactory.cpp
+++ b/kded/kbuildservicefactory.cpp
@@ -267,7 +267,16 @@ void KBuildServiceFactory::populateServiceTypes()
continue;
}
} else {
- m_offerHash.addServiceOffer(mime->name(), offer); // mime->name so that we resolve aliases
+ bool shouldAdd = true;
+ foreach (const QString &otherType, service->serviceTypes()) {
+ if (stName != otherType && mime->is(otherType)) {
+ shouldAdd = false;
+ }
+ }
+ if (shouldAdd) {
+ //kDebug(7021) << "Adding service" << service->entryPath() << "to" << mime->name();
+ m_offerHash.addServiceOffer(mime->name(), offer); // mime->name so that we resolve aliases
+ }
}
}
}
--
1.8.3.1

View File

@ -38,7 +38,7 @@ Source10: SOLID_HAL_LEGACY.sh
Summary: KDE Libraries
Version: 4.11.2
Release: 1%{?dist}
Release: 2%{?dist}
Name: kdelibs
Epoch: 6
@ -164,6 +164,10 @@ Patch092: return-application-icons-properly.patch
# revert disabling of packagekit
Patch093: turn-the-packagekit-support-feature-off-by-default.patch
Patch102: 0002-Improve-error-handling-when-writing-to-the-kdeinit4-.patch
Patch110: 0010-Enable-translation-functions-for-js-QScriptEngine-sc.patch
Patch112: 0012-Fix-association-with-derived-mimetype-again.patch
## security fix
# rhel patches
@ -356,6 +360,10 @@ sed -i -e "s|@@VERSION_RELEASE@@|%{version}-%{release}|" kio/kio/kprotocolmanage
%patch092 -p1 -R -b .return-application-icons-properly
%patch093 -p1 -R -b .turn-the-packagekit-support-feature-off-by-default
%patch102 -p1 -b .0002
%patch110 -p1 -b .0010
%patch112 -p1 -b .0012
# security fixes
# rhel patches
@ -604,6 +612,9 @@ gtk-update-icon-cache %{_kde4_iconsdir}/hicolor &> /dev/null || :
%changelog
* Fri Oct 18 2013 Rex Dieter <rdieter@fedoraproject.org> - 6:4.11.2-2
- backport a few upstream fixes
* Sat Sep 28 2013 Rex Dieter <rdieter@fedoraproject.org> - 6:4.11.2-1
- 4.11.2