File: layout_max.c

package info (click to toggle)
wmii2 2.5.2-11
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 608 kB
  • ctags: 925
  • sloc: ansic: 9,195; makefile: 184; sh: 11
file content (115 lines) | stat: -rw-r--r-- 2,376 bytes parent folder | download | duplicates (3)
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
 * (C)opyright MMIV-MMV Anselm R. Garbe <garbeam at gmail dot com>
 * See LICENSE file for license details.
 */

#include <stdlib.h>
#include <string.h>
#include <math.h>

#include "wmiiwm.h"
#include "layout.h"

static void     arrange_max(Page * p);
static void     init_max(Page * p);
static void     deinit_max(Page * p);
static void     manage_max(Frame * f);
static void     unmanage_max(Frame * f);
static void     resize_max(Frame * f, XRectangle * new, XPoint * pt);
static Frame   *select_max(Frame * f, char *what);

static Layout   max = {"max", init_max, deinit_max, arrange_max, manage_max,
	unmanage_max, resize_max, select_max
};

void 
init_layout_max()
{
	layouts =
	(Layout **) attach_item_end((void **) layouts, &max,
				    sizeof(Layout *));
}


static void 
arrange_max(Page * p)
{
	int             i = 0;
	if (!p->managed)
		return;

	for (i = 0; p->managed[i]; i++) {
		p->managed[i]->managed_rect = p->managed_rect;
		resize_frame(p->managed[i], &p->managed[i]->managed_rect, 0, 1);
	}
	if (p->managed_stack)
		XRaiseWindow(dpy, p->managed_stack[0]->win);

	/* raise floatings */
	for (i = 0; p->floating && p->floating[i]; i++)
		XRaiseWindow(dpy, p->floating[i]->win);
}

static void 
init_max(Page * p)
{
	/* max has nothing to init */
	arrange_max(p);
}

static void 
deinit_max(Page * p)
{
	/* max has nothing to free */
}

static void 
manage_max(Frame * f)
{
	Page           *p = f->page;
	int             idx;
	if (!p)
		return;
	idx = index_next_item((void **) p->managed, f);
	if (idx > 0)
		swap((void **) &p->managed[0], (void **) &p->managed[idx]);
	arrange_max(f->page);
}

static void 
unmanage_max(Frame * f)
{
	/* nothing todo */
}

static void 
resize_max(Frame * f, XRectangle * new, XPoint * pt)
{
	if (f->page)
		f->managed_rect = f->page->managed_rect;
}

static Frame   *
select_max(Frame * f, char *what)
{
	Page           *p = f->page;
	Frame          *res = 0;
	int             i, idx;

	if (!strncmp(what, "prev", 5)) {
		idx = index_prev_item((void **) p->managed, f);
		if (idx >= 0)
			res = p->managed[idx];
	} else if (!strncmp(what, "next", 5)) {
		idx = index_next_item((void **) p->managed, f);
		if (idx >= 0)
			res = p->managed[idx];
	}
	if (res)
		XRaiseWindow(dpy, res->win);

	/* raise floatings */
	for (i = 0; p->floating && p->floating[i]; i++)
		XRaiseWindow(dpy, p->floating[i]->win);
	return res;
}