From 602d59a3b2efa9358795a7cb1249b827cf49f7c8 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Sun, 20 Aug 2023 11:56:50 +0100 Subject: [PATCH] Add common/array.h with wl_array_len() --- include/common/array.h | 33 +++++++++++++++++++++++++++++++++ src/osd.c | 3 ++- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 include/common/array.h diff --git a/include/common/array.h b/include/common/array.h new file mode 100644 index 00000000..4f6e6237 --- /dev/null +++ b/include/common/array.h @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef LABWC_ARRAY_H +#define LABWC_ARRAY_H +#include + +/* + * Wayland's wl_array API is a bit sparse consisting only of + * - init + * - release + * - add + * - copy + * - for_each + * + * The purpose of this header is the gather any generic wl_array helpers we + * create. + * + * We take the liberty of using the wl_ suffix here to make it look a bit + * prettier. If Wayland extend the API in future, we will sort the clash then. + */ + +/** + * wl_array_len() - return length of wl_array + * @array: wl_array for which to calculate length + * Note: The pointer type might not be 'char' but this is the approach that + * wl_array_for_each() takes, so we align with their style. + */ +static inline size_t +wl_array_len(struct wl_array *array) +{ + return array->size / sizeof(const char *); +} + +#endif /* LABWC_ARRAY_H */ diff --git a/src/osd.c b/src/osd.c index de7f3009..f6d6766b 100644 --- a/src/osd.c +++ b/src/osd.c @@ -7,6 +7,7 @@ #include #include #include "buffer.h" +#include "common/array.h" #include "common/buf.h" #include "common/font.h" #include "common/graphic-helpers.h" @@ -411,7 +412,7 @@ display_osd(struct output *output) float scale = output->wlr_output->scale; int w = theme->osd_window_switcher_width; - int h = views.size / sizeof(struct view *) * rc.theme->osd_window_switcher_item_height + int h = wl_array_len(&views) * rc.theme->osd_window_switcher_item_height + 2 * rc.theme->osd_border_width + 2 * rc.theme->osd_window_switcher_padding; if (show_workspace) {