Mercurial > dwm-meillo
comparison main.c @ 292:4aa632b6ba66
changed main event loop
author | Anselm R.Garbe <arg@10ksloc.org> |
---|---|
date | Tue, 15 Aug 2006 07:31:42 +0200 |
parents | 8e6e0aa5e2ae |
children | 093744cc5353 |
comparison
equal
deleted
inserted
replaced
291:8e6e0aa5e2ae | 292:4aa632b6ba66 |
---|---|
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); |
194 XSync(dpy, False); | 196 XSync(dpy, False); |
195 | 197 |
196 if(otherwm) | 198 if(otherwm) |
197 eprint("dwm: another window manager is already running\n"); | 199 eprint("dwm: another window manager is already running\n"); |
198 | 200 |
201 XSync(dpy, False); | |
199 XSetErrorHandler(NULL); | 202 XSetErrorHandler(NULL); |
200 xerrorxlib = XSetErrorHandler(xerror); | 203 xerrorxlib = XSetErrorHandler(xerror); |
201 XSync(dpy, False); | 204 XSync(dpy, False); |
202 | 205 |
203 /* init atoms */ | 206 /* init atoms */ |
266 | 269 |
267 scan(); | 270 scan(); |
268 | 271 |
269 /* main event loop, also reads status text from stdin */ | 272 /* main event loop, also reads status text from stdin */ |
270 XSync(dpy, False); | 273 XSync(dpy, False); |
271 goto XLoop; | 274 procevent(); |
272 while(running) { | 275 while(running) { |
273 FD_ZERO(&rd); | 276 FD_ZERO(&rd); |
274 if(readin) | 277 if(readin) |
275 FD_SET(STDIN_FILENO, &rd); | 278 FD_SET(STDIN_FILENO, &rd); |
276 FD_SET(xfd, &rd); | 279 FD_SET(xfd, &rd); |
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 |