text: Add support for forwarding key events

Allow an input method to forward (unfiltered) key and modifier events
from the hardware keyboard to the client.

Signed-off-by: Jan Arne Petersen <jpetersen@openismus.com>
diff --git a/src/text-backend.c b/src/text-backend.c
index edcb08e..d123da9 100644
--- a/src/text-backend.c
+++ b/src/text-backend.c
@@ -454,6 +454,43 @@
 	wl_keyboard_start_grab(keyboard, &context->grab);
 }
 
+static void
+input_method_context_key(struct wl_client *client,
+			 struct wl_resource *resource,
+			 uint32_t serial,
+			 uint32_t time,
+			 uint32_t key,
+			 uint32_t state_w)
+{
+	struct input_method_context *context = resource->data;
+	struct weston_seat *seat = context->input_method->seat;
+	struct wl_keyboard *keyboard = seat->seat.keyboard;
+	struct wl_keyboard_grab *default_grab = &keyboard->default_grab;
+
+	default_grab->interface->key(default_grab, time, key, state_w);
+}
+
+static void
+input_method_context_modifiers(struct wl_client *client,
+			       struct wl_resource *resource,
+			       uint32_t serial,
+			       uint32_t mods_depressed,
+			       uint32_t mods_latched,
+			       uint32_t mods_locked,
+			       uint32_t group)
+{
+	struct input_method_context *context = resource->data;
+
+	struct weston_seat *seat = context->input_method->seat;
+	struct wl_keyboard *keyboard = seat->seat.keyboard;
+	struct wl_keyboard_grab *default_grab = &keyboard->default_grab;
+
+	default_grab->interface->modifiers(default_grab,
+					   serial, mods_depressed,
+					   mods_latched, mods_locked,
+					   group);
+}
+
 static const struct input_method_context_interface input_method_context_implementation = {
 	input_method_context_destroy,
 	input_method_context_commit_string,
@@ -461,7 +498,9 @@
 	input_method_context_delete_surrounding_text,
 	input_method_context_modifiers_map,
 	input_method_context_keysym,
-	input_method_context_grab_keyboard
+	input_method_context_grab_keyboard,
+	input_method_context_key,
+	input_method_context_modifiers
 };
 
 static void