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));
 }