@@ -31,7 +31,6 @@
31class LauncherBackendItem
31class LauncherBackendItem
35 QString displayName;
34 QString displayName;
36 QString icon;
35 QString icon;
@@ -90,11 +89,6 @@ void LauncherBackend::setStoredApplications(const QStringList &appIds)
91QString LauncherBackend::desktopFile(const QString &appId) const
90QString LauncherBackend::desktopFile(const QString &appId) const
93− LauncherBackendItem *item = m_itemCache.value(appId);
95− return item->desktopFile;
98 return findDesktopFile(appId);
92 return findDesktopFile(appId);
@@ -201,6 +195,21 @@ void LauncherBackend::syncFromAccounts()
202 QString df = findDesktopFile(appId);
196 QString df = findDesktopFile(appId);
198+ if (!df.isEmpty()) {
199+ m_storedApps << appId;
201+ if (!m_itemCache.contains(appId)) {
202+ m_itemCache.insert(appId, parseDesktopFile(df));
206+ if (entry.startsWith("appid://")) {
207+ QString appId = entry;
208+ appId.remove("appid://");
209+ // Strip hook name and current-user-version in case its there
210+ appId = appId.split('/').first();
211+ QString df = findDesktopFile(appId);
204 if (!df.isEmpty()) {
213 if (!df.isEmpty()) {
205 m_storedApps << appId;
214 m_storedApps << appId;
@@ -245,10 +254,13 @@ QString LauncherBackend::findDesktopFile(const QString &appId) const
245 helper = helper.replace(dashPos, 1, '/');
254 helper = helper.replace(dashPos, 1, '/');
248− Q_FOREACH(const QString &searchDir, searchDirs) {
257+ Q_FOREACH(const QString &searchDirName, searchDirs) {
249− QFileInfo fileInfo(QDir(searchDir), helper + ".desktop");
258+ QDir searchDir(searchDirName);
250− if (fileInfo.exists()) {
259+ Q_FOREACH(const QString &desktopFile, searchDir.entryList(QStringList() << "*.desktop")) {
260+ if (desktopFile.startsWith(helper)) {
261+ QFileInfo fileInfo(searchDir, desktopFile);
251− return fileInfo.absoluteFilePath();
262+ return fileInfo.absoluteFilePath();
@@ -263,7 +275,6 @@ LauncherBackendItem* LauncherBackend::parseDesktopFile(const QString &desktopFil
263 QSettings settings(desktopFile, QSettings::IniFormat);
275 QSettings settings(desktopFile, QSettings::IniFormat);
265 LauncherBackendItem* item = new LauncherBackendItem();
277 LauncherBackendItem* item = new LauncherBackendItem();
266− item->desktopFile = desktopFile;
267 item->displayName = settings.value("Desktop Entry/Name").toString();
278 item->displayName = settings.value("Desktop Entry/Name").toString();
269 QString iconString = settings.value("Desktop Entry/Icon").toString();
280 QString iconString = settings.value("Desktop Entry/Icon").toString();
@@ -292,7 +303,6 @@ void LauncherBackend::loadFromVariant(const QVariantMap &details)
293 item = new LauncherBackendItem();
304 item = new LauncherBackendItem();
295− item->desktopFile = details.value("desktopFile").toString();
296 item->displayName = details.value("name").toString();
306 item->displayName = details.value("name").toString();
297 item->icon = details.value("icon").toString();
307 item->icon = details.value("icon").toString();
@@ -307,7 +317,6 @@ QVariantMap LauncherBackend::itemToVariant(const QString &appId) const
307 details.insert("id", appId);
317 details.insert("id", appId);
308 details.insert("name", item->displayName);
318 details.insert("name", item->displayName);
309 details.insert("icon", item->icon);
319 details.insert("icon", item->icon);
310− details.insert("desktopFile", item->desktopFile);
311 return details;
320 return details;