Blame SOURCES/im-module-setting-fix.patch

f05289
From 6ab152961de63dec953981aea24a7f0b4e7949ec Mon Sep 17 00:00:00 2001
f05289
From: Carlos Garnacho <carlosg@gnome.org>
f05289
Date: Fri, 3 Dec 2021 23:38:50 +0100
f05289
Subject: [PATCH 1/3] xsettings: Adopt code to look up GTK IM module
f05289
f05289
Right now, gsd-keyboard and gsd-xsettings have a strange relation
f05289
where the first sets the gtk-im-module dconf setting for the latter
f05289
to read the setting and forward it through XSettings.
f05289
f05289
Since this detection is highly X11 specific, make it happen in the
f05289
Xsettings daemon itself, from the relevant setting and device presence.
f05289
f05289
This makes users still able to shoot themselves in the foot by changing
f05289
the setting, X11 clients able to be told to switch to ibus if it turns
f05289
out necessary, and Wayland clients unaffected otherwise.
f05289
f05289
Related: https://gitlab.gnome.org/GNOME/gtk/-/issues/4443
f05289
---
f05289
 plugins/keyboard/gsd-keyboard-manager.c   | 147 ---------------------
f05289
 plugins/xsettings/gsd-xsettings-manager.c | 153 ++++++++++++++++++++++
f05289
 2 files changed, 153 insertions(+), 147 deletions(-)
f05289
f05289
diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
f05289
index cb4ea98b..d41393bc 100644
f05289
--- a/plugins/keyboard/gsd-keyboard-manager.c
f05289
+++ b/plugins/keyboard/gsd-keyboard-manager.c
f05289
@@ -57,10 +57,6 @@
f05289
 
f05289
 #define GNOME_DESKTOP_INTERFACE_DIR "org.gnome.desktop.interface"
f05289
 
f05289
-#define KEY_GTK_IM_MODULE    "gtk-im-module"
f05289
-#define GTK_IM_MODULE_SIMPLE "gtk-im-context-simple"
f05289
-#define GTK_IM_MODULE_IBUS   "ibus"
f05289
-
f05289
 #define GNOME_DESKTOP_INPUT_SOURCES_DIR "org.gnome.desktop.input-sources"
f05289
 
f05289
 #define KEY_INPUT_SOURCES        "sources"
f05289
@@ -71,9 +67,6 @@
f05289
 
f05289
 #define DEFAULT_LAYOUT "us"
f05289
 
f05289
-#define GNOME_A11Y_APPLICATIONS_INTERFACE_DIR "org.gnome.desktop.a11y.applications"
f05289
-#define KEY_OSK_ENABLED "screen-keyboard-enabled"
f05289
-
f05289
 struct _GsdKeyboardManager
f05289
 {
f05289
         GObject    parent;
f05289
@@ -81,21 +74,14 @@ struct _GsdKeyboardManager
f05289
         guint      start_idle_id;
f05289
         GSettings *settings;
f05289
         GSettings *input_sources_settings;
f05289
-        GSettings *a11y_settings;
f05289
         GDBusProxy *localed;
f05289
         GCancellable *cancellable;
f05289
-
f05289
-        GdkDeviceManager *device_manager;
f05289
-        guint device_added_id;
f05289
-        guint device_removed_id;
f05289
 };
f05289
 
f05289
 static void     gsd_keyboard_manager_class_init  (GsdKeyboardManagerClass *klass);
f05289
 static void     gsd_keyboard_manager_init        (GsdKeyboardManager      *keyboard_manager);
f05289
 static void     gsd_keyboard_manager_finalize    (GObject                 *object);
f05289
 
f05289
-static void     update_gtk_im_module (GsdKeyboardManager *manager);
f05289
-
f05289
 G_DEFINE_TYPE (GsdKeyboardManager, gsd_keyboard_manager, G_TYPE_OBJECT)
f05289
 
f05289
 static gpointer manager_object = NULL;
f05289
@@ -218,121 +204,6 @@ settings_changed (GSettings          *settings,
f05289
 
f05289
 }
f05289
 
f05289
-static void
f05289
-device_added_cb (GdkDeviceManager   *device_manager,
f05289
-                 GdkDevice          *device,
f05289
-                 GsdKeyboardManager *manager)
f05289
-{
f05289
-        GdkInputSource source;
f05289
-
f05289
-        source = gdk_device_get_source (device);
f05289
-        if (source == GDK_SOURCE_TOUCHSCREEN) {
f05289
-                update_gtk_im_module (manager);
f05289
-        }
f05289
-}
f05289
-
f05289
-static void
f05289
-device_removed_cb (GdkDeviceManager   *device_manager,
f05289
-                   GdkDevice          *device,
f05289
-                   GsdKeyboardManager *manager)
f05289
-{
f05289
-        GdkInputSource source;
f05289
-
f05289
-        source = gdk_device_get_source (device);
f05289
-        if (source == GDK_SOURCE_TOUCHSCREEN)
f05289
-                update_gtk_im_module (manager);
f05289
-}
f05289
-
f05289
-static void
f05289
-set_devicepresence_handler (GsdKeyboardManager *manager)
f05289
-{
f05289
-        GdkDeviceManager *device_manager;
f05289
-
f05289
-        if (gnome_settings_is_wayland ())
f05289
-                return;
f05289
-
f05289
-        device_manager = gdk_display_get_device_manager (gdk_display_get_default ());
f05289
-
f05289
-        manager->device_added_id = g_signal_connect (G_OBJECT (device_manager), "device-added",
f05289
-                                                           G_CALLBACK (device_added_cb), manager);
f05289
-        manager->device_removed_id = g_signal_connect (G_OBJECT (device_manager), "device-removed",
f05289
-                                                             G_CALLBACK (device_removed_cb), manager);
f05289
-        manager->device_manager = device_manager;
f05289
-}
f05289
-
f05289
-static gboolean
f05289
-need_ibus (GVariant *sources)
f05289
-{
f05289
-        GVariantIter iter;
f05289
-        const gchar *type;
f05289
-
f05289
-        g_variant_iter_init (&iter, sources);
f05289
-        while (g_variant_iter_next (&iter, "(&s&s)", &type, NULL))
f05289
-                if (g_str_equal (type, INPUT_SOURCE_TYPE_IBUS))
f05289
-                        return TRUE;
f05289
-
f05289
-        return FALSE;
f05289
-}
f05289
-
f05289
-static gboolean
f05289
-need_osk (GsdKeyboardManager *manager)
f05289
-{
f05289
-        gboolean has_touchscreen = FALSE;
f05289
-        GList *devices;
f05289
-        GdkSeat *seat;
f05289
-
f05289
-        if (g_settings_get_boolean (manager->a11y_settings,
f05289
-                                    KEY_OSK_ENABLED))
f05289
-                return TRUE;
f05289
-
f05289
-        seat = gdk_display_get_default_seat (gdk_display_get_default ());
f05289
-        devices = gdk_seat_get_slaves (seat, GDK_SEAT_CAPABILITY_TOUCH);
f05289
-
f05289
-        has_touchscreen = devices != NULL;
f05289
-
f05289
-        g_list_free (devices);
f05289
-
f05289
-        return has_touchscreen;
f05289
-}
f05289
-
f05289
-static void
f05289
-set_gtk_im_module (GsdKeyboardManager *manager,
f05289
-                   GSettings          *settings,
f05289
-                   GVariant           *sources)
f05289
-{
f05289
-        const gchar *new_module;
f05289
-        gchar *current_module;
f05289
-
f05289
-        if (need_ibus (sources) || need_osk (manager))
f05289
-                new_module = GTK_IM_MODULE_IBUS;
f05289
-        else
f05289
-                new_module = GTK_IM_MODULE_SIMPLE;
f05289
-
f05289
-        current_module = g_settings_get_string (settings, KEY_GTK_IM_MODULE);
f05289
-        if (!g_str_equal (current_module, new_module))
f05289
-                g_settings_set_string (settings, KEY_GTK_IM_MODULE, new_module);
f05289
-        g_free (current_module);
f05289
-}
f05289
-
f05289
-static void
f05289
-update_gtk_im_module (GsdKeyboardManager *manager)
f05289
-{
f05289
-        GSettings *interface_settings;
f05289
-        GVariant *sources;
f05289
-
f05289
-        /* Gtk+ uses the IM module advertised in XSETTINGS so, if we
f05289
-         * have IBus input sources, we want it to load that
f05289
-         * module. Otherwise we can use the default "simple" module
f05289
-         * which is builtin gtk+
f05289
-         */
f05289
-        interface_settings = g_settings_new (GNOME_DESKTOP_INTERFACE_DIR);
f05289
-        sources = g_settings_get_value (manager->input_sources_settings,
f05289
-                                        KEY_INPUT_SOURCES);
f05289
-        set_gtk_im_module (manager, interface_settings, sources);
f05289
-        g_object_unref (interface_settings);
f05289
-        g_variant_unref (sources);
f05289
-}
f05289
-
f05289
 static void
f05289
 get_sources_from_xkb_config (GsdKeyboardManager *manager)
f05289
 {
f05289
@@ -580,18 +451,7 @@ start_keyboard_idle_cb (GsdKeyboardManager *manager)
f05289
 
f05289
         manager->settings = g_settings_new (GSD_KEYBOARD_DIR);
f05289
 
f05289
-	set_devicepresence_handler (manager);
f05289
-
f05289
         manager->input_sources_settings = g_settings_new (GNOME_DESKTOP_INPUT_SOURCES_DIR);
f05289
-        g_signal_connect_swapped (manager->input_sources_settings,
f05289
-                                  "changed::" KEY_INPUT_SOURCES,
f05289
-                                  G_CALLBACK (update_gtk_im_module), manager);
f05289
-
f05289
-        manager->a11y_settings = g_settings_new (GNOME_A11Y_APPLICATIONS_INTERFACE_DIR);
f05289
-        g_signal_connect_swapped (manager->a11y_settings,
f05289
-                                  "changed::" KEY_OSK_ENABLED,
f05289
-                                  G_CALLBACK (update_gtk_im_module), manager);
f05289
-        update_gtk_im_module (manager);
f05289
 
f05289
         manager->cancellable = g_cancellable_new ();
f05289
 
f05289
@@ -645,14 +505,7 @@ gsd_keyboard_manager_stop (GsdKeyboardManager *manager)
f05289
 
f05289
         g_clear_object (&manager->settings);
f05289
         g_clear_object (&manager->input_sources_settings);
f05289
-        g_clear_object (&manager->a11y_settings);
f05289
         g_clear_object (&manager->localed);
f05289
-
f05289
-        if (manager->device_manager != NULL) {
f05289
-                g_signal_handler_disconnect (manager->device_manager, manager->device_added_id);
f05289
-                g_signal_handler_disconnect (manager->device_manager, manager->device_removed_id);
f05289
-                manager->device_manager = NULL;
f05289
-        }
f05289
 }
f05289
 
f05289
 static void
f05289
diff --git a/plugins/xsettings/gsd-xsettings-manager.c b/plugins/xsettings/gsd-xsettings-manager.c
f05289
index 5f1b4583..1aa020db 100644
f05289
--- a/plugins/xsettings/gsd-xsettings-manager.c
f05289
+++ b/plugins/xsettings/gsd-xsettings-manager.c
f05289
@@ -56,6 +56,9 @@
f05289
 #define PRIVACY_SETTINGS_SCHEMA     "org.gnome.desktop.privacy"
f05289
 #define WM_SETTINGS_SCHEMA        "org.gnome.desktop.wm.preferences"
f05289
 #define A11Y_SCHEMA               "org.gnome.desktop.a11y"
f05289
+#define A11Y_INTERFACE_SCHEMA     "org.gnome.desktop.a11y.interface"
f05289
+#define A11Y_APPLICATIONS_SCHEMA   "org.gnome.desktop.a11y.applications"
f05289
+#define INPUT_SOURCES_SCHEMA       "org.gnome.desktop.input-sources"
f05289
 #define CLASSIC_WM_SETTINGS_SCHEMA "org.gnome.shell.extensions.classic-overrides"
f05289
 
f05289
 #define XSETTINGS_PLUGIN_SCHEMA "org.gnome.settings-daemon.plugins.xsettings"
f05289
@@ -72,9 +75,18 @@
f05289
 #define FONT_HINTING_KEY      "font-hinting"
f05289
 #define FONT_RGBA_ORDER_KEY   "font-rgba-order"
f05289
 
f05289
+#define INPUT_SOURCES_KEY      "sources"
f05289
+#define OSK_ENABLED_KEY        "screen-keyboard-enabled"
f05289
+#define GTK_IM_MODULE_KEY      "gtk-im-module"
f05289
+
f05289
 #define GTK_SETTINGS_DBUS_PATH "/org/gtk/Settings"
f05289
 #define GTK_SETTINGS_DBUS_NAME "org.gtk.Settings"
f05289
 
f05289
+#define INPUT_SOURCE_TYPE_IBUS "ibus"
f05289
+
f05289
+#define GTK_IM_MODULE_SIMPLE "gtk-im-context-simple"
f05289
+#define GTK_IM_MODULE_IBUS   "ibus"
f05289
+
f05289
 static const gchar introspection_xml[] =
f05289
 "<node name='/org/gtk/Settings'>"
f05289
 "  <interface name='org.gtk.Settings'>"
f05289
@@ -277,6 +289,11 @@ struct _GsdXSettingsManager
f05289
         FcMonitor         *fontconfig_monitor;
f05289
         gint64             fontconfig_timestamp;
f05289
 
f05289
+        GSettings         *interface_settings;
f05289
+        GSettings         *input_sources_settings;
f05289
+        GSettings         *a11y_settings;
f05289
+        GdkSeat           *user_seat;
f05289
+
f05289
         GsdXSettingsGtk   *gtk;
f05289
 
f05289
         guint              introspect_properties_changed_id;
f05289
@@ -286,6 +303,9 @@ struct _GsdXSettingsManager
f05289
         guint              display_config_watch_id;
f05289
         guint              monitors_changed_id;
f05289
 
f05289
+        guint              device_added_id;
f05289
+        guint              device_removed_id;
f05289
+
f05289
         guint              shell_name_watch_id;
f05289
         gboolean           have_shell;
f05289
 
f05289
@@ -1291,6 +1311,112 @@ migrate_settings (void)
f05289
                                     mouse_entries, G_N_ELEMENTS (mouse_entries));
f05289
 }
f05289
 
f05289
+static gboolean
f05289
+need_ibus (GsdXSettingsManager *manager)
f05289
+{
f05289
+        GVariant *sources;
f05289
+        GVariantIter iter;
f05289
+        const gchar *type;
f05289
+        gboolean needs_ibus = FALSE;
f05289
+
f05289
+        sources = g_settings_get_value (manager->input_sources_settings,
f05289
+                                        INPUT_SOURCES_KEY);
f05289
+
f05289
+        g_variant_iter_init (&iter, sources);
f05289
+        while (g_variant_iter_next (&iter, "(&s&s)", &type, NULL)) {
f05289
+                if (g_str_equal (type, INPUT_SOURCE_TYPE_IBUS)) {
f05289
+                        needs_ibus = TRUE;
f05289
+                        break;
f05289
+                }
f05289
+        }
f05289
+
f05289
+        g_variant_unref (sources);
f05289
+
f05289
+        return needs_ibus;
f05289
+}
f05289
+
f05289
+static gboolean
f05289
+need_osk (GsdXSettingsManager *manager)
f05289
+{
f05289
+        gboolean has_touchscreen = FALSE;
f05289
+        GList *devices;
f05289
+        GdkSeat *seat;
f05289
+
f05289
+        if (g_settings_get_boolean (manager->a11y_settings,
f05289
+                                    OSK_ENABLED_KEY))
f05289
+                return TRUE;
f05289
+
f05289
+        seat = gdk_display_get_default_seat (gdk_display_get_default ());
f05289
+        devices = gdk_seat_get_slaves (seat, GDK_SEAT_CAPABILITY_TOUCH);
f05289
+
f05289
+        has_touchscreen = devices != NULL;
f05289
+
f05289
+        g_list_free (devices);
f05289
+
f05289
+        return has_touchscreen;
f05289
+}
f05289
+
f05289
+static void
f05289
+update_gtk_im_module (GsdXSettingsManager *manager)
f05289
+{
f05289
+        const gchar *module;
f05289
+        gchar *setting;
f05289
+
f05289
+        setting = g_settings_get_string (manager->interface_settings,
f05289
+                                         GTK_IM_MODULE_KEY);
f05289
+        if (setting && *setting)
f05289
+                module = setting;
f05289
+        else if (need_ibus (manager) || need_osk (manager))
f05289
+                module = GTK_IM_MODULE_IBUS;
f05289
+        else
f05289
+                module = GTK_IM_MODULE_SIMPLE;
f05289
+
f05289
+        xsettings_manager_set_string (manager->manager, "Gtk/IMModule", module);
f05289
+        g_free (setting);
f05289
+}
f05289
+
f05289
+static void
f05289
+device_added_cb (GdkSeat             *user_seat,
f05289
+                 GdkDevice           *device,
f05289
+                 GsdXSettingsManager *manager)
f05289
+{
f05289
+        GdkInputSource source;
f05289
+
f05289
+        source = gdk_device_get_source (device);
f05289
+        if (source == GDK_SOURCE_TOUCHSCREEN) {
f05289
+                update_gtk_im_module (manager);
f05289
+        }
f05289
+}
f05289
+
f05289
+static void
f05289
+device_removed_cb (GdkSeat             *user_seat,
f05289
+                   GdkDevice           *device,
f05289
+                   GsdXSettingsManager *manager)
f05289
+{
f05289
+        GdkInputSource source;
f05289
+
f05289
+        source = gdk_device_get_source (device);
f05289
+        if (source == GDK_SOURCE_TOUCHSCREEN)
f05289
+                update_gtk_im_module (manager);
f05289
+}
f05289
+
f05289
+static void
f05289
+set_devicepresence_handler (GsdXSettingsManager *manager)
f05289
+{
f05289
+        GdkSeat *user_seat;
f05289
+
f05289
+        if (gnome_settings_is_wayland ())
f05289
+                return;
f05289
+
f05289
+        user_seat = gdk_display_get_default_seat (gdk_display_get_default ());
f05289
+
f05289
+        manager->device_added_id = g_signal_connect (G_OBJECT (user_seat), "device-added",
f05289
+                                                     G_CALLBACK (device_added_cb), manager);
f05289
+        manager->device_removed_id = g_signal_connect (G_OBJECT (user_seat), "device-removed",
f05289
+                                                       G_CALLBACK (device_removed_cb), manager);
f05289
+        manager->user_seat = user_seat;
f05289
+}
f05289
+
f05289
 gboolean
f05289
 gsd_xsettings_manager_start (GsdXSettingsManager *manager,
f05289
                              GError             **error)
f05289
@@ -1312,6 +1438,23 @@ gsd_xsettings_manager_start (GsdXSettingsManager *manager,
f05289
                 return FALSE;
f05289
         }
f05289
 
f05289
+	set_devicepresence_handler (manager);
f05289
+        manager->interface_settings = g_settings_new (INTERFACE_SETTINGS_SCHEMA);
f05289
+        g_signal_connect_swapped (manager->interface_settings,
f05289
+                                  "changed::" GTK_IM_MODULE_KEY,
f05289
+                                  G_CALLBACK (update_gtk_im_module), manager);
f05289
+
f05289
+        manager->input_sources_settings = g_settings_new (INPUT_SOURCES_SCHEMA);
f05289
+        g_signal_connect_swapped (manager->input_sources_settings,
f05289
+                                  "changed::" INPUT_SOURCES_KEY,
f05289
+                                  G_CALLBACK (update_gtk_im_module), manager);
f05289
+
f05289
+        manager->a11y_settings = g_settings_new (A11Y_APPLICATIONS_SCHEMA);
f05289
+        g_signal_connect_swapped (manager->a11y_settings,
f05289
+                                  "changed::" OSK_ENABLED_KEY,
f05289
+                                  G_CALLBACK (update_gtk_im_module), manager);
f05289
+        update_gtk_im_module (manager);
f05289
+
f05289
         manager->monitors_changed_id =
f05289
                 g_dbus_connection_signal_subscribe (manager->dbus_connection,
f05289
                                                     "org.gnome.Mutter.DisplayConfig",
f05289
@@ -1507,6 +1650,16 @@ gsd_xsettings_manager_stop (GsdXSettingsManager *manager)
f05289
                 g_object_unref (manager->gtk);
f05289
                 manager->gtk = NULL;
f05289
         }
f05289
+
f05289
+        if (manager->user_seat != NULL) {
f05289
+                g_signal_handler_disconnect (manager->user_seat, manager->device_added_id);
f05289
+                g_signal_handler_disconnect (manager->user_seat, manager->device_removed_id);
f05289
+                manager->user_seat = NULL;
f05289
+        }
f05289
+
f05289
+        g_clear_object (&manager->a11y_settings);
f05289
+        g_clear_object (&manager->input_sources_settings);
f05289
+        g_clear_object (&manager->interface_settings);
f05289
 }
f05289
 
f05289
 static void
f05289
-- 
f05289
2.37.1
f05289
f05289
f05289
From c1de15e0c7f145491482045c688e9f2d444cb041 Mon Sep 17 00:00:00 2001
f05289
From: Carlos Garnacho <carlosg@gnome.org>
f05289
Date: Tue, 15 Mar 2022 13:31:23 +0100
f05289
Subject: [PATCH 2/3] keyboard: "Migrate" gtk-im-context setting before giving
f05289
 control to user
f05289
f05289
This setting used to be modified by gsd-keyboard at runtime, but it no
f05289
longer does. We want to leave this setting in a pristine state before
f05289
we lend control to the user in order to avoid setting leftovers make
f05289
GTK and others use the unintended IM module.
f05289
f05289
Since the setting is actually staying on the same schema/path, there is
f05289
no nice mechanism that would help us in doing a one-time port, so rely
f05289
on a file at ~/.cache to make this happen once. In the common case, it
f05289
just adds one stat() more at startup.
f05289
f05289
After this migration is done, the gtk-im-module setting can be considered
f05289
in full control of the user.
f05289
---
f05289
 plugins/keyboard/gsd-keyboard-manager.c | 35 +++++++++++++++++++++++++
f05289
 1 file changed, 35 insertions(+)
f05289
f05289
diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
f05289
index d41393bc..15247c78 100644
f05289
--- a/plugins/keyboard/gsd-keyboard-manager.c
f05289
+++ b/plugins/keyboard/gsd-keyboard-manager.c
f05289
@@ -67,6 +67,8 @@
f05289
 
f05289
 #define DEFAULT_LAYOUT "us"
f05289
 
f05289
+#define SETTINGS_PORTED_FILE ".gsd-keyboard.settings-ported"
f05289
+
f05289
 struct _GsdKeyboardManager
f05289
 {
f05289
         GObject    parent;
f05289
@@ -541,6 +543,14 @@ gsd_keyboard_manager_finalize (GObject *object)
f05289
         G_OBJECT_CLASS (gsd_keyboard_manager_parent_class)->finalize (object);
f05289
 }
f05289
 
f05289
+static GVariant *
f05289
+reset_gtk_im_module (GVariant *variant,
f05289
+                     GVariant *old_default,
f05289
+                     GVariant *new_default)
f05289
+{
f05289
+        return NULL;
f05289
+}
f05289
+
f05289
 static void
f05289
 migrate_keyboard_settings (void)
f05289
 {
f05289
@@ -550,12 +560,37 @@ migrate_keyboard_settings (void)
f05289
                 { "delay",                  "delay",                  NULL },
f05289
                 { "remember-numlock-state", "remember-numlock-state", NULL },
f05289
         };
f05289
+        g_autofree char *filename = NULL;
f05289
 
f05289
         gsd_settings_migrate_check ("org.gnome.settings-daemon.peripherals.keyboard.deprecated",
f05289
                                     "/org/gnome/settings-daemon/peripherals/keyboard/",
f05289
                                     "org.gnome.desktop.peripherals.keyboard",
f05289
                                     "/org/gnome/desktop/peripherals/keyboard/",
f05289
                                     entries, G_N_ELEMENTS (entries));
f05289
+
f05289
+        /* In prior versions to GNOME 42, the gtk-im-module setting was
f05289
+         * owned by gsd-keyboard. Reset it once before giving it back
f05289
+         * to the user.
f05289
+         */
f05289
+        filename = g_build_filename (g_get_user_config_dir (),
f05289
+                                     SETTINGS_PORTED_FILE,
f05289
+                                     NULL);
f05289
+
f05289
+        if (!g_file_test (filename, G_FILE_TEST_EXISTS)) {
f05289
+                GsdSettingsMigrateEntry im_entry[] = {
f05289
+                        { "gtk-im-module", "gtk-im-module", reset_gtk_im_module },
f05289
+                };
f05289
+                g_autoptr(GError) error = NULL;
f05289
+
f05289
+                gsd_settings_migrate_check ("org.gnome.desktop.interface",
f05289
+                                            "/org/gnome/desktop/interface/",
f05289
+                                            "org.gnome.desktop.interface",
f05289
+                                            "/org/gnome/desktop/interface/",
f05289
+                                            im_entry, G_N_ELEMENTS (im_entry));
f05289
+
f05289
+                if (!g_file_set_contents (filename, "", -1, &error))
f05289
+                        g_warning ("Error migrating gtk-im-module: %s", error->message);
f05289
+        }
f05289
 }
f05289
 
f05289
 GsdKeyboardManager *
f05289
-- 
f05289
2.37.1
f05289
f05289
f05289
From 46452c04aee1bfd51e23a53dba89ac95e0c06823 Mon Sep 17 00:00:00 2001
f05289
From: Carlos Garnacho <carlosg@gnome.org>
f05289
Date: Fri, 29 Apr 2022 14:37:27 +0200
f05289
Subject: [PATCH 3/3] xsettings: Remove direct mapping from gtk-im-module to
f05289
 Gtk/IMModule
f05289
f05289
This is now handled dynamically since commit e2d268eb00, so we should
f05289
not tie dconf setting and Xsetting automatically here. Doing so, we
f05289
are clobbering the dynamic value on startup, making it only effective
f05289
on later changes.
f05289
f05289
Fixes: https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/issues/682
f05289
---
f05289
 plugins/xsettings/gsd-xsettings-manager.c | 1 -
f05289
 1 file changed, 1 deletion(-)
f05289
f05289
diff --git a/plugins/xsettings/gsd-xsettings-manager.c b/plugins/xsettings/gsd-xsettings-manager.c
f05289
index 1aa020db..d692cefb 100644
f05289
--- a/plugins/xsettings/gsd-xsettings-manager.c
f05289
+++ b/plugins/xsettings/gsd-xsettings-manager.c
f05289
@@ -498,7 +498,6 @@ static TranslationEntry translations [] = {
f05289
         { "org.gnome.desktop.interface", "cursor-blink-time",      "Net/CursorBlinkTime",     translate_int_int },
f05289
         { "org.gnome.desktop.interface", "cursor-blink-timeout",   "Gtk/CursorBlinkTimeout",  translate_int_int },
f05289
         { "org.gnome.desktop.interface", "gtk-theme",              "Net/ThemeName",           translate_string_string },
f05289
-        { "org.gnome.desktop.interface", "gtk-im-module",          "Gtk/IMModule",            translate_string_string },
f05289
         { "org.gnome.desktop.interface", "icon-theme",             "Net/IconThemeName",       translate_string_string },
f05289
         { "org.gnome.desktop.interface", "cursor-theme",           "Gtk/CursorThemeName",     translate_string_string },
f05289
         { "org.gnome.desktop.interface", "gtk-enable-primary-paste", "Gtk/EnablePrimaryPaste", translate_bool_int },
f05289
-- 
f05289
2.37.1
f05289