[PATCH wayland 3/5] Add API to get the list of connected clients

Giulio Camuffo giuliocamuffo at gmail.com
Mon Mar 7 17:31:33 UTC 2016


---
 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



More information about the wayland-devel mailing list