aewl

changeset 60:24f9c674d03f

made stdin reader more robust
author Anselm R. Garbe <garbeam@wmii.de>
date Fri, 14 Jul 2006 12:08:32 +0200
parents 5d4653de9a1c
children db93644de522
files client.c main.c
diffstat 2 files changed, 22 insertions(+), 9 deletions(-) [+]
line diff
     1.1 --- a/client.c	Fri Jul 14 11:57:33 2006 +0200
     1.2 +++ b/client.c	Fri Jul 14 12:08:32 2006 +0200
     1.3 @@ -404,8 +404,6 @@
     1.4  	c->next = *l; /* *l == nil */
     1.5  	*l = c;
     1.6  
     1.7 -	XMapRaised(dpy, c->win);
     1.8 -	XMapRaised(dpy, c->title);
     1.9  	XGrabButton(dpy, Button1, Mod1Mask, c->win, False, ButtonPressMask,
    1.10  			GrabModeAsync, GrabModeSync, None, None);
    1.11  	XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask,
    1.12 @@ -418,10 +416,17 @@
    1.13  			|| ((c->maxw == c->minw) && (c->maxh == c->minh));
    1.14  
    1.15  	arrange(NULL);
    1.16 -	if(c->tags[tsel])
    1.17 +	/* mapping the window now prevents flicker */
    1.18 +	if(c->tags[tsel]) {
    1.19 +		XMapRaised(dpy, c->win);
    1.20 +		XMapRaised(dpy, c->title);
    1.21  		focus(c);
    1.22 -	else
    1.23 +	}
    1.24 +	else {
    1.25  		ban_client(c);
    1.26 +		XMapRaised(dpy, c->win);
    1.27 +		XMapRaised(dpy, c->title);
    1.28 +	}
    1.29  }
    1.30  
    1.31  void
     2.1 --- a/main.c	Fri Jul 14 11:57:33 2006 +0200
     2.2 +++ b/main.c	Fri Jul 14 12:08:32 2006 +0200
     2.3 @@ -264,6 +264,10 @@
     2.4  	XDefineCursor(dpy, barwin, cursor[CurNormal]);
     2.5  	XMapRaised(dpy, barwin);
     2.6  
     2.7 +	dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
     2.8 +	dc.gc = XCreateGC(dpy, root, 0, 0);
     2.9 +	draw_bar();
    2.10 +
    2.11  	issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask);
    2.12  
    2.13  	wa.event_mask = SubstructureRedirectMask | EnterWindowMask \
    2.14 @@ -272,15 +276,12 @@
    2.15  
    2.16  	XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
    2.17  
    2.18 -	dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
    2.19 -	dc.gc = XCreateGC(dpy, root, 0, 0);
    2.20 -
    2.21  	strcpy(stext, "dwm-"VERSION);
    2.22  	scan_wins();
    2.23 -	draw_bar();
    2.24  
    2.25  	/* main event loop, reads status text from stdin as well */
    2.26  	while(running) {
    2.27 +Mainloop:
    2.28  		FD_ZERO(&rd);
    2.29  		FD_SET(0, &rd);
    2.30  		FD_SET(ConnectionNumber(dpy), &rd);
    2.31 @@ -298,8 +299,15 @@
    2.32  			}
    2.33  			if(FD_ISSET(0, &rd)) {
    2.34  				i = n = 0;
    2.35 -				while((i = getchar()) != '\n' && n < sizeof(stext) - 1)
    2.36 +				for(;;) {
    2.37 +					if((i = getchar()) == EOF) {
    2.38 +						stext[0] = 0;
    2.39 +						goto Mainloop;
    2.40 +					}
    2.41 +					if(i == '\n' || n >= sizeof(stext) - 1)
    2.42 +						break;
    2.43  					stext[n++] = i;
    2.44 +				}
    2.45  				stext[n] = 0;
    2.46  				draw_bar();
    2.47  			}