X-Git-Url: https://git.xinqibao.xyz/dwm.git/blobdiff_plain/0cf3ba0eab1e3b05515907b29fbb739321a7cbed..45d16d090b05ee988d2c669e43db1b8c67195809:/main.c?ds=inline

diff --git a/main.c b/main.c
index 86d72fa..4c7a1a4 100644
--- a/main.c
+++ b/main.c
@@ -4,7 +4,6 @@
  */
 
 #include "dwm.h"
-
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -15,7 +14,6 @@
 #include <X11/Xatom.h>
 #include <X11/Xproto.h>
 
-
 /* static */
 
 static int (*xerrorxlib)(Display *, XErrorEvent *);
@@ -87,6 +85,7 @@ xerrorstart(Display *dsply, XErrorEvent *ee)
 char stext[1024];
 int tsel = DEFTAG;
 int screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
+unsigned int ntags;
 Atom wmatom[WMLast], netatom[NetLast];
 Bool running = True;
 Bool issel = True;
@@ -103,9 +102,10 @@ getproto(Window w)
 	int protos = 0;
 	int i;
 	long res;
-	unsigned char *protocols;
+	Atom *protocols;
 
-	res = win_property(w, wmatom[WMProtocols], XA_ATOM, 20L, &protocols);
+	res = win_property(w, wmatom[WMProtocols], XA_ATOM, 20L,
+			((unsigned char **)&protocols));
 	if(res <= 0) {
 		return protos;
 	}
@@ -165,6 +165,7 @@ main(int argc, char *argv[])
 	int i;
 	unsigned int mask;
 	fd_set rd;
+	Bool readin = True;
 	Window w;
 	XEvent ev;
 	XSetWindowAttributes wa;
@@ -178,15 +179,14 @@ main(int argc, char *argv[])
 
 	dpy = XOpenDisplay(0);
 	if(!dpy)
-		eprint("dwm: cannot connect X server\n");
+		eprint("dwm: cannot open display\n");
 
 	screen = DefaultScreen(dpy);
 	root = RootWindow(dpy, screen);
 
-	/* check if another WM is already running */
 	otherwm = False;
 	XSetErrorHandler(xerrorstart);
-	/* this causes an error if some other WM is running */
+	/* this causes an error if some other window manager is running */
 	XSelectInput(dpy, root, SubstructureRedirectMask);
 	XSync(dpy, False);
 
@@ -210,6 +210,9 @@ main(int argc, char *argv[])
 	cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
 
 	grabkeys();
+	initrregs();
+
+	for(ntags = 0; tags[ntags]; ntags++);
 
 	/* style */
 	dc.bg = getcolor(BGCOLOR);
@@ -251,7 +254,8 @@ main(int argc, char *argv[])
 	/* main event loop, reads status text from stdin as well */
 	while(running) {
 		FD_ZERO(&rd);
-		FD_SET(STDIN_FILENO, &rd);
+		if(readin)
+			FD_SET(STDIN_FILENO, &rd);
 		FD_SET(ConnectionNumber(dpy), &rd);
 
 		i = select(ConnectionNumber(dpy) + 1, &rd, 0, 0, 0);
@@ -267,11 +271,12 @@ main(int argc, char *argv[])
 						(handler[ev.type])(&ev); /* call handler */
 				}
 			}
-			if(FD_ISSET(STDIN_FILENO, &rd)) {
-				if(!fgets(stext, sizeof(stext), stdin))
-					break;
-				else 
+			if(readin && FD_ISSET(STDIN_FILENO, &rd)) {
+				readin = NULL != fgets(stext, sizeof(stext), stdin);
+				if(readin)
 					stext[strlen(stext) - 1] = 0;
+				else 
+					strcpy(stext, "broken pipe");
 				drawstatus();
 			}
 		}