@@ -21,8 +21,10 @@
2121#include <QFile>
2222#include <QStringList>
2323#include <QDebug>
24+#include <QSettings>
2425
2526#include <glib.h>
27+#include <gio/gio.h> // for gsettings
2628
2729#define IFACE_ACCOUNTS_USER QStringLiteral("org.freedesktop.Accounts.User")
2830#define IFACE_LOCATION_HERE QStringLiteral("com.ubuntu.location.providers.here.AccountsService")
@@ -284,6 +286,29 @@ QStringList AccountsService::keymaps() const
284286 return {QStringLiteral("us")};
285287}
286288
289+void AccountsService::migrateKeymapSettings()
290+{
291+ QSettings settings;
292+ if (!settings.value(QStringLiteral("KeymapsMigrated")).toBool()) {
293+ auto value = getProperty(IFACE_ACCOUNTS_USER, PROP_INPUT_SOURCES);
294+ QDBusArgument arg = value.value<QDBusArgument>();
295+ StringMapList maps = qdbus_cast<StringMapList>(arg);
296+
297+ // Save the config settings (for the keyboard indicator)
298+ GSettings * sourcesSettings = g_settings_new("org.gnome.desktop.input-sources");
299+ GVariantBuilder builder;
300+ g_variant_builder_init(&builder, G_VARIANT_TYPE("a(ss)"));
301+ Q_FOREACH(const auto & keymapPair, maps) {
302+ g_variant_builder_add(&builder, "(ss)", keymapPair.firstKey().toUtf8().constData(),
303+ keymapPair.first().toUtf8().constData());
304+ }
305+ g_settings_set_value(sourcesSettings, "sources", g_variant_builder_end(&builder));
306+ g_object_unref(sourcesSettings);
307+
308+ settings.setValue(QStringLiteral("KeymapsMigrated"), true);
309+ }
310+}
311+
287312uint AccountsService::failedFingerprintLogins() const
288313{
289314 return getProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_FINGERPRINT_LOGINS).toUInt();