on xenial help sign in
Use a special marker to note the defaults list instead of an empty list
1e92c4cMichael Terry
plugins/AccountsService/com.canonical.unity.AccountsService.xml+1−1
@@ -17,7 +17,7 @@
17 </property>
17 </property>
18
18
19 <property name="launcher-items" type="aa{sv}" access="readwrite">
19 <property name="launcher-items" type="aa{sv}" access="readwrite">
20− <annotation name="org.freedesktop.Accounts.DefaultValue" value="[]"/>
20+ <annotation name="org.freedesktop.Accounts.DefaultValue" value="[{'defaults': <true>}]"/>
21 </property>
21 </property>
22
22
23 </interface>
23 </interface>
plugins/Unity/Launcher/backend/launcherbackend.cpp+12−2
@@ -167,16 +167,18 @@ void LauncherBackend::triggerQuickListAction(const QString &appId, const QString
167void LauncherBackend::syncFromAccounts()
167void LauncherBackend::syncFromAccounts()
168{
168{
169 QList<QVariantMap> apps;
169 QList<QVariantMap> apps;
170+ bool defaults = true;
170
171
171 clearItems();
172 clearItems();
172
173
173 if (m_user != "" && m_accounts != nullptr) {
174 if (m_user != "" && m_accounts != nullptr) {
174 auto variant = m_accounts->getUserProperty(m_user, "launcher-items");
175 auto variant = m_accounts->getUserProperty(m_user, "launcher-items");
175− variant.value<QDBusArgument>() >> apps;
176+ apps = qdbus_cast<QList<QVariantMap>>(variant.value<QDBusArgument>());
177+ defaults = isDefaultsItem(apps);
176 }
178 }
177
179
178 // TODO: load default pinned ones from default config, instead of hardcoding here...
180 // TODO: load default pinned ones from default config, instead of hardcoding here...
179− if (apps.isEmpty()) {
181+ if (defaults) {
180 apps <<
182 apps <<
181 makeAppDetails("phone-app.desktop", true) <<
183 makeAppDetails("phone-app.desktop", true) <<
182 makeAppDetails("camera-app.desktop", true) <<
184 makeAppDetails("camera-app.desktop", true) <<
@@ -237,6 +239,14 @@ QVariantMap LauncherBackend::makeAppDetails(const QString &appId, bool pinned) c
237 return details;
239 return details;
238}
240}
239
241
242+bool LauncherBackend::isDefaultsItem(const QList<QVariantMap> &apps) const
243+{
244+ // To differentiate between an empty list and a list that hasn't been set
245+ // yet (and should thus be populated with the defaults), we use a special
246+ // list of one item with the 'defaults' field set to true.
247+ return (apps.size() == 1 && apps[0].value("defaults").toBool());
248+}
249+
240int LauncherBackend::findItem(const QString &appId) const
250int LauncherBackend::findItem(const QString &appId) const
241{
251{
242 auto fullAppId = desktopFile(appId);
252 auto fullAppId = desktopFile(appId);
plugins/Unity/Launcher/backend/launcherbackend.h+1
@@ -145,6 +145,7 @@ private:
145 QVariantMap makeAppDetails(const QString &appId, bool pinned) const;
145 QVariantMap makeAppDetails(const QString &appId, bool pinned) const;
146 void loadApp(const QVariantMap &details);
146 void loadApp(const QVariantMap &details);
147 int findItem(const QString &appId) const;
147 int findItem(const QString &appId) const;
148+ bool isDefaultsItem(const QList<QVariantMap> &apps) const;
148 void syncFromAccounts();
149 void syncFromAccounts();
149 void syncToAccounts();
150 void syncToAccounts();
150 void clearItems();
151 void clearItems();