From 51ef0505a699454a3c44fd5565277a1f1c6e8d71 Mon Sep 17 00:00:00 2001 From: Jonny Lamb Date: Tue, 14 Oct 2014 18:52:56 +0100 Subject: server: add helper functions for wl_global The intention here is to be able to find an existing wl_global using some search parameters and then get some information about it. --- src/wayland-server.c | 33 +++++++++++++++++++++++++++++++++ src/wayland-server.h | 4 ++++ 2 files changed, 37 insertions(+) diff --git a/src/wayland-server.c b/src/wayland-server.c index 0558634..5dd6c71 100644 --- a/src/wayland-server.c +++ b/src/wayland-server.c @@ -945,6 +945,39 @@ wl_global_destroy(struct wl_global *global) free(global); } +WL_EXPORT void * +wl_global_get_data(struct wl_global *global) +{ + return global->data; +} + +WL_EXPORT struct wl_global * +wl_global_find(struct wl_display *display, + const struct wl_interface *interface, uint32_t version, + void *data, wl_global_bind_func_t bind) +{ + struct wl_global *global; + + /* return with nothing if we have no search parameters */ + if (interface == NULL && version == 0 && data == NULL && bind == NULL) + return NULL; + + wl_list_for_each(global, &display->global_list, link) { + if (interface != NULL && global->interface != interface) + continue; + if (version != 0 && global->version != version) + continue; + if (data != NULL && global->data != data) + continue; + if (bind != NULL && global->bind != bind) + continue; + + return global; + } + + return NULL; +} + /** Get the current serial number * * \param display The display object diff --git a/src/wayland-server.h b/src/wayland-server.h index af2f03d..05449dc 100644 --- a/src/wayland-server.h +++ b/src/wayland-server.h @@ -113,6 +113,10 @@ struct wl_global *wl_global_create(struct wl_display *display, int version, void *data, wl_global_bind_func_t bind); void wl_global_destroy(struct wl_global *global); +void *wl_global_get_data(struct wl_global *global); +struct wl_global *wl_global_find(struct wl_display *display, + const struct wl_interface *interface, uint32_t version, + void *data, wl_global_bind_func_t bind); struct wl_client *wl_client_create(struct wl_display *display, int fd); void wl_client_destroy(struct wl_client *client); -- cgit v1.2.3