aboutsummaryrefslogtreecommitdiff
path: root/sway/layout.c
blob: e61094e29171837872a0f131f1662422fb714e13 (plain)
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
#include <stdlib.h>
#include <stdbool.h>
#include <wlc/wlc.h>
#include "list.h"
#include "layout.h"

list_t *outputs;

void init_layout() {
	outputs = create_list();
}

struct sway_container *get_container(wlc_handle output, int *index) {
	int i;
	for (i = 0; i < outputs->length; ++i) {
		struct sway_container *c = outputs->items[i];
		if (c->output == output) {
			return c;
		}
	}
	return NULL;
}

void add_output(wlc_handle output) {
	struct sway_container *container = malloc(sizeof(struct sway_container));
	// TODO: Get default layout from config
	container->output = output;
	container->children = create_list();
	container->layout = LAYOUT_TILE_HORIZ;
	list_add(outputs, container);
}

void destroy_output(wlc_handle output) {
	int index;
	struct sway_container *c = get_container(output, &index);
	// TODO: Move all windows in this output somewhere else?
	// I don't think this will ever be called unless we destroy the output ourselves
	if (!c) {
		return;
	}
	list_del(outputs, index);
}

wlc_handle get_topmost(wlc_handle output, size_t offset) {
   size_t memb;
   const wlc_handle *views = wlc_output_get_views(output, &memb);
   return (memb > 0 ? views[(memb - 1 + offset) % memb] : 0);
}