@@ -65,7 +65,7 @@ void LauncherBackend::setStoredApplications(const QStringList &appIds)
6565 if (m_storedApps[i].pinned) {
6666 auto found = false;
6767 for (int j = 0; j < appIds.size(); j++) {
68− auto fullAppId = resolveAppId(appIds[j]);
68+ auto fullAppId = desktopFile(appIds[j]);
6969 if (m_storedApps[i].settings->fileName() == fullAppId) {
7070 found = true;
7171 break;
@@ -81,7 +81,7 @@ void LauncherBackend::setStoredApplications(const QStringList &appIds)
8181 clearItems();
8282
8383 for (auto appId: appIds) {
84− loadDesktopFile(appId, pinnedItems.contains(resolveAppId(appId)));
84+ loadDesktopFile(appId, pinnedItems.contains(desktopFile(appId)));
8585 }
8686
8787 if (needToSync) {
@@ -91,39 +91,32 @@ void LauncherBackend::setStoredApplications(const QStringList &appIds)
9191
9292QString LauncherBackend::desktopFile(const QString &appId) const
9393{
94− auto index = findItem(appId);
95− if (index < 0) {
96− return "";
97− } else {
98− return resolveAppId(appId);
99− }
94+ QFileInfo fileInfo(QDir("/usr/share/applications"), appId);
95+ return fileInfo.absoluteFilePath();
10096}
10197
10298QString LauncherBackend::displayName(const QString &appId) const
10399{
104− auto index = findItem(appId);
105− if (index < 0) {
106− return "";
107− } else {
108− return m_storedApps[index].settings->value("Desktop Entry/Name").toString();
109− }
100+ auto desktopFile = parseDesktopFile(appId);
101+ auto displayName = desktopFile->value("Desktop Entry/Name").toString();
102+ delete desktopFile;
103+ return displayName;
110104}
111105
112106QString LauncherBackend::icon(const QString &appId) const
113107{
114− auto index = findItem(appId);
115− if (index < 0) {
116− return "";
117− } else {
118− auto iconName = m_storedApps[index].settings->value("Desktop Entry/Icon").toString();
119− if (!iconName.isEmpty()) {
120− QFileInfo iconFileInfo(iconName);
121− if (iconFileInfo.isRelative()) {
122− iconName = "image://gicon/" + iconName;
123− }
108+ auto desktopFile = parseDesktopFile(appId);
109+ auto iconName = desktopFile->value("Desktop Entry/Icon").toString();
110+ delete desktopFile;
111+
112+ if (!iconName.isEmpty()) {
113+ QFileInfo iconFileInfo(iconName);
114+ if (iconFileInfo.isRelative()) {
115+ iconName = "image://gicon/" + iconName;
124116 }
125− return iconName;
126117 }
118+
119+ return iconName;
127120}
128121
129122bool LauncherBackend::isPinned(const QString &appId) const
@@ -184,12 +177,6 @@ void LauncherBackend::triggerQuickListAction(const QString &appId, const QString
184177 Q_UNUSED(quickListId)
185178}
186179
187−QString LauncherBackend::resolveAppId(const QString &appId) const
188−{
189− QFileInfo fileInfo(QDir("/usr/share/applications"), appId);
190− return fileInfo.absoluteFilePath();
191−}
192−
193180void LauncherBackend::syncFromAccounts()
194181{
195182 auto appIds = QStringList();
@@ -235,11 +222,16 @@ void LauncherBackend::syncToAccounts()
235222 }
236223}
237224
225+QSettings *LauncherBackend::parseDesktopFile(const QString &appId) const
226+{
227+ auto fullAppId = desktopFile(appId);
228+ return new QSettings(fullAppId, QSettings::IniFormat);
229+}
230+
238231bool LauncherBackend::loadDesktopFile(const QString &appId, bool isPinned)
239232{
240233 auto item = LauncherBackendItem();
241− auto fullAppId = resolveAppId(appId);
242− item.settings = new QSettings(fullAppId, QSettings::IniFormat);
234+ item.settings = parseDesktopFile(appId);
243235 item.pinned = isPinned;
244236 m_storedApps.append(item);
245237 return true; // QSettings doesn't really indicate a failure mode right now
@@ -247,7 +239,7 @@ bool LauncherBackend::loadDesktopFile(const QString &appId, bool isPinned)
247239
248240int LauncherBackend::findItem(const QString &appId) const
249241{
250− auto fullAppId = resolveAppId(appId);
242+ auto fullAppId = desktopFile(appId);
251243 for (int i = 0; i < m_storedApps.size(); i++) {
252244 if (m_storedApps[i].settings->fileName() == fullAppId) {
253245 return i;