This patch's purpose is getting global interface information registerred in the server. If global is created (used wl_global_create()), information are saved in global_list. But almost structures used in wayland is defined statically. So it is hard to get structure's values in server side.
Added following APIs. - wl_display_get_global_list() - wl_global_get_interface() - wl_interface_get_name() - wl_interface_get_method_count() - wl_interface_get_methods() - wl_interface_get_event_count() - wl_interface_get_events() - wl_message_get_name() - wl_global_list_get_global() You can get interface information to combine added APIs. (Such as interface's name and events/requests name) 1st, you can get wl_list:global_list to use wl_display_get_global_list(). 2nd, you can get length of wl_list to use wl_list_length() and wl_global to use wl_global_list_get_global(). wl_global is saved in list, so you need index to get wl_global. 3rd, you can get wl_interface to use wl_global_get_interface(). 4th, in wl_interface structure, there are so many information about interface name and events/requests information. so you can get information to use wl_interface_get_name(), wl_interface_get_method_count(), wl_interface_get_method(), wl_interface_get_event_count(), wl_interface_get_event(). --- src/wayland-server.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/wayland-server.h | 27 ++++++++++++++++++++++ 2 files changed, 90 insertions(+) diff --git a/src/wayland-server.c b/src/wayland-server.c index 19aa2e8..ac5c2e5 100644 --- a/src/wayland-server.c +++ b/src/wayland-server.c @@ -997,6 +997,63 @@ wl_global_destroy(struct wl_global *global) free(global); } +WL_EXPORT const struct wl_interface * +wl_global_get_interface(struct wl_global *global) +{ + return global->interface; +} + +WL_EXPORT struct wl_global * +wl_global_list_get_global(struct wl_list *list, int idx) +{ + int i = 0; + struct wl_global *global; + + wl_list_for_each(global, list, link) + { + if (idx == i) break; + i++; + } + + return global; +} + +WL_EXPORT const char * +wl_interface_get_name(const struct wl_interface *interface) +{ + return interface->name; +} + +WL_EXPORT int +wl_interface_get_method_count(const struct wl_interface *interface) +{ + return interface->method_count; +} + +WL_EXPORT const struct wl_message * +wl_interface_get_methods(const struct wl_interface *interface) +{ + return interface->methods; +} + +WL_EXPORT int +wl_interface_get_event_count(const struct wl_interface *interface) +{ + return interface->event_count; +} + +WL_EXPORT const struct wl_message * +wl_interface_get_events(const struct wl_interface *interface) +{ + return interface->events; +} + +WL_EXPORT const char * +wl_message_get_name(const struct wl_message *message) +{ + return message->name; +} + /** Get the current serial number * * \param display The display object @@ -1035,6 +1092,12 @@ wl_display_get_event_loop(struct wl_display *display) return display->loop; } +WL_EXPORT struct wl_list * +wl_display_get_global_list(struct wl_display *display) +{ + return &display->global_list; +} + WL_EXPORT void wl_display_terminate(struct wl_display *display) { diff --git a/src/wayland-server.h b/src/wayland-server.h index a6e7951..3494641 100644 --- a/src/wayland-server.h +++ b/src/wayland-server.h @@ -92,6 +92,33 @@ wl_display_remove_global(struct wl_display *display, #endif +struct wl_list * +wl_display_get_global_list(struct wl_display *display); + +const struct wl_interface * +wl_global_get_interface(struct wl_global *global); + +const char * +wl_interface_get_name(const struct wl_interface *interface); + +int +wl_interface_get_method_count(const struct wl_interface *interface); + +const struct wl_message * +wl_interface_get_methods(const struct wl_interface *interface); + +int +wl_interface_get_event_count(const struct wl_interface *interface); + +const struct wl_message * +wl_interface_get_events(const struct wl_interface *interface); + +const char * +wl_message_get_name(const struct wl_message *message); + +struct wl_global * +wl_global_list_get_global(struct wl_list *list, int idx); + #ifdef __cplusplus } #endif -- 1.9.1 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel