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