URI: 
       made stdin reader more robust - dwm - dynamic window manager
  HTML git clone https://git.parazyd.org/dwm
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit eb756ee169ad0c94167ff41a9ab2712b348afe4f
   DIR parent 0e5c8198bc5a69e87b0114b81d6569188828edfa
  HTML Author: Anselm R. Garbe <garbeam@wmii.de>
       Date:   Fri, 14 Jul 2006 12:08:32 +0200
       
       made stdin reader more robust
       
       Diffstat:
         M client.c                            |      13 +++++++++----
         M main.c                              |      18 +++++++++++++-----
       
       2 files changed, 22 insertions(+), 9 deletions(-)
       ---
   DIR diff --git a/client.c b/client.c
       @@ -404,8 +404,6 @@ manage(Window w, XWindowAttributes *wa)
                c->next = *l; /* *l == nil */
                *l = c;
        
       -        XMapRaised(dpy, c->win);
       -        XMapRaised(dpy, c->title);
                XGrabButton(dpy, Button1, Mod1Mask, c->win, False, ButtonPressMask,
                                GrabModeAsync, GrabModeSync, None, None);
                XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask,
       @@ -418,10 +416,17 @@ manage(Window w, XWindowAttributes *wa)
                                || ((c->maxw == c->minw) && (c->maxh == c->minh));
        
                arrange(NULL);
       -        if(c->tags[tsel])
       +        /* mapping the window now prevents flicker */
       +        if(c->tags[tsel]) {
       +                XMapRaised(dpy, c->win);
       +                XMapRaised(dpy, c->title);
                        focus(c);
       -        else
       +        }
       +        else {
                        ban_client(c);
       +                XMapRaised(dpy, c->win);
       +                XMapRaised(dpy, c->title);
       +        }
        }
        
        void
   DIR diff --git a/main.c b/main.c
       @@ -264,6 +264,10 @@ main(int argc, char *argv[])
                XDefineCursor(dpy, barwin, cursor[CurNormal]);
                XMapRaised(dpy, barwin);
        
       +        dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
       +        dc.gc = XCreateGC(dpy, root, 0, 0);
       +        draw_bar();
       +
                issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask);
        
                wa.event_mask = SubstructureRedirectMask | EnterWindowMask \
       @@ -272,15 +276,12 @@ main(int argc, char *argv[])
        
                XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
        
       -        dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
       -        dc.gc = XCreateGC(dpy, root, 0, 0);
       -
                strcpy(stext, "dwm-"VERSION);
                scan_wins();
       -        draw_bar();
        
                /* main event loop, reads status text from stdin as well */
                while(running) {
       +Mainloop:
                        FD_ZERO(&rd);
                        FD_SET(0, &rd);
                        FD_SET(ConnectionNumber(dpy), &rd);
       @@ -298,8 +299,15 @@ main(int argc, char *argv[])
                                }
                                if(FD_ISSET(0, &rd)) {
                                        i = n = 0;
       -                                while((i = getchar()) != '\n' && n < sizeof(stext) - 1)
       +                                for(;;) {
       +                                        if((i = getchar()) == EOF) {
       +                                                stext[0] = 0;
       +                                                goto Mainloop;
       +                                        }
       +                                        if(i == '\n' || n >= sizeof(stext) - 1)
       +                                                break;
                                                stext[n++] = i;
       +                                }
                                        stext[n] = 0;
                                        draw_bar();
                                }