text: add serial argument to text protocol
The serial argument will allow to ignore outdated events from before a
reset request.
Signed-off-by: Jan Arne Petersen <jpetersen@openismus.com>
diff --git a/clients/weston-simple-im.c b/clients/weston-simple-im.c
index 1b6a3fd..1bf9713 100644
--- a/clients/weston-simple-im.c
+++ b/clients/weston-simple-im.c
@@ -70,6 +70,8 @@
xkb_mod_mask_t shift_mask;
keyboard_input_key_handler_t key_handler;
+
+ uint32_t serial;
};
static const struct compose_seq compose_seqs[] = {
@@ -110,13 +112,16 @@
static void
input_method_context_reset(void *data,
- struct input_method_context *context)
+ struct input_method_context *context,
+ uint32_t serial)
{
struct simple_im *keyboard = data;
fprintf(stderr, "Reset pre-edit buffer\n");
keyboard->compose_state = state_normal;
+
+ keyboard->serial = serial;
}
static const struct input_method_context_listener input_method_context_listener = {
@@ -247,7 +252,8 @@
static void
input_method_activate(void *data,
struct input_method *input_method,
- struct input_method_context *context)
+ struct input_method_context *context,
+ uint32_t serial)
{
struct simple_im *keyboard = data;
@@ -256,6 +262,8 @@
keyboard->compose_state = state_normal;
+ keyboard->serial = serial;
+
keyboard->context = context;
input_method_context_add_listener(context,
&input_method_context_listener,
@@ -371,10 +379,13 @@
if (cs) {
if (cs->keys[i + 1] == 0) {
input_method_context_preedit_cursor(keyboard->context,
+ keyboard->serial,
0);
input_method_context_preedit_string(keyboard->context,
+ keyboard->serial,
"", "");
input_method_context_commit_string(keyboard->context,
+ keyboard->serial,
cs->text,
strlen(cs->text));
keyboard->compose_state = state_normal;
@@ -386,8 +397,10 @@
}
input_method_context_preedit_cursor(keyboard->context,
+ keyboard->serial,
strlen(text));
input_method_context_preedit_string(keyboard->context,
+ keyboard->serial,
text,
text);
}
@@ -398,10 +411,13 @@
idx += xkb_keysym_to_utf8(keyboard->compose_seq.keys[j], text + idx, sizeof(text) - idx);
}
input_method_context_preedit_cursor(keyboard->context,
+ keyboard->serial,
0);
input_method_context_preedit_string(keyboard->context,
+ keyboard->serial,
"", "");
input_method_context_commit_string(keyboard->context,
+ keyboard->serial,
text,
strlen(text));
keyboard->compose_state = state_normal;
@@ -418,6 +434,7 @@
return;
input_method_context_commit_string(keyboard->context,
+ keyboard->serial,
text,
strlen(text));
}