copied from tinywl
JCSC5VHJ3WGCG6ZLY3EJ6TGTCOT22AUMQ5B42LFVQBHHCVMGKEUQC
52A7MUJWROHQGWFYOHUOFXXP5DWKE2BLK6YNXQV73Y5DWMMLQJRQC
I5C76NH3Q4SRQHGGJEUR2NA5HPW4KDG52HGZTLMAAZQGLHWXTQIAC
UWCTRAYAGXH5SCRHZKFJXVNVPCISUY4KHZVEOIEPOJSDBJKAMNNQC
QEW4JPCS73HQFUXWFNYZBVERHQKMW245GDEPN5LMH6SRYPFH6ZYAC
EQRGODLKSVSPFSUZU7BV5ER72U4QS4ATSBKV544XXQVKKTOSC7EAC
7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC
MJZ6RCUUOK7R2RMXPXMLRWBAEM6234D2IS7RGPHAE5UN2S64GLGAC
YCC55JJHQR3BEO3ZTP6NVDKTFU4NNNJP2SW755QMMUAIEBMXXIRAC
K4WT3C2H7N7NXG7MYHKY2INKMLNUQYK5PHUVGZW5GS5T6Z3UKCFAC
* if an X11 server is running. The NULL argument here optionally allows you
* to pass in a custom renderer if wlr_renderer doesn't meet your needs. The
* backend uses the renderer, for example, to fall back to software cursors
* if the backend does not support hardware cursors (some older GPUs
* don't). */
* if an X11 server is running. */
/* Create a renderer with the default implementation */
/* Autocreates a renderer, either Pixman, GLES2 or Vulkan for us. The user
* can also specify a renderer using the WLR_RENDERER env var.
* The renderer is responsible for defining the various pixel formats it
* supports for shared memory, this configures that for clients. */
layer_shell = wlr_layer_shell_v1_create(dpy, 3);
LISTEN_STATIC(&layer_shell->events.new_surface, createlayersurface);
xdg_shell = wlr_xdg_shell_create(dpy, 6);
LISTEN_STATIC(&xdg_shell->events.new_surface, createnotify);