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/keyboard.c b/clients/keyboard.c
index a32cf60..c1f2a7f 100644
--- a/clients/keyboard.c
+++ b/clients/keyboard.c
@@ -41,6 +41,7 @@
 	struct {
 		xkb_mod_mask_t shift_mask;
 	} keysym;
+	uint32_t serial;
 };
 
 enum key_type {
@@ -227,11 +228,14 @@
 		return;
 
 	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,
 					   keyboard->preedit_string,
 					   strlen(keyboard->preedit_string));
 	free(keyboard->preedit_string);
@@ -253,8 +257,10 @@
 			keyboard->keyboard->preedit_string = strcat(keyboard->keyboard->preedit_string,
 								    label);
 			input_method_context_preedit_cursor(keyboard->keyboard->context,
+							    keyboard->keyboard->serial,
 							    strlen(keyboard->keyboard->preedit_string));
 			input_method_context_preedit_string(keyboard->keyboard->context,
+							    keyboard->keyboard->serial,
 							    keyboard->keyboard->preedit_string,
 							    keyboard->keyboard->preedit_string);
 			break;
@@ -264,12 +270,15 @@
 
 			if (strlen(keyboard->keyboard->preedit_string) == 0) {
 				input_method_context_delete_surrounding_text(keyboard->keyboard->context,
+									     keyboard->keyboard->serial,
 									     -1, 1);
 			} else {
 				keyboard->keyboard->preedit_string[strlen(keyboard->keyboard->preedit_string) - 1] = '\0';
 				input_method_context_preedit_cursor(keyboard->keyboard->context,
+								    keyboard->keyboard->serial,
 								    strlen(keyboard->keyboard->preedit_string));
 				input_method_context_preedit_string(keyboard->keyboard->context,
+								    keyboard->keyboard->serial,
 								    keyboard->keyboard->preedit_string,
 								    keyboard->keyboard->preedit_string);
 			}
@@ -385,7 +394,8 @@
 
 static void
 input_method_context_reset(void *data,
-			   struct input_method_context *context)
+			   struct input_method_context *context,
+			   uint32_t serial)
 {
 	struct virtual_keyboard *keyboard = data;
 
@@ -393,13 +403,17 @@
 
 	if (strlen(keyboard->preedit_string)) {
 		input_method_context_preedit_cursor(context,
+						    serial,
 						    0);
 		input_method_context_preedit_string(context,
+						    serial,
 						    "",
 						    "");
 		free(keyboard->preedit_string);
 		keyboard->preedit_string = strdup("");
 	}
+
+	keyboard->serial = serial;
 }
 
 static const struct input_method_context_listener input_method_context_listener = {
@@ -410,7 +424,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 virtual_keyboard *keyboard = data;
 	struct wl_array modifiers_map;
@@ -422,6 +437,7 @@
 		free(keyboard->preedit_string);
 
 	keyboard->preedit_string = strdup("");
+	keyboard->serial = serial;
 
 	keyboard->context = context;
 	input_method_context_add_listener(context,