Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Please login to access the resource
openSUSE:Evergreen:11.1
kdelibs4
patch-r901205.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File patch-r901205.diff of Package kdelibs4
Subject: fix File Associations settings are not saved From: wstephenson@suse.de Bug: kde#164584,kde#178560 Patch-upstream: 901205 --- kded/kded.cpp (revision 901204) +++ kded/kded.cpp (revision 901205) @@ -190,7 +190,7 @@ void Kded::initModules() if( !sessionUID.isEmpty() && uid_t( sessionUID.toInt() ) != getuid()) kde_running = false; // Preload kded modules. - KService::List kdedModules = KServiceTypeTrader::self()->query("KDEDModule"); + const KService::List kdedModules = KServiceTypeTrader::self()->query("KDEDModule"); for(KService::List::ConstIterator it = kdedModules.begin(); it != kdedModules.end(); ++it) { KService::Ptr service = *it; @@ -234,7 +234,7 @@ void Kded::loadSecondPhase() kDebug(7020) << "Loading second phase autoload"; KSharedConfig::Ptr config = KGlobal::config(); KService::List kdedModules = KServiceTypeTrader::self()->query("KDEDModule"); - for(KService::List::ConstIterator it = kdedModules.begin(); it != kdedModules.end(); ++it) + for(KService::List::ConstIterator it = kdedModules.constBegin(); it != kdedModules.constEnd(); ++it) { KService::Ptr service = *it; bool autoload = service->property("X-KDE-Kded-autoload", QVariant::Bool).toBool(); @@ -386,8 +386,8 @@ void Kded::updateDirWatch() this, SLOT(dirDeleted(const QString&))); // For each resource - for( QStringList::ConstIterator it = m_allResourceDirs.begin(); - it != m_allResourceDirs.end(); + for( QStringList::ConstIterator it = m_allResourceDirs.constBegin(); + it != m_allResourceDirs.constEnd(); ++it ) { readDirectory( *it ); @@ -609,7 +609,7 @@ KUpdateD::KUpdateD() QObject::connect( m_pDirWatch, SIGNAL(dirty(const QString&)), this, SLOT(slotNewUpdateFile())); - QStringList dirs = KGlobal::dirs()->findDirs("data", "kconf_update"); + const QStringList dirs = KGlobal::dirs()->findDirs("data", "kconf_update"); for( QStringList::ConstIterator it = dirs.begin(); it != dirs.end(); ++it ) --- kded/kbuildsycoca.cpp (revision 901204) +++ kded/kbuildsycoca.cpp (revision 901205) @@ -222,8 +222,8 @@ bool KBuildSycoca::build() const KSycocaResourceList *list = (*factory)->resourceList(); if (!list) continue; - for( KSycocaResourceList::ConstIterator it1 = list->begin(); - it1 != list->end(); + for( KSycocaResourceList::ConstIterator it1 = list->constBegin(); + it1 != list->constEnd(); ++it1 ) { KSycocaResource res = (*it1); @@ -235,8 +235,8 @@ bool KBuildSycoca::build() g_ctimeInfo = new KCTimeInfo(); // This is a build factory too, don't delete!! bool uptodate = true; // For all resources - for( QStringList::ConstIterator it1 = allResources.begin(); - it1 != allResources.end(); + for( QStringList::ConstIterator it1 = allResources.constBegin(); + it1 != allResources.constEnd(); ++it1 ) { g_changed = false; @@ -255,8 +255,8 @@ bool KBuildSycoca::build() // For each factory KBSEntryDictList::const_iterator ed_it = entryDictList.begin(); const KBSEntryDictList::const_iterator ed_end = entryDictList.end(); - KSycocaFactoryList::const_iterator it = factories()->begin(); - const KSycocaFactoryList::const_iterator end = factories()->end(); + KSycocaFactoryList::const_iterator it = factories()->constBegin(); + const KSycocaFactoryList::const_iterator end = factories()->constEnd(); for ( ; it != end; ++it, ++ed_it ) { g_factory = (*it); @@ -266,16 +266,16 @@ bool KBuildSycoca::build() const KSycocaResourceList *list = g_factory->resourceList(); if (!list) continue; - for( KSycocaResourceList::ConstIterator it2 = list->begin(); - it2 != list->end(); + for( KSycocaResourceList::ConstIterator it2 = list->constBegin(); + it2 != list->constEnd(); ++it2 ) { KSycocaResource res = (*it2); if (res.resource != (*it1)) continue; // For each file in the resource - for( QStringList::ConstIterator it3 = relFiles.begin(); - it3 != relFiles.end(); + for( QStringList::ConstIterator it3 = relFiles.constBegin(); + it3 != relFiles.constEnd(); ++it3 ) { // Check if file matches filter --- kded/kbuildmimetypefactory.cpp (revision 901204) +++ kded/kbuildmimetypefactory.cpp (revision 901205) @@ -60,8 +60,8 @@ KMimeType::Ptr KBuildMimeTypeFactory::fi QString name = _name; if (options & KMimeType::ResolveAliases) { - QMap<QString, QString>::const_iterator it = aliases().find(_name); - if (it != aliases().end()) + QMap<QString, QString>::const_iterator it = aliases().constFind(_name); + if (it != aliases().constEnd()) name = *it; } --- kded/kbuildservicefactory.cpp (revision 901204) +++ kded/kbuildservicefactory.cpp (revision 901205) @@ -23,7 +23,6 @@ #include "ksycoca.h" #include "ksycocadict.h" #include "kresourcelist.h" -#include "kmimetype.h" #include "kdesktopfile.h" #include <kglobal.h> @@ -139,41 +138,59 @@ void KBuildServiceFactory::save(QDataStr void KBuildServiceFactory::collectInheritedServices() { - // With multiple inheritance, the "mimeTypeInheritanceLevel" isn't exactly - // correct (it should only be increased when going up a level, not when iterating - // through the multiple parents at a given level). I don't think we care, - // but just in case we do, this is the reason I didn't port this to mimeType->allParentMimeTypes. + // For each mimetype, go up the parent-mimetype chains and collect offers. + // For "removed associations" to work, we can't just grab everything from all parents. + // We need to process parents before children, hence the recursive call in + // collectInheritedServices(mime) and the QSet to process a given parent only once. + QSet<KMimeType::Ptr> visitedMimes; const KMimeType::List allMimeTypes = m_mimeTypeFactory->allMimeTypes(); KMimeType::List::const_iterator itm = allMimeTypes.begin(); for( ; itm != allMimeTypes.end(); ++itm ) { const KMimeType::Ptr mimeType = *itm; - const QString mimeTypeName = mimeType->name(); - QStringList parents = mimeType->parentMimeTypes(); - int mimeTypeInheritanceLevel = 0; - while ( !parents.isEmpty() ) { - const QString& parent = parents.takeFirst(); - const KMimeType::Ptr parentMimeType = m_mimeTypeFactory->findMimeTypeByName( parent ); - if ( parentMimeType ) { - ++mimeTypeInheritanceLevel; - const QList<KServiceOffer>& offers = m_offerHash.offersFor(parent); - QList<KServiceOffer>::const_iterator itserv = offers.begin(); - const QList<KServiceOffer>::const_iterator endserv = offers.end(); - for ( ; itserv != endserv; ++itserv ) { + collectInheritedServices(mimeType, visitedMimes); + } + // TODO do the same for all/all and all/allfiles, if (!KServiceTypeProfile::configurationMode()) +} + +void KBuildServiceFactory::collectInheritedServices(KMimeType::Ptr mimeType, QSet<KMimeType::Ptr>& visitedMimes) +{ + if (visitedMimes.contains(mimeType)) + return; + visitedMimes.insert(mimeType); + + // With multiple inheritance, the "mimeTypeInheritanceLevel" isn't exactly + // correct (it should only be increased when going up a level, not when iterating + // through the multiple parents at a given level). I don't think we care, though. + int mimeTypeInheritanceLevel = 0; + + const QString mimeTypeName = mimeType->name(); + Q_FOREACH(const QString& parent, mimeType->parentMimeTypes()) { + const KMimeType::Ptr parentMimeType = + m_mimeTypeFactory->findMimeTypeByName(parent, KMimeType::ResolveAliases); + + if ( parentMimeType ) { + collectInheritedServices(parentMimeType, visitedMimes); + + ++mimeTypeInheritanceLevel; + const QList<KServiceOffer>& offers = m_offerHash.offersFor(parent); + QList<KServiceOffer>::const_iterator itserv = offers.begin(); + const QList<KServiceOffer>::const_iterator endserv = offers.end(); + for ( ; itserv != endserv; ++itserv ) { + if (!m_offerHash.hasRemovedOffer(mimeTypeName, (*itserv).service())) { KServiceOffer offer(*itserv); offer.setMimeTypeInheritanceLevel(mimeTypeInheritanceLevel); //kDebug(7021) << "INHERITANCE: Adding service" << (*itserv).service()->entryPath() << "to" << mimeTypeName << "mimeTypeInheritanceLevel=" << mimeTypeInheritanceLevel; m_offerHash.addServiceOffer( mimeTypeName, offer ); } - parents += parentMimeType->parentMimeTypes(); - } else { - kWarning(7012) << "parent mimetype not found:" << parent; - break; } + } else { + kWarning(7012) << "parent mimetype not found:" << parent; + break; } } - // TODO do the same for all/all and all/allfiles, if (!KServiceTypeProfile::configurationMode()) } + void KBuildServiceFactory::populateServiceTypes() { // For every service... @@ -235,8 +252,8 @@ void KBuildServiceFactory::populateServi int offersOffset = 0; const int offerEntrySize = sizeof( qint32 ) * 4; // four qint32s, see saveOfferList. - KSycocaEntryDict::const_iterator itstf = m_serviceTypeFactory->entryDict()->begin(); - const KSycocaEntryDict::const_iterator endstf = m_serviceTypeFactory->entryDict()->end(); + KSycocaEntryDict::const_iterator itstf = m_serviceTypeFactory->entryDict()->constBegin(); + const KSycocaEntryDict::const_iterator endstf = m_serviceTypeFactory->entryDict()->constEnd(); for( ; itstf != endstf; ++itstf ) { KServiceType::Ptr entry = KServiceType::Ptr::staticCast( *itstf ); const int numOffers = m_offerHash.offersFor(entry->name()).count(); @@ -245,8 +262,8 @@ void KBuildServiceFactory::populateServi offersOffset += offerEntrySize * numOffers; } } - KSycocaEntryDict::const_iterator itmtf = m_mimeTypeFactory->entryDict()->begin(); - const KSycocaEntryDict::const_iterator endmtf = m_mimeTypeFactory->entryDict()->end(); + KSycocaEntryDict::const_iterator itmtf = m_mimeTypeFactory->entryDict()->constBegin(); + const KSycocaEntryDict::const_iterator endmtf = m_mimeTypeFactory->entryDict()->constEnd(); for( ; itmtf != endmtf; ++itmtf ) { KMimeType::Ptr entry = KMimeType::Ptr::staticCast( *itmtf ); @@ -263,8 +280,8 @@ void KBuildServiceFactory::saveOfferList m_offerListOffset = str.device()->pos(); // For each entry in servicetypeFactory - KSycocaEntryDict::const_iterator itstf = m_serviceTypeFactory->entryDict()->begin(); - const KSycocaEntryDict::const_iterator endstf = m_serviceTypeFactory->entryDict()->end(); + KSycocaEntryDict::const_iterator itstf = m_serviceTypeFactory->entryDict()->constBegin(); + const KSycocaEntryDict::const_iterator endstf = m_serviceTypeFactory->entryDict()->constEnd(); for( ; itstf != endstf; ++itstf ) { // export associated services const KServiceType::Ptr entry = KServiceType::Ptr::staticCast( *itstf ); @@ -273,8 +290,8 @@ void KBuildServiceFactory::saveOfferList QList<KServiceOffer> offers = m_offerHash.offersFor(entry->name()); qStableSort( offers ); // by initial preference - for(QList<KServiceOffer>::const_iterator it2 = offers.begin(); - it2 != offers.end(); ++it2) { + for(QList<KServiceOffer>::const_iterator it2 = offers.constBegin(); + it2 != offers.constEnd(); ++it2) { //kDebug(7021) << "servicetype offers list:" << entry->name() << "->" << (*it2).service()->entryPath(); str << (qint32) entry->offset(); @@ -286,8 +303,8 @@ void KBuildServiceFactory::saveOfferList } // For each entry in mimeTypeFactory - KSycocaEntryDict::const_iterator itmtf = m_mimeTypeFactory->entryDict()->begin(); - const KSycocaEntryDict::const_iterator endmtf = m_mimeTypeFactory->entryDict()->end(); + KSycocaEntryDict::const_iterator itmtf = m_mimeTypeFactory->entryDict()->constBegin(); + const KSycocaEntryDict::const_iterator endmtf = m_mimeTypeFactory->entryDict()->constEnd(); for( ; itmtf != endmtf; ++itmtf ) { // export associated services const KMimeType::Ptr entry = KMimeType::Ptr::staticCast( *itmtf ); @@ -295,8 +312,8 @@ void KBuildServiceFactory::saveOfferList QList<KServiceOffer> offers = m_offerHash.offersFor(entry->name()); qStableSort( offers ); // by initial preference - for(QList<KServiceOffer>::const_iterator it2 = offers.begin(); - it2 != offers.end(); ++it2) { + for(QList<KServiceOffer>::const_iterator it2 = offers.constBegin(); + it2 != offers.constEnd(); ++it2) { //kDebug(7021) << "mimetype offers list:" << entry->name() << "->" << (*it2).service()->entryPath() << "pref" << (*it2).preference(); Q_ASSERT((*it2).service()->offset() != 0); str << (qint32) entry->offset(); --- kded/kbuildservicetypefactory.cpp (revision 901204) +++ kded/kbuildservicetypefactory.cpp (revision 901205) @@ -109,7 +109,7 @@ KBuildServiceTypeFactory::saveHeader(QDa { KSycocaFactory::saveHeader(str); str << (qint32) m_propertyTypeDict.count(); - for (QMap<QString, int>::ConstIterator it = m_propertyTypeDict.begin(); it != m_propertyTypeDict.end(); ++it) { + for (QMap<QString, int>::ConstIterator it = m_propertyTypeDict.constBegin(); it != m_propertyTypeDict.constEnd(); ++it) { str << it.key() << (qint32)it.value(); } } --- kded/kmimeassociations.h (revision 901204) +++ kded/kmimeassociations.h (revision 901205) @@ -30,6 +30,7 @@ class KConfigGroup; struct ServiceTypeOffersData { QList<KServiceOffer> offers; // service + initial preference + allow as default QSet<KService::Ptr> offerSet; // for quick contains() check + QSet<KService::Ptr> removedOffers; // remember removed offers explicitely }; class KOfferHash @@ -44,6 +45,7 @@ public: } void addServiceOffer(const QString& serviceType, const KServiceOffer& offer); void removeServiceOffer(const QString& serviceType, KService::Ptr service); + bool hasRemovedOffer(const QString& serviceType, KService::Ptr service) const; private: KOfferHash(const KOfferHash&); // forbidden --- kded/test/kmimeassociationstest.cpp (revision 901204) +++ kded/test/kmimeassociationstest.cpp (revision 901205) @@ -84,14 +84,14 @@ static bool offerListHasService( const K return found; } -static void writeAppDesktopFile(const QString& path, const char* mimetype) +static void writeAppDesktopFile(const QString& path, const QStringList& mimeTypes) { KDesktopFile file(path); KConfigGroup group = file.desktopGroup(); group.writeEntry("Name", "FakeApplication"); group.writeEntry("Type", "Application"); group.writeEntry("Exec", "ls"); - group.writeEntry("MimeType", QString(mimetype) + ';'); + group.writeXdgListEntry("MimeType", mimeTypes); } /** @@ -125,15 +125,22 @@ private Q_SLOTS: fakeTextApplication = m_localApps + "faketextapplication.desktop"; if (!QFile::exists(fakeTextApplication)) { mustUpdateKSycoca = true; - writeAppDesktopFile(fakeTextApplication, "text/plain"); + writeAppDesktopFile(fakeTextApplication, QStringList() << "text/plain"); } fakeJpegApplication = m_localApps + "fakejpegapplication.desktop"; if (!QFile::exists(fakeJpegApplication)) { mustUpdateKSycoca = true; - writeAppDesktopFile(fakeJpegApplication, "image/jpeg"); + writeAppDesktopFile(fakeJpegApplication, QStringList() << "image/jpeg"); } + fakeArkApplication = m_localApps + "fakearkapplication.desktop"; + if (!QFile::exists(fakeArkApplication)) { + mustUpdateKSycoca = true; + writeAppDesktopFile(fakeArkApplication, QStringList() << "application/zip"); + } + + if ( mustUpdateKSycoca ) { // Update ksycoca in ~/.kde-unit-test after creating the above runKBuildSycoca(); @@ -299,7 +306,7 @@ private Q_SLOTS: QVERIFY(offerListHasService(offers, fakeTextApplication, true)); } - void testRemovedAssociation() + void testRemoveAssociationFromParent() { // I removed kate from text/plain, and it would still appear in text/x-java. @@ -317,6 +324,61 @@ private Q_SLOTS: QVERIFY(!offerListHasService(offers, fakeTextApplication, false)); } + void testRemovedImplicitAssociation() // remove (implicit) assoc from derived mimetype + { + // #164584: Removing ark from opendocument.text didn't work + const QString opendocument = "application/vnd.oasis.opendocument.text"; + KService::List offers = KMimeTypeTrader::self()->query(opendocument); + QVERIFY(offerListHasService(offers, fakeArkApplication, true)); + + writeToMimeApps(QByteArray("[Removed Associations]\n" + "application/vnd.oasis.opendocument.text=fakearkapplication.desktop;\n")); + + offers = KMimeTypeTrader::self()->query(opendocument); + QVERIFY(!offerListHasService(offers, fakeArkApplication, false)); + + offers = KMimeTypeTrader::self()->query("application/zip"); + QVERIFY(offerListHasService(offers, fakeArkApplication, true)); + } + + void testRemovedImplicitAssociation178560() + { + // #178560: Removing ark from interface/x-winamp-skin didn't work + const QString mime = "interface/x-winamp-skin"; + KService::List offers = KMimeTypeTrader::self()->query(mime); + QVERIFY(offerListHasService(offers, fakeArkApplication, true)); + + writeToMimeApps(QByteArray("[Removed Associations]\n" + "interface/x-winamp-skin=fakearkapplication.desktop;\n")); + + offers = KMimeTypeTrader::self()->query(mime); + QVERIFY(!offerListHasService(offers, fakeArkApplication, false)); + + offers = KMimeTypeTrader::self()->query("application/zip"); + QVERIFY(offerListHasService(offers, fakeArkApplication, true)); + } + + // remove assoc from a mime which is both a parent and a derived mimetype + void testRemovedMiddleAssociation() + { + // More tricky: x-theme inherits x-desktop inherits text/plain, + // if we remove an association for x-desktop then x-theme shouldn't + // get it from text/plain... + + KService::List offers; + writeToMimeApps(QByteArray("[Removed Associations]\n" + "application/x-desktop=faketextapplication.desktop;\n")); + + offers = KMimeTypeTrader::self()->query("text/plain"); + QVERIFY(offerListHasService(offers, fakeTextApplication, true)); + + offers = KMimeTypeTrader::self()->query("application/x-desktop"); + QVERIFY(!offerListHasService(offers, fakeTextApplication, false)); + + offers = KMimeTypeTrader::self()->query("application/x-theme"); + QVERIFY(!offerListHasService(offers, fakeTextApplication, false)); + } + private: typedef QMap<QString /*mimetype*/, QStringList> ExpectedResultsMap; @@ -387,6 +449,7 @@ private: QByteArray m_mimeAppsFileContents; QString fakeTextApplication; QString fakeJpegApplication; + QString fakeArkApplication; ExpectedResultsMap preferredApps; ExpectedResultsMap removedApps; --- kded/kctimefactory.cpp (revision 901204) +++ kded/kctimefactory.cpp (revision 901205) @@ -53,8 +53,8 @@ KCTimeInfo::save(QDataStream &str) KSycocaFactory::save(str); m_dictOffset = str.device()->pos(); - Dict::const_iterator it = ctimeDict.begin(); - const Dict::const_iterator end = ctimeDict.end(); + Dict::const_iterator it = ctimeDict.constBegin(); + const Dict::const_iterator end = ctimeDict.constEnd(); for ( ; it != end; ++it ) { str << it.key() << it.value(); --- kded/kmimeassociations.cpp (revision 901204) +++ kded/kmimeassociations.cpp (revision 901205) @@ -105,7 +105,7 @@ void KMimeAssociations::parseRemovedAsso if (!pService) { kDebug(7021) << file << "specifies unknown service" << service << "in" << group.name(); } else { - //kDebug(7021) << "removing mime" << mime << "from service" << service; + //kDebug(7021) << "removing mime" << mime << "from service" << pService.data() << pService->entryPath(); m_offerHash.removeServiceOffer(mime, pService); } } @@ -123,7 +123,7 @@ void KOfferHash::addServiceOffer(const Q offers.append( offer ); offerSet.insert( service ); } else { - // kDebug(7021) << service.offers() << service->entryPath() << "already in" << serviceType; + //kDebug(7021) << service->entryPath() << "already in" << serviceType; // This happens when mimeapps.list mentions a service (to make it preferred) // Update initialPreference to qMax(existing offer, new offer) QMutableListIterator<KServiceOffer> sfit(data.offers); @@ -136,14 +136,21 @@ void KOfferHash::addServiceOffer(const Q void KOfferHash::removeServiceOffer(const QString& serviceType, KService::Ptr service) { - QHash<QString, ServiceTypeOffersData>::iterator it = m_serviceTypeData.find(serviceType); + ServiceTypeOffersData& data = m_serviceTypeData[serviceType]; // find or create + data.removedOffers.insert(service); + data.offerSet.remove(service); + QMutableListIterator<KServiceOffer> sfit(data.offers); + while (sfit.hasNext()) { + if (sfit.next().service()->storageId() == service->storageId()) + sfit.remove(); + } +} + +bool KOfferHash::hasRemovedOffer(const QString& serviceType, KService::Ptr service) const +{ + QHash<QString, ServiceTypeOffersData>::const_iterator it = m_serviceTypeData.find(serviceType); if (it != m_serviceTypeData.end()) { - ServiceTypeOffersData& data = *it; - data.offerSet.remove(service); - QMutableListIterator<KServiceOffer> sfit(data.offers); - while (sfit.hasNext()) { - if (sfit.next().service()->storageId() == service->storageId()) - sfit.remove(); - } + return (*it).removedOffers.contains(service); } + return false; } --- kded/vfolder_menu.cpp (revision 901204) +++ kded/vfolder_menu.cpp (revision 901205) @@ -323,8 +323,8 @@ VFolderMenu::~VFolderMenu() foreach (appsInfo *info, m_appsInfoStack) \ { \ KService::List *list = info->dictCategories[category]; \ - if (list) for(KService::List::ConstIterator it = list->begin(); \ - it != list->end(); ++it) \ + if (list) for(KService::List::ConstIterator it = list->constBegin(); \ + it != list->constEnd(); ++it) \ { #define FOR_CATEGORY_END } } @@ -366,7 +366,7 @@ VFolderMenu::buildApplicationIndex(bool continue; } - QStringList cats = s->categories(); + const QStringList cats = s->categories(); for(QStringList::ConstIterator it2 = cats.begin(); it2 != cats.end(); ++it2) { @@ -637,7 +637,7 @@ VFolderMenu::mergeMenus(QDomElement &doc else if( e.tagName() == "MergeDir") { QString dir = absoluteDir(e.text(), e.attribute("__BaseDir"), true); - QStringList dirs = KGlobal::dirs()->findDirs("xdgconf-menu", dir); + const QStringList dirs = KGlobal::dirs()->findDirs("xdgconf-menu", dir); for(QStringList::ConstIterator it=dirs.begin(); it != dirs.end(); ++it) { @@ -657,8 +657,8 @@ VFolderMenu::mergeMenus(QDomElement &doc KStandardDirs::NoDuplicates, fileList); } - for(QStringList::ConstIterator it=fileList.begin(); - it != fileList.end(); ++it) + for(QStringList::ConstIterator it=fileList.constBegin(); + it != fileList.constEnd(); ++it) { pushDocInfo(*it); mergeFile(docElem, n); @@ -807,12 +807,11 @@ VFolderMenu::locateDirectoryFile(const Q } // First location in the list wins - QString tmp; - for(QStringList::ConstIterator it = m_directoryDirs.begin(); - it != m_directoryDirs.end(); + for(QStringList::ConstIterator it = m_directoryDirs.constBegin(); + it != m_directoryDirs.constEnd(); ++it) { - tmp = (*it)+fileName; + QString tmp = (*it)+fileName; if (KStandardDirs::exists(tmp)) return tmp; } @@ -1044,8 +1043,8 @@ kDebug(7021) << "processKDELegacyDirs()" KStandardDirs::Recursive | KStandardDirs::NoDuplicates, relFiles); - for(QStringList::ConstIterator it = relFiles.begin(); - it != relFiles.end(); ++it) + for(QStringList::ConstIterator it = relFiles.constBegin(); + it != relFiles.constEnd(); ++it) { if (!m_forcedLegacyLoad && (*it).endsWith(".directory")) { @@ -1638,7 +1637,7 @@ VFolderMenu::parseMenu(const QString &fi m_legacyLoaded = false; m_appsInfo = 0; - QStringList dirs = KGlobal::dirs()->resourceDirs("xdgconf-menu"); + const QStringList dirs = KGlobal::dirs()->resourceDirs("xdgconf-menu"); for(QStringList::ConstIterator it=dirs.begin(); it != dirs.end(); ++it) { --- kded/kbuildservicefactory.h (revision 901204) +++ kded/kbuildservicefactory.h (revision 901205) @@ -24,6 +24,7 @@ #include <QtCore/QStringList> #include "kmimeassociations.h" +#include <kmimetype.h> #include <kservicefactory.h> // We export the services to the service group factory! class KBuildServiceGroupFactory; @@ -87,6 +88,7 @@ public: private: void saveOfferList(QDataStream &str); void collectInheritedServices(); + void collectInheritedServices(KMimeType::Ptr mime, QSet<KMimeType::Ptr>& visitedMimes); QHash<QString, KService::Ptr> m_nameMemoryHash; // m_nameDict is not useable while building ksycoca QHash<QString, KService::Ptr> m_relNameMemoryHash; // m_relNameDict is not useable while building ksycoca Index: kded/kded.cpp =================================================================== Index: kded/kbuildsycoca.cpp =================================================================== Index: kded/kbuildmimetypefactory.cpp =================================================================== Index: kded/kbuildservicefactory.cpp =================================================================== Index: kded/kbuildservicetypefactory.cpp =================================================================== Index: kded/kmimeassociations.h =================================================================== Index: kded/test/kmimeassociationstest.cpp =================================================================== Index: kded/kctimefactory.cpp =================================================================== Index: kded/kmimeassociations.cpp =================================================================== Index: kded/vfolder_menu.cpp =================================================================== Index: kded/kbuildservicefactory.h ===================================================================
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor