--- src/wayland-server-core.h | 14 +++++++++++++ src/wayland-server.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+)
diff --git a/src/wayland-server-core.h b/src/wayland-server-core.h index a4ca350..4201b2c 100644 --- a/src/wayland-server-core.h +++ b/src/wayland-server-core.h @@ -176,6 +176,20 @@ wl_global_destroy(struct wl_global *global); struct wl_client * wl_client_create(struct wl_display *display, int fd); +struct wl_list * +wl_display_get_client_list(struct wl_display *display); + +struct wl_list * +wl_client_get_link(struct wl_client *client); + +struct wl_client * +wl_client_from_link(struct wl_list *link); + +#define wl_client_for_each(client, list) \ + for (client = 0, client = wl_client_from_link((list)->next); \ + wl_client_get_link(client) != (list); \ + client = wl_client_from_link(wl_client_get_link(client)->next)) + void wl_client_destroy(struct wl_client *client); diff --git a/src/wayland-server.c b/src/wayland-server.c index 5099614..a5527eb 100644 --- a/src/wayland-server.c +++ b/src/wayland-server.c @@ -1512,6 +1512,58 @@ wl_display_get_additional_shm_formats(struct wl_display *display) return &display->additional_shm_formats; } +/** Get the list of currently connected clients + * + * \param display The display object + * + * This function returns a pointer to the list of clients currently + * connected to the display. You can iterate on the list by using + * the \a wl_client_for_each macro. + * + * \sa wl_client_for_each() + * \sa wl_client_get_link() + * \sa wl_client_from_link() + * + * \memberof wl_display + */ +WL_EXPORT struct wl_list * +wl_display_get_client_list(struct wl_display *display) +{ + return &display->client_list; +} + +/** Get the link by which a client is inserted in the client list + * + * \param client The client object + * + * \sa wl_client_for_each() + * \sa wl_display_get_client_list() + * \sa wl_client_from_link() + * + * \memberof wl_client + */ +WL_EXPORT struct wl_list * +wl_client_get_link(struct wl_client *client) +{ + return &client->link; +} + +/** Get a wl_client by its link + * + * \param link The link of a wl_client + * + * \sa wl_client_for_each() + * \sa wl_display_get_client_list() + * \sa wl_client_get_link() + * + * \memberof wl_client + */ +WL_EXPORT struct wl_client * +wl_client_from_link(struct wl_list *link) +{ + return wl_container_of(link, (struct wl_client *)0, link); +} + /** \cond */ /* Deprecated functions below. */ uint32_t -- 2.7.2 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel