equal
deleted
inserted
replaced
7 #include <string.h> |
7 #include <string.h> |
8 #include <X11/Xatom.h> |
8 #include <X11/Xatom.h> |
9 #include <X11/Xutil.h> |
9 #include <X11/Xutil.h> |
10 |
10 |
11 /* static functions */ |
11 /* static functions */ |
|
12 |
|
13 static void |
|
14 detachstack(Client *c) |
|
15 { |
|
16 Client **tc; |
|
17 for(tc=&stack; *tc && *tc != c; tc=&(*tc)->snext); |
|
18 *tc = c->snext; |
|
19 } |
12 |
20 |
13 static void |
21 static void |
14 grabbuttons(Client *c, Bool focus) |
22 grabbuttons(Client *c, Bool focus) |
15 { |
23 { |
16 XUngrabButton(dpy, AnyButton, AnyModifier, c->win); |
24 XUngrabButton(dpy, AnyButton, AnyModifier, c->win); |
97 grabbuttons(old, False); |
105 grabbuttons(old, False); |
98 drawtitle(old); |
106 drawtitle(old); |
99 } |
107 } |
100 } |
108 } |
101 if(c) { |
109 if(c) { |
|
110 detachstack(c); |
|
111 c->snext = stack; |
|
112 stack = c; |
102 grabbuttons(c, True); |
113 grabbuttons(c, True); |
103 drawtitle(c); |
114 drawtitle(c); |
104 XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); |
115 XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); |
105 } |
116 } |
106 else |
117 else |
196 } |
207 } |
197 |
208 |
198 void |
209 void |
199 manage(Window w, XWindowAttributes *wa) |
210 manage(Window w, XWindowAttributes *wa) |
200 { |
211 { |
201 unsigned int i; |
|
202 Client *c; |
212 Client *c; |
203 Window trans; |
213 Window trans; |
204 XSetWindowAttributes twa; |
214 XSetWindowAttributes twa; |
205 |
215 |
206 c = emallocz(sizeof(Client)); |
216 c = emallocz(sizeof(Client)); |
245 c->maxw == c->minw && c->maxh == c->minh); |
255 c->maxw == c->minw && c->maxh == c->minh); |
246 |
256 |
247 if(clients) |
257 if(clients) |
248 clients->prev = c; |
258 clients->prev = c; |
249 c->next = clients; |
259 c->next = clients; |
250 clients = c; |
260 c->snext = stack; |
|
261 stack = clients = c; |
251 |
262 |
252 settitle(c); |
263 settitle(c); |
253 ban(c); |
264 ban(c); |
254 XMapWindow(dpy, c->win); |
265 XMapWindow(dpy, c->win); |
255 XMapWindow(dpy, c->twin); |
266 XMapWindow(dpy, c->twin); |
419 } |
430 } |
420 |
431 |
421 XUngrabButton(dpy, AnyButton, AnyModifier, c->win); |
432 XUngrabButton(dpy, AnyButton, AnyModifier, c->win); |
422 XDestroyWindow(dpy, c->twin); |
433 XDestroyWindow(dpy, c->twin); |
423 |
434 |
|
435 detachstack(c); |
424 free(c->tags); |
436 free(c->tags); |
425 free(c); |
437 free(c); |
426 |
438 |
427 XSync(dpy, False); |
439 XSync(dpy, False); |
428 XSetErrorHandler(xerror); |
440 XSetErrorHandler(xerror); |