|
@@ -290,7 +290,7 @@ X11_CreateDevice(int devindex)
|
|
|
device->StartTextInput = X11_StartTextInput;
|
|
|
device->StopTextInput = X11_StopTextInput;
|
|
|
device->SetTextInputRect = X11_SetTextInputRect;
|
|
|
-
|
|
|
+
|
|
|
device->free = X11_DeleteDevice;
|
|
|
|
|
|
return device;
|
|
@@ -395,33 +395,31 @@ X11_VideoInit(_THIS)
|
|
|
Compose keys will work correctly. */
|
|
|
char *prev_locale = setlocale(LC_ALL, NULL);
|
|
|
char *prev_xmods = X11_XSetLocaleModifiers(NULL);
|
|
|
-
|
|
|
+ const char *new_xmods = "";
|
|
|
+ const char *env_xmods = SDL_getenv("XMODIFIERS");
|
|
|
+
|
|
|
if (prev_xmods) {
|
|
|
prev_xmods = SDL_strdup(prev_xmods);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/* IBus resends some key events that were filtered by XFilterEvents
|
|
|
when it is used via XIM which causes issues. Prevent this by forcing
|
|
|
@im=none if XMODIFIERS contains @im=ibus. IBus can still be used via
|
|
|
the DBus implementation, which also has support for pre-editing. */
|
|
|
- const char *new_xmods = "";
|
|
|
- const char *env_xmods = SDL_getenv("XMODIFIERS");
|
|
|
-
|
|
|
if (env_xmods && SDL_strstr(env_xmods, "@im=ibus") != NULL) {
|
|
|
new_xmods = "@im=none";
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
setlocale(LC_ALL, "");
|
|
|
X11_XSetLocaleModifiers(new_xmods);
|
|
|
-
|
|
|
- data->im =
|
|
|
- X11_XOpenIM(data->display, NULL, data->classname, data->classname);
|
|
|
-
|
|
|
+
|
|
|
+ data->im = X11_XOpenIM(data->display, NULL, data->classname, data->classname);
|
|
|
+
|
|
|
/* Reset the locale + X locale modifiers back to how they were,
|
|
|
locale first because the X locale modifiers depend on it. */
|
|
|
setlocale(LC_ALL, prev_locale);
|
|
|
X11_XSetLocaleModifiers(prev_xmods);
|
|
|
-
|
|
|
+
|
|
|
if (prev_xmods) {
|
|
|
SDL_free(prev_xmods);
|
|
|
}
|