From 4cc2a03620b55113622379772c0b8890010fe7fa Mon Sep 17 00:00:00 2001
From: Guido Günther <agx@sigxcpu.org>
Date: Tue, 8 Mar 2022 12:26:59 +0100
Subject: 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);
 	}
-- 
cgit v1.2.3