made stdin reader more robust

This commit is contained in:
Anselm R. Garbe 2006-07-14 12:08:32 +02:00
parent 0e5c8198bc
commit eb756ee169
2 changed files with 22 additions and 9 deletions

View File

@ -404,8 +404,6 @@ manage(Window w, XWindowAttributes *wa)
c->next = *l; /* *l == nil */ c->next = *l; /* *l == nil */
*l = c; *l = c;
XMapRaised(dpy, c->win);
XMapRaised(dpy, c->title);
XGrabButton(dpy, Button1, Mod1Mask, c->win, False, ButtonPressMask, XGrabButton(dpy, Button1, Mod1Mask, c->win, False, ButtonPressMask,
GrabModeAsync, GrabModeSync, None, None); GrabModeAsync, GrabModeSync, None, None);
XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask, 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)); || ((c->maxw == c->minw) && (c->maxh == c->minh));
arrange(NULL); 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); focus(c);
else }
else {
ban_client(c); ban_client(c);
XMapRaised(dpy, c->win);
XMapRaised(dpy, c->title);
}
} }
void void

18
main.c
View File

@ -264,6 +264,10 @@ main(int argc, char *argv[])
XDefineCursor(dpy, barwin, cursor[CurNormal]); XDefineCursor(dpy, barwin, cursor[CurNormal]);
XMapRaised(dpy, barwin); 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); issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask);
wa.event_mask = SubstructureRedirectMask | EnterWindowMask \ wa.event_mask = SubstructureRedirectMask | EnterWindowMask \
@ -272,15 +276,12 @@ main(int argc, char *argv[])
XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa); 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); strcpy(stext, "dwm-"VERSION);
scan_wins(); scan_wins();
draw_bar();
/* main event loop, reads status text from stdin as well */ /* main event loop, reads status text from stdin as well */
while(running) { while(running) {
Mainloop:
FD_ZERO(&rd); FD_ZERO(&rd);
FD_SET(0, &rd); FD_SET(0, &rd);
FD_SET(ConnectionNumber(dpy), &rd); FD_SET(ConnectionNumber(dpy), &rd);
@ -298,8 +299,15 @@ main(int argc, char *argv[])
} }
if(FD_ISSET(0, &rd)) { if(FD_ISSET(0, &rd)) {
i = n = 0; 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++] = i;
}
stext[n] = 0; stext[n] = 0;
draw_bar(); draw_bar();
} }