on xenial help sign in
support appid:// entries in gsettings schema and make findDesktopFile work with short-appid
commitdd3b31a63c75617fa2db5b71d45b16091489fcd5 authorMichael Zanetti <michael.zanetti@canonical.com> dateMon 3 Mar 2014, 14:35 (13 years ago) parent0d7adc0
1 file changed+22−13
plugins/Unity/Launcher/backend/launcherbackend.cpp+22−13
plugins/Unity/Launcher/backend/launcherbackend.cpp+22−13
@@ -31,7 +31,6 @@
3131class LauncherBackendItem
3232{
3333public:
34− QString desktopFile;
3534 QString displayName;
3635 QString icon;
3736};
@@ -90,11 +89,6 @@ void LauncherBackend::setStoredApplications(const QStringList &appIds)
9089
9190QString LauncherBackend::desktopFile(const QString &appId) const
9291{
93− LauncherBackendItem *item = m_itemCache.value(appId);
94− if (item) {
95− return item->desktopFile;
96− }
97−
9892 return findDesktopFile(appId);
9993}
10094
@@ -201,6 +195,21 @@ void LauncherBackend::syncFromAccounts()
201195 }
202196 QString df = findDesktopFile(appId);
203197
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+
204213 if (!df.isEmpty()) {
205214 m_storedApps << appId;
206215
@@ -245,10 +254,13 @@ QString LauncherBackend::findDesktopFile(const QString &appId) const
245254 helper = helper.replace(dashPos, 1, '/');
246255 }
247256
248− Q_FOREACH(const QString &searchDir, searchDirs) {
249− QFileInfo fileInfo(QDir(searchDir), helper + ".desktop");
250− if (fileInfo.exists()) {
251− return fileInfo.absoluteFilePath();
257+ Q_FOREACH(const QString &searchDirName, searchDirs) {
258+ QDir searchDir(searchDirName);
259+ Q_FOREACH(const QString &desktopFile, searchDir.entryList(QStringList() << "*.desktop")) {
260+ if (desktopFile.startsWith(helper)) {
261+ QFileInfo fileInfo(searchDir, desktopFile);
262+ return fileInfo.absoluteFilePath();
263+ }
252264 }
253265 }
254266
@@ -263,7 +275,6 @@ LauncherBackendItem* LauncherBackend::parseDesktopFile(const QString &desktopFil
263275 QSettings settings(desktopFile, QSettings::IniFormat);
264276
265277 LauncherBackendItem* item = new LauncherBackendItem();
266− item->desktopFile = desktopFile;
267278 item->displayName = settings.value("Desktop Entry/Name").toString();
268279
269280 QString iconString = settings.value("Desktop Entry/Icon").toString();
@@ -292,7 +303,6 @@ void LauncherBackend::loadFromVariant(const QVariantMap &details)
292303
293304 item = new LauncherBackendItem();
294305
295− item->desktopFile = details.value("desktopFile").toString();
296306 item->displayName = details.value("name").toString();
297307 item->icon = details.value("icon").toString();
298308
@@ -307,7 +317,6 @@ QVariantMap LauncherBackend::itemToVariant(const QString &appId) const
307317 details.insert("id", appId);
308318 details.insert("name", item->displayName);
309319 details.insert("icon", item->icon);
310− details.insert("desktopFile", item->desktopFile);
311320 return details;
312321}
313322