Fix text_input_v3 preedit string For every batch of text_input_v3 updates, if there is no preedit in this batch, preedit should be cleared.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
diff --git a/src/video/wayland/SDL_waylandevents.c b/src/video/wayland/SDL_waylandevents.c
index bf2aeea..85d4edf 100644
--- a/src/video/wayland/SDL_waylandevents.c
+++ b/src/video/wayland/SDL_waylandevents.c
@@ -1505,7 +1505,9 @@ text_input_preedit_string(void *data,
int32_t cursor_begin,
int32_t cursor_end)
{
+ SDL_WaylandTextInput *text_input = data;
char buf[SDL_TEXTEDITINGEVENT_TEXT_SIZE];
+ text_input->has_preedit = SDL_TRUE;
if (text) {
size_t text_bytes = SDL_strlen(text), i = 0;
size_t cursor = 0;
@@ -1557,7 +1559,11 @@ text_input_done(void *data,
struct zwp_text_input_v3 *zwp_text_input_v3,
uint32_t serial)
{
- /* No-op */
+ SDL_WaylandTextInput *text_input = data;
+ if (!text_input->has_preedit) {
+ SDL_SendEditingText("", 0, 0);
+ }
+ text_input->has_preedit = SDL_FALSE;
}
static const struct zwp_text_input_v3_listener text_input_listener = {
diff --git a/src/video/wayland/SDL_waylandkeyboard.h b/src/video/wayland/SDL_waylandkeyboard.h
index dd8c146..604e0f3 100644
--- a/src/video/wayland/SDL_waylandkeyboard.h
+++ b/src/video/wayland/SDL_waylandkeyboard.h
@@ -27,6 +27,7 @@ typedef struct SDL_WaylandTextInput
{
struct zwp_text_input_v3 *text_input;
SDL_Rect cursor_rect;
+ SDL_bool has_preedit;
} SDL_WaylandTextInput;
extern int Wayland_InitKeyboard(_THIS);