From 4cc2a03620b55113622379772c0b8890010fe7fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Tue, 8 Mar 2022 12:26:59 +0100 Subject: [PATCH] layer-shell: Make wlr_layer_surface_v1_from_resource public This allows compositors to leverage the `wl_instance_of` based type check. --- include/wlr/types/wlr_layer_shell_v1.h | 7 +++++++ types/wlr_layer_shell_v1.c | 24 ++++++++++++++---------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/include/wlr/types/wlr_layer_shell_v1.h b/include/wlr/types/wlr_layer_shell_v1.h index 370fad83..fcb72f24 100644 --- a/include/wlr/types/wlr_layer_shell_v1.h +++ b/include/wlr/types/wlr_layer_shell_v1.h @@ -178,4 +178,11 @@ struct wlr_surface *wlr_layer_surface_v1_popup_surface_at( struct wlr_layer_surface_v1 *surface, double sx, double sy, double *sub_x, double *sub_y); +/** Get the corresponding wlr_layer_surface_v1 from a resource. + * + * Aborts if the resource doesn't have the correct type. + */ +struct wlr_layer_surface_v1 *wlr_layer_surface_v1_from_resource( + struct wl_resource *resource); + #endif diff --git a/types/wlr_layer_shell_v1.c b/types/wlr_layer_shell_v1.c index c8d3a1cb..107dac63 100644 --- a/types/wlr_layer_shell_v1.c +++ b/types/wlr_layer_shell_v1.c @@ -28,7 +28,7 @@ static struct wlr_layer_shell_v1 *layer_shell_from_resource( return wl_resource_get_user_data(resource); } -static struct wlr_layer_surface_v1 *layer_surface_from_resource( +struct wlr_layer_surface_v1 *wlr_layer_surface_v1_from_resource( struct wl_resource *resource) { assert(wl_resource_instance_of(resource, &zwlr_layer_surface_v1_interface, &layer_surface_implementation)); @@ -58,7 +58,8 @@ static void layer_surface_configure_destroy( static void layer_surface_handle_ack_configure(struct wl_client *client, struct wl_resource *resource, uint32_t serial) { - struct wlr_layer_surface_v1 *surface = layer_surface_from_resource(resource); + struct wlr_layer_surface_v1 *surface = + wlr_layer_surface_v1_from_resource(resource); if (!surface) { return; @@ -98,7 +99,8 @@ static void layer_surface_handle_ack_configure(struct wl_client *client, static void layer_surface_handle_set_size(struct wl_client *client, struct wl_resource *resource, uint32_t width, uint32_t height) { - struct wlr_layer_surface_v1 *surface = layer_surface_from_resource(resource); + struct wlr_layer_surface_v1 *surface = + wlr_layer_surface_v1_from_resource(resource); if (!surface) { return; @@ -127,7 +129,8 @@ static void layer_surface_handle_set_anchor(struct wl_client *client, ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_ANCHOR, "invalid anchor %" PRIu32, anchor); } - struct wlr_layer_surface_v1 *surface = layer_surface_from_resource(resource); + struct wlr_layer_surface_v1 *surface = + wlr_layer_surface_v1_from_resource(resource); if (!surface) { return; @@ -144,7 +147,7 @@ static void layer_surface_handle_set_anchor(struct wl_client *client, static void layer_surface_handle_set_exclusive_zone(struct wl_client *client, struct wl_resource *resource, int32_t zone) { - struct wlr_layer_surface_v1 *surface = layer_surface_from_resource(resource); + struct wlr_layer_surface_v1 *surface = wlr_layer_surface_v1_from_resource(resource); if (!surface) { return; @@ -162,7 +165,8 @@ static void layer_surface_handle_set_exclusive_zone(struct wl_client *client, static void layer_surface_handle_set_margin( struct wl_client *client, struct wl_resource *resource, int32_t top, int32_t right, int32_t bottom, int32_t left) { - struct wlr_layer_surface_v1 *surface = layer_surface_from_resource(resource); + struct wlr_layer_surface_v1 *surface = + wlr_layer_surface_v1_from_resource(resource); if (!surface) { return; @@ -186,7 +190,7 @@ static void layer_surface_handle_set_margin( static void layer_surface_handle_set_keyboard_interactivity( struct wl_client *client, struct wl_resource *resource, uint32_t interactive) { - struct wlr_layer_surface_v1 *surface = layer_surface_from_resource(resource); + struct wlr_layer_surface_v1 *surface = wlr_layer_surface_v1_from_resource(resource); if (!surface) { return; @@ -210,7 +214,7 @@ static void layer_surface_handle_get_popup(struct wl_client *client, struct wl_resource *layer_resource, struct wl_resource *popup_resource) { struct wlr_layer_surface_v1 *parent = - layer_surface_from_resource(layer_resource); + wlr_layer_surface_v1_from_resource(layer_resource); struct wlr_xdg_popup *popup = wlr_xdg_popup_from_resource(popup_resource); @@ -225,7 +229,7 @@ static void layer_surface_handle_get_popup(struct wl_client *client, static void layer_surface_set_layer(struct wl_client *client, struct wl_resource *surface_resource, uint32_t layer) { struct wlr_layer_surface_v1 *surface = - layer_surface_from_resource(surface_resource); + wlr_layer_surface_v1_from_resource(surface_resource); if (!surface) { return; } @@ -288,7 +292,7 @@ static void layer_surface_destroy(struct wlr_layer_surface_v1 *surface) { static void layer_surface_resource_destroy(struct wl_resource *resource) { struct wlr_layer_surface_v1 *surface = - layer_surface_from_resource(resource); + wlr_layer_surface_v1_from_resource(resource); if (surface != NULL) { layer_surface_destroy(surface); }