[PATCH wayland 3/6] wl_keyboard: Add modifier event
Daniel Stone
daniel at fooishbar.org
Wed May 30 08:31:47 PDT 2012
This event sends the current keyboard modifier/group state from the
compositor to the client, allowing all clients to have a consistent view
of the keyboard state (e.g. current layout, Caps Lock, et al). It
should be sent after a keyboard enter event, and also immediately after
any key event which changes the modifier state.
Signed-off-by: Daniel Stone <daniel at fooishbar.org>
---
protocol/wayland.xml | 13 +++++++++++++
src/wayland-server.c | 19 ++++++++++++++++++-
src/wayland-server.h | 3 +++
3 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/protocol/wayland.xml b/protocol/wayland.xml
index 3979d97..eb09849 100644
--- a/protocol/wayland.xml
+++ b/protocol/wayland.xml
@@ -872,6 +872,19 @@
<arg name="key" type="uint"/>
<arg name="state" type="uint"/>
</event>
+
+ <event name="modifiers">
+ <description summary="modifier and group state">
+ Notifies clients that the modifier and/or group state has
+ changed, and it should update its local state.
+ </description>
+
+ <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"/>
+ </event>
</interface>
<interface name="wl_touch" version="1">
diff --git a/src/wayland-server.c b/src/wayland-server.c
index 2845671..aee4efc 100644
--- a/src/wayland-server.c
+++ b/src/wayland-server.c
@@ -532,9 +532,26 @@ default_grab_key(struct wl_keyboard_grab *grab,
}
}
+static void
+default_grab_modifiers(struct wl_keyboard_grab *grab, uint32_t serial,
+ uint32_t mods_depressed, uint32_t mods_latched,
+ uint32_t mods_locked, uint32_t group)
+{
+ struct wl_keyboard *keyboard = grab->keyboard;
+ struct wl_resource *resource;
+
+ resource = keyboard->focus_resource;
+ if (!resource)
+ return;
+
+ wl_keyboard_send_modifiers(resource, serial, mods_depressed,
+ mods_latched, mods_locked, group);
+}
+
static const struct wl_keyboard_grab_interface
default_keyboard_grab_interface = {
- default_grab_key
+ default_grab_key,
+ default_grab_modifiers,
};
WL_EXPORT void
diff --git a/src/wayland-server.h b/src/wayland-server.h
index 731be00..d905ea8 100644
--- a/src/wayland-server.h
+++ b/src/wayland-server.h
@@ -210,6 +210,9 @@ struct wl_keyboard_grab;
struct wl_keyboard_grab_interface {
void (*key)(struct wl_keyboard_grab *grab, uint32_t time,
uint32_t key, uint32_t state);
+ void (*modifiers)(struct wl_keyboard_grab *grab, uint32_t serial,
+ uint32_t mods_depressed, uint32_t mods_latched,
+ uint32_t mods_locked, uint32_t group);
};
struct wl_keyboard_grab {
--
1.7.10
More information about the wayland-devel
mailing list