Browse Source

applied Manuels patch (thanks to Manuel!)

arg@mig29 19 years ago
parent
commit
478f6f95f1
2 changed files with 22 additions and 15 deletions
  1. 1 1
      dwm.1
  2. 21 14
      main.c

+ 1 - 1
dwm.1

@@ -22,7 +22,7 @@ dwm contains a small status bar which displays all available tags, the mode,
 the title of the focused window, and the text read from standard input. The
 the title of the focused window, and the text read from standard input. The
 selected tags are indicated with a different color. The tags of the focused
 selected tags are indicated with a different color. The tags of the focused
 window are indicated with a small point in the top left corner.  The tags which
 window are indicated with a small point in the top left corner.  The tags which
-are applied to any client are indicated with a small point in the bottom
+are applied to one or more clients are indicated with a small point in the bottom
 right corner.
 right corner.
 .P
 .P
 dwm draws a 1-pixel border around windows to indicate the focus state.
 dwm draws a 1-pixel border around windows to indicate the focus state.

+ 21 - 14
main.c

@@ -267,22 +267,29 @@ main(int argc, char *argv[]) {
 		if(readin)
 		if(readin)
 			FD_SET(STDIN_FILENO, &rd);
 			FD_SET(STDIN_FILENO, &rd);
 		FD_SET(xfd, &rd);
 		FD_SET(xfd, &rd);
-		r = select(xfd + 1, &rd, NULL, NULL, NULL);
-		if((r == -1) && (errno == EINTR))
-			continue;
-		if(r > 0) {
-			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();
+		if(select(xfd + 1, &rd, NULL, NULL, NULL) == -1) {
+			if(errno == EINTR)
+				continue;
+			else
+				eprint("select failed\n");
+		}
+		if(FD_ISSET(STDIN_FILENO, &rd)) {
+			switch(r = read(STDIN_FILENO, stext, sizeof(stext))) {
+			case -1:
+				strncpy(stext, strerror(errno), sizeof(stext));
+				readin = False;
+				break;
+			case 0:
+				strncpy(stext, "EOF", sizeof(stext));
+				readin = False;
+				break;
+			default:
+				stext[r-1] = 0;
 			}
 			}
+			drawstatus();
 		}
 		}
-		else if(r < 0)
-			eprint("select failed\n");
-		procevent();
+		if(FD_ISSET(xfd, &rd))
+			procevent();
 	}
 	}
 	cleanup();
 	cleanup();
 	XCloseDisplay(dpy);
 	XCloseDisplay(dpy);