on xenial help sign in
support appid:// entries in gsettings schema and make findDesktopFile work with short-appid
dd3b31aMichael Zanetti
plugins/Unity/Launcher/backend/launcherbackend.cpp+22−13
@@ -31,7 +31,6 @@
31class LauncherBackendItem
31class LauncherBackendItem
32{
32{
33public:
33public:
34− QString desktopFile;
35 QString displayName;
34 QString displayName;
36 QString icon;
35 QString icon;
37};
36};
@@ -90,11 +89,6 @@ void LauncherBackend::setStoredApplications(const QStringList &appIds)
90
89
91QString LauncherBackend::desktopFile(const QString &appId) const
90QString LauncherBackend::desktopFile(const QString &appId) const
92{
91{
93− LauncherBackendItem *item = m_itemCache.value(appId);
94− if (item) {
95− return item->desktopFile;
96− }
97−
98 return findDesktopFile(appId);
92 return findDesktopFile(appId);
99}
93}
100
94
@@ -201,6 +195,21 @@ void LauncherBackend::syncFromAccounts()
201 }
195 }
202 QString df = findDesktopFile(appId);
196 QString df = findDesktopFile(appId);
203
197
198+ if (!df.isEmpty()) {
199+ m_storedApps << appId;
200+
201+ if (!m_itemCache.contains(appId)) {
202+ m_itemCache.insert(appId, parseDesktopFile(df));
203+ }
204+ }
205+ }
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);
212+
204 if (!df.isEmpty()) {
213 if (!df.isEmpty()) {
205 m_storedApps << appId;
214 m_storedApps << appId;
206
215
@@ -245,10 +254,13 @@ QString LauncherBackend::findDesktopFile(const QString &appId) const
245 helper = helper.replace(dashPos, 1, '/');
254 helper = helper.replace(dashPos, 1, '/');
246 }
255 }
247
256
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+ }
252 }
264 }
253 }
265 }
254
266
@@ -263,7 +275,6 @@ LauncherBackendItem* LauncherBackend::parseDesktopFile(const QString &desktopFil
263 QSettings settings(desktopFile, QSettings::IniFormat);
275 QSettings settings(desktopFile, QSettings::IniFormat);
264
276
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();
268
279
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)
292
303
293 item = new LauncherBackendItem();
304 item = new LauncherBackendItem();
294
305
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();
298
308
@@ -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;
312}
321}
313
322