X-Git-Url: https://git.xinqibao.xyz/dwm.git/blobdiff_plain/d7413ffd2d9a84fc3140b28b26f8cb6bb80164e4..9eef9f7b0277a893fb5e22ac109f785faf573580:/main.c?ds=inline

diff --git a/main.c b/main.c
index fec7ea8..0a39c15 100644
--- a/main.c
+++ b/main.c
@@ -83,7 +83,7 @@ xerrorstart(Display *dsply, XErrorEvent *ee)
 /* extern */
 
 char stext[1024];
-Bool *tsel;
+Bool *seltag;
 int screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
 unsigned int ntags;
 Atom wmatom[WMLast], netatom[NetLast];
@@ -162,7 +162,7 @@ xerror(Display *dpy, XErrorEvent *ee)
 int
 main(int argc, char *argv[])
 {
-	int i;
+	int i, xfd;
 	unsigned int mask;
 	fd_set rd;
 	Bool readin = True;
@@ -181,6 +181,7 @@ main(int argc, char *argv[])
 	if(!dpy)
 		eprint("dwm: cannot open display\n");
 
+	xfd = ConnectionNumber(dpy);
 	screen = DefaultScreen(dpy);
 	root = RootWindow(dpy, screen);
 
@@ -195,6 +196,7 @@ main(int argc, char *argv[])
 
 	XSetErrorHandler(NULL);
 	xerrorxlib = XSetErrorHandler(xerror);
+	XSync(dpy, False);
 
 	/* init atoms */
 	wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
@@ -213,8 +215,8 @@ main(int argc, char *argv[])
 	initrregs();
 
 	for(ntags = 0; tags[ntags]; ntags++);
-	tsel = emallocz(sizeof(Bool) * ntags);
-	tsel[DEFTAG] = True;
+	seltag = emallocz(sizeof(Bool) * ntags);
+	seltag[DEFTAG] = True;
 
 	/* style */
 	dc.bg = getcolor(BGCOLOR);
@@ -260,21 +262,13 @@ main(int argc, char *argv[])
 		FD_ZERO(&rd);
 		if(readin)
 			FD_SET(STDIN_FILENO, &rd);
-		FD_SET(ConnectionNumber(dpy), &rd);
-
-		i = select(ConnectionNumber(dpy) + 1, &rd, 0, 0, 0);
+		FD_SET(xfd, &rd);
+		i = select(xfd + 1, &rd, NULL, NULL, NULL);
 		if(i == -1 && errno == EINTR)
 			continue;
 		if(i < 0)
 			eprint("select failed\n");
 		else if(i > 0) {
-			if(FD_ISSET(ConnectionNumber(dpy), &rd)) {
-				while(XPending(dpy)) {
-					XNextEvent(dpy, &ev);
-					if(handler[ev.type])
-						(handler[ev.type])(&ev); /* call handler */
-				}
-			}
 			if(readin && FD_ISSET(STDIN_FILENO, &rd)) {
 				readin = NULL != fgets(stext, sizeof(stext), stdin);
 				if(readin)
@@ -283,9 +277,15 @@ main(int argc, char *argv[])
 					strcpy(stext, "broken pipe");
 				drawstatus();
 			}
+			if(FD_ISSET(xfd, &rd)) {
+				while(XPending(dpy)) {
+					XNextEvent(dpy, &ev);
+					if(handler[ev.type])
+						(handler[ev.type])(&ev); /* call handler */
+				}
+			}
 		}
 	}
-
 	cleanup();
 	XCloseDisplay(dpy);