WAFFLE_WAYLAND(3)

πŸ¦‹ WAFFLE_WAYLAND πŸ¦‹

hiii bestie, welcome to waffle_wayland(3) β€” the page that lives in the Waffle Manual, aka your little backstage pass to the actual native Wayland objects that Waffle is holding for you. no gatekeeping here, we're going through every single one πŸ’…


πŸ’– NAME πŸ’–

waffle_wayland, waffle_wayland_display, waffle_wayland_config, waffle_wayland_context, waffle_wayland_window β€” containers for the underlying native Wayland objects. that's the whole vibe. they're the lil carrying cases, not the objects themselves 🫢


✨ SYNOPSIS ✨

first things first, you gotta let the header in:

#include <waffle_wayland.h>

okay so now the four structs, and pls look at them properly because every single member is here for a reason 🌸

🧚 waffle_wayland_display

struct waffle_wayland_display {
    struct wl_display *wl_display;
    struct wl_compositor *wl_compositor;
    // DEPRECATED: wl_shell will be NULL when compositor does not support the
    // old wl_shell protocol
    struct wl_shell *wl_shell;
    EGLDisplay egl_display;
    // xdg_shell introduced with 1.7. Will be NULL when compositor does not
    // support the new xdg-shell protocol
    struct xdg_wm_base *xdg_shell;
};

so wl_shell is DEPRECATED, and heads up: it will be NULL when the compositor does not support the old wl_shell protocol. and xdg_shell got introduced with 1.7, and it will be NULL when the compositor does not support the new xdg-shell protocol. icon behavior, honestly πŸ’€

πŸ“ waffle_wayland_config

struct waffle_wayland_config {
    struct waffle_wayland_display display;
    EGLConfig egl_config;
};

a waffle_wayland_display and an EGLConfig, chilling together. simple, clean, slay.

🌈 waffle_wayland_context

struct waffle_wayland_context {
    struct waffle_wayland_display display;
    EGLContext egl_context;
};

same energy: a waffle_wayland_display plus an EGLContext. the way that it just works 😭

πŸ‘‘ waffle_wayland_window

struct waffle_wayland_window {
    struct waffle_wayland_display display;
    struct wl_surface *wl_surface;
    // DEPRECATED: wl_shell_surface will be NULL when compositor does not
    // support the old wl_shell protocol
    struct wl_shell_surface *wl_shell_surface;
    struct wl_egl_window *wl_window;
    EGLSurface egl_surface;
    // xdg_surface and xdg_toplevel introduced with 1.7. Will be NULL when
    // compositor does not support the new xdg-shell protocol
    struct xdg_surface *xdg_surface;
    struct xdg_toplevel *xdg_toplevel;
};

okay this one is the main character for real. wl_shell_surface is DEPRECATED and will be NULL when the compositor does not support the old wl_shell protocol. and xdg_surface + xdg_toplevel came in with 1.7 β€” they will be NULL when the compositor does not support the new xdg-shell protocol. so if you're out here dereferencing those nulls, bestie, that's not the move πŸ™ˆ


😭 ISSUES 😭

found a bug? need a feature? don't suffer in silence, pls report bugs or feature requests here:

https://gitlab.freedesktop.org/mesa/waffle/issues

we love a paper trail. and apparently we also love a typo ("bugs or and feature requests") but that's what the original says so we're keeping it, no cap 🫢


πŸ”₯ SEE ALSO πŸ”₯

go read those next, iykyk πŸ“š


πŸ’œ AUTHOR πŸ’œ

Chad Versace <chad.versace@linux.intel.com> Former maintainer

ty for your service, king πŸ‘‘


Copyright Β© 2013 Intel

This manual page is licensed under the Creative Commons Attribution-ShareAlike 3.0 United States License (CC BY-SA 3.0). To view a copy of this license, visit http://creativecommons.org.license/by-sa/3.0/us.


and that's the whole page, bestie πŸ¦‹ this lil love letter is part of the Waffle Manual, waffle edition, dated 07/06/2026 β€” go forth, link your Wayland objects, and stay hydrated πŸ’–βœ¨πŸŒΈ

πŸ“¦ where this page comes from