From 0a8f62d8c7116be9e344f351df679599908fb29c Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Thu, 4 Jun 2020 19:10:07 -0700 Subject: refactored --- sys/cmd/dwm/decoration.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 sys/cmd/dwm/decoration.c (limited to 'sys/cmd/dwm/decoration.c') diff --git a/sys/cmd/dwm/decoration.c b/sys/cmd/dwm/decoration.c new file mode 100644 index 0000000..af0dc5f --- /dev/null +++ b/sys/cmd/dwm/decoration.c @@ -0,0 +1,52 @@ +#include "dwm.h" + +/* internal callbacks */ +static void mode(struct wl_listener *ev, void *arg); +static void delete(struct wl_listener *ev, void *arg); + +// ----------------------------------------------------------------------- +// implementations + +void +ev·newdecoration(struct wl_listener *ev, void *arg) +{ + struct wlr_server_decoration *wlr; + Deco *deco; + + wlr = arg; + + deco = calloc(1, sizeof(*deco)); + if (!deco) + return; + + deco->wlr = wlr; + + wl_signal_add(&wlr->events.destroy, &deco->ev.free); + deco->ev.free.notify = delete; + + wl_signal_add(&wlr->events.mode, &deco->ev.mode); + deco->ev.mode.notify = mode; + + wl_list_insert(&dwm.decos, &deco->link); +} + +static +void +delete(struct wl_listener *ev, void *arg) +{ + Deco *deco; + + deco = wl_container_of(ev, deco, ev.free); + + wl_list_remove(&deco->ev.free.link); + wl_list_remove(&deco->ev.mode.link); + wl_list_remove(&deco->link); + free(deco); +} + +static +void +mode(struct wl_listener *ev, void *arg) +{ + /* no op */ +} -- cgit v1.2.1