From 8f224149f176fb8de90a82b44f4dd1c6a1b89a4f Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Mon, 4 Oct 2021 10:02:50 -0700 Subject: feat(wm): tiling prototype working --- sys/cmd/wm/client.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) (limited to 'sys/cmd/wm/client.c') diff --git a/sys/cmd/wm/client.c b/sys/cmd/wm/client.c index 4132468..f626cfa 100644 --- a/sys/cmd/wm/client.c +++ b/sys/cmd/wm/client.c @@ -3,13 +3,15 @@ static char broken[] = "broken"; void -focus(Client *client, struct wlr_surface *new, int lift) +focus(Client *client, int lift) { struct wlr_seat *seat; - struct wlr_surface *old; + struct wlr_surface *old, *new; struct wlr_xdg_surface *xdg; struct wlr_keyboard *keyboard; + new = server.input.seat->keyboard_state.focused_surface; + if(client && lift) { wl_list_remove(&client->stack); wl_list_insert(&server.client.stack, &client->stack); @@ -112,7 +114,7 @@ setinteractive(Client *client, int mode, uint32 edges) { static void -apply_bounds(Client *client, struct wlr_box *box) +constrain(Client *client, struct wlr_box *box) { client->geometry.width = MAX(1, client->geometry.width); client->geometry.height = MAX(1, client->geometry.height); @@ -137,7 +139,7 @@ resize(Client *client, int x, int y, int w, int h, int interact) client->geometry.width = w; client->geometry.height = h; - apply_bounds(client, box); + constrain(client, box); client->resize = wlr_xdg_toplevel_set_size(client->xdg, client->geometry.width - 2*client->border, @@ -146,13 +148,12 @@ resize(Client *client, int x, int y, int w, int h, int interact) } void -attach_to(Client *client, Monitor *monitor, uint tags) +attach(Client *client, Monitor *monitor, uint tags) { - struct wlr_surface *surface; Monitor *old = client->monitor; - if(old == monitor) return; + client->monitor = monitor; if(old) { @@ -162,23 +163,22 @@ attach_to(Client *client, Monitor *monitor, uint tags) if(monitor) { /* make sure window actually overlaps with the monitor */ - apply_bounds(client, &monitor->geometry); + constrain(client, &monitor->geometry); wlr_surface_send_enter(client->xdg->surface, monitor->output); client->tags = tags ? tags : monitor->tag.set[monitor->tag.selected]; arrange(monitor); } - surface = server.input.seat->keyboard_state.focused_surface; - focus(focused_client(server.monitor.selected), surface, 1); + focus(focused_client(server.monitor.selected), 1); } void -apply_rules(Client *client) +rules(Client *client) { /* rule matching */ - char *id, *title; - uint i, tags; Rule *rule; + uint i, tags; + char *id, *title; Monitor *monitor, *it; monitor = server.monitor.selected; @@ -199,5 +199,6 @@ apply_rules(Client *client) monitor = it; } } - attach_to(client, monitor, tags); + + attach(client, monitor, tags); } -- cgit v1.2.1