diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2022-03-15 13:31:23 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2022-03-18 18:48:37 +0100 |
commit | c8981ef0b1e915e89c79e301080541baef0f9fa9 (patch) | |
tree | 7ff848c76f10783ef5c6de3b9c0191ff85c9f6d5 | |
parent | 911e529cf175ff3ef5988961dac7ecd48d66a951 (diff) | |
download | gnome-settings-daemon-c8981ef0b1e915e89c79e301080541baef0f9fa9.tar.gz |
keyboard: "Migrate" gtk-im-context setting before giving control to user
This setting used to be modified by gsd-keyboard at runtime, but it no
longer does. We want to leave this setting in a pristine state before
we lend control to the user in order to avoid setting leftovers make
GTK and others use the unintended IM module.
Since the setting is actually staying on the same schema/path, there is
no nice mechanism that would help us in doing a one-time port, so rely
on a file at ~/.cache to make this happen once. In the common case, it
just adds one stat() more at startup.
After this migration is done, the gtk-im-module setting can be considered
in full control of the user.
-rw-r--r-- | plugins/keyboard/gsd-keyboard-manager.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c index d41393bc..15247c78 100644 --- a/plugins/keyboard/gsd-keyboard-manager.c +++ b/plugins/keyboard/gsd-keyboard-manager.c @@ -67,6 +67,8 @@ #define DEFAULT_LAYOUT "us" +#define SETTINGS_PORTED_FILE ".gsd-keyboard.settings-ported" + struct _GsdKeyboardManager { GObject parent; @@ -541,6 +543,14 @@ gsd_keyboard_manager_finalize (GObject *object) G_OBJECT_CLASS (gsd_keyboard_manager_parent_class)->finalize (object); } +static GVariant * +reset_gtk_im_module (GVariant *variant, + GVariant *old_default, + GVariant *new_default) +{ + return NULL; +} + static void migrate_keyboard_settings (void) { @@ -550,12 +560,37 @@ migrate_keyboard_settings (void) { "delay", "delay", NULL }, { "remember-numlock-state", "remember-numlock-state", NULL }, }; + g_autofree char *filename = NULL; gsd_settings_migrate_check ("org.gnome.settings-daemon.peripherals.keyboard.deprecated", "/org/gnome/settings-daemon/peripherals/keyboard/", "org.gnome.desktop.peripherals.keyboard", "/org/gnome/desktop/peripherals/keyboard/", entries, G_N_ELEMENTS (entries)); + + /* In prior versions to GNOME 42, the gtk-im-module setting was + * owned by gsd-keyboard. Reset it once before giving it back + * to the user. + */ + filename = g_build_filename (g_get_user_config_dir (), + SETTINGS_PORTED_FILE, + NULL); + + if (!g_file_test (filename, G_FILE_TEST_EXISTS)) { + GsdSettingsMigrateEntry im_entry[] = { + { "gtk-im-module", "gtk-im-module", reset_gtk_im_module }, + }; + g_autoptr(GError) error = NULL; + + gsd_settings_migrate_check ("org.gnome.desktop.interface", + "/org/gnome/desktop/interface/", + "org.gnome.desktop.interface", + "/org/gnome/desktop/interface/", + im_entry, G_N_ELEMENTS (im_entry)); + + if (!g_file_set_contents (filename, "", -1, &error)) + g_warning ("Error migrating gtk-im-module: %s", error->message); + } } GsdKeyboardManager * |