@@ -146,9 +146,22 @@ void GSettingsSchemaQml::setPath(const QByteArray &path) {
146146}
147147
148148GSettingsQml::GSettingsQml(QObject *parent)
149− : QObject(parent)
149+ : QObject(parent),
150+ m_valid(false)
150151{
151152 m_schema = new GSettingsSchemaQml(this);
153+}
154+
155+void GSettingsQml::classBegin()
156+{
157+}
158+
159+void GSettingsQml::componentComplete()
160+{
161+ // Emulate what the real GSettings module does, and only return undefined
162+ // values until we are completed loading.
163+ m_valid = true;
164+
152165 connect(GSettingsControllerQml::instance(), &GSettingsControllerQml::pictureUriChanged,
153166 this, &GSettingsQml::pictureUriChanged);
154167 connect(GSettingsControllerQml::instance(), &GSettingsControllerQml::usageModeChanged,
@@ -167,98 +180,98 @@ GSettingsSchemaQml * GSettingsQml::schema() const {
167180 return m_schema;
168181}
169182
170−QString GSettingsQml::pictureUri() const
183+QVariant GSettingsQml::pictureUri() const
171184{
172− if (m_schema->id() == "org.gnome.desktop.background") {
185+ if (m_valid && m_schema->id() == "org.gnome.desktop.background") {
173186 return GSettingsControllerQml::instance()->pictureUri();
174187 } else {
175− return "";
188+ return QVariant();
176189 }
177190}
178191
179−void GSettingsQml::setPictureUri(const QString &str)
192+void GSettingsQml::setPictureUri(const QVariant &str)
180193{
181− if (m_schema->id() == "org.gnome.desktop.background") {
182− GSettingsControllerQml::instance()->setPictureUri(str);
194+ if (m_valid && m_schema->id() == "org.gnome.desktop.background") {
195+ GSettingsControllerQml::instance()->setPictureUri(str.toString());
183196 }
184197}
185198
186−QString GSettingsQml::usageMode() const
199+QVariant GSettingsQml::usageMode() const
187200{
188− if (m_schema->id() == "com.canonical.Unity8") {
201+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
189202 return GSettingsControllerQml::instance()->usageMode();
190203 } else {
191− return "";
204+ return QVariant();
192205 }
193206}
194207
195−void GSettingsQml::setUsageMode(const QString &usageMode)
208+void GSettingsQml::setUsageMode(const QVariant &usageMode)
196209{
197− if (m_schema->id() == "com.canonical.Unity8") {
198− GSettingsControllerQml::instance()->setUsageMode(usageMode);
210+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
211+ GSettingsControllerQml::instance()->setUsageMode(usageMode.toString());
199212 }
200213}
201214
202−qint64 GSettingsQml::lockedOutTime() const
215+QVariant GSettingsQml::lockedOutTime() const
203216{
204− if (m_schema->id() == "com.canonical.Unity8.Greeter") {
217+ if (m_valid && m_schema->id() == "com.canonical.Unity8.Greeter") {
205218 return GSettingsControllerQml::instance()->lockedOutTime();
206219 } else {
207− return 0;
220+ return QVariant();
208221 }
209222}
210223
211−void GSettingsQml::setLockedOutTime(qint64 timestamp)
224+void GSettingsQml::setLockedOutTime(const QVariant ×tamp)
212225{
213− if (m_schema->id() == "com.canonical.Unity8.Greeter") {
214− GSettingsControllerQml::instance()->setLockedOutTime(timestamp);
226+ if (m_valid && m_schema->id() == "com.canonical.Unity8.Greeter") {
227+ GSettingsControllerQml::instance()->setLockedOutTime(timestamp.value<qint64>());
215228 }
216229}
217230
218−QStringList GSettingsQml::lifecycleExemptAppids() const
231+QVariant GSettingsQml::lifecycleExemptAppids() const
219232{
220− if (m_schema->id() == "com.canonical.qtmir") {
233+ if (m_valid && m_schema->id() == "com.canonical.qtmir") {
221234 return GSettingsControllerQml::instance()->lifecycleExemptAppids();
222235 } else {
223− return QStringList();
236+ return QVariant();
224237 }
225238}
226239
227−bool GSettingsQml::autohideLauncher() const
240+QVariant GSettingsQml::autohideLauncher() const
228241{
229− if (m_schema->id() == "com.canonical.Unity8") {
242+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
230243 return GSettingsControllerQml::instance()->autohideLauncher();
231244 } else {
232− return false;
245+ return QVariant();
233246 }
234247}
235248
236−int GSettingsQml::launcherWidth() const
249+QVariant GSettingsQml::launcherWidth() const
237250{
238− if (m_schema->id() == "com.canonical.Unity8") {
251+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
239252 return GSettingsControllerQml::instance()->launcherWidth();
240253 } else {
241− return false;
254+ return QVariant();
242255 }
243256}
244257
245−void GSettingsQml::setLifecycleExemptAppids(const QStringList &appIds)
258+void GSettingsQml::setLifecycleExemptAppids(const QVariant &appIds)
246259{
247− if (m_schema->id() == "com.canonical.qtmir") {
248− GSettingsControllerQml::instance()->setLifecycleExemptAppids(appIds);
260+ if (m_valid && m_schema->id() == "com.canonical.qtmir") {
261+ GSettingsControllerQml::instance()->setLifecycleExemptAppids(appIds.toStringList());
249262 }
250263}
251264
252−void GSettingsQml::setAutohideLauncher(bool autohideLauncher)
265+void GSettingsQml::setAutohideLauncher(const QVariant &autohideLauncher)
253266{
254− if (m_schema->id() == "com.canonical.Unity8") {
255− GSettingsControllerQml::instance()->setAutohideLauncher(autohideLauncher);
267+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
268+ GSettingsControllerQml::instance()->setAutohideLauncher(autohideLauncher.toBool());
256269 }
257270}
258271
259−void GSettingsQml::setLauncherWidth(int launcherWidth)
272+void GSettingsQml::setLauncherWidth(const QVariant &launcherWidth)
260273{
261− if (m_schema->id() == "com.canonical.Unity8") {
262− GSettingsControllerQml::instance()->setLauncherWidth(launcherWidth);
274+ if (m_valid && m_schema->id() == "com.canonical.Unity8") {
275+ GSettingsControllerQml::instance()->setLauncherWidth(launcherWidth.toInt());
263276 }
264277}