1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
#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++;
}
}
|