diff -u -r kded.orig/kbuildmimetypefactory.cpp kded/kbuildmimetypefactory.cpp --- kded.orig/kbuildmimetypefactory.cpp 2008-10-22 21:04:54.000000000 -0200 +++ kded/kbuildmimetypefactory.cpp 2009-03-02 17:14:11.000000000 -0300 @@ -347,15 +347,3 @@ // END TODO str << QString(""); // end of list marker (has to be a string !) } - -void -KBuildMimeTypeFactory::addEntry(const KSycocaEntry::Ptr& newEntry) -{ - KMimeType::Ptr mimeType = KMimeType::Ptr::staticCast( newEntry ); - if ( m_entryDict->value( newEntry->name() ) ) - { - // Already exists -> replace - KSycocaFactory::removeEntry(newEntry->name()); - } - KSycocaFactory::addEntry(newEntry); -} Somente em kded: kbuildmimetypefactory.cpp~ Somente em kded.orig: .kbuildmimetypefactory.cpp.swp diff -u -r kded.orig/kbuildmimetypefactory.h kded/kbuildmimetypefactory.h --- kded.orig/kbuildmimetypefactory.h 2008-10-17 08:01:38.000000000 -0300 +++ kded/kbuildmimetypefactory.h 2009-03-02 17:17:22.000000000 -0300 @@ -54,11 +54,6 @@ virtual KMimeType * createEntry( int ) const { assert(0); return 0L; } /** - * Add entry - */ - virtual void addEntry(const KSycocaEntry::Ptr& newEntry); - - /** * Write out mime type specific index files. */ virtual void save(QDataStream &str); Somente em kded: kbuildmimetypefactory.h~ diff -u -r kded.orig/kbuildservicefactory.cpp kded/kbuildservicefactory.cpp --- kded.orig/kbuildservicefactory.cpp 2009-02-26 11:18:32.000000000 -0300 +++ kded/kbuildservicefactory.cpp 2009-03-02 17:15:51.000000000 -0300 @@ -376,15 +376,5 @@ const KService::Ptr service = KService::Ptr::staticCast( newEntry ); m_dupeDict.insert(newEntry); - KSycocaEntry::Ptr oldEntry = m_entryDict->value(newEntry->storageId()); - if (oldEntry) { - // Already exists -> replace - //KService::Ptr oldService = KService::Ptr::staticCast(oldEntry); - // We found a more-local override, e.g. ~/.local/share/applications/kde4/foo.desktop - // So forget about the more global file. - //kDebug(7021) << "removing" << oldService.data() << oldService->entryPath() << "because of" << service->entryPath(); - KSycocaFactory::removeEntry(newEntry->storageId()); - } - KSycocaFactory::addEntry(newEntry); } Somente em kded: kbuildservicefactory.cpp~ diff -u -r kded.orig/kbuildservicetypefactory.cpp kded/kbuildservicetypefactory.cpp --- kded.orig/kbuildservicetypefactory.cpp 2008-10-22 21:04:54.000000000 -0200 +++ kded/kbuildservicetypefactory.cpp 2009-03-02 17:16:54.000000000 -0300 @@ -132,13 +132,10 @@ void KBuildServiceTypeFactory::addEntry(const KSycocaEntry::Ptr& newEntry) { - KServiceType::Ptr serviceType = KServiceType::Ptr::staticCast( newEntry ); - if ( m_entryDict->value( newEntry->name() ) ) { - // Already exists -> replace - KSycocaFactory::removeEntry(newEntry->name()); - } KSycocaFactory::addEntry(newEntry); + KServiceType::Ptr serviceType = KServiceType::Ptr::staticCast( newEntry ); + const QMap<QString,QVariant::Type>& pd = serviceType->propertyDefs(); QMap<QString,QVariant::Type>::ConstIterator pit = pd.begin(); for( ; pit != pd.end(); ++pit ) { Somente em kded: kbuildservicetypefactory.cpp~ --- kdecore/sycoca/ksycocafactory.cpp~ 2009-02-26 11:18:54.000000000 -0300 +++ kdecore/sycoca/ksycocafactory.cpp 2009-03-02 17:19:48.000000000 -0300 @@ -150,6 +150,19 @@ if (!d->m_sycocaDict) return; // Error! + KSycocaEntry::Ptr oldEntry = m_entryDict->value(newEntry->storageId()); + if (oldEntry) { + // Already exists -> replace + // We found a more-local override, e.g. ~/.local/share/applications/kde4/foo.desktop + // So forget about the more global file. + // + // This can also happen with two .protocol files using the same protocol= entry. + // If we didn't remove one here, we would end up asserting because save() + // wasn't called on one of the entries. + //kDebug(7021) << "removing" << oldEntry.data() << oldEntry->entryPath() << "because of" << newEntry->entryPath() << "they have the same storageId" << newEntry->storageId(); + removeEntry(newEntry->storageId()); + } + const QString name = newEntry->storageId(); m_entryDict->insert( name, newEntry ); d->m_sycocaDict->add( name, newEntry );