From 337df952f8db85c13bb9d40f897b9947aa3a9a0a Mon Sep 17 00:00:00 2001 From: Jan Arne Petersen Date: Sun, 18 Nov 2012 19:06:46 +0100 Subject: [PATCH] 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 --- protocol/input-method.xml | 13 +++++++++++++ src/text-backend.c | 41 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/protocol/input-method.xml b/protocol/input-method.xml index 0f156441..487be0b7 100644 --- a/protocol/input-method.xml +++ b/protocol/input-method.xml @@ -79,6 +79,19 @@ + + + + + + + + + + + + + The plain surrounding text around the input position. Cursor is the diff --git a/src/text-backend.c b/src/text-backend.c index edcb08ec..d123da9c 100644 --- a/src/text-backend.c +++ b/src/text-backend.c @@ -454,6 +454,43 @@ input_method_context_grab_keyboard(struct wl_client *client, 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 @@ static const struct input_method_context_interface input_method_context_implemen 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