equal
deleted
inserted
replaced
8 const char *symbol; |
8 const char *symbol; |
9 void (*arrange)(void); |
9 void (*arrange)(void); |
10 } Layout; |
10 } Layout; |
11 |
11 |
12 unsigned int blw = 0; |
12 unsigned int blw = 0; |
13 static Layout *lt = NULL; |
13 static unsigned int sellayout = 0; /* default */ |
14 |
14 |
15 static void |
15 static void |
16 floating(void) { /* default floating layout */ |
16 floating(void) { /* default floating layout */ |
17 Client *c; |
17 Client *c; |
18 |
18 |
34 for(c = clients; c; c = c->next) |
34 for(c = clients; c; c = c->next) |
35 if(isvisible(c)) |
35 if(isvisible(c)) |
36 unban(c); |
36 unban(c); |
37 else |
37 else |
38 ban(c); |
38 ban(c); |
39 lt->arrange(); |
39 layouts[sellayout].arrange(); |
40 focus(NULL); |
40 focus(NULL); |
41 restack(); |
41 restack(); |
42 } |
42 } |
43 |
43 |
44 void |
44 void |
74 } |
74 } |
75 |
75 |
76 const char * |
76 const char * |
77 getsymbol(void) |
77 getsymbol(void) |
78 { |
78 { |
79 return lt->symbol; |
79 return layouts[sellayout].symbol; |
80 } |
80 } |
81 |
81 |
82 Bool |
82 Bool |
83 isfloating(void) { |
83 isfloating(void) { |
84 return lt->arrange == floating; |
84 return layouts[sellayout].arrange == floating; |
85 } |
85 } |
86 |
86 |
87 Bool |
87 Bool |
88 isarrange(void (*func)()) |
88 isarrange(void (*func)()) |
89 { |
89 { |
90 return func == lt->arrange; |
90 return func == layouts[sellayout].arrange; |
91 } |
91 } |
92 |
92 |
93 void |
93 void |
94 initlayouts(void) { |
94 initlayouts(void) { |
95 unsigned int i, w; |
95 unsigned int i, w; |
96 |
96 |
97 lt = &layouts[0]; |
97 /* TODO deserialize sellayout if present */ |
98 nlayouts = sizeof layouts / sizeof layouts[0]; |
98 nlayouts = sizeof layouts / sizeof layouts[0]; |
99 for(blw = i = 0; i < nlayouts; i++) { |
99 for(blw = i = 0; i < nlayouts; i++) { |
100 w = textw(layouts[i].symbol); |
100 w = textw(layouts[i].symbol); |
101 if(w > blw) |
101 if(w > blw) |
102 blw = w; |
102 blw = w; |
116 XWindowChanges wc; |
116 XWindowChanges wc; |
117 |
117 |
118 drawstatus(); |
118 drawstatus(); |
119 if(!sel) |
119 if(!sel) |
120 return; |
120 return; |
121 if(sel->isfloating || lt->arrange == floating) |
121 if(sel->isfloating || isfloating()) |
122 XRaiseWindow(dpy, sel->win); |
122 XRaiseWindow(dpy, sel->win); |
123 if(lt->arrange != floating) { |
123 if(!isfloating()) { |
124 wc.stack_mode = Below; |
124 wc.stack_mode = Below; |
125 wc.sibling = barwin; |
125 wc.sibling = barwin; |
126 if(!sel->isfloating) { |
126 if(!sel->isfloating) { |
127 XConfigureWindow(dpy, sel->win, CWSibling | CWStackMode, &wc); |
127 XConfigureWindow(dpy, sel->win, CWSibling | CWStackMode, &wc); |
128 wc.sibling = sel->win; |
128 wc.sibling = sel->win; |
141 void |
141 void |
142 setlayout(const char *arg) { |
142 setlayout(const char *arg) { |
143 int i; |
143 int i; |
144 |
144 |
145 if(!arg) { |
145 if(!arg) { |
146 lt++; |
146 if(++sellayout == nlayouts) |
147 if(lt == layouts + nlayouts) |
147 sellayout = 0;; |
148 lt = layouts; |
|
149 } |
148 } |
150 else { |
149 else { |
151 i = atoi(arg); |
150 i = atoi(arg); |
152 if(i < 0 || i >= nlayouts) |
151 if(i < 0 || i >= nlayouts) |
153 return; |
152 return; |
154 lt = &layouts[i]; |
153 sellayout = i; |
155 } |
154 } |
156 if(sel) |
155 if(sel) |
157 arrange(); |
156 arrange(); |
158 else |
157 else |
159 drawstatus(); |
158 drawstatus(); |
171 |
170 |
172 void |
171 void |
173 togglemax(const char *arg) { |
172 togglemax(const char *arg) { |
174 XEvent ev; |
173 XEvent ev; |
175 |
174 |
176 if(!sel || (lt->arrange != floating && !sel->isfloating) || sel->isfixed) |
175 if(!sel || (!isfloating() && !sel->isfloating) || sel->isfixed) |
177 return; |
176 return; |
178 if((sel->ismax = !sel->ismax)) { |
177 if((sel->ismax = !sel->ismax)) { |
179 sel->rx = sel->x; |
178 sel->rx = sel->x; |
180 sel->ry = sel->y; |
179 sel->ry = sel->y; |
181 sel->rw = sel->w; |
180 sel->rw = sel->w; |