25 { |
25 { |
26 while(sel) { |
26 while(sel) { |
27 resize(sel, True, TopLeft); |
27 resize(sel, True, TopLeft); |
28 unmanage(sel); |
28 unmanage(sel); |
29 } |
29 } |
|
30 XUngrabKey(dpy, AnyKey, AnyModifier, root); |
30 XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); |
31 XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); |
|
32 XSync(dpy, False); |
31 } |
33 } |
32 |
34 |
33 static void |
35 static void |
34 scan() |
36 scan() |
35 { |
37 { |
36 unsigned int i, num; |
38 unsigned int i, num; |
37 Window *wins, d1, d2; |
39 Window *wins, d1, d2; |
38 XWindowAttributes wa; |
40 XWindowAttributes wa; |
39 |
41 |
|
42 wins = NULL; |
40 if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) { |
43 if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) { |
41 for(i = 0; i < num; i++) { |
44 for(i = 0; i < num; i++) { |
42 if(!XGetWindowAttributes(dpy, wins[i], &wa)) |
45 if(!XGetWindowAttributes(dpy, wins[i], &wa)) |
43 continue; |
46 continue; |
44 if(wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1)) |
47 if(wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1)) |
166 int i, j, xfd; |
169 int i, j, xfd; |
167 unsigned int mask; |
170 unsigned int mask; |
168 fd_set rd; |
171 fd_set rd; |
169 Bool readin = True; |
172 Bool readin = True; |
170 Window w; |
173 Window w; |
171 XEvent ev; |
|
172 XModifierKeymap *modmap; |
174 XModifierKeymap *modmap; |
173 XSetWindowAttributes wa; |
175 XSetWindowAttributes wa; |
174 |
176 |
175 if(argc == 2 && !strncmp("-v", argv[1], 3)) { |
177 if(argc == 2 && !strncmp("-v", argv[1], 3)) { |
176 fputs("dwm-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout); |
178 fputs("dwm-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout); |
286 stext[strlen(stext) - 1] = 0; |
289 stext[strlen(stext) - 1] = 0; |
287 else |
290 else |
288 strcpy(stext, "broken pipe"); |
291 strcpy(stext, "broken pipe"); |
289 drawstatus(); |
292 drawstatus(); |
290 } |
293 } |
291 if(FD_ISSET(xfd, &rd)) { |
294 if(FD_ISSET(xfd, &rd)) |
292 XLoop: |
295 procevent(); |
293 while(XPending(dpy)) { |
|
294 XNextEvent(dpy, &ev); |
|
295 if(handler[ev.type]) |
|
296 (handler[ev.type])(&ev); /* call handler */ |
|
297 } |
|
298 } |
|
299 } |
296 } |
300 } |
297 } |
301 cleanup(); |
298 cleanup(); |
302 XCloseDisplay(dpy); |
299 XCloseDisplay(dpy); |
303 |
300 |