#include "wm.h" void arrange(Monitor *monitor) { if(monitor->layout->arrange) monitor->layout->arrange(monitor); } Client * focused_client(Monitor *monitor) { Client *client; wl_list_for_each(client, &server.client.focus, focus) { if(VISIBLE_ON(client, monitor)) return client; } return nil; } void tile(Monitor *monitor) { Client *client; uint i, n, h, mw, my, ty; n = 0; wl_list_for_each(client, &server.client.list, link) { if(VISIBLE_ON(client, monitor) && !client->isfloating) { n++; } } if(!n) return; if(n > monitor->master.len) mw = monitor->master.len ? monitor->window.width * monitor->master.frac : 0; else mw = monitor->window.width; i = my = ty = 0; wl_list_for_each(client, &server.client.list, link) { if(!VISIBLE_ON(client,monitor) || client->isfloating || client->isfullscreen) continue; if(i < monitor->master.len) { h = (monitor->window.height - my) / (MIN(n, monitor->master.len) - i); resize(client, monitor->window.x, monitor->window.y + my, mw, h, 0); my += client->geometry.height; } else { h = (monitor->window.height - ty) / (n - i); resize(client, monitor->window.x + mw, monitor->window.y + ty, monitor->window.width - mw, h, 0); ty += client->geometry.height; } i++; } }