From 88b8c199e3524b7c4e2667db3683c77d70f34a26 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Wed, 29 Sep 2021 10:53:41 -0700 Subject: feat(wm): working prototype --- sys/cmd/wm/xdg.c | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) (limited to 'sys/cmd/wm/xdg.c') diff --git a/sys/cmd/wm/xdg.c b/sys/cmd/wm/xdg.c index 3978cbf..0ff7c0a 100644 --- a/sys/cmd/wm/xdg.c +++ b/sys/cmd/wm/xdg.c @@ -5,7 +5,14 @@ void map(struct wl_listener *l, void *data) { Client *client = wl_container_of(l, client, event.map); - client->mapped = true; + client->ismapped = true; + + wl_list_insert(&server.clients, &client->link); + wl_list_insert(&server.stack, &client->stack); + + wlr_xdg_surface_get_geometry(client->xdg, &client->geo); + client->geo.width += 2 * client->border; + client->geo.height += 2 * client->border; focus(client, client->xdg->surface); } @@ -15,7 +22,10 @@ void unmap(struct wl_listener *l, void *data) { Client *client = wl_container_of(l, client, event.unmap); - client->mapped = false; + client->ismapped = false; + + wl_list_remove(&client->link); + wl_list_remove(&client->stack); } static @@ -23,7 +33,6 @@ void destroy(struct wl_listener *l, void *data) { Client *client = wl_container_of(l, client, event.destroy); - wl_list_remove(&client->link); free(client); } @@ -35,6 +44,13 @@ request_move(struct wl_listener *l, void *data) setinteractive(client, CursorMove, 0); } +static +void +request_title(struct wl_listener *l, void *data) +{ + Client *client = wl_container_of(l, client, event.request_title); +} + static void request_resize(struct wl_listener *l, void *data) @@ -44,6 +60,14 @@ request_resize(struct wl_listener *l, void *data) setinteractive(client, CursorResize, event->edges); } +static +void +request_fullscreen(struct wl_listener *l, void *data) +{ + Client *client = wl_container_of(l, client, event.request_fullscreen); + client->isfullscreen = 1; +} + void make_xdg_surface(struct wl_listener *l, void *data) { @@ -54,8 +78,9 @@ make_xdg_surface(struct wl_listener *l, void *data) if(xdg->role != WLR_XDG_SURFACE_ROLE_TOPLEVEL) return; - client = calloc(1, sizeof(*client)); + client = xdg->surface->data = calloc(1, sizeof(*client)); client->xdg = xdg; + client->border = cfg·borderpixel; client->event.map.notify = map; wl_signal_add(&xdg->events.map, &client->event.map); @@ -64,13 +89,13 @@ make_xdg_surface(struct wl_listener *l, void *data) client->event.destroy.notify = destroy; wl_signal_add(&xdg->events.destroy, &client->event.destroy); - /* cotd */ toplevel = xdg->toplevel; client->event.request_move.notify = request_move; wl_signal_add(&toplevel->events.request_move, &client->event.request_move); + client->event.request_title.notify = request_title; + wl_signal_add(&toplevel->events.set_title, &client->event.request_title); client->event.request_resize.notify = request_resize; wl_signal_add(&toplevel->events.request_resize, &client->event.request_resize); - - /* Add it to the list of client. */ - wl_list_insert(&server.clients, &client->link); + client->event.request_fullscreen.notify = request_fullscreen; + wl_signal_add(&toplevel->events.request_fullscreen, &client->event.request_fullscreen); } -- cgit v1.2.1