From ea50cbe1bf103372a3461c80cb172f4fb4167088 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Thu, 4 Jun 2020 16:06:50 -0700 Subject: checkin: before refactoring --- sys/cmd/dway/dway.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 3 deletions(-) (limited to 'sys/cmd/dway/dway.c') diff --git a/sys/cmd/dway/dway.c b/sys/cmd/dway/dway.c index 3cfce9e..5eed96a 100644 --- a/sys/cmd/dway/dway.c +++ b/sys/cmd/dway/dway.c @@ -401,6 +401,8 @@ ev·newmonitor(struct wl_listener *ev, void *arg) if (!wlr_output_commit(dev)) return; + wl_signal_init(&m->sig.kill); + wlr_output_layout_add_auto(dway.layout, dev); dway.dim = *wlr_output_layout_get_box(dway.layout, nil); } @@ -412,6 +414,7 @@ ev·freemonitor(struct wl_listener *ev, void *arg) Monitor *m; m = wl_container_of(ev, m, ev.free); + wl_signal_emit(&m->sig.kill, m); wl_list_remove(&m->link); wl_list_remove(&m->ev.draw.link); @@ -533,11 +536,81 @@ static void ev·newlayershell(struct wl_listener *ev, void *arg) { - struct wlr_layer_surface_v1 *layer; + Layer *layer; + struct wlr_layer_surface_v1 *surf; + + surf = arg; + if (!surf->output) + surf->output = monitor->dev; - layer = arg; + layer = surf->data = calloc(1, sizeof(*layer)); + layer->surf = surf; + + /* install callbacks */ + layer->ev.free.notify = ev·freelayershell; + layer->ev.map.notify = ev·maplayershell; + layer->ev.unmap.notify = ev·unmaplayershell; + layer->ev.commit.notify = ev·commitlayershell; + layer->ev.kill.notify = ev·killlayershell; + + wl_signal_add(&surf->events.destroy, &layer->ev.free); + wl_signal_add(&surf->events.map, &layer->ev.map); + wl_signal_add(&surf->events.unmap, &layer->ev.unmap); + wl_signal_add(&surf->surface->events.commit, &layer->ev.commit); + wl_signal_add(&monitor->sig.kill, &layer->ev.kill); +} + +static +void +ev·maplayershell(struct wl_listener *ev, void *arg) +{ + Layer *l; + Monitor *m; + + l = wl_container_of(ev, l, ev.map); + m = l->surf->output->data; + /* TODO: damage */ + wlr_surface_send_enter(l->surf->surface, l->surf->output); + /* TODO: cursor */ +} + +static +void +ev·unmaplayershell(struct wl_listener *ev, void *arg) +{ + /* TODO: fill in */ +} + +static +void +ev·commitlayershell(struct wl_listener *ev, void *arg) +{ + /* TODO: fill in */ +} + +static +void +ev·freelayershell(struct wl_listener *ev, void *arg) +{ + Layer *l; + + l = wl_container_of(ev, l, ev.map); + + wl_list_remove(&l->link); + wl_list_remove(&l->ev.free.link); + wl_list_remove(&l->ev.map.link); + wl_list_remove(&l->ev.unmap.link); + wl_list_remove(&l->ev.kill.link); + wl_list_remove(&l->ev.commit.link); + + free(l); +} + +static +void +ev·killlayershell(struct wl_listener *ev, void *arg) +{ - /* fill in */ } /* decorations */ @@ -586,6 +659,7 @@ ev·modedecoration(struct wl_listener *ev, void *arg) } /* xdg-surfaces */ + #define WLR_EDGE_ALL WLR_EDGE_TOP|WLR_EDGE_BOTTOM|WLR_EDGE_LEFT|WLR_EDGE_RIGHT static void -- cgit v1.2.1