@@ -22,11 +22,6 @@
22#include <QDir>
22#include <QDir>
23#include <QFileInfo>
23#include <QFileInfo>
25−LauncherBackend::LauncherBackendItem::~LauncherBackendItem()
30LauncherBackend::LauncherBackend(QObject *parent):
25LauncherBackend::LauncherBackend(QObject *parent):
31 QObject(parent)
26 QObject(parent)
@@ -36,7 +31,15 @@ LauncherBackend::LauncherBackend(QObject *parent):
37LauncherBackend::~LauncherBackend()
32LauncherBackend::~LauncherBackend()
37+void LauncherBackend::clearItems()
39+ for (int i = 0; i < m_storedApps.size(); i++) {
40+ delete m_storedApps[i].settings;
42+ m_storedApps.clear();
42QStringList LauncherBackend::storedApplications() const
45QStringList LauncherBackend::storedApplications() const
@@ -69,7 +72,8 @@ void LauncherBackend::setStoredApplications(const QStringList &appIds)
72− m_storedApps.clear();
75+ clearItems();
73 for (auto appId: appIds) {
77 for (auto appId: appIds) {
74 loadDesktopFile(appId);
78 loadDesktopFile(appId);
@@ -101,7 +105,14 @@ QString LauncherBackend::icon(const QString &appId) const
101 if (index < 0) {
105 if (index < 0) {
102 return "";
106 return "";
104− return m_storedApps[index].settings->value("Desktop Entry/Icon").toString();
108+ auto iconName = m_storedApps[index].settings->value("Desktop Entry/Icon").toString();
109+ if (!iconName.isEmpty()) {
110+ QFileInfo iconFileInfo(iconName);
111+ if (iconFileInfo.isRelative()) {
112+ iconName = "image://gicon/" + iconName;
@@ -187,6 +198,11 @@ void LauncherBackend::syncFromAccounts()
189 setStoredApplications(appIds);
200 setStoredApplications(appIds);
202+ // Mark all apps as pinned (since we just refreshed the set)
203+ for (int i = 0; i < m_storedApps.size(); i++) {
204+ m_storedApps[i].pinned = true;
192void LauncherBackend::syncToAccounts()
208void LauncherBackend::syncToAccounts()