text: Add support for forwarding key events
authorJan Arne Petersen <jpetersen@openismus.com>
Sun, 18 Nov 2012 18:06:46 +0000 (19:06 +0100)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 27 Nov 2012 18:10:10 +0000 (13:10 -0500)
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>
protocol/input-method.xml
src/text-backend.c

index 0f15644..487be0b 100644 (file)
       </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
index edcb08e..d123da9 100644 (file)
@@ -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