diff options
author | Nicholas Noll <nbnoll@eml.cc> | 2021-09-29 10:53:41 -0700 |
---|---|---|
committer | Nicholas Noll <nbnoll@eml.cc> | 2021-09-29 10:53:41 -0700 |
commit | 88b8c199e3524b7c4e2667db3683c77d70f34a26 (patch) | |
tree | afe6f897edf813e9cf2c9221f3eab3fee935a900 /sys/cmd/wm/xdg.c | |
parent | b9a07a67b85e9192faa0e285b4419bd5ef242a03 (diff) |
feat(wm): working prototype
Diffstat (limited to 'sys/cmd/wm/xdg.c')
-rw-r--r-- | sys/cmd/wm/xdg.c | 41 |
1 files changed, 33 insertions, 8 deletions
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); } @@ -37,6 +46,13 @@ request_move(struct wl_listener *l, void *data) 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) { struct wlr_xdg_toplevel_resize_event *event = 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); } |