Add API to get the list of connected clients

This patch chooses the wl_list_for_each-style of iterating over
the clients, instead of using an iterator function, because i think
it is easier to use.

Signed-off-by: Giulio Camuffo <giulio.camuffo@kdab.com>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
Giulio Camuffo 2016-08-09 12:46:53 +02:00 committed by Pekka Paalanen
parent 68abfa6732
commit 596024f728
3 changed files with 90 additions and 0 deletions

View file

@ -58,6 +58,26 @@ client_created(struct wl_listener *listener, void *data)
c->client = data;
}
static void
check_client_list(struct compositor *compositor)
{
struct wl_list *client_list;
struct wl_client *client, *client_it;
int num_clients = 0;
client_list = wl_display_get_client_list(compositor->display);
wl_client_for_each(client_it, client_list) {
num_clients++;
client = client_it;
}
assert(num_clients == 1);
/* 'client_it' is not valid here, so we took a copy of the client in the loop.
* We could also do this assert in the loop directly, but in case it fails it is
* easier to understand the problem when we know that the previous assert passed,
* so that there is only one client but the wrong one. */
assert(compositor->client == client);
}
TEST(new_client_connect)
{
const char *socket;
@ -80,6 +100,8 @@ TEST(new_client_connect)
assert(compositor.client != NULL);
check_client_list(&compositor);
wl_display_disconnect(client.display);
wl_client_destroy(compositor.client);