From: Jan Arne Petersen <[email protected]> Allow an input method to forward (unfiltered) key and modifier events from the hardware keyboard to the client.
Signed-off-by: Jan Arne Petersen <[email protected]> --- 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 3418c0c..d680dba 100644 --- a/protocol/input-method.xml +++ b/protocol/input-method.xml @@ -76,6 +76,19 @@ </description> <arg name="keyboard" type="new_id" interface="wl_keyboard"/> </request> + <request name="key"> + <arg name="serial" type="uint"/> + <arg name="time" type="uint"/> + <arg name="key" type="uint"/> + <arg name="state" type="uint"/> + </request> + <request name="modifiers"> + <arg name="serial" type="uint"/> + <arg name="mods_depressed" type="uint"/> + <arg name="mods_latched" type="uint"/> + <arg name="mods_locked" type="uint"/> + <arg name="group" type="uint"/> + </request> <event name="surrounding_text"> <description summary="surrounding text event"> The plain surrounding text around the input position. Cursor is the diff --git a/src/text-backend.c b/src/text-backend.c index 3799adb..badd432 100644 --- a/src/text-backend.c +++ b/src/text-backend.c @@ -444,13 +444,52 @@ 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, input_method_context_preedit_string, input_method_context_delete_surrounding_text, input_method_context_keysym, - input_method_context_grab_keyboard + input_method_context_grab_keyboard, + input_method_context_key, + input_method_context_modifiers }; static void -- 1.7.11.7 _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
