File patch-r901693.diff of Package kdelibs4
Subject: fix for user-created desktop files not being useable on some distros
From: wstephenson@suse.de
Bug: kde#178561
Patch-upstream: 901693
--- kded/kbuildsycoca.cpp (revision 901692)
+++ kded/kbuildsycoca.cpp (revision 901693)
@@ -300,7 +300,7 @@ bool KBuildSycoca::build()
g_entryDict = serviceEntryDict;
g_changed = false;
- g_vfolder = new VFolderMenu;
+ g_vfolder = new VFolderMenu(g_bsf);
if (!m_trackId.isEmpty())
g_vfolder->setTrackId(m_trackId);
@@ -387,7 +387,6 @@ void KBuildSycoca::createMenu(const QStr
}
else
{
- g_bsf->addEntry( KSycocaEntry::Ptr::staticCast( p ) );
g_bsgf->addNewEntryTo( name, p );
}
}
--- kded/vfolder_menu.h (revision 901692)
+++ kded/vfolder_menu.h (revision 901693)
@@ -28,6 +28,8 @@
#include <kservice.h>
+class KBuildServiceFactory;
+
class VFolderMenu : public QObject
{
Q_OBJECT
@@ -51,7 +53,7 @@ public:
appsInfo *apps_info;
};
- VFolderMenu();
+ VFolderMenu(KBuildServiceFactory* serviceFactory);
~VFolderMenu();
/**
@@ -82,9 +84,11 @@ public:
Q_SIGNALS:
/**
- Emitted when a service description needs to be completed.
+ Emitted when a KService for an application needs to be created.
\sa parseMenu
+
+ This is a callback for KBuildSycoca.
*/
void newService(const QString &path, KService::Ptr *entry);
@@ -275,6 +279,9 @@ private:
QString locateMenuFile(const QString &fileName);
QString locateDirectoryFile(const QString &fileName);
void loadApplications(const QString&, const QString&);
+
+private:
+ KBuildServiceFactory* m_serviceFactory;
};
#endif
--- kded/vfolder_menu.cpp (revision 901692)
+++ kded/vfolder_menu.cpp (revision 901693)
@@ -17,6 +17,7 @@
**/
#include "vfolder_menu.h"
+#include "kbuildservicefactory.h"
#include <sys/types.h>
#include <sys/stat.h>
@@ -297,7 +298,9 @@ VFolderMenu::insertService(SubMenu *pare
}
-VFolderMenu::VFolderMenu() : m_track(false)
+VFolderMenu::VFolderMenu(KBuildServiceFactory* serviceFactory) :
+ m_track(false),
+ m_serviceFactory(serviceFactory)
{
m_usedAppsDict.reserve(797);
m_rootMenu = 0;
@@ -347,6 +350,7 @@ VFolderMenu::addApplication(const QStrin
{
service->setMenuId(id);
m_appsInfo->applications.insert(id, service);
+ m_serviceFactory->addEntry(KSycocaEntry::Ptr::staticCast(service));
}
void
Index: kded/kbuildsycoca.cpp
===================================================================
Index: kded/vfolder_menu.h
===================================================================
Index: kded/vfolder_menu.cpp
===================================================================