From db2997548cb1eeada2e3c577e3c680fa8f7478ed Mon Sep 17 00:00:00 2001
From: Daniel Tang <[EMAIL REDACTED]>
Date: Sun, 5 Jan 2025 17:34:30 -0500
Subject: [PATCH] Let SDL_IM_MODULE=fcitx override Wayland as a workaround to
fix key repetition detection (#11859)
---
src/video/wayland/SDL_waylandevents.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/src/video/wayland/SDL_waylandevents.c b/src/video/wayland/SDL_waylandevents.c
index 062bc12e5aa77..496bb5e8feba6 100644
--- a/src/video/wayland/SDL_waylandevents.c
+++ b/src/video/wayland/SDL_waylandevents.c
@@ -2184,6 +2184,18 @@ void Wayland_add_primary_selection_device_manager(SDL_VideoData *d, uint32_t id,
void Wayland_add_text_input_manager(SDL_VideoData *d, uint32_t id, uint32_t version)
{
+#ifdef HAVE_FCITX
+ const char *im_module = SDL_getenv("SDL_IM_MODULE");
+ if (im_module && SDL_strcmp(im_module, "fcitx") == 0) {
+ /* Override the Wayland text-input protocol when Fcitx is enabled, like how GTK_IM_MODULE does.
+ *
+ * The Fcitx wiki discourages enabling it under Wayland via SDL_IM_MODULE, so its presence must
+ * be intentional, and this workaround is needed for fixing key repeat detection.
+ */
+ return;
+ }
+#endif
+
d->text_input_manager = wl_registry_bind(d->registry, id, &zwp_text_input_manager_v3_interface, 1);
if (d->input) {