From ec746d3e3ee2f1f4a9bd49e800b3ba8b73be72a9 Mon Sep 17 00:00:00 2001 From: Isaac Freund Date: Tue, 17 Mar 2026 09:29:21 +0100 Subject: [PATCH] virtual-keyboard: add wlr_virtual_keyboard_v1_from_resource() I want to use the zwp_virtual_keyboard_v1 object in a custom river protocol and need to be able to obtain the corresponding wlroots struct. --- include/wlr/types/wlr_virtual_keyboard_v1.h | 11 +++++++++++ types/wlr_virtual_keyboard_v1.c | 10 +++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/include/wlr/types/wlr_virtual_keyboard_v1.h b/include/wlr/types/wlr_virtual_keyboard_v1.h index babc535a5..a5fc589cb 100644 --- a/include/wlr/types/wlr_virtual_keyboard_v1.h +++ b/include/wlr/types/wlr_virtual_keyboard_v1.h @@ -38,7 +38,18 @@ struct wlr_virtual_keyboard_v1 { struct wlr_virtual_keyboard_manager_v1* wlr_virtual_keyboard_manager_v1_create( struct wl_display *display); +/** + * Get the struct wlr_virtual_keyboard_v1 corresponding to a zwp_virtual_keyboard_v1 resource. + * + * Asserts that the resource is a valid zwp_virtual_keyboard_v1 resource created by wlroots. + * + * Returns NULL if the resource is inert. + */ +struct wlr_virtual_keyboard_v1 *wlr_virtual_keyboard_v1_from_resource( + struct wl_resource *resource); + struct wlr_virtual_keyboard_v1 *wlr_input_device_get_virtual_keyboard( struct wlr_input_device *wlr_dev); + #endif diff --git a/types/wlr_virtual_keyboard_v1.c b/types/wlr_virtual_keyboard_v1.c index e7dcb3ec3..2bc703fb4 100644 --- a/types/wlr_virtual_keyboard_v1.c +++ b/types/wlr_virtual_keyboard_v1.c @@ -15,7 +15,7 @@ static const struct wlr_keyboard_impl keyboard_impl = { static const struct zwp_virtual_keyboard_v1_interface virtual_keyboard_impl; -static struct wlr_virtual_keyboard_v1 *virtual_keyboard_from_resource( +struct wlr_virtual_keyboard_v1 *wlr_virtual_keyboard_v1_from_resource( struct wl_resource *resource) { assert(wl_resource_instance_of(resource, &zwp_virtual_keyboard_v1_interface, &virtual_keyboard_impl)); @@ -39,7 +39,7 @@ static void virtual_keyboard_keymap(struct wl_client *client, struct wl_resource *resource, uint32_t format, int32_t fd, uint32_t size) { struct wlr_virtual_keyboard_v1 *keyboard = - virtual_keyboard_from_resource(resource); + wlr_virtual_keyboard_v1_from_resource(resource); if (keyboard == NULL) { return; } @@ -76,7 +76,7 @@ static void virtual_keyboard_key(struct wl_client *client, struct wl_resource *resource, uint32_t time, uint32_t key, uint32_t state) { struct wlr_virtual_keyboard_v1 *keyboard = - virtual_keyboard_from_resource(resource); + wlr_virtual_keyboard_v1_from_resource(resource); if (keyboard == NULL) { return; } @@ -99,7 +99,7 @@ static void virtual_keyboard_modifiers(struct wl_client *client, struct wl_resource *resource, uint32_t mods_depressed, uint32_t mods_latched, uint32_t mods_locked, uint32_t group) { struct wlr_virtual_keyboard_v1 *keyboard = - virtual_keyboard_from_resource(resource); + wlr_virtual_keyboard_v1_from_resource(resource); if (keyboard == NULL) { return; } @@ -115,7 +115,7 @@ static void virtual_keyboard_modifiers(struct wl_client *client, static void virtual_keyboard_destroy_resource(struct wl_resource *resource) { struct wlr_virtual_keyboard_v1 *keyboard = - virtual_keyboard_from_resource(resource); + wlr_virtual_keyboard_v1_from_resource(resource); if (keyboard == NULL) { return; }