on xenial help sign in
Use a special marker to note the defaults list instead of an empty list
commit1e92c4c2e00ee3335ee489b998104f12da70125c authorMichael Terry <michael.terry@canonical.com> dateFri 23 Aug 2013, 15:49 (13 years ago) parent047528f
3 files changed+14−3
plugins/AccountsService/com.canonical.unity.AccountsService.xml+1−1 plugins/Unity/Launcher/backend/launcherbackend.cpp+12−2 plugins/Unity/Launcher/backend/launcherbackend.h+1
plugins/AccountsService/com.canonical.unity.AccountsService.xml+1−1
@@ -17,7 +17,7 @@
1717 </property>
1818
1919 <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>}]"/>
2121 </property>
2222
2323 </interface>
plugins/Unity/Launcher/backend/launcherbackend.cpp+12−2
@@ -167,16 +167,18 @@ void LauncherBackend::triggerQuickListAction(const QString &appId, const QString
167167void LauncherBackend::syncFromAccounts()
168168{
169169 QList<QVariantMap> apps;
170+ bool defaults = true;
170171
171172 clearItems();
172173
173174 if (m_user != "" && m_accounts != nullptr) {
174175 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);
176178 }
177179
178180 // TODO: load default pinned ones from default config, instead of hardcoding here...
179− if (apps.isEmpty()) {
181+ if (defaults) {
180182 apps <<
181183 makeAppDetails("phone-app.desktop", true) <<
182184 makeAppDetails("camera-app.desktop", true) <<
@@ -237,6 +239,14 @@ QVariantMap LauncherBackend::makeAppDetails(const QString &appId, bool pinned) c
237239 return details;
238240}
239241
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+
240250int LauncherBackend::findItem(const QString &appId) const
241251{
242252 auto fullAppId = desktopFile(appId);
plugins/Unity/Launcher/backend/launcherbackend.h+1
@@ -145,6 +145,7 @@ private:
145145 QVariantMap makeAppDetails(const QString &appId, bool pinned) const;
146146 void loadApp(const QVariantMap &details);
147147 int findItem(const QString &appId) const;
148+ bool isDefaultsItem(const QList<QVariantMap> &apps) const;
148149 void syncFromAccounts();
149150 void syncToAccounts();
150151 void clearItems();