How to properly keep track of wl/xdg output?

ferreiradaselva ferreiradaselva at
Sat May 12 10:34:36 UTC 2018


Excuse me if this is something that is already explained in the protocols, but I couldn't find the solution by myown.

I'm working on a client-side library, and I need to keep track of wl (or xdg in the future) outputs. My first idea was:
- Have a `wl_list` in my context
- In the global listener, add the `wl_output` to the list
- In the global remove listener, remove the `wl_output` from the list

However, in the global remove listener, we only have a "uint32_t id" parameter. How am I supposed to know that the type of the object being removed is a `wl_output`? In the global listener we at least have a "const char *interface" that let us know that.

This is what I have (some parts omitted for brevity):

static void wl_registry_listener_global(void *data, struct wl_registry *registry,uint32_t name, const char *interface, uint32_t version)
    struct mycontext *mycontext = data;
    if (!strcmp(interface, "wl_output")) {
        struct wl_output *output = wl_registry_bind(registry, name, &wl_output_interface, 1);
        wl_output_add_listener(output, &wl_output_listener, mycontext);
        wl_list_insert(&mycontext->outputs, output);

static void wl_registry_listener_global_remove(void *data, struct wl_registry *registry, uint32_t id)
    struct mycontext *mycontext = data;
    if (...) {
        wl_list_remove(&mycontext->outputs, output);

Thanks in advance,
- Felipe

Sent with [ProtonMail]( Secure Email.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the wayland-devel mailing list