This was a prime candidate for reducing the verbosity of some of our code
ERBETXYU7NGSWW5LHQ3NSJA2N27JNMDDYMZ74B6IVQTEQMLRP6PAC
Z2AE4753XANECH5OWR3WMFHYTH2NIINO3CZC4NXZKCJCEP6TNTTAC
QAPSVUOF7DV6R2PSLKLZUKC5TMB62ZYOUZ2NA6CHFOU6PSTJULWAC
7QTKZEHTZVV5GLTPUSLQZFCJE3S6KLEMC6ZT4Y2G3O7ITZ35SVNAC
BFWKVWAIUKHCZVRA62GW6QZUEUKQLW365HUWIVKTEIPJNJSOZBAQC
ZTOYJ4G4UQ665FKUH376KJOOO5GXHI62SWVXNZS7X6F2Y4GG2FSQC
7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC
D425ND7AT3F7QJ3CCSESMVDOC3J5C5P32M5SJDBHECZJXLHNQ2FAC
2QL2H4REDZT46FI3LQ4RYEMQYZBNBK3IC3KH3XERAJU3NCZWMNYQC
7HUMD4TAMWWBQDOZYCMWQXR66G3IU5WU3IVKTPCSMETSB6VREWTAC
J6OSBEBQXZR5JZ5TOCCUPELBPUVEQULGCXURXLPY7WFYTDEQOU2AC
7L3TU7JVWPBPHN7WF4TJ263BZ6BC3AYRRW6PULFUP5JZUGWWNUSAC
GBK2UGQ4CNOPJKFXFXUTHK5AHJ4XG6LFMBWDD62PSTAPUGKKYTLQC
QZTGPM7DPNFT4DK324XACH7OYK63JJV2TVDBXNRAO26SR6GNALUAC
ZOOCZQBGZ4PCOU54EPPUPWNOIFWCM5RMZ4EFL2WFR7LFJTAMHZGAC
ZDQJLNDNDQPWEEWF2QZDRY5LZNJS653SDUQZDHK6EQPH7N4MHXUQC
PLJJLNS7E2UXW2YARGBSV6IHZEBGL5EW354IMMHPDATY5DQD77DAC
QABPNBR63OM7GUPREDFVZEQH3SE55ZGJLSOI7TPFA2KJNJSQMZLAC
VO3MWB6Z442HXCPJQAIFUKJGKNM5HKSZMELZTOBHDPXSVMZONWMQC
XGXZF5T7UFWJQES25XVBJZ4BN53SJ3SXZH3YUB2JUYVPN2PDRPJAC
VCNLR5X75OAXVKPZQHF5RUZ7BONBUC6RPGO2NZEUD3FZ7TEVL66AC
DADSQJFKYX6U5JOHSHJWWDSUFC7ZWSZVHFMEKPZEXKPELMEQBL2QC
MIZBQX6SKECIVNNGBF3LCR3IHXQVWQ5BJURMRSBNEVEUWFBH3MTQC
E7UO6NRGXFDMBU3BSJYRDNOA3Y7VHD7NWPHI5PHCPHQF6ZNOPZLQC
4QUF4MKRSB5LYYS5FSYTCDSIEMYIERI2BQZLRGJ3GIGVYCPJVEPAC
BHAVCU3626VQYRHL7PPGBXGM3N5GBHTN5L5P74M6BKDAARKQDOAQC
SXR2JTOL5ZWTFNSCWS3D3W6QP7BVS53AF2WXBAWEE4K3CUWVHCTAC
6TCDMCXLC4RNNQI6AEYYA6RZNHG3V2U6YDGXJOCU27F5TNKN26LQC
6OZ3VUODEBOTXODIJQU5TKXCDEJOWTYHCMCDB4MJ2X3T6EG374SAC
TOFCZFUYVBVEBHMKVG6G5MKCAEF2QCQ4GKMKGQUSJRLGLDZEJF4QC
kb->modifiers.notify = keypressmod;
wl_signal_add(&device->keyboard->events.modifiers, &kb->modifiers);
kb->key.notify = keypress;
wl_signal_add(&device->keyboard->events.key, &kb->key);
kb->destroy.notify = cleanupkeyboard;
wl_signal_add(&device->events.destroy, &kb->destroy);
LISTEN(&device->keyboard->events.modifiers, &kb->modifiers, keypressmod);
LISTEN(&device->keyboard->events.key, &kb->key, keypress);
LISTEN(&device->events.destroy, &kb->destroy, cleanupkeyboard);
m->frame.notify = rendermon;
wl_signal_add(&wlr_output->events.frame, &m->frame);
m->destroy.notify = cleanupmon;
wl_signal_add(&wlr_output->events.destroy, &m->destroy);
LISTEN(&wlr_output->events.frame, &m->frame, rendermon);
LISTEN(&wlr_output->events.destroy, &m->destroy, cleanupmon);
/* Listen to the various events it can emit */
c->commit.notify = commitnotify;
wl_signal_add(&xdg_surface->surface->events.commit, &c->commit);
c->map.notify = mapnotify;
wl_signal_add(&xdg_surface->events.map, &c->map);
c->unmap.notify = unmapnotify;
wl_signal_add(&xdg_surface->events.unmap, &c->unmap);
c->destroy.notify = destroynotify;
wl_signal_add(&xdg_surface->events.destroy, &c->destroy);
c->fullscreen.notify = fullscreennotify;
wl_signal_add(&xdg_surface->toplevel->events.request_fullscreen, &c->fullscreen);
LISTEN(&xdg_surface->surface->events.commit, &c->commit, commitnotify);
LISTEN(&xdg_surface->events.map, &c->map, mapnotify);
LISTEN(&xdg_surface->events.unmap, &c->unmap, unmapnotify);
LISTEN(&xdg_surface->events.destroy, &c->destroy, destroynotify);
LISTEN(&xdg_surface->toplevel->events.request_fullscreen, &c->fullscreen,
fullscreennotify);
layersurface->surface_commit.notify = commitlayersurfacenotify;
wl_signal_add(&wlr_layer_surface->surface->events.commit,
&layersurface->surface_commit);
layersurface->destroy.notify = destroylayersurfacenotify;
wl_signal_add(&wlr_layer_surface->events.destroy, &layersurface->destroy);
layersurface->map.notify = maplayersurfacenotify;
wl_signal_add(&wlr_layer_surface->events.map, &layersurface->map);
layersurface->unmap.notify = unmaplayersurfacenotify;
wl_signal_add(&wlr_layer_surface->events.unmap, &layersurface->unmap);
LISTEN(&wlr_layer_surface->surface->events.commit,
&layersurface->surface_commit, commitlayersurfacenotify);
LISTEN(&wlr_layer_surface->events.destroy, &layersurface->destroy,
destroylayersurfacenotify);
LISTEN(&wlr_layer_surface->events.map, &layersurface->map,
maplayersurfacenotify);
LISTEN(&wlr_layer_surface->events.unmap, &layersurface->unmap,
unmaplayersurfacenotify);
wl_signal_add(&wlr_deco->events.request_mode, &d->request_mode);
d->request_mode.notify = getxdecomode;
wl_signal_add(&wlr_deco->events.destroy, &d->destroy);
d->destroy.notify = destroyxdeco;
LISTEN(&wlr_deco->events.request_mode, &d->request_mode, getxdecomode);
LISTEN(&wlr_deco->events.destroy, &d->destroy, destroyxdeco);
c->map.notify = mapnotify;
wl_signal_add(&xwayland_surface->events.map, &c->map);
c->unmap.notify = unmapnotify;
wl_signal_add(&xwayland_surface->events.unmap, &c->unmap);
c->activate.notify = activatex11;
wl_signal_add(&xwayland_surface->events.request_activate, &c->activate);
c->configure.notify = configurex11;
wl_signal_add(&xwayland_surface->events.request_configure, &c->configure);
c->destroy.notify = destroynotify;
wl_signal_add(&xwayland_surface->events.destroy, &c->destroy);
c->fullscreen.notify = fullscreennotify;
wl_signal_add(&xwayland_surface->events.request_fullscreen, &c->fullscreen);
c->isfullscreen = 0;
LISTEN(&xwayland_surface->events.map, &c->map, mapnotify);
LISTEN(&xwayland_surface->events.unmap, &c->unmap, unmapnotify);
LISTEN(&xwayland_surface->events.request_activate, &c->activate,
activatex11);
LISTEN(&xwayland_surface->events.request_configure, &c->configure,
configurex11);
LISTEN(&xwayland_surface->events.destroy, &c->destroy, destroynotify);
LISTEN(&xwayland_surface->events.request_fullscreen, &c->fullscreen,
fullscreennotify);