aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2022-03-08 12:26:59 +0100
committerSimon Ser <contact@emersion.fr>2022-03-23 09:19:43 +0000
commit4cc2a03620b55113622379772c0b8890010fe7fa (patch)
treefb2b27c28a18df44d479078add55940b136a2a3f
parentaaf787ee5650e77f0bda4dea8e3ba8325e0e6b39 (diff)
layer-shell: Make wlr_layer_surface_v1_from_resource public
This allows compositors to leverage the `wl_instance_of` based type check.
-rw-r--r--include/wlr/types/wlr_layer_shell_v1.h7
-rw-r--r--types/wlr_layer_shell_v1.c24
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);
}