changed main event loop b6ad663f
Anselm R.Garbe · 2006-08-15 07:31 3 file(s) · +21 −10
dwm.h +1 −0
108 108
109 109
/* event.c */
110 110
extern void grabkeys();
111 +
extern void procevent();
111 112
112 113
/* main.c */
113 114
extern int getproto(Window w);
event.c +13 −0
384 384
				GrabModeAsync, GrabModeAsync);
385 385
	}
386 386
}
387 +
388 +
void
389 +
procevent()
390 +
{
391 +
	XEvent ev;
392 +
393 +
	while(XPending(dpy)) {
394 +
		XNextEvent(dpy, &ev);
395 +
		if(handler[ev.type])
396 +
			(handler[ev.type])(&ev); /* call handler */
397 +
	}
398 +
}
399 +
main.c +7 −10
27 27
		resize(sel, True, TopLeft);
28 28
		unmanage(sel);
29 29
	}
30 +
	XUngrabKey(dpy, AnyKey, AnyModifier, root);
30 31
	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
32 +
	XSync(dpy, False);
31 33
}
32 34
33 35
static void
37 39
	Window *wins, d1, d2;
38 40
	XWindowAttributes wa;
39 41
42 +
	wins = NULL;
40 43
	if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
41 44
		for(i = 0; i < num; i++) {
42 45
			if(!XGetWindowAttributes(dpy, wins[i], &wa))
168 171
	fd_set rd;
169 172
	Bool readin = True;
170 173
	Window w;
171 -
	XEvent ev;
172 174
	XModifierKeymap *modmap;
173 175
	XSetWindowAttributes wa;
174 176
196 198
	if(otherwm)
197 199
		eprint("dwm: another window manager is already running\n");
198 200
201 +
	XSync(dpy, False);
199 202
	XSetErrorHandler(NULL);
200 203
	xerrorxlib = XSetErrorHandler(xerror);
201 204
	XSync(dpy, False);
268 271
269 272
	/* main event loop, also reads status text from stdin */
270 273
	XSync(dpy, False);
271 -
	goto XLoop;
274 +
	procevent();
272 275
	while(running) {
273 276
		FD_ZERO(&rd);
274 277
		if(readin)
288 291
					strcpy(stext, "broken pipe");
289 292
				drawstatus();
290 293
			}
291 -
			if(FD_ISSET(xfd, &rd)) {
292 -
XLoop:
293 -
				while(XPending(dpy)) {
294 -
					XNextEvent(dpy, &ev);
295 -
					if(handler[ev.type])
296 -
						(handler[ev.type])(&ev); /* call handler */
297 -
				}
298 -
			}
294 +
			if(FD_ISSET(xfd, &rd))
295 +
				procevent();
299 296
		}
300 297
	}
301 298
	cleanup();